What Is a Decision Model? Typed Questions, Probabilities, No Text

What Is a Decision Model? Typed Questions, Probabilities, No Text

Updated: 2026-11-07 By: Ari Heljakka

Short answer

A decision model is a model that reads natural-language input and returns a decision your code can act on: the probability that a statement is true, one option from a fixed list, or a position on an ordered scale you define. It writes no text, so there is nothing to parse and no explanation to read. You get numbers you can threshold, usually in well under a second and cheaply enough to run on every item. The trade is that every possible answer must be defined in advance, and you have to set the thresholds yourself from labelled data. Typed is not the same as true: a decision model cannot return an answer outside your options, but it can confidently pick the wrong one.

Key facts

  • Definition: A model that takes a state (the text to judge) plus one or more typed questions and returns one typed answer per question with probabilities attached, and no generated text.
  • When to use: Routing, triage, classification at volume, gating an agent's action, and checking an LLM draft against a policy, wherever code needs a branch, a threshold or an
    .
  • Limitations: No rationale, no free-form answers, sensitivity to how the question is worded, and documented weakness on counting, numbers, dates and multi-step reasoning.
  • Example: A property manager's maintenance inbox asks five questions about each tenant message in one request and routes on the probabilities; the uncertain cases go to a person.
  • Jev 1.14: Released 2026-10-14; TypeSafe said
    would move to it a week later. The figures we measured in this post come from
    and have not been re-run on 1.14.
  • Last updated: 2026-11-07

Key takeaways

  • A decision model has three question types: yes/no (a single probability), choice (one of N unordered options) and score (a weighted position on ordered levels). Jev 1.14 adds a fourth,
    , which locates something in an image; it returns a bounding box, not a decision, so this post leaves it out.
  • Probability and confidence are different numbers. Probability is the weight on an outcome; confidence summarises how concentrated the distribution is. Neither tells you a single answer is correct.
  • A yes/no answer near 0.5 is a third outcome, not a "medium". Route it to a follow-up or a person.
  • Write narrow questions and combine the answers in code. Compound conditions, arithmetic and date logic belong in your code, not in the question.
  • Vendor calibration claims are aggregate claims. Check them on 50 to 100 of your own labelled items before a probability gates anything.
  • "Cannot hallucinate" is half true. The answer always fits the schema, but it is not always right, and a model that answers the same way every time can be consistently wrong.
  • Judge a decision model by its error on the share of traffic you let it decide alone, not by its overall accuracy. A model that is mediocre on average can still be very good on the 80 % of items it is sure about.

Definition

A decision model is a non-generative model that answers typed questions about an input. The caller supplies two things:

  • a state: the material to judge (a message, a document excerpt, an LLM draft, a JSON record rendered as text), and
  • questions: each with a type, an instruction, and, where the type needs it, the allowed answers.

The model returns, for every question, a typed value and the probability distribution behind it. Output shape is fixed by the question type, not by a prompt, so the response always parses.

TypeSafe calls this category "System One" models, after the fast, intuitive mode of thinking in Daniel Kahneman's Thinking, Fast and Slow. Its model Jev entered early access on 2026-09-15 and TypeSafe describes it as the first model of the kind: non-autoregressive, answering all questions in parallel over a state that is encoded once, and trained for calibrated decisions. Those three properties are vendor statements. What we have measured ourselves is listed under Evidence.

Is it new? Each ingredient is older: classifiers with probability outputs, reward models, calibrated predictors, constrained decoding and judge cascades all came first. What is new is putting them in one general-purpose model that takes its options in plain language at request time. TypeSafe has not published Jev's size, architecture, training objective or training data, so none of the vendor's claims about why it works can be checked from outside. "System One" began as TypeSafe's branding. It is turning into a category name: Cloudflare, Microsoft and Levanto now ship models behind System One-style endpoints, and open models such as Laya and Kev compete on the same contract.

What a decision model is not:

  • Not an LLM in structured-output mode. Constrained decoding guarantees the shape of generated tokens; it does not change the fact that tokens are being generated, nor give you a distribution over the allowed answers.
  • Not a fine-tuned classifier. A classifier has its label set baked in at training time. A decision model takes the options and their descriptions at request time, so the same model routes support tickets in one call and grades summaries in the next.
  • Not an LLM judge. An LLM judge writes a verdict and, if asked, a justification. A decision model writes neither.

