The Claude lineup is priced for exactly this pattern. Per million tokens at list: Claude Haiku 4.5 costs $1 input / $5 output; Claude Sonnet 5, $3/$15 standard ($2/$10 introductory through August 31, 2026); Claude Opus 4.8, $5/$25; Claude Fable 5, $10/$50. That is a 5x spread between Haiku and Opus 4.8 and 10x to Fable 5 — on both sides of the meter. If 60% of your traffic is routine (short extraction, formatting, classification, simple Q&A) and it currently rides on Opus 4.8, routing it to Haiku cuts that slice of the bill by 80%.
Rules first, classifier second
Start with deterministic rules, because they cost nothing per request and never misfire randomly. Task type, input length, source channel, and customer tier are usually known before any model is called: "metadata extraction goes to Haiku," "anything from the legal review queue goes to Opus," "inputs over 100k tokens skip Haiku" (Haiku 4.5 has a 200K context window versus 1M for the current Sonnet, Opus, and Fable models — a hard routing constraint, not a preference).
When rules can't tell — free-form user requests, mixed-topic tickets — add a classifier call, and make it a Haiku call. A short classification prompt of roughly 500 input tokens returning a one-word label (~10 output tokens) costs about $0.0005 + $0.00005 ≈ $0.00055 at Haiku list prices. Compare that with what it decides: a typical 3,000-input / 1,000-output task costs $0.040 on Opus 4.8 versus $0.008 on Haiku. Every task correctly kept off Opus saves ~$0.032 — around 60 times the classifier's own cost — so the router pays for itself if it usefully downgrades even a small fraction of traffic.
from anthropic import AnthropicBedrockMantle
client = AnthropicBedrockMantle(aws_region="us-east-1")
ROUTES = {"simple": "anthropic.claude-haiku-4-5-20251001-v1:0",
"complex": "anthropic.claude-opus-4-8"}
def dispatch(task_text: str) -> str:
verdict = client.messages.create(
model="anthropic.claude-haiku-4-5-20251001-v1:0", max_tokens=5,
system=("Label this task 'simple' (extraction, formatting, "
"short factual Q&A) or 'complex' (multi-step reasoning, "
"long synthesis, high-stakes analysis). Reply one word."),
messages=[{"role": "user", "content": task_text[:2000]}],
)
label = verdict.content[0].text.strip().lower()
return ROUTES.get(label, ROUTES["complex"])
Two design choices in that snippet matter. Unknown labels fall back to the capable model — misrouting hard work to a cheap model costs quality, while the reverse only costs money. And the classifier sees a truncated preview, keeping its own cost flat regardless of task size.
Add an escalation path
Routing does not have to be right the first time. Let Haiku attempt borderline tasks, validate the result mechanically — schema-valid JSON (structured outputs are supported across platforms), required fields present, your evaluator's score above threshold — and re-run failures on Sonnet or Opus. You pay twice for escalated tasks, so the pattern wins when the escalation rate is modest: at the example prices, Haiku-then-Opus on failure beats Opus-always whenever fewer than ~80% of attempts escalate. Track the escalation rate; if it climbs, tighten the router instead of eating double calls.
Operational fine print
Caches are model-scoped. Switching models forces a full prompt-cache rebuild, so a router that bounces the same long context between models sacrifices cache reads (billed at 0.1x input). Route before building long context, and keep multi-turn sessions on one model.
Capability differences are real. Haiku 4.5 does not support adaptive thinking (it uses manual extended thinking), has a 64K max output versus 128K on the larger current models, and its knowledge cutoff is earlier. Validate per task type with your eval suite before flipping traffic — the routing decision should be backed by measured quality parity, not price alone.
Rate limits are per model. On the first-party API, Haiku 4.5 has its own rate-limit pool, so offloading to Haiku also relieves pressure on your Opus limits — a free capacity benefit. On Bedrock and Vertex, quotas are likewise tracked per model or model lineage.
Where to go next
The strategic view of the model ladder is in model tiering and the cost-per-quality tradeoff. Verify routing quality with evaluation and testing, and watch the savings land via savings measurement.