MIT
tau2-bench (Sierra Research)
The open harness the agents ran in, and the retail world (catalogue, users and orders) the retail scenarios were generated on. SwapBench's own scenario sets are not released yet.
13 model swaps behind two customer-service agents, a bank and a store. We ran each swap on hidden scenarios to learn the truth, then asked which cheaper checks would have caught the regressions.
Next-step agreement, the cheap check, called 5 of 8 regressed swaps safe and called both swaps that hold (2 of 2) unsafe. It got 3 of 10 verdicts right.
A full replay on 260 scenarios never called a regression safe or a good swap unsafe. It got 5 verdicts right and said "not enough evidence" on the other 5.
Imitating the incumbent is not the same as doing the job: on retail, self-hosted Qwen3.8-27B FP8 matched 440 of 475 of the incumbent's next tool calls, yet resolved 9.8 points fewer hidden conversations.
Each swap was first run for real on hidden scenarios to learn whether it regressed. Then each check gave its verdict without seeing that answer.
13 candidate swaps; 10 have a clear answer on the hidden set (8 regressed, 2 hold) and 3 are too close to call, so they are not scored.
| Check | Right verdicts | Called a regression safe | Called a safe swap unsafe | Not enough evidence |
|---|---|---|---|---|
| Next-step agreement | 3 of 10 | 5 of 8 | 2 of 2 | 0 |
| Full replay, 60 scenarios | 4 of 10 | 0 of 8 | 0 of 2 | 6 |
| Full replay, 260 scenarios | 5 of 10 | 0 of 8 | 0 of 2 | 5 |
A full replay can say it has not seen enough evidence; next-step agreement always gives a verdict.
A three-line policy clarification turned the regressed self-hosted Qwen3.8-27B (−5.6 points) into a bank agent that holds (−1.3 [−4.0, 1.5]), confirmed on 200 scenarios nobody had looked at (−0.5). Tool guardrails alone left it at −5.4.
The same weights behind vLLM's generic tool parser resolved 1 of 240 retail conversations, with no errors raised. How the endpoint is configured is a swap risk of its own.
Fine-tuning Qwen3.8-27B on its own successful bank conversations did not change success (−4.4 against −5.6 before); output tokens per conversation fell from 2,341 to 2,047.
Every table behind the findings, grouped by question. Each opens in place.
Truth is the paired success difference against the incumbent on the 240 hidden scenarios, twice each, with a 5-point margin; a swap whose harmful actions rise also counts as regressed. Next-step agreement compares the candidate's next tool call with the incumbent's recorded one, against the incumbent's agreement with itself.
| Swap | Domain | Truth (points, 95% CI) | Next-step agreement | Next-step verdict | Replay, 60 | Replay, 260 |
|---|---|---|---|---|---|---|
| GPT-5 mini | Bank | Holds +0.2 [−2.5, 2.9] | 84.9% vs 90.0% | Unsafe ✗ false alarm | Safe ✓ | Not enough evidence |
| GPT-6 Luna | Bank | Regressed −2.5 [−5.4, 0.4] | 87.6% vs 90.0% | Safe ✗ false safe | Not enough evidence | Not enough evidence |
| GPT-5.4 nano | Bank | Regressed −37.5 [−42.9, −32.1] | 75.3% vs 90.0% | Unsafe ✓ | Unsafe ✓ | Unsafe ✓ |
| Qwen3.8-27B BF16 | Bank | Regressed −5.6 [−8.8, −2.5] | 85.7% vs 90.0% | Safe ✗ false safe | Not enough evidence | Unsafe ✓ |
| Qwen3.8-27B FP8 | Bank | Regressed −6.0 [−9.4, −2.9] | 88.4% vs 90.0% | Safe ✗ false safe | Not enough evidence | Unsafe ✓ |
| Qwen3.6-35B-A3B MoE | Bank | Unclear −4.2 [−7.9, −0.4] | 85.3% vs 90.0% | Safe | Not enough evidence | Not enough evidence |
| Qwen3.8-27B + LoRA RFT | Bank | Regressed −4.4 [−7.3, −1.7] | 84.9% vs 90.0% | Unsafe ✓ | Not enough evidence | Not enough evidence |
| Claude Haiku 5.5 (re-run against itself) | Retail | Unclear −2.1 [−5.4, 1.3] | same model | Safe | Not enough evidence | Safe |
| Qwen3.8-27B FP8 | Retail | Regressed −9.8 [−13.8, −6.0] | 92.6% vs 97.3% | Safe ✗ false safe | Not enough evidence | Unsafe ✓ |
| Qwen3.6-35B-A3B MoE | Retail | Holds −0.6 [−3.3, 2.1] | 91.8% vs 97.3% | Unsafe ✗ false alarm | Safe ✓ | Not enough evidence |
| Qwen3.8-27B, thinking off | Retail | Unclear −2.5 [−5.4, 0.2] | 87.8% vs 97.3% | Unsafe | Safe | Not enough evidence |
| Qwen3.8-27B with vLLM's generic hermes tool parser | Retail | Regressed −95.0 [−97.1, −92.7] | 0.0% vs 97.3% | Unsafe ✓ | Unsafe ✓ | Unsafe ✓ |
| Qwen3.8-27B BF16 | Retail | Regressed −8.1 [−12.1, −4.4] | 92.4% vs 97.3% | Safe ✗ false safe | Not enough evidence | Not enough evidence |
✓ matches the truth. ✗ false safe: a regression called safe. ✗ false alarm: a swap that holds called unsafe. Swaps with unclear truth are not marked.
The ground truth: every candidate against the incumbent, GPT-5 for the bank and Claude Haiku 5.5 for retail.
240 hidden scenarios, twice each, against stateful tools and a simulated customer. Graded by the tools' end state; GPT-5 is the incumbent.
| Model | Resolved | Success | 95% CI | vs. GPT-5 (points, 95% CI) | Harmful actions per conversation | Cost per resolved | Truth |
|---|---|---|---|---|---|---|---|
| GPT-5 | 452 / 480 | 94.2% | [91.7, 96.5] | incumbent | 0.031 | $0.0769 | |
| GPT-5 mini | 453 / 480 | 94.4% | [92.1, 96.3] | +0.2 [−2.5, 2.9] | 0.048 | $0.0138 | Holds |
| Qwen3.8-27B + guardrails + 3-line policy clarification | 446 / 480 | 92.9% | [90.2, 95.4] | −1.3 [−4.0, 1.5] | 0.046 | self-hosted | Holds |
| GPT-6 Luna | 440 / 480 | 91.7% | [89.0, 94.2] | −2.5 [−5.4, 0.4] | 0.073 | $0.0011 | Regressed |
| Qwen3.6-35B-A3B MoE | 433 / 481 | 90.0% | [86.7, 92.9] | −4.2 [−7.9, −0.4] | 0.060 | self-hosted | Unclear |
| Qwen3.8-27B + LoRA RFT | 431 / 480 | 89.8% | [86.7, 92.7] | −4.4 [−7.3, −1.7] | 0.092 | self-hosted | Regressed |
| Qwen3.8-27B + tool guardrails | 426 / 480 | 88.8% | [85.2, 91.9] | −5.4 [−8.8, −2.3] | 0.098 | self-hosted | Regressed |
| Qwen3.8-27B BF16 | 425 / 480 | 88.5% | [85.0, 91.9] | −5.6 [−8.8, −2.5] | 0.096 | self-hosted | Regressed |
| Qwen3.8-27B FP8 | 395 / 445 | 88.1% | [84.6, 91.5] | −6.0 [−9.4, −2.9] | 0.098 | self-hosted | Regressed |
| GPT-5.4 nano | 272 / 480 | 56.7% | [51.5, 61.9] | −37.5 [−42.9, −32.1] | 0.454 | $0.0080 | Regressed |
Self-hosted models ran on our own vLLM servers, so they have no token price. API costs use list prices pinned on the run dates and leave out the simulated customer.
240 hidden scenarios, twice each, against stateful tools and a simulated customer. Graded by the tools' end state; Claude Haiku 5.5 is the incumbent.
| Model | Resolved | Success | 95% CI | vs. Claude Haiku 5.5 (points, 95% CI) | Harmful actions per conversation | Cost per resolved | Truth |
|---|---|---|---|---|---|---|---|
| Claude Haiku 5.5 | 458 / 480 | 95.4% | [93.3, 97.3] | incumbent | 0.013 | $0.0188 | |
| Qwen3.6-35B-A3B MoE | 455 / 480 | 94.8% | [92.1, 97.1] | −0.6 [−3.3, 2.1] | 0.004 | self-hosted | Holds |
| Claude Haiku 5.5 (re-run against itself) | 224 / 240 | 93.3% | [90.0, 96.3] | −2.1 [−5.4, 1.3] | 0.021 | $0.0191 | Unclear |
| Qwen3.8-27B, thinking off | 446 / 480 | 92.9% | [90.4, 95.2] | −2.5 [−5.4, 0.2] | 0.010 | self-hosted | Unclear |
| Qwen3.8-27B BF16 | 419 / 480 | 87.3% | [83.8, 90.6] | −8.1 [−12.1, −4.4] | 0.027 | self-hosted | Regressed |
| Qwen3.8-27B FP8 | 411 / 480 | 85.6% | [81.9, 89.0] | −9.8 [−13.8, −6.0] | 0.019 | self-hosted | Regressed |
| Qwen3.8-27B with vLLM's generic hermes tool parser | 1 / 240 | 0.4% | [0.0, 1.3] | −95.0 [−97.1, −92.7] | 0.000 | self-hosted | Regressed |
Self-hosted models ran on our own vLLM servers, so they have no token price. API costs use list prices pinned on the run dates and leave out the simulated customer.
Stock Qwen3.8-27B regressed as a bank agent, mostly by handing customers to a person when it didn't need to. Guardrails in the tools didn't help; three lines of policy did.
The policy clarification was found on the hidden set, so it was re-tested on 200 pool scenarios that were never inspected.
| Model | Resolved | Success | vs. GPT-5 (points, 95% CI) | Harmful actions |
|---|---|---|---|---|
| GPT-5 | 187 / 200 | 93.5% | incumbent | 7 |
| Qwen3.8-27B BF16 | 175 / 200 | 87.5% | −6.0 [−10.5, −1.5] | 20 |
| Qwen3.8-27B + guardrails + 3-line policy clarification | 372 / 400 | 93.0% | −0.5 [−4.3, 3.5] | 13 |
The fixed agent ran each pool scenario twice, so it has twice as many conversations.
Bank conversations GPT-5 resolved and the candidate did not, classified at the first decision that went wrong.
| First wrong decision | GPT-6 Luna | Qwen3.8-27B BF16 | Qwen3.8-27B FP8 |
|---|---|---|---|
| Needless handoff | 22 | 25 | 21 |
| Wrong refund arguments | 1 | 9 | 10 |
| Identity never verified | 5 | 4 | 4 |
| Wrong escalation arguments | 0 | 2 | 5 |
| Wrong dispute arguments | 1 | 1 | 2 |
| Action not in the correct resolution | 2 | 0 | 0 |
| Wrong card freeze arguments | 0 | 1 | 0 |
Most lost conversations were needless handoffs: the agent offered a transfer to a person, the customer accepted, and the right resolution had none.
MIT
The open harness the agents ran in, and the retail world (catalogue, users and orders) the retail scenarios were generated on. SwapBench's own scenario sets are not released yet.
Kitaru turns your agent's traces into test cases and replays them against any model, prompt or setting, so you can see what a change does before it ships.