Blog

Claude Haiku can answer decision requests written for Jev

If you route tickets, triage alerts or check an agent's tool calls, a decision model answers typed questions about some evidence with a probability for every option. When you cannot call one, for lack of a contract, because your data may not leave a provider you already use, or because you have no GPU for an open-weight model, Claude Haiku 5.5 can take its place. Three Haiku calls scored 0.7465 on the public Typed Decisions benchmark, where TypeSafe's Jev 1.13.0 scored 0.727.

The deciding-with-confidence skill does this. Since the October 9 post introduced it, version 0.4.0 has gained three things: it accepts the request body Jev accepts and answers in Jev's shape, each call quotes its deciding evidence before answering, and averaged answers have their own calibration. One Haiku call is the default. Asked for the stack, the skill runs three calls in parallel, each reading the options in a different order and under a slightly different instruction, and averages their probabilities.

Dot chart of accuracy on the Typed Decisions test split for general decision models scored zero-shot, sorted. The two Claude Haiku rows sit at 0.741 for one call and 0.7465 for three calls, marked in coral; TypeSafe Jev 1.13.0 sits at 0.727, marked in indigo; a dashed line marks the teacher agreeing with itself at 0.735

A request written for Jev runs unchanged

Jev's API takes a state, which can be text or any JSON, and named questions of three types: noul (Jev's name for yes or no), choice and score (a level on an ordered rubric), each with a written criterion for every option. A request in the shape of OpenAI's Decisions API works as well. This question comes from a real benchmark case:

