Disclosure: independent site. Links to AgentRouter are referral links — we may earn a reward if you sign up, at no extra cost to you. We do not publish pricing or promo numbers we have not verified.

It's running the wrong model

You set one model, something else is answering. This is rarely a bug — it is usually a fallback chain doing its job silently, a second config file winning, or an auxiliary slot you didn't know existed. It matters because the wrong model can be far more expensive than the one you chose.

First, prove which model actually served the request

Do not rely on the tool's status line or its own claim about itself. Models are unreliable narrators of their own identity, and a status line usually shows configured intent rather than what was really called.

The authoritative answer is the model field in the API response, not anything the model says about itself in chat. Asking an agent 'which model are you?' produces a guess shaped by its training data, which is exactly the wrong tool for this job.

If your provider has a usage or activity dashboard, that is the second most reliable source: it shows which model ids were actually billed.

Read the model id straight from the response

curl -s "$BASE_URL/v1/chat/completions" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"model":"YOUR_CONFIGURED_ID","messages":[{"role":"user","content":"hi"}],"max_tokens":5}' \
  | python3 -c "import sys,json;d=json.load(sys.stdin);print('served by:', d.get('model'))"

# If 'served by' differs from what you asked for, the endpoint remapped it.

The four usual causes

CauseTellFix
A fallback chain firedCorrect model at first, switches after an error or under load.Find the fallback list in config and make every entry acceptable to you — including on cost.
Auxiliary model slotsMain answers look right, but spend is higher than expected.Summarizing, titling, and compression often have their own model settings that default to something expensive. Pin them to a cheap model.
Config precedenceWorks in one directory, not another.A project-level config overrides the global one. Check for a committed config in the repo.
Endpoint-side aliasingYou asked for an alias like 'latest' or a bare family name.Use a fully qualified id from the endpoint's own model list instead of an alias.
Why this is worth chasing down
  • A silent fallback to a premium model is a cost bug that produces no error message and no warning — you find it on the invoice.
  • Auxiliary slots are the most commonly missed cause because those calls never appear in the chat window.
  • The reverse also happens: a silent downgrade to a weaker model shows up as a mysterious quality drop with no error.
  • Environment variables can override file config in either direction depending on the tool. When in doubt, check both and prefer explicit configuration.

Make it stay fixed

The durable fix is to remove ambiguity rather than to correct one setting:

  1. Set every model slot explicitly — main, auxiliary, and fallback. Leave nothing on an implicit default.
  2. Use fully qualified model ids copied from the endpoint's own model list, never aliases or remembered names.
  3. Delete or narrow fallback entries you would not want to pay for.
  4. Add a startup check that prints the resolved model configuration, so a silent change becomes visible immediately.
  5. Re-verify with the curl above after any config change, since some tools cache resolved configuration until restart.

If you run agents regularly, a small script that reads your config and fails loudly when any slot resolves to an unexpected model pays for itself the first time it catches a silent fallback. This is a deterministic check — no AI required to verify what your own config says.

An endpoint that returns the model id you asked for

If the served id differs from the id you requested and it is not your config, the endpoint is substituting server-side — and you cannot fix that from your end. What you want instead is a published model list and a response that names what actually ran. AgentRouter documents its ids openly (gpt-5.6-sol, claude-opus-4-8, claude-opus-5 on the default group) so you can pin one exactly and verify with the curl above that the same id comes back.

Pin an exact model id →

Referral link — we may earn a reward if you sign up, at no extra cost to you. This is the same advice we would give with no link at all. Check their current pricing and model list on their own site; we deliberately do not restate numbers that change.

Related

Error not on this page?

The Setup Doctor walks through your tool, symptom, and setup and points at the likely cause — no account needed.

Diagnose my error →