Product Field Work All builds
BuildAccountable

How Sure Is Sure?

A new kind of AI model answers in a third of a second and attaches a confidence number. I tested what that number means, alongside a regular chat model and plain code, on the same contracts with the same answer key: ask again, reword it, and cut the evidence out.

The problem

Confidence scores are quietly becoming product logic. “Above 90%, act automatically; below, ask a person” is now a line in a lot of code. Decision models from OpenAI and TypeSafe make it easy: every answer comes back as a probability, not a paragraph.

But a probability is only useful if you know what it measures. Is it how often the model is right? How stable the answer is? How much evidence it found? Teams are setting thresholds on a number nobody has explained to them.

0 of 2decision-model APIs whose docs claim their probabilities are calibrated; both say to set thresholds on your own data
150 msfor a Decisions call, against 1.6 s for the same model through the regular API, on OpenAI’s launch slide
Overstatedis how chat models’ self-reported confidence tends to run, per Xiong et al.’s study of confidence elicitation

If a 90% answer is right only 90% of the time, that’s a policy you can write. If it means something else, every threshold built on it is a guess.

How I measure the problem
  1. Does 90% mean right 90% of the time? stated confidence against lawyers’ labels
  2. Same input, same answer? the identical request, five or six times
  3. Same meaning, same answer? three wordings of each question
  4. Is the confidence tied to the evidence? cut the clause out of the contract, or a random passage of the same length
Why I chose it

Decision models sit in a new spot between a chat model and code: fast and cheap like code, flexible like a model. In Second Opinion I built on their probabilities. Before recommending that to anyone, I wanted to know what those numbers are made of.

The ideaRun one task at every level, from prose to probability to plain code, measure what each one’s confidence actually tracks, and use each level only for what it’s good at.

Sources are listed at the end of the page.

Ask it again

The same request, sent five or six times to each level. Each dot is one run, placed by the chance it gave that the clause is present. Rules and Decisions never move; the chat model can change its mind.

Absent50%Present

Does 90% mean 90%?

Answers grouped by how sure each level said it was. On the dashed line, a level is right exactly as often as it claims. Below the line, it’s overconfident.

When it said it was at least 90% sure, how often was it wrong?

Rules and prose answers carry no confidence, so every answer counts as “sure.”

Same meaning, different words

Cut the clause out

Random passage removed (should stay high)The clause removed (should fall below 50%)

Where the number comes from

Neither vendor explains how its probability is produced. Here is what each one publishes, and what a test can add.

What the docs sayWhat they don’t say
OpenAI DecisionsA predicate returns “an estimate from 0 to 1 that the condition is true.” Choice and score return a distribution plus a confidence field. Set thresholds from your own labeled examples, weighing the cost of each kind of mistake.How the estimate is made, whether it’s calibrated, what “confidence” means, whether repeat calls match.
TypeSafe JevA yes/no question returns “the probability the answer is yes.” Confidence is a published formula over the probabilities: for yes/no it equals |2p − 1|. It summarizes how peaked the answer is and is “not the only” reasonable summary. Act on high, confirm medium, route low to a person.How the probability is produced, what the model is, whether it’s calibrated or deterministic.
Chat models (Luna)With reasoning off, the API can return the probability of each output word. That is the raw signal a yes/no probability can be built from.Stated confidence (“I’m 95% sure”) is just more generated text, not a measurement.

What each level is good for

The same 240 answers, every level. Speed is the median for all 12 questions on one contract; cost is what the calls actually billed. Luna’s word probability needs one call per question, so it costs more. The clause-cut row isn’t ranked: rules miss many clauses to begin with.

Deterministic codeRulesFree, instant, auditable, and wrong the same way every time.
  • Formats, dates, amounts, required fields
  • Hard limits a model must never override
  • Checking a model’s quote really exists
The middle groundDecision modelsA third of a second, a fraction of a cent, repeatable on identical input. Fragile to wording, so freeze the wording and calibrate.
  • Routing, triage, gating, “is this X?” at scale
  • Thresholds set on your own labeled data
  • Several models or phrasings as a check