When this matters

  • Routing and triage. A ticket, email or form submission must go to exactly one queue, and the routing rule should fire on a probability, not on string matching of generated text.
  • Gating actions. An agent is about to issue a refund, send an email or run a tool. A yes/no question ("the requested action is within the user's stated request") decides whether it proceeds, waits for confirmation, or stops.
  • Verifying drafts. An LLM writes the reply; the decision model checks it against the policy text before it is sent. The LLM writes, the decision model decides.
  • Classification and scoring at volume. Every production trace gets the same set of narrow checks, because per-item cost no longer limits coverage.
  • Many criteria on one item. Five or fifteen questions about the same state go in one request and see the same input.
  • Working alongside a frontier LLM. The decision model does the cheap, high-volume part and the LLM does the reasoning. A common setup scores a thousand inbox messages by priority and shows the LLM only the five worth answering. Another checks the LLM's output with a second round of yes/no questions before it ships, so the decision model sits on both sides of the LLM. As LangChain put it when testing Jev on agent traces, "agent evaluation is a decision task".

It matters less when the answer must be prose, when the decision cannot be reduced to predefined options, or when the logic is deterministic and a regex, schema check or database lookup will do.

How it works

The request contract

A decision-model request is a state plus a map of questions keyed by IDs you choose. In Jev's documented shape the endpoint is

and the body carries
,
and
. Each question has a
(
,
or
),
, and for choice and score,
.

The question ID is never sent to the model. Everything the model needs to know must be in the instruction and the criteria text, written out in full even when the ID looks self-explanatory.

That makes the question text, not the API call, the thing you are really building. A raw request has no name and no version; a question with a stable ID, a version number and its exact instruction and criteria does, and it can be reviewed, tested and reused. Changing the wording changes what is being asked, so treat a reworded question as a new version rather than an edit to the old one.

Primitive 1: yes/no (
)

A yes/no question returns one number: the probability that the answer is yes, under the field

. There is no separate confidence value because a two-outcome distribution is fully described by one number.

  • Phrase it so that a high value means yes. "The message contains personal data" is safe. "The message is free of personal data" invites the value to be read backwards by your code, or by the model.
  • One condition per question. "The tenant reports a leak and wants it fixed today" is two questions. Ask both and combine them with
    in code.
  • It is not a degree. "The candidate is strong in Python" yields the probability of that proposition, not a position on a skill scale. Use a score question for degree.
  • Optional
    with
    and
    descriptions can sharpen a subtle boundary. Try with and without on your own data.

Primitive 2: choice

A choice question picks one option from an unordered set. The

is an object that maps each option label to a description; both the label and the description are sent to the model. The answer carries
(the most probable option),
over every option, summing to 1, and
.

  • Give the full option list rather than a shortlist. Jev always picks an answer, even when none fits, so plan for inputs the list does not cover. A bare
    option is a weak catch-all. TypeSafe's own guidance is that a separate yes/no question ("the message is about something none of these options cover") usually works better.
  • Write descriptions that separate neighbouring options. If two options are often confused, say what each one excludes.
  • Do not rely on the key order of the returned probabilities. Do rely on the order of the options you send: TypeSafe documents that Jev leans towards the option listed first, so shuffle the order when you test.
  • Jev accepts up to 255 options. For larger label sets, ask a coarse question first and a fine one second, rather than flattening everything into one list.

Primitive 3: score

A score question places the state on ordered levels you describe. The

is an array of level descriptions from low to high, at least two and at most ten in Jev. The answer carries
,
(level number to description),
per level and
.

The

is the probability-weighted level: with levels 0, 1 and 2 at probabilities 0.0, 0.57 and 0.43, the score is 0 × 0.0 + 1 × 0.57 + 2 × 0.43 = 1.43. It can fall between levels, and the same score can come from very different distributions: 1.0 can mean all weight on level 1, or an even split between 0 and 2. Read the probabilities before acting on the score. If you need a value on a common 0 to 1 scale, give each level a value and take the expected value from
(with evenly spaced levels that is the score divided by the top level number) rather than mapping the most likely level, or the rounded score, to a value.

  • Describe situations, not numbers. TypeSafe's documentation shows bare levels "0", "1", "2" producing a split, low-confidence answer on a case that descriptive levels scored cleanly at 0.
  • One dimension per question. A level that mixes urgency and politeness produces scores nobody can interpret.
  • Give a rare, actionable extreme its own level, or it blends into the ordinary top level.

Probability is not confidence

Choice and score answers include a

between 0 and 1 computed from the shape of the distribution. In the published definition, for a choice with n options and top probability
, confidence is
: 1 when all weight is on one option, 0 when the weight is spread evenly. For a score, confidence falls with the probability-weighted distance from the most likely level, so weight on a neighbouring level costs less than weight on a distant one.

