On every request that carries tools, the providers are reordered by how well they call tools — with no setting.
Auto Exacto is a routing step that runs on every request that includes tools. Providers serving the same model differ in how reliably they call tools; Auto Exacto moves the reliable ones to the front of the list and the weak ones to the back. Nothing to set.
| Signal | Measures |
|---|---|
| Throughput | tokens per second, live |
| Tool-call error rate | the share of tool-calling requests where a call was not valid JSON, named a tool the request did not carry, or did not match its schema |
| Benchmarks | each endpoint's score on GPQA Diamond and on the Tau2 airline tool-calling benchmark, over a rolling 32 days |
An endpoint whose benchmark score falls well below its model's usual score is pushed down.
The benchmark scores per model are at GET /v1/benchmarks, with benchmark_type=gpqa_diamond or benchmark_type=tau_bench_verified_airline.
Without Auto Exacto, routing favours the lowest price. To get that back on a tool-calling request, sort by price:
{
"model": "anthropic/claude-sonnet-5",
"provider": { "sort": "price" },
"messages": [],
"tools": []
}or add :floor to the model. Either one bypasses Auto Exacto.
Reordering providers can move a conversation to a provider that has not cached its prompt yet. If your agent sends large tool definitions on every turn and the prompt cache matters most, sort by price as above.
The :exacto variant, and provider.sort: "exacto", apply the same quality-first ordering to any request, with or without tools.