Research /

Introducing TOD: A Multimodal Extractive Tool Calling Decision Model

By Nicholas Swaminathan

Parsec

Summary

TOD (Task-Oriented Dialogue) is a decision model for the decisions an agent actually makes: which tool to call, with which arguments, or whether to hand the turn to a bigger model or a human. It reads text and images, and it never generates. The action is selected from the candidate calls and replies in front of it, and each argument is selected from the real entities in the context, so it cannot invent an order id, a catalog item, or a payment method. Every pick carries a calibrated probability that your code can threshold.

On public JevBench, held fully out of training, TOD scores 84.4% (195 of 231). With the image it answers 97% of chart questions, up from 70% for the untrained base model and 79% without the image. Fine-tuned to τ2-bench retail customer support, it matches the parent model’s solve rate at 23–34% lower cost per episode, with each pick taking about 0.22 s instead of the 2.4 s it takes to generate the same call.

Public JevBench
84.4%
of 231 held-out decisions
Easy 100% · original 91.7% · hard 73.0%. Never trained or calibrated on.
Chart questions
97%
correct with the image
70% for the untrained base. 79% for TOD without the image.
Support cost
−23–34%
per episode vs. parent alone
96/114 with Gemini Pro and 100/114 with Flash on τ2-bench retail.
Latency per pick
0.22 s
one discriminative read
Versus ~2.4 s to generate the same tool call.

Most agent decisions do not need a language model, but they do need tool calling

Decision models are small models that produce bounded, typed outputs cheaply, quickly, and consistently, so they can sit in the hot path wherever a workflow needs a decision. Jev and Clef answer questions like “is this ticket urgent?” and “which team should handle it?” with a label and a probability, and that is genuinely useful. But it is not what an agent spends most of its turns deciding. An agent decides to call cancel_order on order W2378156 and refund to the original card, or to look the customer up by zip code before doing anything, or to say nothing and ask. A classifier that returns a category still leaves the actual tool call to a language model, and the tool call is where the latency, the cost, and the hallucinated arguments live.

TOD closes that gap by extraction rather than generation. The action is one pick over the enumerated candidates for the turn: every constructible tool call plus the reply options. If the action is a tool call, each argument is then its own pick over the real entities present in the conversation and the customer record: an actual order id, an actual item, an actual payment method or address. Nothing is decoded token by token, so the chain structurally cannot produce an argument that does not exist. When a pick’s confidence is below the operating threshold, the whole turn is handed to the parent model unchanged.

That shape buys four things. Latency: one discriminative read per pick, about 0.22 s, instead of an autoregressive decode loop, about 2.4 s for the same call. Cost: a flat per-decision rate that does not grow with reasoning or context length, $0.30 per 1,000 decisions against $0.40 for Jev. Calibration: confidences are trained with a proper (Brier) score, and TOD ships at a raw calibration error of 0.8% on JevBench before any temperature correction. Abstention: a calibrated confidence per pick is exactly what you threshold to act or defer.

Results on public JevBench

JevBench-231 is the public decision benchmark: 231 items across three difficulty tiers (easy, original, hard) and the three primitive types (choice, yes/no, score). It is excluded from TOD’s training mix by tier and by an explicit denylist, and temperatures are fit on our own validation rows, never on the benchmark. TOD scores 84.4% (195 of 231): 100% on easy, 91.7% on original, 73.0% on hard, with an expected calibration error of 3.3% (0.8% before temperature correction).

One number we report that nobody would volunteer: the untrained Gemma 4 12B base that TOD is built on, scored with the same readout, gets 86.2%. Training on our decision corpus gave back four items on public JevBench, all in general-reasoning families, in exchange for the things the base model cannot do and the benchmark does not measure: read images, choose among hundreds of options, and report confidence that is honest out of the box. We ship the trained model.

Public JevBench accuracy, 231 items

Higher is better. TOD compared with the decision models on the public board. Jev is the reference proprietary decision model; the others are open decision models.