Four points to keep in mind:

  1. Confidence is about concentration, not correctness. A model can be confidently wrong. Only labelled data tells you how often a given confidence is right on your inputs.
  2. A yes/no value near 0.5 is genuine uncertainty. Treat it as a third outcome. The useful design has three bands per question: act, review, escalate.
  3. On a choice question, confidence adds nothing new. With a fixed number of options it is calculated from the top probability alone, so a threshold on confidence is a threshold on that probability. It carries more information on a score, where it also reflects how far the weight is spread.
  4. A clear probability is not consent. TypeSafe's routing guide shows a hesitant voice command, "Um, the transfer thing... yeah, go ahead I guess", scoring 0.99 for "approve transfer". The model was sure which action the user meant. It said nothing about whether the user had checked the amount. The guide's answer is to let thresholds choose a workflow, never execute the risky action directly, and put a higher bar on actions that cannot be undone.

Calibration is an aggregate property

"Calibrated" means that across many answers given probability 0.8, about 80 % turn out to be true. It says nothing about any single answer. TypeSafe says Jev is trained for calibration and has not published a calibration error. In our own run at Scorable on 200 HaluEval-QA items (2026-09-19,

), the expected calibration error was 0.037 with 10 bins, with accuracy 0.880 and AUROC 0.956. That is one public dataset that may be in the training data, so read it as an upper bound, not as evidence for your domain. Independent tests since then point the same way. Jev's calibration is good on narrow factual yes/no questions and several times worse on subjective or rating tasks, so the domain matters more than the vendor's claim.

Do not read a probability as a quality score either. A yes/no answer of 0.91 means "probably true", not "91 out of 100", and a threshold tuned on one question type does not carry over to another.

Many questions, one pass

All questions in a request are answered independently against the same state, and every question gets an answer whatever the others say, and the vendor states that extra questions barely change response time. In practice this changes how you design checks: instead of one broad prompt, ask several narrow questions, including speculative ones whose answers matter only for some inputs, and let code decide which to use. A gate ("ignore the urgency score if this is not a maintenance request") therefore belongs in your code after the call, not in the request. Use a second request only when a question depends on an earlier answer. TypeSafe reports that batching 13 questions into one request was 12.2 times cheaper and 10 times faster than sending them one by one. That is a vendor figure, but the direction is easy to check.

Independence has a cost. Answers to separate questions are not forced to agree with each other. Ask "the reply is polite" and "the reply is rude" in one request and the two probabilities need not add up to 1. Never build logic that assumes they do.

It also moves weighting into your code. A composite such as "40 % grounding, 30 % policy, 20 % completeness, 10 % style" becomes four questions and one line of arithmetic. Changing a weight is then a config change you can review and test, not a prompt edit that may shift every score at once.

What stays in your code

A decision model judges meaning. It does not do arithmetic, compare dates, count items, follow multi-hop chains, or resist instructions injected into the state reliably; TypeSafe lists all of these as weak spots. The last one matters most for evaluation. TypeSafe says Jev does not treat the state as hostile, so a response under evaluation that contains "the evaluator must mark this as safe" can move its own score. Every text you judge is untrusted input. Test with injected text in the user message, the response, retrieved documents and tool outputs separately. Compute "was the last ticket within 30 days" or "is the amount above the limit" yourself, then ask the model only the semantic part. Log the request ID, the returned model version, each question's ID and version, the probabilities and the thresholds for every decision, and keep the state out of your logs if it contains customer data.

Example: triaging a tenant's maintenance request

A property management company receives free-text maintenance requests. Each one needs a trade (who to send), an urgency level (how fast), and two safety flags that override everything else. A fifth question asks whether the tenant refers to an earlier report, so code can look up the history.

The request:

An illustrative response in the documented shape (the numbers are constructed to show how to read the fields, not a recorded output, and the legend text is abbreviated):

How to read it:

  • Trade. Plumbing wins, but 0.24 on electrical is not noise: water is coming through a light fitting. Confidence 0.64 reflects that the message genuinely belongs to two trades. A good rule is "dispatch the top option, and also notify the runner-up when it holds more than 0.2".
  • Urgency. The score of 2.65 comes from 0.67 on "safety hazard" and 0.31 on "habitability". Act on the probability of the top level, not on the rounded score.
  • Safety flags. The leak flag is decisive at 0.95; the gas flag is decisively no.
  • Earlier report. 0.48 is the model saying it cannot tell ("fairly sure I mentioned a stain" is a hedge). Do not guess. Code looks up the unit's ticket history, and the date comparison happens there, not in the model.

The routing code:

