Figures on this page were verified 31 August 2026 against the providers' own documentation. Pricing, context windows and rate limits change without notice, so confirm any number against the provider before you rely on it. Tell us if something here is out of date.
Most systems send every request to one model, and that single decision is usually the largest avoidable line on the bill. Classification, extraction and routing do not need a frontier model. Reserve the expensive one for work where a wrong answer is expensive, and route everything else down.
Route on consequence, not on difficulty
The useful question is not “is this task hard?” It is “what does a wrong answer cost?” A task can be trivial and still deserve the best model if the output goes straight to a customer. A task can be subtle and still suit a cheap model if a human reviews it or the pipeline validates it.
| Task | Cost of being wrong | Tier |
|---|---|---|
| Intent classification into fixed labels | Low, schema-constrained | Cheapest |
| Field extraction from documents | Low, validated downstream | Cheapest |
| Routing to the right handler | Low, recoverable | Cheapest |
| Summarising for internal review | Moderate, a human reads it | Mid |
| Drafting content a person edits | Moderate | Mid |
| Multi-step agentic work with tools | High, errors compound | Top |
| Anything shown to a customer unreviewed | High | Top |
Agentic work belongs at the top for a reason that is easy to miss: errors compound. A model that is right 95% of the time per step is right about 60% of the time across ten steps. Saving on the model and paying for ten retries is a false economy.
What the spread is worth
The gap between tiers is large enough to change architecture decisions.
| Model | Input $/M | Output $/M | Blended 3:1 |
|---|---|---|---|
| Claude Opus 5 | $5 | $25 | $10.00 |
| Claude Sonnet 5 | $2 | $10 | $4.00 |
| Claude Haiku 4.5 | $1 | $5 | $2.00 |
| GPT-5.6 Luna | $0.20 | $1.20 | $0.45 |
That is a 22x spread between the top and bottom rows. If 80% of your traffic is classification currently going to a frontier model, moving it down is not a marginal saving, it is most of the bill.
Implement the router as configuration
ROUTES = {
"classify": "claude-haiku-4-5",
"extract": "claude-haiku-4-5",
"summarise": "claude-sonnet-5",
"agent": "claude-opus-5",
}
DEFAULT = "claude-sonnet-5"
def model_for(task: str) -> str:
return ROUTES.get(task, DEFAULT)Keeping this in one table rather than scattered through call sites means you can re-tier the whole system in a single commit when prices or models change, which on current release cadence is every few months.
Test the downgrade before you ship it
Do not move a task down on intuition. Take a hundred real inputs, run both models, and compare against the outcome you care about, which for constrained tasks usually means exact match against a label or schema. If the cheap model matches on 98 of 100, the saving is real. If it matches on 85, you have moved cost from the API to your support queue.
Run that comparison through the batch API at half price, since nothing is waiting on it. And before choosing a tier at all, price your real volumes in the cost calculator rather than assuming which model dominates the bill, because it is often not the model.
Frequently asked questions
How do I decide which model a task needs?
Route on the cost of being wrong rather than on how hard the task looks. A trivial task going straight to a customer may deserve the best model; a subtle task that a human reviews or a schema validates usually does not.
Why do agents need the strongest model?
Because errors compound. A model that is right 95% of the time per step is right only about 60% of the time across ten steps, so saving on the model and paying for repeated retries is a false economy.
How much is there to save?
The spread between the top and bottom of the current lineup is about 22x on blended price. If most of your traffic is classification going to a frontier model, moving it down is not a marginal saving, it is most of the bill.



