blog
Newest isn't best: the model I picked is three generations old

I'm building a pipeline that translates books from English to Brazilian Portuguese. The translation has to follow a 46 rule style guide and keep every inline formatting marker where it was.
Before committing to a model, I ran the first chapter of a real book (67 blocks, about 6,900 words) through 14 models, then reran the interesting ones with corrected settings and added Google's current Flash lineup, including gemini-3.8-flash on the day it launched. That was 30 runs on chapter 1. Then every configuration with a recorded setting again on chapter 2, 27 more.
In total: 57 runs, 18 models, four vendors, one day, and about $35 in API spend. I initially estimated it at around $50 and 60 runs, and that's the number I posted on Twitter, but $35 is what the runs actually add up to.
The setup
Every run got the same input: the chapter split into blocks, 12 blocks per request as JSON, and the model asked to return JSON segments keyed by block id. That's how my production pipeline works. Same system prompt, temperature 0 where the API allows it, and the vendor's own recommended reasoning setting where there is one. Every call went straight to the vendor's raw HTTP API, nothing of mine in the loop.
I scored two things:
- Closeness: how much of the model's Portuguese matches the professional human translation of the same chapter. I strip the formatting codes, split both texts into words, and let Python's difflib find the longest runs of words the two have in common, the same way a diff tool finds the unchanged lines between two versions of a file. The score is the share of words that sit in the same sequence in both texts. A 68% means about two words in three are where the human put them.
- Completeness: how many of the blocks came back, and whether every formatting marker survived.
One caveat before the findings. Closeness is a lexical proxy against one human's word choices. If a model writes "desmentir" where the human wrote "refutar", that counts as a miss, even though both are fine for "disprove". If it moves a clause to the front of the sentence, that is a run of misses. So a translation can score lower just because it said the same thing in different words, and gaps under a point are noise. The real quality test is a blind read by the human translator, and that's the next step. Still, the proxy catches the models that drop text, break the contract, or drift too far from the register.
Each row is one run, each column one of the 88 blocks of chapter 2, and darker means closer to the human translation. Where one model struggles, most of the others do too: the light stripes cross the whole grid. The lightest column, block 68, is a Bible verse the human quoted from a different Portuguese Bible than the models used. Dashed cells are blocks a run never returned. The rows look alike because the models are alike: the passage changes the score three times more than the model does. That's the argument of this post in one picture. Quality is close enough that cost and time can decide.
What I found
1. Completeness
Every model that returned all 67 blocks of chapter 1 landed in a tight band, 62% to 68% closeness. No model was dramatically closer to the human than another. What actually separated them was whether a model silently dropped whole blocks while returning perfectly valid JSON.
Two did, at every setting I tried. Google's gemini-3.5-flash returned 55 of 67 blocks at its default setting and 63 of 67 with thinking off. OpenAI's gpt-5.6-luna returned 57 of 67 at medium and 50 of 67 at low. A big part of their low scores is simply the missing text. In production my validator would catch the gaps and re-request them, but a model that needs a safety net for a quarter of its output, as gpt-5.6-luna at low did, is not a model I want to build on.
Chapter 2 made it clearer. With thinking off, gemini-3.5-flash returned all 88 blocks and scored 69.5%. At its default thinking level it lost a whole chunk again, 76 of 88: the reply hit the output limit after about 134,000 thinking tokens and the JSON was cut mid-string. gpt-5.6-luna dropped blocks on both chapters at both settings, only two on chapter 2, and with the text present it scored 68.7% for $0.02.
2. What Gemini recommended vs what I measured
I asked Gemini which of its own models I should use. It recommended the newest one, gemini-3.8-flash, and told me to stay away from the cheap gemini-3.5-flash-lite: too weak for a 46-rule style guide, it said, the repair loops would eat any savings.
When I actually measured it, it was more or less the opposite. On chapter 1, gemini-3.5-flash-lite tied for the top of the table with claude-fable-5-1 at effort low, both at 68.4%. gemini-3.5-flash-lite came back with all 67 blocks and every marker intact, in 41 seconds, for $0.04. The recommended gemini-3.8-flash returned every block too, but it scored near the bottom of the complete runs: 64.5% with thinking low and 63.9% with thinking off.
Taking gemini-3.5-flash-lite as the 3.5 entry, closeness went down with every newer Flash generation, on both chapters and on their average:
Google's Flash lineup, two-chapter average. Closeness falls with every newer generation, and gemini-3.5-flash-lite, the cheapest of the four, is at the top. The line is the closeness limit from the ranking further down, 10% under the best run.
On chapter 2, gemini-3.8-flash scored 65.0% at low and 64.0% with thinking off, again the lowest complete runs except for gpt-5-mini, while gemini-3.5-flash-lite scored 68.2%, 3.2 points above it at 60% of the price. gemini-3.5-flash-lite came twelfth on that chapter, inside a cluster the metric can't order, and the gap to gemini-3.8-flash held.
So at least for this task, and for this Flash lineup, newer was not better. A model "engineered for long-horizon software engineering, autonomous agents, and complex enterprise workflows", in Google's own words, is not what I needed for constrained styling work, and the vendor's own chat assistant doesn't seem to know that.
3. Reasoning effort
I ran Anthropic's three current models at every effort level, and OpenAI's 5.6 tier at low against its medium results.
On Claude, closeness didn't move. claude-fable-5-1 scored 68.4 at low, 67.6 at medium and 67.7 at high on chapter 1, and 68.8, 68.6 and 69.0 on chapter 2. claude-opus-5 and claude-sonnet-5 gained at most a point at high, for about double the cost. What moved was the bill: output tokens, which include the thinking, more than halved from high to low, and cost and time with them. $2.68 and 545 seconds at high became $1.23 and 273 seconds at low, for the same closeness.
On OpenAI, gpt-5.6-terra and gpt-5.6-sol lost about a point at low on chapter 1, and on chapter 2 the gap was gone: gpt-5.6-terra 67.3 at low against 67.5 at medium, gpt-5.6-sol 67.7 against 66.8. So low is the setting there too.
The six models I ran at more than one setting, closeness on the left and book cost on the right. On Claude, going from low to high roughly doubles the price and moves closeness by less than a point. On OpenAI's 5.6 tier the step from low to medium adds 8 to 18% to the price for under a point. On gemini-3.8-flash, thinking low against off changed the price by a cent. The lines are the limits from the ranking further down: closeness 10% under the best run, cost five times the cheapest.
In these two chapters, on all three vendors, the extra thinking was billed output that did not improve the translation by more than a point. I'd start every reasoning model at the floor and measure up. In fairness, that is exactly what Anthropic's own docs say to do.
4. The whole field
All 27 configurations with a recorded setting, sorted by rank, with the average of the two chapters and cost and time scaled to a 200-page book, about 71,000 words at this book's density. Times are with the chunks run one after the other, as in the benchmark, so they are a ceiling. Setting is the thinking, reasoning or effort level, and the two highlighted rows are the picks. Three chapter 1 Anthropic runs where I hadn't logged the effort are left out.
Score is how far a run sits from the best complete run on each axis, measured in units of what I'd still accept on that axis, added up. The best on every axis would score 0.
My limits:
- closeness within 10% of the best average, which is about one word in fourteen
- cost up to 5x the cheapest
- time up to 10x the fastest
score = (68.6 - average) / 6.86 + (cost - $0.43) / $1.72 + (time - 7 min) / 63 minA term of 1 means at the edge of a limit. A run is within limits only if all three terms are 1 or less, and the limits column names the ones it failed.
Lower is better. Rank follows the score, so the lowest score is rank 1. The runs that dropped blocks are placed last, since part of their cost and time is text they never produced.
There are no weights, only those three limits. And it is still a value number, not translation quality: rank 4 means the fourth-best trade of closeness against cost and time, not the fourth-best Portuguese.
Google: closeness falls from gemini-3.6-flash to gemini-3.8-flash on both chapters, and gemini-3.5-flash-lite matches or beats every newer Flash at the lowest price. Only gemini-3.5-flash drops blocks. The chart is in finding 2.
Anthropic: effort moves the bill more than the score. Low and high sit within about a point of each other on both chapters, with low at about half the cost and time.
Anthropic at effort low. claude-fable-5-1 is the highest average in the whole benchmark, 0.3 above gemini-3.5-flash-lite, at 32 times the price.
OpenAI: the 5.6 tier at low matches medium on chapter 2. gpt-5.6-luna is the cheapest run in the benchmark and incomplete on both chapters.
OpenAI at medium. The 5.6 tier is a clear step up from gpt-5 and gpt-5-mini, and gpt-4.1 lands between them.
xAI: grok-4.3 beats its two successors on both chapters at a third to half of their time, and it's the only one of the three that can switch reasoning off.
xAI: grok-4.3 with reasoning off scored above its two newer siblings, which can't switch reasoning off.
How far each run sits from the best on each of the three limits, with the limit drawn as the line at 1. The top eleven clear all three. claude-fable-5-1 fails on cost alone, by a wide margin. gpt-5-mini fails on closeness and time. Two of the four runs at the bottom would pass every limit, but they dropped blocks.
Every configuration by two-chapter average closeness, best first. Every complete run except gpt-5-mini sits within five points of the best, which is the whole tie. The cost and time charts in the next section cover the same rows, and there the complete runs spread from $0.43 to $27.50 and from 7 minutes to an hour and a half.
Of the 23 complete runs, only two are not beaten on closeness, cost and time at once: gemini-3.5-flash-lite at minimal (68.3%, $0.43, 7 min) and claude-fable-5-1 at low (68.6%, $13.69, 51 min). claude-fable-5-1's edge is 0.3 points, inside the noise, at 32x the cost and 7x the time. Read gaps under a point as ties, and gemini-3.5-flash-lite is the only run nothing beats.
What I decided
The score is not that different between the top models. It's pretty much tied. On chapter 1 gemini-3.5-flash-lite came first at 68.4% and grok-4.3 sixth at 67.5%. On chapter 2 grok-4.3 came fourth at 69.0% and gemini-3.5-flash-lite twelfth at 68.2%. That looks like a big move, but gemini-3.5-flash-lite's own score moved 0.2 points, and everything from fourth to twelfth sits inside 0.8 points. So the operational numbers decide: cost and runtime.
What each configuration would cost for a 200-page book, on a log scale. The line is the cost limit, 5x the cheapest. gemini-3.5-flash-lite and grok-4.3 are the two cheapest runs that returned every block. The Flash line sits at $0.73, gpt-5.6-terra just under the limit, and claude-fable-5-1 at 30 to 60 times gemini-3.5-flash-lite.
The same book by time, with the chunks run one after the other. gemini-3.5-flash-lite is the fastest at 7 minutes, the Flash line is done inside 12, grok-4.3 takes 18. Six runs are past the 72-minute limit, and every Claude run at high effort is among them. A pipeline that sends chunks in parallel shortens every row; the order stays.
That's the pick:
- Primary:
gemini-3.5-flash-liteat thinking minimal. The cheapest and fastest complete run on both chapters, 68.4% and 68.2%, every block and marker intact: $0.43 and 7 minutes for a 200-page book. - Fallback:
grok-4.3at no reasoning. Top cluster on both chapters at 67.5% and 69.0%, every block on both, $0.65 and 18 minutes a book, and a different vendor, so one outage can't take both. - Two settings I'm carrying into the pipeline for Gemini. Always send the output-token limit yourself: the model's default is what
gemini-3.5-flash's thinking ran into when it cut a reply mid-string. And ask for JSON through the API's schema option, not the prompt: every completegemini-3.5-flash-literun had it on.
On those numbers gemini-3.5-flash-lite wins: 0.6 to 0.7x grok-4.3's cost and 2 to 3x its speed, with the same completeness and marker fidelity. The price gap is about 20 cents a book, and the speed gap is 11 minutes a book only with the chunks run one after the other. Sent in parallel, it's seconds per chapter.
Conclusion
Eighteen models, two chapters, one human translation to measure against, and the top of the table is a tie. The best complete runs sit inside a point of each other, and the heat map says why: the passage changes the score three times more than the model does. On closeness alone I couldn't pick.
So cost and time picked. gemini-3.5-flash-lite at thinking minimal returned every block on both chapters for $0.43 and 7 minutes a 200-page book. grok-4.3 with reasoning off did the same for $0.65 and 18 minutes, from a different vendor, so one outage can't take both. claude-fable-5-1 at high effort tied them on closeness at 64 times gemini-3.5-flash-lite's price.
Where the models did differ was not the Portuguese. Two of them dropped blocks. More effort bought price, not closeness. And Gemini's own recommendation, gemini-3.8-flash, lost to gemini-3.5-flash-lite, three generations older, on both chapters.
Closeness is still a lexical proxy, and the real test is a blind read by the human translator. That's the next step. Until then I'd read this ranking as tiers, not positions: the two chapters agreed on the tiers and shuffled the order inside them.
If you take one thing from this, take the method, not the pick: run the candidates on your own task, count what they finish before you grade how well they did it, begin at the cheapest effort, and let a person make the last call.
Photo by Patrick Fore on Unsplash