Plumb-4BQwen3.5-4B, LoRA
89.6%
CygnetGemma 4 12B, frozen
87.9%
djev-thinkingDiffusionGemma 26B, multi-step
87.4%
Jev 1.13.0Proprietary
86.6%
TODGemma 4 12B + trained decision adapter
84.4%
Certo v1ModernBERT encoder
32.0%
TOD on public JevBench
ModelAccuracyEasy / original / hardCalibration error
TOD (ships)84.4% (195/231)100% / 91.7% / 73.0%3.3% (0.8% raw)
Untrained base, same readout86.2% (199/231)100% / 94.4% / 74.8%3.6%

Any number of options

Every open decision model on the board reads its answer as a single letter, which caps a decision at 26 options. The Jev contract allows 255, and real tool slates in a support conversation routinely run past 26 once every constructible call is enumerated. TOD uses a two-stage read: a small trained retriever shortlists the slate, and the 12B scores the shortlist in one forward pass, with the result mapped back onto the full slate. It is exact for small slates and degrades gracefully for large ones.

Accuracy with many options, 200 held-out decisions per set
SetOptionsTODUntrained baseChance
Banking requests (banking77)5076%70%2.0%
Assistant requests (clinc150)5093%72.5%2.0%
Legal provisions (LexGLUE)10072.5%51.8%1.0%
Mixed task labels (tasksource)17453%49%0.6%
Synthetic slate30055%—0.3%

The public board, the sealed split, and leaked data

Public JevBench is not the whole benchmark. The board operator holds a sealed split of 308 items that no one can train on. On that split, every one-pass decision model collapses toward chance (29.3%). Jev 1.13.0 goes from 86.6% public to 36.7% sealed. Plumb-4B goes from 89.6% to 38.0%, Cygnet from 87.9% to 33.8%, and the class of 45 open one-pass models averages 29%. The same items that look solved in public re-collapse when they are new: the trap family runs about 98% public and 48.5% sealed for one-pass systems, and paraphrase robustness, which is simply rewordings of items the systems have seen, sits at 39.5%.

The most parsimonious explanation is that the public scores were learned from the public items. Several board entries say so outright: one trains on the test splits of the standard benchmarks it is evaluated against, another ships eight thousand rows built to mirror the sealed family names. Jev does not publish its training data, but a model that scores 100% on public trap, adversarial, and hard-routing items and then drops to 41.7% on unseen ones of the same kind has pattern-matched those items, not learned the skill. Its public number should be read as a ceiling on memorization, not a measure of generalization.

The sealed items are not unsolvable. Reasoning language models score 89–96% on them, and the same DiffusionGemma weights double their sealed accuracy, from 29.9% to 60.1%, when allowed to compute at inference time. What collapses is a single pass over memorized patterns. TOD’s training mix excludes JevBench entirely by denylist, and its calibration is fit on our own validation rows, so its public number is clean by construction. TOD has not yet been scored on the sealed split; when it is, that number will not be a contamination artefact.

Public versus sealed JevBench accuracy

Systems with a published sealed score. Chance on the sealed split is 29.3%. TOD is not yet scored on the sealed split.

  • Public (231 items)
  • Sealed (308 items)
GPT-6 LunaReasoning LLM, not a decision model
99.6%95.5%
djev-thinkingMulti-step at inference
87.4%60.1%
Plumb-4BOne pass
89.6%38.0%
Jev 1.13.0One pass
86.6%36.7%
CygnetOne pass
87.9%33.8%
djev one-stepOne pass, same weights as djev-thinking
84.0%29.9%
Sealed accuracy by family for one-pass decision models (chance 29.3%)
FamilyOpen one-pass models (45)Jev 1.13.0Reasoning LLMs
Long policy21.6%27.5%62.9%
Temporal / numeric22.0%28.6%66.4%
Multi-hop27.8%44.7%69.3%
Probability27.8%50.0%75.6%
Ambiguous / abstain26.1%29.7%79.7%
Paraphrase robustness39.5%64.3%71.4%
Trap / adversarial48.5%41.7%70.8%

