Skip to content
OpenRouterOpenRouter
© 2026 OpenRouter, Inc

Product

  • Chat
  • Rankings
  • Apps
  • Models
  • Providers
  • Pricing
  • Enterprise
  • Labs

Company

  • About
  • Blog
  • Careers
    Hiring
  • Privacy
  • Terms of Service
  • Support
  • State of AI
  • Works With OR
  • Data

Developer

  • Documentation
  • API Reference
  • SDK
  • Status

Connect

  • Discord
  • GitHub
  • LinkedIn
  • X
  • YouTube

OpenRouter Benchmarks

τ²-Bench: Airline

τ²-Bench Airline measures whether a model can do real agentic work: it plays an airline customer-service agent that must follow a policy manual, talk with a simulated customer, and call the right tools at the right time to search flights, change bookings, and issue refunds. There's no trivia component—a model only scores well by executing multi-step tasks correctly. We run it continuously against the same provider endpoints that serve OpenRouter traffic, so scores reflect the model and the provider serving it together: real-world performance rather than ideal-conditions numbers.

Last benchmark run Jul 11, 2026, 3:35 PM UTC

PaperGitHub
OverviewModel comparisonCost efficiencyTool-call reliabilityLeaderboardWhy we run itWhat scores tell youHow tasks are scoredMethodology

Top accuracy

79.8%

Qwen: Qwen3.5-122B-A10B

Models evaluated

58

Providers covered

47

Best value

75.5%at $0.009/task

DeepSeek: DeepSeek V4 Flash

Model comparison

Accuracy
Representative-run accuracy, best first.
Cost per task
Average cost per graded task, cheapest first.
Time per task
Average wall-clock time per task, fastest first; agents that loop or stall run long.

Cost efficiency

Accuracy vs. cost (Pareto frontier)
One point per model, using default routing (not pinned to a provider) when available. The line is the Pareto frontier: no model beats these on both accuracy and cost.

Tool-call reliability

Tool-call errors
Share of this benchmark's own requests where the model called a tool that doesn't exist, passed arguments that don't match the tool's schema, or emitted arguments that aren't valid JSON.

Leaderboard

Top-level rows use default routing where available; click a row to expand provider-pinned results.

