Skip to main content
Auto Exacto is a default routing behavior that activates when your request includes tools. Instead of routing by price alone, ARouter re-ranks providers using tool-calling quality signals — so the model that’s best at following tool schemas wins over the cheapest option.

How It Works

For tool-calling requests, ARouter scores providers on:
  1. Schema adherence — Does the provider reliably return valid JSON matching the tool schema?
  2. Argument accuracy — Are the tool arguments factually correct and well-formed?
  3. Parallel tool calls — Does the provider correctly handle multi-tool responses?
  4. Call frequency — Does the provider invoke tools when it should (not under/over-calling)?
Scores are derived from ARouter’s aggregate routing data across all requests on the platform.

Behavior

Request typeRouting strategy
No toolsPrice-weighted (default)
With toolsAuto Exacto (quality-ranked)
With tools + provider.sort: pricePrice-weighted (you opted out)
With tools + model suffix :floorPrice-weighted (you opted out)

Example

{
  "model": "openai/gpt-5.4",
  "messages": [{"role": "user", "content": "Get the weather in Shanghai"}],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {"type": "string"},
            "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
          },
          "required": ["city"]
        }
      }
    }
  ]
}
With tools present, Auto Exacto is active. ARouter picks the provider endpoint with the highest tool-calling quality score for this model, not necessarily the cheapest one.

Opting Out

Three ways to disable Auto Exacto and fall back to price-based routing: 1. Explicit price sort:
{
  "provider": {"sort": "price"},
  "tools": [...]
}
2. Use the :floor variant:
{"model": "openai/gpt-5.4:floor", "tools": [...]}
3. Explicit provider order:
{
  "provider": {"order": ["OpenAI", "Azure"]},
  "tools": [...]
}