✅ Now That Sonnet 5 Beats Opus on Some Benchmarks, How Do You Actually Choose?
Sonnet 5's Terminal-Bench win over Opus 4.8 complicates what used to be a simpler rule of thumb ("Opus for hard problems, Sonnet for everything else"). A more useful framing post-launch: pick based on task shape, not a blanket tier preference.
- Long, autonomous, tool-heavy runs (terminal orchestration, multi-step agentic workflows) — Sonnet 5 is now a legitimate first choice, not just a cost-saving fallback.
- Deep single-shot reasoning (a hard proof, an ambiguous architecture decision with no clear iterative feedback loop) — Opus 4.8 still generally has the edge where the benchmarks show it does.
- When in doubt, benchmark your own workload — published benchmarks are directional, not a substitute for testing against your actual task distribution, especially now that the gap between tiers has narrowed enough that general advice matters less.
Claude Sonnet 5
Claude Opus 4.8
model selection
benchmarks
✅ A Simple Pattern for Routing Requests to the Cheapest Model That Works
With the pricing gap between Sonnet and Opus tiers now wider than the capability gap on many tasks, a routing layer that classifies request difficulty before picking a model pays for itself quickly at scale. A minimal version: run a fast, cheap classification pass (even Haiku-tier) to estimate task complexity, then route accordingly.
def route_model(task_complexity_score):
if task_complexity_score < 0.3:
return "claude-haiku-4-5"
elif task_complexity_score < 0.7:
return "claude-sonnet-5"
else:
return "claude-opus-4-8"
Start simple, tune with real data
Don't over-engineer the classifier initially — a handful of heuristics (request length, presence of code, keyword matching for "complex" task types) gets most of the value. Once you have production data, replace heuristics with observed failure rates per tier to tune the routing thresholds properly.
model routing
cost optimisation
Claude API
architecture pattern