#ModelStd dev
1
Qwen: Qwen3.5-122B-A10B
Pareto
79.8%
±3.5pp$0.103.0m28.9k
2
Qwen: Qwen3.5 397B A17B
Pareto
78.3%
±4.3pp$0.08249s11.3k
3
Claude Sonnet 5
78.0%
--$0.1815s2.86k
4
GPT-5.5
78.0%
--$0.148s1.95k
5
NVIDIA: Nemotron 3 Ultra
76.9%
±0.8pp$0.1040s8.57k
6
Qwen: Qwen3.6 27B
Pareto
76.7%
±2.5pp$0.0741.7m17.4k
7
Qwen: Qwen3.5-35B-A3B
Pareto
76.3%
±5.3pp$0.0521.6m28.1k
8
Google: Gemma 4 31B
Pareto
76.1%
±3.8pp$0.01249s5.85k
9
DeepSeek: DeepSeek V4 Pro
76.0%
±3.1pp$0.04425s5.24k
10
DeepSeek: DeepSeek V4 Flash
Pareto
75.5%
±3.6pp$0.00925s5.86k
11
Z.ai: GLM 5.2
75.2%
±2.9pp$0.04639s4.69k
12
Z.ai: GLM 5
74.6%
±5.4pp$0.03427s4.26k
13
Claude Sonnet 4.6
74.0%
--$0.217s1.66k
14
Xiaomi: MiMo-V2.5-Pro
74.0%
±4.4pp$0.0251.5m11.6k
15
Z.ai: GLM 5.1
73.7%
±3.8pp$0.05024s4.49k
16
Z.ai: GLM 4.7
73.4%
±4.8pp$0.02827s4.02k
17
MoonshotAI: Kimi K2.6
73.3%
±3.0pp$0.04934s6.18k
18
DeepSeek: DeepSeek V3.2
73.1%
±4.1pp$0.02146s6.14k
19
Qwen: Qwen3.6 35B A3B
72.4%
±2.2pp$0.0341.6m19.7k
20
MoonshotAI: Kimi K2.5
71.6%
±3.3pp$0.02634s4.35k
21
MiniMax: MiniMax M2.7
71.1%
±4.9pp$0.01523s4.42k
22
Z.ai: GLM 4.5 Air
70.4%
±4.6pp$0.01523s3.8k
23
Qwen: Qwen3.5-9B
70.0%
±5.7pp$0.0192.1m22.4k
24
MoonshotAI: Kimi K2.7 Code
69.7%
±4.5pp$0.0481.9m5.61k
25
DeepSeek: DeepSeek V3.1 Terminus
69.2%
±5.1pp$0.03263s8.26k
26
DeepSeek: DeepSeek V3.2 Exp
69.0%
±5.1pp$0.0522.4m8.32k
27
Xiaomi: MiMo-V2.5
Pareto
69.0%
±1.0pp$0.0081.7m15.9k
28
MoonshotAI: Kimi K2 Thinking
68.8%
±9.8pp$0.04220s3.57k
29
MiniMax: MiniMax M2.1
68.8%
±4.8pp$0.01424s4.58k
30
Google: Gemma 4 26B A4B
68.4%
±3.9pp$0.01468s10.1k
31
Z.ai: GLM 4.6
68.0%
±11.4pp$0.03129s4.48k
32
Xiaomi: MiMo-V2-Flash
Pareto
67.2%
±6.9pp$0.00519s3.94k
33
MiniMax: MiniMax M3
66.8%
±7.6pp$0.02525s5.84k
34
MiniMax: MiniMax M2.5
63.9%
±4.9pp$0.01433s4.76k
35
OpenAI: gpt-oss-120b
61.8%
±5.9pp$0.01138s8.9k
36
Qwen: Qwen3 235B A22B Thinking 2507
61.5%
±4.6pp$0.04271s15.9k
37
Z.ai: GLM 4.7 Flash
60.0%
±5.4pp$0.00845s7.25k
38
Qwen: Qwen3 Coder Next
59.4%
±3.5pp$0.01911s2.1k
39
DeepSeek: DeepSeek V3.1
59.1%
±11.4pp$0.06078s9.08k
40
DeepSeek: R1 0528
56.5%
±6.4pp$0.0661.9m12.5k
41
MoonshotAI: Kimi K2 0905
55.1%
±5.0pp$0.1027s2.35k
42
OpenAI: gpt-oss-20b
51.2%
±2.9pp$0.0203.0m58.3k
43
NVIDIA: Nemotron 3 Nano 30B A3B
51.0%
±3.0pp$0.0171.9m36.5k
44
Qwen: Qwen3 235B A22B Instruct 2507
46.9%
±5.0pp$0.01516s1.7k
45
Qwen: Qwen3 Next 80B A3B Instruct
46.8%
±4.0pp$0.0118s1.71k
46
Qwen: Qwen3 Coder 480B A35B
46.6%
±5.6pp$0.02512s1.58k
47
Qwen: Qwen3 30B A3B
43.7%
±5.3pp$0.01329s8.31k
48
DeepSeek: DeepSeek V3 0324
42.8%
±4.8pp$0.03368s4.45k
49
Qwen: Qwen3 VL 235B A22B Instruct
40.4%
±4.4pp$0.02715s1.61k
50
Meta: Llama 3.3 70B Instruct
40.2%
±2.5pp$0.00813s911
51
Google: Gemini 2.5 Flash
40.0%
--$0.0105s919
52
Qwen: Qwen3 30B A3B Instruct 2507
37.3%
±4.3pp$0.01214s1.88k
53
Meta: Llama 4 Maverick
35.2%
±7.5pp$0.02912s1.7k
54
Qwen: Qwen3 VL 8B Instruct
33.6%
±5.1pp$0.01719s2.23k
55
Qwen: Qwen3 32B
33.6%
±15.8pp$0.0131.6m9.95k
56
Meta: Llama 3.1 8B Instruct
33.0%
±5.6pp$0.00629s1.71k
57
Qwen: Qwen3 VL 30B A3B Instruct
32.5%
±2.9pp$0.0571.6m5.91k
58
Mistral: Mistral Nemo
17.8%
±6.2pp$0.01949s2.49k