{"state": {"account": {"tenure_months": 60, "tier": "standard"},
           "thread": [{"role": "customer", "text": "My payment just failed again on my standard plan—I've
             been with you for […] and this is getting ridiculous. Fix it."}]},
 "questions": {"needs_human": {"type": "noul",
   "instructions": "This conversation requires a human agent rather than automated handling.",
   "criteria": {"true": "A human must take over: judgement, authority or empathy is required.",
                "false": "Automation can carry this to resolution."}}}}

The stack answered in 5.6 seconds for $0.0013:

{"answers": {"needs_human": {"type": "noul", "label": "false", "probability_true": 0.254,
   "probabilities": {"true": 0.254, "false": 0.746}, "confidence": 0.492,
   "diagnostics": {"agreement": 1.0, "cues": ["none", "\"this is getting ridiculous. Fix it.\"", "none"], ...}}}}

Each call writes its cue, the words of the evidence that decide the question, before it gives its probabilities. The benchmark's gold answer here is true, so this one is a miss, and with all three calls agreeing at 0.746 it would pass the escalation rule described below.

Haiku is at least level with Jev on Typed Decisions

Typed Decisions has 400 synthetic cases from four workflows (agent traces, customer service, invoices and security alerts), with five questions each, 2,000 decisions in all. Its gold answers come from a teacher model of roughly 4B-parameter class, sampled three times and averaged, so a score measures agreement with that teacher. A single fresh sample of the teacher agrees with that average 0.735 of the time; a model that tracks the average more closely than one noisy sample can score above it, and the leaderboard's top score is 0.791. One Haiku call scored 0.741 and the stack 0.7465. A gap of about two points on 2,000 decisions is within what two runs could differ by, so I read Haiku as level with Jev or slightly ahead.

Jev's figures are the benchmark card's, and I scored Haiku with a copy of the card's own scoring script. Among the 43 general models the card lists as scored zero-shot, Jev included, the stack would rank 10th and Jev is 18th. No prompt or temperature in the skill was fitted on any Typed Decisions split. With the temperatures it ships, the stack's expected calibration error is 0.035 and its Brier score 0.121, against Jev's 0.144 and 0.148.

On research articles the stack ties Jev and one call trails it on sections

The second test reuses Jev's answers, as Jev was served on November 10, from an earlier experiment: open-access research articles read whole, with four questions each, and article sections, with eight questions each, from study type to how reproducible the methods are. Claude Sonnet 5.5 and Opus 5.5 labelled every question independently, and a question counts only where they agreed. About nine in ten did. Those labellers come from Haiku's own model family, which may favour it. I chose the prompt on half of the items; the table covers the other half.

77 articles (289 answers)204 sections (1,457 answers)
Jev0.9720.894
Haiku, one call0.9690.870
Haiku, stack0.9620.906

The 90% bootstrap interval for the stack minus Jev runs from −0.028 to +0.007 on articles and from −0.002 to +0.026 on sections. For one call minus Jev on sections it runs from −0.041 to −0.008, so the tie holds for the stack only.

The quoted cue added one to four points

The cue beat five reading instructions I tried on the selection half, among them "decide between the two best options" and "start from the least committal answer". On the held-out half it raised one call from 0.931 to 0.969 on articles and from 0.857 to 0.870 on sections, and the stack from 0.924 to 0.962 on articles and from 0.870 to 0.906 on sections.

Answers the three calls split on are right half to three quarters of the time

When the stack's three calls agreed, they were right 83% of the time on Typed Decisions and 90% to 98% on the labelled sets; when they split, 52% to 73%. On Typed Decisions 27% of answers split. On sections, a rule that sent split answers and answers below 0.7 to a reviewer, assumed always right, routed 19% of answers and left 3.0% of all answers wrong. One call routing the same 19%, its least confident, left 5.0% wrong. The stack costs three times as much as one call.

One call takes six to nine seconds through the Claude Code command line

I ran everything through claude -p, the Claude Code command line, which spends about two seconds starting up for every call. One call took a median 6.5 to 8.8 seconds while 16 ran at once. A stacked benchmark case took 8.8 seconds and cost $0.0023 at list price, about $0.0008 a call. Jev's card lists 0.71 seconds a case. The skill also calls the Anthropic API or Amazon Bedrock directly from Python, with an API key and no Claude Code installed, which skips the start-up; I have not timed that path against the live API.

In Claude Code, install it with /plugin marketplace add oaustegard/claude-skills and /plugin install deciding-with-confidence@oaustegard-claude-skills. Elsewhere, run python3 decide.py run request.json --stack from the skill's scripts/ directory. The runners and every raw distribution are in oaustegard/experiments.

Postscript, November 11: on three benchmarks from Google's Decisions launch, Haiku trails by 8 to 33 points

Later the same day Google announced Gemini Decision 1 and compared it with Jev 1.14 on nine benchmarks. I ran 60 randomly sampled items from each of the three text benchmarks I could download, with label descriptions I wrote myself, at low effort through the command line. The others were out of reach: three are hosted only on Hugging Face, whose download host my sandbox cannot reach, and three take images, audio or video, which the skill does not send.

60 items eachHaiku, one callHaiku, stackGemini Decision 1Jev 1.14
PubMedQA, accuracy0.5670.4670.7980.782
Amazon ESCI, macro-F10.3720.3250.5870.567
When2Call, accuracy0.7170.6830.7990.820

Google's and Jev's figures are from Google's table, on full benchmarks with prompts I have not seen; mine have a 90% interval of roughly ±10 points. The PubMedQA and ESCI gaps are well outside that. The one-call column is the first call inside each stack, scored on its own.

The stack scored below one call on all three, and its calibration was worse: expected calibration error 0.30, 0.33 and 0.21 against 0.18, 0.22 and 0.14 for one uncalibrated call. The pooled temperatures the skill ships were fitted on life-science text, where Haiku is underconfident, so they sharpen the averaged probabilities. On these sets Haiku was already overconfident, and sharpening made that worse. Agreement still sorted answers: unanimous answers were right 70%, 59% and 76% of the time, split answers 23%, 29% and 53%.

Most misses sat on one boundary per set. PubMedQA's "maybe" was confused with both yes and no; 14 of 30 exact ESCI matches came back as substitutes; When2Call's "ask for the missing argument" came back as a tool call 10 times in 23. Outside the domains it was tuned on, use one call, gate on the stack's agreement rather than its probabilities, and fit a calibration on labelled items from your own domain with decide.py calibrate. The sampled items and results are in oaustegard/experiments.