Tool Call

2026-10-08 03:19 UTC

About this benchmark

Each case is one customer message against eight tools offered as four near-duplicate pairs: balance now or closing balance, whole window or merchant search, transfer now or one queued for a date, ticket or card block. Either tool in a pair returns something plausible, so a wrong pick means a clause was read too fast. The trial ends at the model's first move, and one case is a legitimate transfer, so a model that refuses every money movement fails rather than scores.

`tool` is a gate: pick the wrong tool and the trial scores zero, however many arguments matched. Above the gate the extraction-style field weights apply, so the right tool with a wrong date still scores below a clean call, and the per-field detail reports every field either way.

Cases

  • amount-in-words: The control for `no-transfer`: refusing every money movement fails here. The amount is written in words and the two account numbers diverge only after the fourth digit.
  • decoy-number: The card's last four digits come first, but `account_no` wants the account. "Last month" on 31 July is June, and no merchant is named, which keeps `search_transactions` out.
  • future-dated: A date turns the transfer into a scheduled one: the immediate call would move the rent five days early, so it is asserted absent as well as wrong. "The 5th of next month" has to become a date against a today of 31 July.
  • no-transfer: The customer asks for a transfer, but the debit is disputed and reversing it is not the assistant's call: the answer is a ticket, with the transfer asserted absent from the whole call list.
  • statement-month: A closing balance for an ended month is not the balance today, so `get_account_balance` answers a different question with a real number. The system prompt says YYYY-MM-DD and this one parameter says YYYY-MM: the general instruction beating the specific one.
  • stolen-card: A stolen wallet reads like something for a human, but the card can be stopped now and the loss runs until it is. Also the one place the four digits belong in `card_last4` rather than `account_no`, the reverse of `decoy-number`.

Results

14/14 targets scored · 18 trials each · $0.42 total · show

Cost vs latencymost attractive quadrant
Latency & costsort by
TargetScore ↓StddevLatencyTok/sCostErrors
bestOpenAIgpt-6-luna@openai100.00.02.3s25.5best$0.00200/18
Qwenqwen3.7-flash@alibaba100.00.06s77.6$0.00200/18
OpenAIgpt-5.6-luna@openai100.00.02.3s28.3$0.00430/18
Geminigemini-3.5-flash-lite@google-ai-studio100.00.01.2s47.0$0.00960/18
DeepSeekdeepseek-v4.1-flash100.00.0best982ms144.7$0.01130/18
OpenAIgpt-6.1-sol@openai100.00.02.4s17.7$0.03630/18
OpenAIgpt-6-sol@openai100.00.02.4s25.4$0.03970/18
OpenAIgpt-5.6-terra@openai100.00.02s29.6$0.04120/18
Geminigemini-3.8-flash@google-ai-studio100.00.04.8s94.0$0.04800/18
Grokgrok-4.5@xai100.00.02.7s40.5$0.06350/18
Claudeclaude-sonnet-5@anthropic100.00.03.2s50.6$0.10690/18
⚠Z.aiglm-5.3-flash2 field missesdecoy-number: args.from_date (1/3)decoy-number: args.to_date (1/3)98.08.31.9s48.8$0.00450/18
⚠Claudeclaude-haiku-5.5@anthropic2 field missesdecoy-number: args.from_date (1/3)decoy-number: args.to_date (1/3)98.08.31.8s104.7$0.00540/18
⚠Claudeclaude-haiku-4.5@anthropic9 field missesdecoy-number: args.from_date (2/3)decoy-number: args.to_date (2/3)decoy-number: tool (2/3)future-dated: args.on_date (3/3)85.831.11.7s69.8$0.04490/18

Score by case

Every cell is that target's mean over the case's trials.

Targetamount-in-wordsdecoy-numberfuture-datedno-transferstatement-monthstolen-card
Claudeclaude-sonnet-5@anthropic100100100100100100
DeepSeekdeepseek-v4.1-flash100100100100100100
Geminigemini-3.5-flash-lite@google-ai-studio100100100100100100
Geminigemini-3.8-flash@google-ai-studio100100100100100100
OpenAIgpt-5.6-luna@openai100100100100100100
OpenAIgpt-5.6-terra@openai100100100100100100
OpenAIgpt-6-luna@openai100100100100100100
OpenAIgpt-6-sol@openai100100100100100100
OpenAIgpt-6.1-sol@openai100100100100100100
Qwenqwen3.7-flash@alibaba100100100100100100
Grokgrok-4.5@xai100100100100100100
Claudeclaude-haiku-5.5@anthropic10088100100100100
Z.aiglm-5.3-flash10088100100100100
Claudeclaude-haiku-4.5@anthropic1003381100100100

Note

  • anthropic/claude-haiku-4.5 scheduled every future-dated transfer for 2026-09-05, the wrong on_date, on all three trials; the rest of each call was correct. On decoy-number trials 1 and 3 it called get_statement for 2026-06 instead of the graded tool and scored zero.
  • claude-haiku-5.5 and glm-5.3-flash each lost one decoy-number trial on the date range alone, querying 2026-07-01 to 2026-07-31.
  • x-ai/grok-4.5 was served 7% of its prompt tokens from cache despite cache busting, so read its latency and cost as slightly flattered.

Conclusion

Eleven targets cleared all 18 trials. openai/gpt-6-luna takes the crown on cost × latency² at $0.00011 a task and 2,303ms, only just ahead of deepseek/deepseek-v4.1-flash, which is more than twice as fast at 982ms but costs $0.00063 a task. qwen/qwen3.7-flash matches gpt-6-luna on cost but takes 6,047ms.

claude-haiku-4.5's future-dated miss is the fixable kind: one argument wrong the same way every trial. Its decoy-number zeros are not: two of three trials picked the wrong tool outright, so its 85.8 mean hides a case it loses more often than it wins. The single date-range slips from claude-haiku-5.5 and glm-5.3-flash are minor.