Solutions · Agents
Best LLMs for agents & tool calling
Reliable function calls, JSON mode, and multi-step tool loops.
Agent routes score models on BFCL v3, Tau-Bench, and internal tool-loop success across 10+ turns. Use auto:agent for anything with tools[] — the router avoids models with JSON drift or truncated tool_calls under load.
| # | Model | Score | BFCL v3 | Why |
|---|---|---|---|---|
| 1 | claude-sonnet-4.5 | 97 | 91.8% | Highest tool-call fidelity; best default for production agents. |
| 2 | gpt-5.5 | 96 | 90.4% | Parallel tool calls + strict JSON; strongest on long trajectories. |
| 3 | claude-opus-4.5 | 94 | 89.1% | Best planner when the agent must decompose the goal first. |
| 4 | gemini-3.1-pro | 92 | 87.6% | Excellent for tool loops that traverse long documents mid-trajectory. |
| 5 | gpt-5-codex | 90 | 85.9% | Code-first agents (Aider, Cursor-style); reliable shell + git. |
| 6 | grok-5 | 88 | 83.4% | Fast tool loops with good structured output adherence. |
| 7 | deepseek-v4 | 86 | 81.2% | Open weights, cheapest capable agent for background workers. |
| 8 | qwen3-max | 85 | 80.5% | Strong function calling in Chinese + English. |
| 9 | mistral-large-3 | 82 | 76.8% | Solid EU-hosted option for GDPR-sensitive agents. |
| 10 | claude-haiku-4.5 | 80 | 74.9% | Sub-200ms tool loops for real-time UX. |
Why these models
- BFCL v3 (parallel + multi-turn) and Tau-Bench retail/airline pass rate.
- Strict JSON schema adherence and stable tool_call ids across turns.
- Cost per successful trajectory, not per token — cheap models that loop are not cheap.
Drop-in example
const res = await client.chat.completions.create({
model: "auto:agent",
tools: [
{ type: "function", function: { name: "search_orders",
parameters: { type: "object", properties: { q: { type: "string" } } } } },
{ type: "function", function: { name: "refund_order",
parameters: { type: "object", properties: { id: { type: "string" } } } } },
],
tool_choice: "auto",
messages: [{ role: "user", content: "Refund my last Nike order." }],
});