The Only Benchmark That Matters Is Yours
In September 2026 OpenAI, Anthropic and Google each released new models within the same four weeks. Every release came with charts showing it ahead of the others. Those charts cannot all describe your workload, and none of them was measured on it. An eval is how you answer the question the leaderboards cannot: which model, at which settings, does your task best for the least money.
- You chose a model because it topped a leaderboard, and it underperforms on your data
- A new model is released every few weeks and you have no quick way to decide whether to switch
- You compare models by trying five prompts by hand and going with the one that felt better
- You know the price per token of each model but not the cost of a finished task
This article covers why public benchmarks mislead, how to build a model-selection eval, and what to measure besides accuracy.
Why Public Benchmarks Do Not Transfer
- Saturation. Once the leading models all score above 90% on a benchmark, the remaining differences are noise. Several well-known benchmarks are in this state.
- Contamination. Public test questions end up in training data. A high score can reflect memory as much as ability.
- Distribution.A benchmark measures a model on someone else's tasks, prompts and grading. Your documents, your instructions and your definition of a good answer are different.
- Settings. Published scores are usually taken at high reasoning effort with long outputs. You may be running at low effort with a latency budget.
Benchmarks are still useful as a filter. They tell you which three or four models are worth testing. They do not tell you which one to ship.
Building a Model-Selection Eval
- Collect representative tasks. Fifty to two hundred real inputs from your application, covering the common cases and the difficult ones.
- Define success for each task. Use a code check where possible, such as correct label, valid schema or passing test. Use a rubric scored by a model where it is not.
- Adapt the prompt for each model. A prompt tuned for one family often underperforms on another. Give each candidate a fair prompt, then compare best against best.
- Sweep the settings. Run each candidate at two or three effort levels. A cheaper model at higher effort, or a stronger model at lower effort, frequently beats the obvious configuration.
- Record more than accuracy. Capture tokens, cost and latency for every run, so the comparison is about the whole trade-off.
Measure Cost per Successful Task
Price per token is the wrong unit for comparing models. A cheaper model that needs a retry, a longer prompt or a second pass can cost more for each finished task than an expensive model that succeeds first time.
def summarise(runs):
"""runs: one dict per attempt, with keys passed, cost_usd, latency_s."""
successes = sum(r["passed"] for r in runs)
total_cost = sum(r["cost_usd"] for r in runs)
latencies = sorted(r["latency_s"] for r in runs)
return {
"pass_rate": successes / len(runs),
"cost_per_success": total_cost / max(successes, 1),
"p95_latency_s": latencies[int(len(latencies) * 0.95) - 1],
}| Record for every candidate | Why |
|---|---|
| Pass rate by category | An average hides the category a model is bad at |
| Cost per successful task | Includes retries, reasoning tokens and long prompts |
| Latency at the 95th percentile | Users notice the slow tail, not the median |
| Failure types | Refusals, format errors and wrong answers need different fixes |
| Model id, effort and prompt version | Without these the result cannot be reproduced |
Keep the Harness Ready
The value of a selection eval is that you can run it again. With a harness that takes a model id and a settings file, assessing a new release is an afternoon and not a project. That matters because models are retired as well as released: when a provider announces an end date for the model you use, the eval tells you which replacement is safe and what the prompt needs.
Re-run it on a schedule as well, about once a quarter and whenever a provider you depend on ships something new. Keep the results in a table over time. The trend shows whether a change is worth the migration effort.
1. Choosing from the leaderboard
Use public results to make a shortlist. Make the decision with your own tasks.
2. One prompt for every model
Reusing the incumbent's prompt gives the incumbent an advantage. Spend a little time adapting the prompt for each candidate.
3. Comparing at a single effort level
Effort changes both quality and cost substantially. A comparison at default settings misses the best configuration of each model.
4. Deciding on a difference inside the noise
Run each configuration more than once. If two candidates are within the run-to-run variation, they are tied on quality, and cost and latency should decide.
Key Takeaways
- Public benchmarks produce a shortlist. Your own eval makes the decision.
- Compare best against best, with a prompt adapted to each model and a sweep of effort levels.
- Use cost per successful task, not price per token.
- Report by category, with latency and failure types next to accuracy.
- Keep the harness runnable, because releases and retirements both force the question again.

