Reactify Solutions
HandbooksJev decision modelChoice, Score, Noul

Choice, Score, and Noul

Jev has three question types. Choice picks one option, Score places something on an ordered scale, and Noul gives the probability that a statement is true. Here is when to use each and what it returns.

Jev by TypeSafe AILast reviewed September 23, 2026
In one minute
  • Choice: "which one?" Categories with no order. Up to 255 options.
  • Score: "how much?" An ordered scale of 2 to 10 levels.
  • Noul: "is this true?" One probability between 0 and 1.
  • You can mix all three in one request. They run in parallel and do not affect each other.

At a glance

The three question types
Choice
Which team owns this?
up to 255 options
billing
0.91
technical
0.07
account
0.02
choice, probabilities, confidence
Score
How severe is it?
2 to 10 ordered levels
1.43
0 cosmetic123 outage
score, probabilities, legend, confidence
Noul
Did the customer ask for a refund?
just a statement
0 no0.5 unsure0.97
noul (0 to 1)
TypeAsk it whenYou defineYou get back
ChoiceThe answers are categoriescriteria: a map of optionschoice, probabilities, confidence
ScoreThe answers have an ordercriteria: a list of levels, lowest firstscore, probabilities, legend, confidence
NoulThe answer is yes or noOnly instructions (optionally criteria for true/false)noul

Choice

Pick one option from a set. Good for routing tickets to a team, tagging documents, or choosing which tool or model to use.

question
"department": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
  "billing": "Charges, invoices, and refunds",
  "technical": "Bugs, outages, and integration failures",
  "account": "Login, permissions, and profile changes",
  "other": "Anything that does not fit the other teams"
}
}

The description next to each option matters. "billing": null works, but a short description makes the boundary between options much clearer.

Add an other option when real inputs may not fit any category. Without it, Jev has to pick something.

Score

Place the input on an ordered scale. Good for severity, relevance, sentiment, or seniority.

question
"severity": {
"type": "score",
"instructions": "How severe is the issue for the customer?",
"criteria": [
  "Cosmetic or informational",
  "Degraded, but a workaround exists",
  "Blocking with no workaround"
]
}

Levels are numbered from 0. The score is the average level weighted by probability. If Jev gives level 1 a probability of 0.57 and level 2 a probability of 0.43, the score is (1 × 0.57) + (2 × 0.43) = 1.43.

That fractional score is handy. You can sort by it, or divide by the top level to get a 0 to 1 number and combine it with other scores in code.

Write levels as situations, not degrees. "Feature broken but a workaround exists" works much better than "moderately severe".

Noul

The name is a mix of "null" and "bool". It returns one number: the probability that the statement is true.

question
"is_human_escalation": {
"type": "noul",
"instructions": "Is the customer asking for a human agent?"
}
usage
wants_human = result.nouls["is_human_escalation"].noul > 0.9
  • Near 1.0 means a strong yes. Near 0.0 means a strong no.
  • Near 0.5 means Jev sees both as equally likely. Treat that as "I do not know".
  • Phrase it so that a high value means yes. Avoid double negatives.
  • Noul has no separate confidence field. The probability already is the confidence.

Which one should I use?

  • If you would draw it as a dropdown, use Choice.
  • If you would draw it as a slider, use Score.
  • If you would draw it as a checkbox, use Noul.

And if a question feels like it needs two of these at once, it is probably two questions. Ask both in the same request and combine the answers in code.

Where this page's facts come from

TypeSafe's primitives overview, and the Choice, Score, and Noul pages. The example questions come from Vercel's Jev and AI SDK guide.

Last reviewed September 23, 2026 · verified against TypeSafe AI primitives docs (jev-1.13.0), Sep 2026