Jev confidence
Turn probabilities into act, review, or escalate gates.
Choice and Score answers include a probabilities distribution and a confidence statistic from 0 to 1. Noul does not. Confidence is derived from the shape of that distribution: concentrated on one outcome means a confident answer, spread out means an uncertain one. TypeSafe computes confidence so you can threshold without doing the math, but you always receive the full probabilities if you want a different statistic. Code should act, review, or escalate on those numbers.
Confidence is derived from the probabilities
For a Choice, the distribution is probabilities across your options. For a Score, it is the distribution across your levels. A flatter distribution means lower confidence. Low confidence on a Choice often means none of the options is a clear winner. Low confidence on a Score often means the levels are ambiguous, multi-dimensional, or the state does not contain enough to go on.
TypeSafe presents confidence as a convenient default, not as a lock-in. Depending on the decision, another collapse of the distribution may serve you better. The docs keep those recipes in a separate cookbook and still ship probabilities on every Choice and Score answer so you are not stuck with one formula.
Noul answers carry noul in [0, 1] and stop there. There is no confidence field to copy onto a Noul. A value near 0.5 is the model saying the yes/no question is unsettled. Do not read 0.5 as "medium refund intensity." Do not transplant a Choice confidence threshold onto noul, and do not expect P(noul) + P(not noul) to equal 1 across two separate questions.
Three paths in your code
A useful starting pattern is three ranges. High confidence: act automatically. Medium confidence: proceed with caution — confirm with the user, flag for review, or gather more state. Low confidence: do not act. Route to a person, ask a clarifying question, or fall back to another system. Where you draw the lines depends on the stakes.
A confidence threshold is not one number for the whole product. Showing a balance screen after a mistaken intent is recoverable. Approving a withdrawal is not. TypeSafe's sample splits on 0.5 as a floor for genuine uncertainty, then requires >0.9 before confirm-and-execute on a transfer, while a check-balance intent can proceed with a lower bar. Your code encodes risk tolerance. Jev only reports the distribution.
If an intelligent system cannot express honest uncertainty, the system cannot be trusted. Confidence is that signal for Choice and Score. Pair it with jaggedness limits: literal wording, math in code, and no generation. A high-confidence Choice on a poorly written instruction is still a confident answer to the wrong question.
Noul versus Choice on the same ticket
TypeSafe's jaggedness record for common-sense invariants shows a ticket "I'm not happy with the fit. What are my options here?" A Noul "Is the customer asking for a refund?" returned 0.22. A yes/no Choice on the same wording returned probabilities yes 0.01 / no 0.99 with confidence 0.97. The comparable numbers are noul and probabilities["yes"], and they are not interchangeable.
On a second ticket, two Nouls for refund versus not-refund summed to 1.19. Do not hold the model to arithmetic identities between separate questions. A Choice over options is relative (which option). Each Noul is absolute and can be low for every option. The skill-suggestion cookbook uses both: Choice to pick a skill, Nouls to decide whether to suggest one at all.
When you wire gates, name the primitive in the threshold table. "0.8" means nothing unless you say 0.8 Choice confidence on department, or 0.8 Noul on urgency. Log the primitive, the key, the raw probabilities, and the versioned model ID jev-1.13.0 so a later alias move does not silently retune your production gates.
Operating the gates
Store the full probabilities, not only the argmax and the confidence scalar. When a Choice looks wrong, the second-place option is often the debug clue. When a Score looks stuck between levels, the distribution tells you whether the legend is ambiguous or the state is empty.
Retune after any model ID change. jev-latest can move. A threshold of 0.9 on jev-1.13.0 is not a promise about the next official release. Keep a shadow log of what the new ID would have done for a week before you flip production aliases.
High-stakes actions should require both a label and a confidence floor, then a product-level confirm. TypeSafe's transfer example uses 0.5 as the uncertainty floor and 0.9 before execute. Copy the shape, not necessarily the numbers. Your refund policy and your game-ban policy will not share a threshold. Write the numbers next to the primitive name in the runbook.
Do not hide the probabilities from on-call. A dashboard that only shows green/red confidence will not tell you that yes and no flipped while confidence stayed high. The distribution is the artifact; the scalar is a convenience TypeSafe computes on top.
Noul near 0.5 is the honest I-do-not-know for yes/no. There is no confidence field to attach to it. If you need a second axis, ask a second question or add a Choice over yes/no/not-sure with explicit criteria, and accept that it is a different statistic from noul.
Plot confidence weekly per question key. A slow drift toward 0.5 means the criteria no longer match the tickets. A spike toward 1.0 on a noisy queue means the options collapsed, not that the world got simpler.
Log jev-1.13.0 next to every threshold so an alias move cannot hide in a weekly graph.
Sources