Product Field Work All builds
Accountable · Build · October 2026

Code for facts. Decision models for choices. LLMs for words.

Until this year we had two tools: deterministic code, which is exact but can't read a sentence, and LLMs, which read anything but return prose with no real confidence score. Decision models such as SubQ, Jev and OpenAI's new Decisions API sit in the middle. They read text, answer from a list you define, attach a calibrated confidence, and cost about 1/100th of an LLM call. Used together, the three can automate judgment in a regulated workflow without giving up control. This page runs all three on clinical-trial data work.

Deterministic codeExact, instant, auditableCannot read free text
Decision modelsTyped judgment on textChoice + confidence, or "can't tell"
LLMsLanguage and planningFlexible, slow, no reliable confidence

The spectrum, measured

Numbers below come from the live runs on this page: SubQ Snap, Jev 1.13 and OpenAI GPT-6 Luna Decisions as decision models, GPT-5.5 as the LLM.

Deterministic codeDecision modelsLLMs
ReturnsAn exact valueOne option from your list, with a probability for eachFree text (or JSON it was asked to write)
Reads free textNoYes, and images for SubQ and OpenAIYes
Same input, same answerAlwaysTyped and stable; small confidence wobbleNo. Fast-mode eGFR came back 45.6 to 46.6 across 5 runs
ConfidenceNot needed: exactPer answer, usable as a threshold. At ≥ 0.8 every kids and phase answer in our benchmark was right but oneNone you can trust
"I can't tell"Raises a validation errorYes, when you offer it as an optionRarely; tends to answer anyway
Latency here< 1 ms0.11–1.2 s median 0.2 s1.0–11.5 s fast mode to reasoning on
Price per 1M input tokens≈ $0$0.04–$0.10 output free$5.00 + $30 per 1M output (GPT-5.5)
Part 11 audit fitFull: versioned, validated, testableStrong: log model, question, answer, confidenceWeak: log the full prompt and output, and review it
Best atEdit checks, dates, windows, formulas, SAE clocks, CDISC rulesTriage, classification, routing, "is this already explained?", guarding LLM outputWriting queries and narratives, summarizing, choosing which tool to call

Watch them work together

Four everyday jobs from clinical-trial data management. Each one passes through all three engines, and each step is labeled with the engine that ran it and why it was chosen.

Making it more accurate, and honest about it

I tested accuracy techniques on a 220-trial benchmark from ClinicalTrials.gov, plus 90 fresh trials the models had never seen. Some worked, one didn't, and the ones that handle messy input are built into the fourth tab above.

Raise the bar, handle fewer automatically, make fewer mistakes

Intervention type, 220 trials. Each point is a confidence threshold: how many trials clear it, and how often those are wrong.

All three judges agreeBest single judge (OpenAI Luna)

Recommended next: the feedback loop. Log every human decision as a new labeled example, re-certify thresholds on a schedule, pin model versions such as jev-1.13.0, and rerun the suite before any upgrade. That loop is what turns a demo like this into a validated system an auditor can follow.

When to use each

Default to the most precise engine that can do the job. Move right only when the job requires it.

Deterministic code

If you can write the rule, write the rule.

  • Edit checks, ranges, required fields
  • Visit windows, lab windows, SAE reporting clocks
  • Formulas: eGFR, BSA, dosing, compliance
  • CDISC and define.xml conformance
  • The final policy that turns model answers into actions

Still the best we have. Validated once, right every time, and the only engine a regulator fully trusts.

Decision models

If the answer is a choice, ask a decision model.

  • Judgment on narratives, comments, notes and images
  • Seriousness, grade, deviation category, document type
  • Routing: which engine, queue or person gets this
  • Guardrails on LLM output: leading, identifiers, tone
  • Always offer "I can't tell" and set a confidence threshold

Never for math or dates. They choose; they don't calculate.

LLMs

If the answer is words, use an LLM, and give it tools for every fact.

  • Drafting queries, SAE narratives, site letters
  • Summaries, protocol Q&A, talking to users
  • Planning multi-step work and choosing tools
  • Every number comes from a deterministic tool call
  • Every output passes a decision-model check before it ships

Never the final say on a fact or a regulated decision.

Five patterns for combining them

These are the moves the demo makes. They carry over to almost any workflow where a wrong answer is expensive.

1 · Code first, models for what's left

Run every exact check before anything reads text. Only real exceptions reach a model, so the expensive engines see a fraction of the volume.

range check→explained?→write query
In the demo: query fatigue

2 · Decision model as router

Ask a cheap model which engine should handle each item. Computable criteria go to code, judgment to a decision model, opinions to a person.

route criterion→compute/judge/investigator
In the demo: eligibility

3 · Thresholds, not vibes

Code turns probabilities into actions. Auto-accept only when all models agree at 0.8 or higher, and send everything else to a person. The threshold is a validated setting.

3 judges→agree ≥ 0.8?→auto / person
In the demo: every case

4 · LLM plans, code computes

Give the LLM tools for every number. Fast mode alone enrolled an ineligible patient 5 times out of 5. Fast mode with tools got it right, with a receipt for each value.

LLM⇄egfr_ckd_epi_2021()→answer
In the demo: eligibility, AE query

5 · Decision model guards the LLM

Before any generated text reaches a site, decision models check it: is it leading, does it leak an identifier? When the judges disagree, the draft waits for a person.

draft→leading? PHI?→send / hold
In the demo: AE intake

Where else this fits

The same split works anywhere text arrives messy and decisions have to be defensible. Some places I would start.

Why the middle engine changes the math

Reviewing a flagged lab against its site comment, priced from this page's live run.