Published Build3 min read
Cost Per Accepted Result Is the Only Model Price That Means Anything
A routing harness writeup makes the case that picking a winner after an eval is the wrong unit of decision. The interesting part is what it implies about your parser.
Written for builders.See today for builders

What happened
- A new model drops roughly every other week, and each release arrives with the same two claims: that it is cheaper and that it is better.
- The author's short version: a single winner-take-all model choice is usually wrong, and the fix is a tiny routing harness with per-task costs, not a bigger eval.
- Each time the author flipped a single config variable after an eval passed, one of three things happened within a month: the cheap model was not cheap on their workload because it needed twice the retries, longer prompts, or produced output the downstream parser rejected; the strong model was wasted on easy tasks such as renaming variables and writing docstrings; or a silent regression appeared in one task category, usually the one with the fewest eval cases, and was noticed only because a coworker noticed.
- The author's illustration of hidden cost is a model whose output the downstream parser rejects 12% of the time.
- The metric the author says matters is cost per accepted result: raw token cost divided by acceptance rate, measured per task type and model rather than per call.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
A dev.to writeup on post-eval routing argues that the decision after a model evaluation is not which model wins but which model gets which traffic, measured as cost per accepted result rather than price per token [2] [5]. That matters because every failure mode the author lists is invisible on a pricing page, and two of them are properties of your own code rather than the model's. The setup: a new model drops roughly every other week, each arriving with the same two claims, cheaper and better [1] - call it something like 26 release cycles a year to absorb [24]. According to the author, every time they responded to a passing eval by flipping a single config variable, one of three things happened within a month. The cheap model was not cheap on their workload, because it needed more retries, longer prompts, or produced output the downstream parser rejected. The strong model got spent on renaming variables and writing docstrings. Or a silent regression appeared in the task category with the fewest eval cases, and they found out because a coworker did [3]. The arithmetic is the whole argument. Cost per accepted result is raw token cost divided by acceptance rate [5], so a model that is 5x cheaper per token but passes your checks half as often is really 2.5x cheaper, before the engineering time spent babysitting retries [6]. The author's illustrative figure is a parser that rejects 12% of outputs [4]; at an 88% acceptance rate you are paying about 1.14x sticker, roughly a 14% overhead that never appears in a per-million-token comparison [23]. The instrumentation is deliberately dull: one JSONL line per attempt recording task type, model, prompt hash, input and output tokens, latency and an accepted boolean [7], then a weekly rollup grouped by task type and model that prints acceptance rate and call count [8]. Notably, the price table in the published code is left empty with a warning not to hardcode numbers you have not verified this month [9]. For middle-difficulty work the pattern is budget model first, escalate to the stronger model with the failure message included in the prompt [10]. Which puts the load on the acceptance check, and the author says so plainly: if you cannot write one for a task type, the routing decision for it is superstition, and keyword-and-length heuristics for summaries are named as the weakest check in the set [11] [12]. Three companion posts, all carrying a MonkeyCode product-outreach disclosure [22], describe what a weak boundary looks like. A quota hit truncates JSON, a proxy restart returns an HTML error page with the same 200, and a model can return valid JSON missing the one field your code reads [13]. A json.loads inside a try block catches neither [14]: when {"result": ...} becomes {"text": ...} after a model update, the lookup returns None and the code writes None into a production record [15]. The proposed contract probe checks transport, shape, cost and error behaviour, and fails with a reason so policy can tell a timeout apart from a schema change [16] [17]. It is explicitly not a quality evaluation [25]. A fourth post's parser tolerates extra keys but exits non-zero and prints nothing when a required one is missing [18]. Read those together and the coupling is uncomfortable: the acceptance rate in your routing log is partly a measurement of your validator's strictness. Tighten the schema and the budget model's measured cost goes up without the model changing. Worth watching: whether two to three weeks of real traffic is actually enough to fill the per-task table, which is the author's stated threshold [19]; and whether contract probes survive contact with CI, since running them on every build tests the provider's availability as much as your code, and flakiness trains people to ignore the signal [20].
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
A new model drops roughly every other week, and each release arrives with the same two claims: that it is cheaper and that it is better.
- [2]
The author's short version: a single winner-take-all model choice is usually wrong, and the fix is a tiny routing harness with per-task costs, not a bigger eval.
- [3]
Each time the author flipped a single config variable after an eval passed, one of three things happened within a month: the cheap model was not cheap on their workload because it needed twice the retries, longer prompts, or produced output the downstream parser rejected; the strong model was wasted on easy tasks such as renaming variables and writing docstrings; or a silent regression appeared in one task category, usually the one with the fewest eval cases, and was noticed only because a coworker noticed.
- [4]
The author's illustration of hidden cost is a model whose output the downstream parser rejects 12% of the time.
- [5]
The metric the author says matters is cost per accepted result: raw token cost divided by acceptance rate, measured per task type and model rather than per call.
- [6]
A model that is 5x cheaper per token but passes the acceptance checks half as often is only 2.5x cheaper in reality, and that is before counting the engineering time of babysitting retries.
Sources & coverage · 1 publisher
The reporting this story was synthesized from, earliest first. Every link goes to the original.
- dev.toRiley WuAug 12The Week After the Eval: A Cost-Aware Routing Harness for New Model Drops
Cited in this coverage: dev.to post by gitjs_8094
Cited in this coverage: dev.to post by datacpp_8185 (MonkeyCode product outreach)
Cited in this coverage: dev.to post by gitlab_3188 (MonkeyCode product outreach)
Cited in this coverage: dev.to post by hackrs_6393 (MonkeyCode product outreach)
Cited in this coverage: dev.to posts by datacpp_8185, hackrs_6393 and gitlab_3188
- dev.toDakota HuangAug 12From Six Questions to a Script: My 30-Minute Eval Harness for Every New Model Release