GenerativeChat modelsThe most accurate on hard reading here, and the only level that can explain and quote. Ten times slower, and it can change its mind.
  • Explanations, quotes, drafting
  • The hard cases a gate flags
  • Never as the only judge of its own confidence
1 · CodeCheck what’s checkableFields, formats, and whether quoted text is really in the document.
2 · Decision modelsDecide at scaleFrozen wording, thresholds learned on labeled data, two models as a cross-check.
3 · Chat modelExplain the hard onesOnly for flagged items, and it must quote evidence that step 1 verifies.
4 · A personOwn the callWhatever is still uncertain, with the votes and quotes attached.

This is the shape Second Opinion uses, measured end to end.

What it means for the people

A confidence number is a policy input, not a fact. Someone has to own what it means.

Engineers freeze the wordingA question’s wording is part of the model. Changing it can flip one answer in five, so it’s versioned and tested like code.
Product owners set the threshold“90%” becomes “the score at which our own test set is 98% right,” chosen with the cost of each mistake in mind, and revisited when anything changes.
Reviewers see the evidence, not a numberA person deciding a flagged case gets the quote and the votes. A bare “78% confident” helps nobody decide.
What disappears, and what doesn’t

Debating whether to trust “the AI” goes away; each level has a measured job. Choosing what a mistake costs, setting the line, and deciding the uncertain cases stay with people.

Try it

Pick a level and the confidence above which you’d let it act on its own. See how much it would handle, and how often it would be wrong.

Handled without a person–
Wrong among those–
What it claimed–
Sent to a person–

How it works

One taskDoes this contract contain each of 12 clause types? Lawyers’ labels from CUAD are the answer key.
Six ways to answerKeyword rules, Jev, Decisions, Luna’s word probability, Luna’s stated confidence, Luna in prose.
Four testsCalibration, repeat runs, rewording, and cutting the clause or a random passage.
Same answersComparisons use the same contracts for every level, so differences come from the level, not the sample.
# Luna through the regular API: reasoning off, one word, and the probability of that word
POST /v1/responses
{ "model": "gpt-6-luna", "reasoning": { "effort": "none" },
  "input": "CONTRACT: … QUESTION: Is consent required to assign this contract? Answer with one word: Yes or No.",
  "include": ["message.output_text.logprobs"], "top_logprobs": 5 }
# → "Yes", logprob −0.137  →  P(yes) ≈ e^−0.137 ≈ 0.87

Evidence

What I haven’t proven yet

One task and one dataset. Repeat and prose tests use 20 contracts (240 answers); calibration for the Luna levels uses 40; the clause-removal test uses 35 clauses, and the labels can miss a second mention of a clause, so some “still yes” answers may be right. Luna’s word probability comes from the top few word alternatives the API returns. The claim that Decisions scores answers the way Luna’s word probability does is an inference from behavior, not a documented fact. Vendors can change models and defaults at any time, so these numbers are a snapshot from October 2026.

Choices

Trust the threshold you measured, not the number it printedEvery level was over- or under-confident somewhere. A cutoff set on labeled data means what you measured; a printed “90%” doesn’t.
Freeze the wording like codeRepeatable on identical input is not the same as stable. Rewording flipped decision models on about one answer in five, more than any repeat run did.
Let code check the modelRules lost on accuracy but never on consistency. Their best job is verifying what a model claims, such as whether a quoted clause is really there.

Sources

  1. OpenAI, Decisions API guide: predicate probability as “an estimate from 0 to 1,” thresholds from labeled examples; no calibration or method stated.
  2. TypeSafe, Confidence and Primitives: confidence formulas, the |2p − 1| summary for yes/no, the high/medium/low pattern.
  3. NYU Shanghai RITS on OpenAI’s DevDay slide: 150 ms for a Decisions call against 1.6 s for GPT-6 Luna through the regular API.
  4. Xiong et al., “Can LLMs Express Their Uncertainty?”, 2023–24: LLMs tend to overstate confidence when asked to verbalize it.
  5. The Atticus Project, CUAD v1 (CC BY 4.0): contracts and lawyer labels.
  6. GPT-6 Luna pricing: $0.10 in, $0.50 out per million tokens; Jev at $0.042 and Decisions at $0.10 per million input tokens.