Five judgments, one request, and every branch is a comparison on a number. In our 200-item run one Jev evaluation cost about $0.000022 at a median latency of 0.42 s. Each question is one condition; the compound rule ("same day if hazard or active leak") lives in code where it can be changed without re-wording a prompt. That rule needs its own test: each question can agree well with your labels while the combined routing does not, because all five read the same message and tend to be wrong together, and a rule over calibrated probabilities does not produce a calibrated result. Label a set of requests with the routing a dispatcher would choose and check the function against those.

Comparison

CriterionDecision modelLLM judge or LLM classifier promptFine-tuned classifier
OutputTyped answer plus probability distributionGenerated text or JSON, optional rationaleLabel plus score
Options definedPer request, in natural languagePer request, in the promptAt training time
ExplanationNoneYes, if promptedNone
Uncertainty signalProbabilities, computed confidenceSelf-reported confidence, itself generated textModel score, needs calibration
RepeatabilityNear-deterministic in our runs (SD 0.001 to 0.004)Varies by run (SD 0.009 on the same items in our runs)Deterministic
Open-ended rubricsWeak; must be split into narrow questionsStrongNot applicable
Setup costWrite questions, label a test setWrite a rubric, label a test setCollect and label training data, train
Best fitClosed criteria at volume, inline gatesOpen rubrics, multi-factor judgments, written feedbackOne stable label set at very high volume