It reads the image, and training taught it to

Jev is text-only. TOD takes images in the state, which matters for support (a photo of a damaged parcel), for documents (a chart or a form), and for any decision whose evidence is not in the transcript. Two claims need separate evidence: that TOD actually relies on the image, and that the vision capability is something our training produced rather than something the base model had anyway.

First, take the image away. On 100 held-out questions per set, TOD drops from 97% to 79% on charts (ChartQA), from 87% to 62% on diagrams (AI2D), and from 90% to 73% on science questions (ScienceQA). Every 95% confidence interval excludes zero. The model is reading the pixels, not guessing from the surrounding text.

Second, compare against the untrained base model with the image, scored the same way. The base gets 70% on charts, 80% on diagrams, and 83% on science questions; TOD gets 97%, 87%, and 90%. A 27-point gain on charts is not a prompting effect. Brier scores improve on every set as well, so the probabilities on image decisions got more honest, not just more accurate. The adapter was trained on licence-clean decision rows that include image questions; this is the value the training added on top of the base.

Accuracy on image questions, 100 held-out questions per set

Removing the image costs TOD 17 to 25 points on every set. The untrained base is the same Gemma 4 12B model, scored with the image, before our training.

  • TOD, with image
  • TOD, without image
ChartsChartQA · base with image: 70%
97%79%
DiagramsAI2D · base with image: 80%
87%62%
Science questionsScienceQA · base with image: 83%
90%73%
Vision ablation, canonical validation rows, 100 per set
SetUntrained base, with imageTOD, with imageTOD, without imageΔ image (95% CI)
ChartQA70%97%79%+18 [+11, +27]
AI2D80%87%62%+25 [+16, +35]
ScienceQA83%90%73%+17 [+8, +28]

How a turn is resolved

In the customer-support deployment, one turn is a chain of picks. A small retriever shortlists the enumerated candidate slate (every reply option plus the top 16 tool calls, capped at 26). A collapse step merges each write with its read-back so they count as one candidate. TOD then scores the shortlist in a single forward pass and maps the chosen option back to the original slate with a calibrated probability.

