The cheap model is only cheap for half your tasks
Most of us pick a model the same way: read a leaderboard, pick the best one we can afford, ship it. Then the bill arrives and the "cheap" model turns out not to be the cheap one. The reason is that there is no such thing as a cheap model. There is only a model that is cheap for the shape of your traffic — and the ranking reorders when the shape changes. Quick vocabulary, because the whole argument lives in two words. A token is roughly ¾ of a word; models bill per million of them. Input tokens are what you send (prompt, files, chat history); output tokens are what the model writes back. They have different prices, and the gap between them is not the same for every model. The number you don't have yet Every model's price is two numbers, and every vendor publishes the ratio between them without commenting on it. Here it is, list prices per 1M tokens, snapshot taken 12 Aug 2026: Model Input $/1M Output $/1M Output is gemini-3.1-flash-lite 0.25 1.50 6× input grok-4.3 1.25 2.50 2× input claude-haiku-4-5 1.00 5.00 5× input gemini-3.5-flash 1.50 9.00 6× input claude-sonnet-5 2.00 10.00 5× input Look at row two. Grok 4.3 charges only twice as much for writing as for reading, where everyone else charges five or six times. That single number decides whether it is expensive or a bargain — and which one it is depends entirely on you. So measure your own ratio before you compare anything. Every OpenAI-compatible response already carries it: r = client.chat.completions.create(model=MODEL, messages=msgs) u = r.usage print(u.prompt_tokens, u.completion_tokens) # add it up over a few hundred real requests, then: def cost(price_in, price_out, tok_in, tok_out): return tok_in / 1e6 * price_in + tok_out / 1e6 * price_out print(cost(1.00, 5.00, total_in, total_out)) # claude-haiku-4-5 print(cost(1.25, 2.50, total_in, total_out)) # grok-4.3 Same two models, opposite verdict Take Haiku 4.5 and Grok 4.3 and run them through two ordinary jobs, per 1,000 requests, at the list prices above. Classification — you send 4,000 tokens of document and get back one word (50 tokens). Almost all of the bill is reading. claude-haiku-4-5: 4M × $1.00 + 0.05M × $5.00 = $4.25 grok-4.3: 4M × $1.25 + 0.05M × $2.50 = $5.12 Haiku wins by 17%. Now the same two models on code generation — 1,500 tokens in, 2,500 tokens out. Now almost all of the bill is writing. claude-haiku-4-5: 1.5M × $1.00 + 2.5M × $5.00 = $14.00 grok-4.3: 1.5M × $1.25 + 2.5M × $2.50 = $8.12 Grok wins by 42%. Nothing changed except the shape of the traffic. Any blog post that tells you which model is cheapest, without asking what your job looks like, is guessing. When the upgrade is nearly free The same arithmetic works in the other direction, and this is the part that surprised me. Compare gemini-3.5-flash ($1.50 / $9.00) with claude-sonnet-5 ($2.00 / $10.00). On that RAG workload — 8,000 in, 700 out, per 1,000 requests — Flash costs $18.30 and Sonnet costs $23.00. You are one quarter away from a model in a completely different class, while the word "flash" in the name suggests you are saving a fortune. Then add the multiplier nobody puts in the spreadsheet: retries. If the cheap model fails one call in five and you re-run those on the expensive one, you pay for the cheap attempt and the expensive one. At a 20% failure rate that Flash job is really $18.30 + 20% × $23.00 = $22.90 — the discount is gone, and you also shipped worse latency. Prices below list change the same arithmetic without changing its shape. I work on altrouter.ai, which bills the same vendor models under list — Claude Sonnet 5 at $8.50 per 1M output against the official $10.00, Grok 4.3 at $2.12 against $2.50 — so the crossover points move, but you still have to know your own ratio to find them. It also does not host embedding models, and no discount will rescue a model that keeps failing your task. The actual decision order Measure prompt_tokens / completion_tokens on a few hundred real requests. This takes ten minutes and everything else depends on it. If input dominates (10:1 or more), rank candidates by input price only. Output price is noise; ignore the headline number everyone quotes. If output dominates (below 2:1), rank by output price only — and specifically look for models with a low output-to-input multiple. Price the next tier up on your own mix before assuming you can't afford it. If it lands under ~1.5× and it removes a retry, it is cheaper, not dearer. Re-run this per endpoint, not per app. Your classifier and your code generator are different workloads and deserve different models. What this doesn't solve This is arithmetic about price, not about quality. It will not tell you whether Grok 4.3 writes code you'd merge — only you can judge that, on your tasks. It ignores latency, rate limits, and prompt caching, which can each move the answer more than the price gap does. And the numbers are a snapshot from 12 Aug 2026; every one of them will be stale within a quarter, though the method won't be. Pick the model for the task, not for the app. And before you argue about which one is cheaper, go print your two usage numbers — the argument is usually already settled by them.
This is a summary aggregated from Dev.to. Read the complete article on the original site:
Read full article at Dev.to