Which approach is more accurate on closed criteria depends less on the category than on which LLM sits behind the judge. On a readability-ordering task we ran, the same LLM judge rubric reached 0.786 pairwise ordering accuracy on a gpt-4o-class model and 0.964 on gpt-5.5, while Jev scored 0.929 to 1.000 depending on how the levels were worded (8 held-out items, so indicative only). A comparison that does not name the judge model tells you little. Because the questions are plain-language definitions with nothing vendor-specific in them, the same question set can be put to an LLM judge and both scored against the same labelled rows. Which one should judge a criterion then becomes a number per question, and the bet is refutable: the decision model is good enough for that criterion if it agrees with your labels at least as well as the LLM judge on the same held-out rows (accuracy or Cohen's kappa), and it is not if it doesn't.

The practical pattern is a cascade. In our 200-item HaluEval-QA run, acting only when Jev's probability fell outside 0.2 to 0.8 decided 80 % of items at 95.0 % accuracy; the remaining 20 % would go to an LLM judge or a person. That is the number to measure, two figures together: how much of the traffic the decision model handles on its own, and its error on that share. Overall accuracy (88 % in the same run) undersells a model whose uncertainty is informative.

Where the claims are disputed

  • "Never hallucinates." True of the format, not the content. Jev cannot invent a label you did not offer, which removes one class of failure that structured LLM output still has. It can still pick the wrong label with high probability.
  • Accuracy versus price. On TypeSafe's own four-workflow launch benchmark, as summarised by independent write-ups, Jev scored 67.8 % against 67.9 % for GPT-5.6 Terra and 73 to 74 % for the strongest frontier models, at a small fraction of their cost and latency. The headline "up to 193 times faster and 445 times cheaper" comes from the same benchmark. TypeSafe itself says the workflows were written by its own team and that those multiples are probably at the high end. On that evidence it is a cost and latency play, not the most accurate judge.
  • Consistency is not correctness. LangChain found Jev's run-to-run variance on a quality score 92 to 913 times lower than three LLM judges', and Jev matched the human label on all 500 repeated decisions. But those 500 decisions were 5 distinct cases repeated 100 times. The authors add the warning that matters: a cheap, consistent evaluator that is wrong produces wrong feedback at scale.
  • Forcing an answer. Jev always answers. The OpenAI Decisions API can refuse a question, and in Langfuse's integration one refusal fails the whole evaluation run. Each is a failure mode: one guesses when it should abstain, the other stops when it should guess. Design for whichever you use.
  • "LLM-as-a-judge is dead." None of the integrators says so. Langfuse and LangChain both describe decision models as a third kind of evaluator alongside code checks and LLM judges, used when you do not need written reasoning.

Limitations

  • No rationale. When an answer is wrong you cannot read why. Debugging means rewording the question and re-running against labels.
  • Wording sensitivity. In our tests the same question design moved held-out error from 0.038 to 0.079 by rewording the level descriptions, and few-shot examples helped one wording and hurt another. Treat question text as code: version it and test changes. Keep any item you used as a few-shot example, or had in mind when writing a level description, out of the rows you test on.
  • Predefined answers only. If the right answer is not among the options, the model still picks one. A catch-all option and a confidence floor are the only defences.
  • Documented weak spots. TypeSafe lists counting, numeric and date comparison, multi-hop reasoning, double negation, irrelevant context and injected instructions as weaknesses. Move these into code or split them out.
  • Calibration is claimed, not published. TypeSafe publishes no calibration error. Our 0.037 is one public dataset with 200 items, and independent figures vary several-fold by task. Your domain may differ.
  • Opaque internals. No published architecture, size or training data. Assurance has to come from black-box testing on your own data.
  • Input limits. Jev reads text and, since the 1.14 release, PNG and JPEG images, which TypeSafe calls experimental and not yet reliable enough for production. A request is limited to 64k tokens and 32k per question. An opt-in long-context header raises both to 262k, and TypeSafe says the model is slower and less accurate there.
  • Hosted and early. No self-hosting, open weights or fine-tuning, and a moving
    alias, which TypeSafe scheduled to move from
    to
    a week after the 2026-10-14 release. Pin a version and re-check thresholds when it changes. TypeSafe says it will give 60 days' notice before retiring
    , so a pinned version has an end date too.

Evidence and sources

Evidence:

  • Product docs: TypeSafe, System One models
  • Product docs: TypeSafe, Primitives (noul, choice, score)
  • Product docs: TypeSafe, Confidence
  • Our measurements: HaluEval-QA, n = 200,
    , run 2026-09-19 (accuracy, AUROC, calibration error, latency, cost, 0.2 to 0.8 cascade); readability ordering and level-wording sensitivity, 8 held-out items, run 2026-09-20; repeat-run variance, same run. Not re-run on
    . Methodology write-up pending.
  • Updated: 2026-11-07

Further sources:

  • TypeSafe, "Jev: For the builders AND dreamers" (Jev 1.14 release post), 2026-10-14, and the Jev models page, for the 1.14 release, image input, long context and the
    alias.
  • Kahneman, 2011, Thinking, Fast and Slow, Farrar, Straus and Giroux, for the System One and System Two distinction behind the category name.
  • Li et al., 2023, "HaluEval: A Large-Scale Hallucination Evaluation Benchmark for Large Language Models", arXiv:2305.11747.
  • Guo et al., 2017, "On Calibration of Modern Neural Networks", arXiv:1706.04599, for expected calibration error.
  • TypeSafe, Jev early-access announcement and model documentation, 2026-09-15, for release date, pricing, limits, documented weaknesses, the launch benchmark and the 13-question batching figure.
  • TypeSafe, Routing by probability, for risk-dependent thresholds, the hesitant-transfer example and choice confidence.
  • TypeSafe, Model jaggedness, for first-option bias, independence between questions and state not being treated as hostile.
  • Langfuse, Decision model evaluators, for atomic questions and provider refusal behaviour.
  • Shea and Roche, LangChain, Can Jev be a better agent evaluator?, 2026-09-20, for variance, oracle agreement and the scale-of-mistakes warning.
  • Kopadze, "The Honest Jev Playbook", X, 2026-09-22, a summary of the launch benchmark figures.
  • AI Edge, "Opus 5.5 + Jev", X, 2026-10-07, for the pre-filter and check-the-output patterns with a frontier LLM.

FAQ

Is a decision model an LLM? No. It reads natural language like an LLM does, but it generates no text. Every answer is one of three typed shapes with probabilities attached.

What is the difference between

,
and
?
returns the probability that one statement is true.
picks one option from an unordered set and returns a probability per option.
places the input on ordered levels you describe and returns the probability-weighted level.

What does confidence mean in a decision model? It summarises how concentrated the probability distribution is, from 0 (spread evenly) to 1 (all on one answer). It is not the probability that the answer is correct.

What should I do with a probability near 0.5? Treat it as its own outcome. Ask a follow-up, look the fact up in code, or send it to a person. Do not round it to yes or no.

Can a decision model explain its answer? No. If you need a written reason, send the item, or only the uncertain ones, to an LLM judge. You can also have an LLM explain a decision after the fact, but label that explanation as a guess about the answer, not the model's actual reasoning. Readers trust a fluent explanation whether or not it is the real cause.

How do I set thresholds? Label 50 to 100 representative items, run your questions, plot predicted probability against observed frequency, and choose cut-offs from the cost of a wrong yes and a missed yes. Choosing cut-offs is a policy decision. Claiming that a question agrees with your labellers to some degree is a separate claim: measure it on items you did not use to write the question, pick its examples or set the cut-offs, and record which question version, model version and label set it applies to. Repeat when any of those change; an old agreement number does not carry over.

Can I use a decision model as an evaluator? Yes, for closed criteria: "every claim in the answer is supported by the context" is a yes/no question, and "how complete is the answer" is a score question with described levels. Open rubrics that need reasoning across a whole document still suit an LLM judge better.

Related reading

Related articles