Why we run this benchmark

It's a tool-calling benchmark that is hard to game. Grading depends on live tool-call trajectories rather than memorized answers, so it resists training-data leakage better than Q&A-style evals. It exercises every tool-calling failure mode (wrong arguments, skipped policy checks, giving up, hallucinated confirmations) at a relatively low cost per run. The relative scores also carry more signal than the absolute ones. The same model can score differently across providers, and those deltas are what Exacto routing uses to pick higher-accuracy endpoints.

Each task is a simulated airline support conversation with a scripted user, a toolbox (flight search, booking changes, refunds, loyalty policies), and a gold reference solution. A task passes only if the final database state and the messages to the user match the reference; partial credit is not awarded.

What the scores can and can't tell you

There is still headroom. Top models fail roughly one in five tasks, and the airline domain is the hardest τ²-Bench split. Accuracy differences here separate models that follow multi-step policies from ones that merely chat well.

The floor is high, though. Many tasks reward inaction. A refusal task with an empty gold action list passes for any agent that changes nothing. Even weak models score well above zero, so the meaningful spread sits at the top of the range.

The benchmark is public, so tasks may appear in training corpora. Contamination inflates scores less here than in Q&A-style evals, though, since a leaked task still has to be executed correctly, step by step, against a live database.

Scoring fidelity has limits. The checker verifies two things: the final database hash and exact substring matches in the agent's messages. Each task's natural-language assertions ("agent should refuse the cancellation") are metadata, and no judge model reads the transcript. So a savings calculation fails if the agent says "$23,552.50" when the checker greps for "23553".

The user simulator matters too. We pin it to gemini-2.5-flash so agent scores stay comparable, but the sim is itself an LLM with failure modes of its own. It can stop the conversation before the agent finishes, leak its hidden task instructions, or keep a stuck agent looping until the 200-step ceiling kills the run. Swapping the sim model shifts absolute scores, which is why cross-paper τ²-Bench numbers rarely line up exactly.

How a task is scored

Every task ships a gold solution: a list of tool calls, strings the agent must say, and natural-language assertions. After the conversation ends, the checker replays the gold tool calls against a fresh database and compares hashes with the agent's final database. It then greps the agent's messages for each required string. The reward is the product of those two checks:

reward = db_match × communicate_met   // each ∈ {0, 1}
db_match        = hash(agent DB) == hash(gold DB)
communicate_met = every required string appears in an agent message
any run that hits MAX_STEPS instead of a clean stop scores 0 outright

The rollouts below are from real runs, with gemini-2.5-flash as the user simulator throughout.

reward = 1

Pass: three changes in one request, all three land

Task 17 · agent: openai/gpt-5.1

For reservation FQ8APE: add 3 checked bags, swap the passenger to Omar Rossi, and upgrade basic economy to economy, paying with a gift card.

  • Database must match the gold state: update_reservation_flights (economy upgrade), update_reservation_passengers, and update_reservation_baggages with exact arguments
  • communicate_info is empty, so no string check applies
db ✓communicate ✓USER_STOP

The agent looked up the user, found the right reservation among several, confirmed the changes and payment method, then made all three writes: passenger swap, cabin upgrade, and bags. The final database hashes match the gold state and the run ends on USER_STOP, so reward is 1. This is what the eval is designed to measure: multi-step tool use under policy constraints, done correctly.

Methodology

Scores aggregate all successful runs, weighted by task count, with a minimum of 45 graded tasks per model-provider pair. A model's headline score uses its default routing (not pinned to a provider) when one exists; otherwise it falls back to the median provider. The standard deviation is measured across runs for that representative result. Cost, time, and token figures are per-task averages from the same runs. Best value is the cheapest Pareto-optimal model within 5 points of the top score.

These are the same measurements that power Exacto routing. See the docs for how routing works, or browse all models to try one.