If the action is a write, an argument chain fills each argument with its own pick, selecting a real order, item, payment method, or address from the slate. A confidence head decides whether the turn is certified; if not, the whole turn goes to the parent model unchanged. Every write is offered once as a read-back (“I’m about to cancel order #W… — confirm?”) and is not fired until the customer’s next reply is scored: yes executes it once, no drops it for the episode, and conditional assent (“only if you refund to X”) counts as not confirmed. The only two decisions TOD never certifies are calls that cannot be constructed and transfers to a human agent.

One support turn as a chain of typed picks
  1. 01RetrieveA small retriever shortlists the slate to at most 26 candidates.
  2. 02CollapseEach write and its read-back become one candidate.
  3. 03Pick the actionTOD scores the shortlist in a single forward pass.
  4. 04ConfidenceA calibrated head certifies the pick or defers the turn.
  5. 05Pick the argumentsOne pick per argument, selecting real entities.
  6. 06ConfirmWrites fire only after the customer says yes.
Latency per decision in the customer-support deployment
PathTime
One pick (action or one argument)~0.22 s
Whole decision (1 + number of argument picks)0.22 s (lookup) to ~1.1 s (5-pick write)
Native generation of the same call, 30 tokens2.34 s
Retriever shortlist35 ms

Selecting arguments beats generating them

On 20 held-out support turns we compared the base model’s native function calling against TOD’s pick plus argument chain. TOD’s only errors were picking the wrong action; when the action was right, its arguments were right 15 of 15 times. Generation’s errors were arguments and policy: hallucinated order ids and item swaps, skipping a look-up before acting, and narrating a number instead of calling a tool. Giving the generator the correct action to work from barely helped, because the failure is in constructing the arguments, not in choosing the tool.

Turns fully correct, out of 20 held-out support turns

Native generationBase model
9
Native generation+ domain adapter
9
Native generation+ adapter, given the correct action
10
TOD pick + argument chain
17
Native generation vs. pick + argument chain (18 tool turns of 20)
MetricBase+ adapter+ adapter, given actionTOD
All arguments correct (of 18)77815
Tool name correct (of 18)11111215
Fully correct (of 20)991017

How we trained TOD

TOD starts from the open Gemma 4 12B instruction model. The general decision adapter is a rank-16 LoRA trained for two epochs on 30,360 licence-clean decision rows under our 2026-09-24 data policy, with every benchmark we report on held out by denylist, plus a ModernBERT-base retriever trained with contrastive loss and hard negatives to build the shortlist. Confidence temperatures are fit with a Brier objective on 602 of our own validation rows. The base model is frozen and referenced by its Hugging Face id; the adapter is 82 MB.

The support deployment fine-tunes the same recipe on retail decisions: 33,796 supervised rows (22,442 action and 11,354 argument picks, including 6,293 human-generated), a rank-128 adapter, and one reinforcement-learning round on 1,180 live-rollout decisions. On a held-out set of 916 action and 694 argument decisions it agrees with the Gemini Pro teacher on 65% of actions and 94% of arguments.

Training data
StageRowsNotes
General decision adapter (LoRA r16)30,360Licence-clean decision rows incl. image questions; 2 epochs; benchmarks held out
Retriever (ModernBERT-base)—Contrastive loss with hard negatives; shortlist recall@16 of 93–100% on 50–174-option sets
Calibration602Our own validation rows; Brier-optimal temperatures; never JevBench
Retail supervised fine-tune (LoRA r128)33,79622,442 action / 11,354 argument; 6,293 human-generated
Retail RL round1,180Live rollouts (712 action + 468 argument)

Fine-tuned to a domain: τ2-bench retail

Fine-tuned on retail-support decisions, TOD runs as the front end of a customer-support agent on τ2-bench retail: 114 held-out tasks, held out by customer. A solve requires both the correct database write and the correct natural-language read-back. When confidence on a pick is below the operating threshold, the turn goes to the parent model, Gemini Pro or Gemini Flash.

Two operating points: serve-less (a more conservative threshold) and serve-more. With either parent, TOD matches or nearly matches the parent’s solve rate at 23–34% lower cost per episode. Jev, which can only substitute replies and cannot make the tool calls, costs more than Pro alone at its best solve rate.

Cost saved per episode vs. the parent model alone

Longer is better. Each row is the parent model with a decision model in front of it; the label is the saving on the parent’s own cost, and the line under each row is tasks solved against the parent alone.

  • TOD
  • Jev
Gemini Pro + TOD96 of 114 solved · Pro alone 96
−23%
Gemini Pro + Jev85 of 114 solved · Pro alone 96
+2%
Gemini Flash + TOD100 of 114 solved · Flash alone 102
−32%
Gemini Flash + Jev101 of 114 solved · Flash alone 102
−18%
τ2-bench retail, 114 held-out tasks
ParentConfigurationSolves / 114$ / episodevs. parent alone
ProParent alone96$0.1098—
ProTOD, serve-less96$0.0845−23%
ProTOD, serve-more94$0.0822−25%
ProJev (best solves)85$0.1118+2%
FlashParent alone102$0.0245—
FlashTOD, serve-less100$0.0166−32%
FlashTOD, serve-more95$0.0162−34%
FlashJev (best solves)101$0.0202−18%

What’s next

A decision model does not have to stop at classifying a ticket. TOD picks the tool, picks every argument from what is actually there, reads the image when there is one, and tells you how sure it is, so your agent can act on the cheap decisions and escalate the rest. Read more at https://daseinai.ai/tod.