> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arouter.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Auto Exacto

> ARouter automatically re-ranks providers by tool-calling quality for requests that include tools. Disable it when you need predictable cost-based routing.

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 type                          | Routing strategy               |
| ------------------------------------- | ------------------------------ |
| No `tools`                            | Price-weighted (default)       |
| With `tools`                          | Auto Exacto (quality-ranked)   |
| With `tools` + `provider.sort: price` | Price-weighted (you opted out) |
| With `tools` + model suffix `:floor`  | Price-weighted (you opted out) |

## Example

```json theme={null}
{
  "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:**

```json theme={null}
{
  "provider": {"sort": "price"},
  "tools": [...]
}
```

**2. Use the `:floor` variant:**

```json theme={null}
{"model": "openai/gpt-5.4:floor", "tools": [...]}
```

**3. Explicit provider order:**

```json theme={null}
{
  "provider": {"order": ["OpenAI", "Azure"]},
  "tools": [...]
}
```

## Related

* [`:exacto` Model Variant](/en/guides/features/model-variants) — Explicitly enable quality-ranked routing for any request (not just tool calls)
* [Provider Routing](/en/provider-routing) — Full `provider` object reference
* [Tool Calling](/en/guides/features/tool-calling) — Tool calling guide
