<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged benchmarks</title>
<link>https://coderlegion.com/tag/benchmarks</link>
<description>Powered by Question2Answer</description>
<item>
<title>How I tried to write an article about slow Chinese LLMs</title>
<link>https://coderlegion.com/24226/how-i-tried-to-write-an-article-about-slow-chinese-llms</link>
<description>&lt;p&gt;Recently, I've added a bunch of hype-monsters to my &lt;a rel=&quot;nofollow&quot; href=&quot;https://aiwerewolf.net&quot;&gt;AI Werewolf&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kimi K3&lt;/li&gt;
&lt;li&gt;Qwen 3.8 Max, Qwen 3.7 Plus, Qwen 3.7 Flash&lt;/li&gt;
&lt;li&gt;MiniMax M3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plus the ones I've had for a while&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DeepSeek V4 Pro and Flash&lt;/li&gt;
&lt;li&gt;GLM-5.2&lt;/li&gt;
&lt;li&gt;Sakana Fugu base and Ultra&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last one is Japanese, not Chinese, but it was in the news a month or two ago and it belongs in this story.&lt;/p&gt;
&lt;p&gt;I sat down to write about how slow Chinese models are. Because they are all annoyingly slow even with a small context. I had the numbers, the thesis wrote itself, and then... I discovered something I didn't expect.&lt;/p&gt;
&lt;h3 id=&quot;okay-let-me-go-straight-to-the-problem&quot;&gt;Okay, let me go straight to the problem&lt;/h3&gt;
&lt;p&gt;All Chinese official APIs are extremely slow. DeepSeek got better with their v4, the rest are just terrible. So slow that they are barely usable in a text game. No, seriously, take a look.&lt;/p&gt;
&lt;p&gt;Time to produce one four-sentence vote:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kimi K3&lt;/strong&gt;: 29 to 34 seconds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MiniMax M3&lt;/strong&gt;: 25 to 30 seconds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qwen 3.8 Max&lt;/strong&gt;: 25 to 27 seconds, and only because I capped its thinking. Uncapped it hit 100.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DeepSeek V4 Pro&lt;/strong&gt;: 14 to 22 seconds, the best of the group&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Same prompt, same afternoon: Claude 5 Opus answers in 5.9 seconds.&lt;/p&gt;
&lt;p&gt;I have a test which simulates the voting at the end of a game day. Some chat has happened, some players have already cast their votes, and now the model under test has to do the same. The prompt contains all of that: 36,000 characters, which works out to 8-13k tokens depending on the model's tokenizer. Not much, assuming those models have 1M contexts.&lt;/p&gt;
&lt;p&gt;More US/EU models:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Model &lt;/th&gt;&lt;th&gt;Time &lt;/th&gt;&lt;th&gt;Input &lt;/th&gt;&lt;th&gt;Output tokens &lt;/th&gt;&lt;th&gt;Avg cost&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;GPT-5.6 Luna &lt;/td&gt;&lt;td&gt;3.2-3.6s &lt;/td&gt;&lt;td&gt;12,124 &lt;/td&gt;&lt;td&gt;190-231 &lt;/td&gt;&lt;td&gt;$0.0020&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Mistral Large 3 &lt;/td&gt;&lt;td&gt;2.9-5.2s &lt;/td&gt;&lt;td&gt;8,175 &lt;/td&gt;&lt;td&gt;73-134 &lt;/td&gt;&lt;td&gt;$0.0042&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Claude Fable 5 &lt;/td&gt;&lt;td&gt;4.8-6.0s &lt;/td&gt;&lt;td&gt;13,027 &lt;/td&gt;&lt;td&gt;183-209 &lt;/td&gt;&lt;td&gt;$0.1399&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Gemini 3.6 Flash &lt;/td&gt;&lt;td&gt;4.6-7.1s &lt;/td&gt;&lt;td&gt;7,979 &lt;/td&gt;&lt;td&gt;297-532 &lt;/td&gt;&lt;td&gt;$0.0152&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GPT-5.6 Sol &lt;/td&gt;&lt;td&gt;6.7-7.3s &lt;/td&gt;&lt;td&gt;12,124 &lt;/td&gt;&lt;td&gt;150-156 &lt;/td&gt;&lt;td&gt;$0.0471&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Claude 5 Opus &lt;/td&gt;&lt;td&gt;5.9-7.8s &lt;/td&gt;&lt;td&gt;13,027 &lt;/td&gt;&lt;td&gt;220-387 &lt;/td&gt;&lt;td&gt;$0.0726&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Gemini 3.1 Pro &lt;/td&gt;&lt;td&gt;11.6-12.1s &lt;/td&gt;&lt;td&gt;7,979 &lt;/td&gt;&lt;td&gt;821-940 &lt;/td&gt;&lt;td&gt;$0.0263&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Claude 5 Sonnet &lt;/td&gt;&lt;td&gt;6.8-14.8s &lt;/td&gt;&lt;td&gt;13,027 &lt;/td&gt;&lt;td&gt;252-821 &lt;/td&gt;&lt;td&gt;$0.0464&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Grok 4.5 &lt;/td&gt;&lt;td&gt;10.0-14.8s &lt;/td&gt;&lt;td&gt;8,190 &lt;/td&gt;&lt;td&gt;428-607 &lt;/td&gt;&lt;td&gt;$0.0149&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Mistral Medium 3.5 &lt;/td&gt;&lt;td&gt;2.9-35.0s &lt;/td&gt;&lt;td&gt;8,175 &lt;/td&gt;&lt;td&gt;57-109 &lt;/td&gt;&lt;td&gt;$0.0128&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Worth staring at the input column for a second. The same 36,000 characters is 7,979 tokens to Gemini, 8,175 to Mistral, 12,124 to OpenAI and 13,027 to Claude. Claude is billing me for 63% more prompt than Google is, for the identical text, before anyone has thought about anything.&lt;/p&gt;
&lt;p&gt;Frontier models sit in the 3-7 range. Grok is lagging behind. Mistral is weird - their Large is way faster than the newer Medium. Gemini Pro is also not great - Google, where are your TPUs?&lt;/p&gt;
&lt;p&gt;Mistral Medium deserves its own note. Seven runs of the same prompt across one day: 3.3s, 3.6s, 24.1s, 35.0s, 27.9s, 11.1s, 2.9s. Output was 57 to 109 tokens every single time. That's their infrastructure having a day. Whichever single measurement I had taken, it would have been wrong about this model.&lt;/p&gt;
&lt;p&gt;Now the other group.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Model &lt;/th&gt;&lt;th&gt;Time &lt;/th&gt;&lt;th&gt;Input &lt;/th&gt;&lt;th&gt;Output tokens &lt;/th&gt;&lt;th&gt;Avg cost&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Qwen3.7 Flash * &lt;/td&gt;&lt;td&gt;8.4-10.5s &lt;/td&gt;&lt;td&gt;8,216 &lt;/td&gt;&lt;td&gt;1,093-1,174 &lt;/td&gt;&lt;td&gt;$0.0004&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GLM-5.2 &lt;/td&gt;&lt;td&gt;16.4-21.2s &lt;/td&gt;&lt;td&gt;8,150 &lt;/td&gt;&lt;td&gt;1,111-1,406 &lt;/td&gt;&lt;td&gt;$0.0138&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DeepSeek V4 Pro &lt;/td&gt;&lt;td&gt;14.4-22.2s &lt;/td&gt;&lt;td&gt;8,164 &lt;/td&gt;&lt;td&gt;773-1,392 &lt;/td&gt;&lt;td&gt;$0.0009&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Qwen3.8 Max * &lt;/td&gt;&lt;td&gt;25.4-27.3s &lt;/td&gt;&lt;td&gt;8,250 &lt;/td&gt;&lt;td&gt;1,120-1,159 &lt;/td&gt;&lt;td&gt;$0.0175&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;DeepSeek V4 Flash &lt;/td&gt;&lt;td&gt;13.3-30.1s &lt;/td&gt;&lt;td&gt;8,243 &lt;/td&gt;&lt;td&gt;990-2,275 &lt;/td&gt;&lt;td&gt;$0.0005&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;MiniMax M3 &lt;/td&gt;&lt;td&gt;25.3-30.4s &lt;/td&gt;&lt;td&gt;8,037 &lt;/td&gt;&lt;td&gt;1,216-2,381 &lt;/td&gt;&lt;td&gt;$0.0045&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Qwen3.7 Plus * &lt;/td&gt;&lt;td&gt;12.9-31.0s &lt;/td&gt;&lt;td&gt;8,216 &lt;/td&gt;&lt;td&gt;693-1,158 &lt;/td&gt;&lt;td&gt;$0.0038&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Kimi K3 &lt;/td&gt;&lt;td&gt;28.9-33.5s &lt;/td&gt;&lt;td&gt;8,192 &lt;/td&gt;&lt;td&gt;744-1,103 &lt;/td&gt;&lt;td&gt;$0.0310&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;* Qwen rows are already capped at 1,024 reasoning tokens. Uncapped numbers are further down, and they are worse.&lt;/p&gt;
&lt;p&gt;The only one under 15 seconds needed a thinking cap to get there. The rest need 13 to 34 seconds to produce a four-sentence vote. Twelve bots take turns talking in my game. At 30 seconds a turn, one round of discussion is six minutes of watching a spinner.&lt;/p&gt;
&lt;p&gt;That was going to be the article.&lt;/p&gt;
&lt;h3 id=&quot;except-for-one-thing&quot;&gt;Except for one thing&lt;/h3&gt;
&lt;p&gt;Claude 4.5 Haiku was slow.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Model &lt;/th&gt;&lt;th&gt;Time &lt;/th&gt;&lt;th&gt;Input &lt;/th&gt;&lt;th&gt;Output tokens &lt;/th&gt;&lt;th&gt;Avg cost&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Claude 4.5 Haiku &lt;/td&gt;&lt;td&gt;19.7-42.0s &lt;/td&gt;&lt;td&gt;8,906 &lt;/td&gt;&lt;td&gt;1,769-4,095 &lt;/td&gt;&lt;td&gt;$0.0231&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Very slow. Why? Isn't it the smallest, the cheapest, and therefore the fastest model? Apparently, it's one of the slowest in the roster.&lt;/p&gt;
&lt;p&gt;What is going on there?&lt;/p&gt;
&lt;h3 id=&quot;the-pipes-are-fine&quot;&gt;The pipes are fine&lt;/h3&gt;
&lt;p&gt;My first guess was - the hardware. The US has better hardware, right? And its servers are closer - less network latency.&lt;/p&gt;
&lt;p&gt;Well, not really. Divide output tokens by seconds and you get a rough throughput per call, prefill included, across every run I have of each:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qwen3.7 Flash: 104-145 tokens/s&lt;/li&gt;
&lt;li&gt;Claude 4.5 Haiku: 90-98 tokens/s&lt;/li&gt;
&lt;li&gt;DeepSeek V4 Flash: 73-76 tokens/s&lt;/li&gt;
&lt;li&gt;Gemini 3.1 Pro: 70-78 tokens/s&lt;/li&gt;
&lt;li&gt;GLM-5.2: 57-74 tokens/s&lt;/li&gt;
&lt;li&gt;MiniMax M3: 48-78 tokens/s&lt;/li&gt;
&lt;li&gt;Claude 5 Opus: 37-49 tokens/s&lt;/li&gt;
&lt;li&gt;Qwen3.8 Max: 42-44 tokens/s&lt;/li&gt;
&lt;li&gt;Kimi K3: 26-35 tokens/s&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at DeepSeek V4 Flash. Three runs, 990 then 1,415 then 2,275 output tokens, and the generation rate never moves off 73-76 tokens/s. The connection is steady. The model just decided to write twice as much the third time, and the wall clock went from 13.3s to 30.1s.&lt;/p&gt;
&lt;p&gt;DeepSeek and MiniMax generate as fast as anything Google runs. They take five times longer because they write eight times more. Only Kimi and Qwen Max are also slow per token, and even for them the token count does most of the damage.&lt;/p&gt;
&lt;p&gt;Funny enough, Haiku types faster than every model here except Qwen 3.7 Flash, and it is the slowest model I have. 90 tokens a second, 42 seconds to answer. It isn't struggling to produce text. It produces four thousand tokens of it to say four sentences.&lt;/p&gt;
&lt;p&gt;So the whole table reduces to one number: how many tokens does the model decide to write before it answers a question that needs four sentences. Opus wrote 220 to 387. Haiku wrote 1,769 to 4,095.&lt;/p&gt;
&lt;h3 id=&quot;they-think-differently&quot;&gt;They think differently&lt;/h3&gt;
&lt;p&gt;All the latest Anthropic models support adaptive reasoning: the model reads the request and decides for itself how much thinking it deserves. Haiku doesn't, it's too old. Opus 5 outputs 220 to 387 tokens on this prompt, and that includes the answer and the reasoning. GPTs are the same, Sol outputs even less (~150 tokens). Gemini 3 does it too, though it lands on a bigger number - Google calls it dynamic thinking, and the old thinking budget is deprecated on that generation. Grok doesn't do it at all, it runs at fixed high effort, and that's why it takes 10-15 seconds.&lt;/p&gt;
&lt;p&gt;Every Chinese model in my roster reasons at close to full tilt on every request, whatever the request is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kimi K3&lt;/strong&gt; always runs at max effort. There is no supported way to turn it down. Roughly 85-90% of its output tokens are reasoning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Qwen&lt;/strong&gt; offers a &lt;code&gt;thinking_budget&lt;/code&gt; you set up front. The default is 4096, and that default is what produced the 100-second runs below.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DeepSeek and GLM&lt;/strong&gt; ship thinking-only entries with no depth control I can reach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MiniMax M3&lt;/strong&gt; advertises adaptive thinking, and this is the interesting one. It has the feature by name and still spent 1,216 to 2,381 tokens deciding who to vote for.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Every one of those is defensible if you're building a coding agent or answering a hard question. A reasoning model is graded on benchmarks where thinking longer nearly always scores better and nothing charges it for the tokens. Left alone, thinking hard on everything is the behavior you get, and it's the behavior that wins the leaderboard I'm not running.&lt;/p&gt;
&lt;p&gt;My game is a different animal. Waiting for 30 seconds for a bot to cast a vote is devastating. Imagine my frustration seeing this slowness in a basic chat, while the rest of the world is celebrating Chinese AI winning the race.&lt;/p&gt;
&lt;h3 id=&quot;the-lottery&quot;&gt;The lottery&lt;/h3&gt;
&lt;p&gt;Oh, and this performance is super inconsistent. Qwen 3.8 Max shows it best. Before I capped it, four runs of the identical prompt: 26.3s, 30.6s, 81.9s, 100.5s. The output tokens went along with it: 1,068, 1,149, 3,363, 4,169.&lt;/p&gt;
&lt;p&gt;Line those up and the generation rate is 40.6, 37.5, 41.1 and 41.5 tokens per second. Close to constant. The model was working at the same speed the whole time. It just decided, twice, that this question deserved three times more thought.&lt;/p&gt;
&lt;p&gt;Nothing changed between those runs. Same prompt, same day, same server, same everything. What moves is the chain of thought itself, and a chain of thought is a sequence the model writes one token at a time with a temperature attached. I run Qwen at 0.7. Early in the trace it either reaches for &quot;let me re-read what Kenji said on day one&quot; or it doesn't, and that one fork decides whether you get 1,100 tokens or 4,100.&lt;/p&gt;
&lt;p&gt;So it isn't a spread around some typical value, it's closer to two outcomes. Max's four runs: 1,068, 1,149, then 3,363, 4,169. Two short, two long, nothing in between. Qwen Flash did the same - 1,831, 1,897, 1,912, and then one run at 3,035. Haiku went 1,769, 2,635, 4,095.&lt;/p&gt;
&lt;p&gt;You can't provision for that. A model with a 27-second typical case and a 100-second bad case needs a timeout set for the bad case, and a player who has to sit through it.&lt;/p&gt;
&lt;h3 id=&quot;low-thinking-budget&quot;&gt;Low thinking budget&lt;/h3&gt;
&lt;p&gt;Qwen's API takes a &lt;code&gt;thinking_budget&lt;/code&gt;. I capped all three Qwen models at 1,024 reasoning tokens and Max settled into 25.4-27.3s. Worse reasoning, bearable latency. That is a trade I will take for a game where a human is sitting there waiting.&lt;/p&gt;
&lt;p&gt;The cap only helps the models that were over it. Flash was writing 1,831 to 3,035 tokens uncapped, so the cap cut it to 8.4-10.5s. Plus was already choosing 760 to 1,262, mostly under the limit, so capping it changed nothing and it still turned in a 31-second run.&lt;/p&gt;
&lt;p&gt;For comparison, Gemini 3.1 Pro writes about as much as capped Qwen Max, 821 to 940 tokens, and comes back in 11.6-12.1 seconds every single run. Similar output, less than half the wait, and none of the spread. Nobody set a budget on it either. It runs at high effort and picks that number itself.&lt;/p&gt;
&lt;p&gt;MiniMax M3 has no budget parameter at all. Its adaptive setting is the only throttle, and the only stronger lever is turning thinking off entirely. Kimi K3 has an undocumented K2-era &lt;code&gt;thinking: disabled&lt;/code&gt; toggle I don't want to build on. For those two, what you measure is what you get.&lt;/p&gt;
&lt;h3 id=&quot;the-money-is-the-good-news&quot;&gt;The money is the good news&lt;/h3&gt;
&lt;p&gt;The cheap ones are properly cheap:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qwen3.7 Flash: $0.0004 a vote&lt;/li&gt;
&lt;li&gt;DeepSeek V4 Flash: $0.0005&lt;/li&gt;
&lt;li&gt;DeepSeek V4 Pro: $0.0009&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DeepSeek V4 Flash wrote 990 to 2,275 output tokens against Mistral Large's 73 to 134, and it still cost eight times less.&lt;/p&gt;
&lt;p&gt;Then there is &lt;strong&gt;Kimi K3&lt;/strong&gt;. It bills $3 in and $15 out, the same rate card as Claude 5 Sonnet. Ignore the averages in the table for a moment, since one of K3's three runs caught a warm cache: on cold runs K3 cost $0.036 and $0.041, Sonnet $0.043 and $0.045. Near enough the same money for a reply that took four times longer, and 85-90% of K3's output tokens were reasoning that nobody ever sees. Note also that K3 is being billed for 8,192 input tokens where Sonnet is billed for 13,027 of the same text.&lt;/p&gt;
&lt;p&gt;The Qwen cap helped here too. Max's runaway 4,169-token think cost $0.0415 against $0.0229-0.0235 for a normal run. The lottery is a billing lottery as well as a latency one, and capping the thinking capped both.&lt;/p&gt;
&lt;p&gt;Caching works on all of them, which matters when you re-send a growing conversation every turn. Those wide cost ranges in the tables are this effect. I ran the sweep twice nine minutes apart, and on the second pass Kimi went from $0.0411 to $0.0163 and GLM from $0.0167 to $0.0083, with the same prompt and more output tokens than the first time.&lt;/p&gt;
&lt;p&gt;MiniMax reported cache hits on my very first probe call, before I had done anything deliberate about it. Qwen's implicit cache cut a real call from $0.0229 to $0.0115 between two runs. DeepSeek reads cached input at 2% of the normal rate, the deepest discount in my whole roster.&lt;/p&gt;
&lt;h3 id=&quot;and-then-there-is-fugu&quot;&gt;And then there is Fugu&lt;/h3&gt;
&lt;p&gt;Sakana's Fugu Ultra is Japanese, and it is seven times slower than the slowest model in that second table.&lt;/p&gt;
&lt;p&gt;It is so slow that my tests were timing out after 3 min of waiting for a response.&lt;/p&gt;
&lt;p&gt;The bill for one successful vote was $0.585. About 65% of that was &lt;code&gt;orchestration_input_tokens&lt;/code&gt; and &lt;code&gt;orchestration_output_tokens&lt;/code&gt;, internal drafts and re-reads that never reach me. I don't know what it is orchestrating, but this is not usable for me at all. Four times the price of Fable, and the waiting time is forever.&lt;/p&gt;
&lt;p&gt;Cache hit rate on the byte-identical prompt sent minutes earlier: zero. Not low. Zero.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Chinese models reason more - this is the main cause of their slowness.&lt;/li&gt;
&lt;li&gt;Per token they are slower too, but only by about 20-40%. Kimi K3 and Qwen 3.8 Max are the exceptions at roughly 2x, and Qwen 3.7 Flash is the fastest generator in the whole roster. The token count does most of the damage, not the throughput.&lt;/li&gt;
&lt;li&gt;Some Chinese models are cheap. Kimi K3 and Qwen 3.8 Max are not so cheap.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And this is why I hate benchmarks.&lt;/p&gt;
&lt;p&gt;One late addition: while I was writing this, DeepSeek emailed me about a billing adjustment. Continue using the service and you accept the new terms. So the cheapest column in my tables has a shelf life, though I doubt it moves enough to change the ranking.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/24226/how-i-tried-to-write-an-article-about-slow-chinese-llms</guid>
<pubDate>Thu, 06 Aug 2026 15:51:59 +0000</pubDate>
</item>
<item>
<title>5 coding-agent turns vs 1 command_run workflow: full example</title>
<link>https://coderlegion.com/24059/5-coding-agent-turns-vs-1-commandrun-workflow-full-example</link>
<description>&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I maintain &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Tura-AI/tura&quot;&gt;Tura&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is the simple idea. A normal coding agent may use five separate LLM turns for one predictable workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Turn 1 — inspect&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rg -n &quot;TODO|command_run|handler&quot; crates/
rg --files crates/runtime/src crates/tools/src
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 2 — apply the patch&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-diff&quot;&gt;- // old command handler logic
+ // patched command handler logic
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 3 — build&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo build -p runtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 4 — test&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo test -p runtime --lib
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 5 — lint&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo clippy -p runtime --all-targets
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overhead is not only the shell commands. The model wakes up five times and receives the growing conversation again.&lt;/p&gt;
&lt;p&gt;Tura exposes one macro tool called command_run, so the agent can send the same workflow once:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;name&quot;: &quot;command_run&quot;,
  &quot;arguments&quot;: {
    &quot;commands&quot;: [
      { &quot;step&quot;: 1, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;rg -n \&quot;TODO|command_run|handler\&quot; crates/&quot; },
{ &quot;step&quot;: 1, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;rg --files crates/runtime/src crates/tools/src&quot; },
      { &quot;step&quot;: 2, &quot;command_type&quot;: &quot;apply_patch&quot;, &quot;command_line&quot;: &quot;*** Begin Patch\n*** Update File: crates/tools/src/command_run/handler.rs\n@@\n-    // old command handler logic\n+    // patched command handler logic\n*** End Patch&quot; },
      { &quot;step&quot;: 3, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;cargo build -p runtime&quot; },
      { &quot;step&quot;: 4, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;cargo test -p runtime --lib&quot; },
      { &quot;step&quot;: 4, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;cargo clippy -p runtime --all-targets&quot; }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Build, test, and lint still run. The model simply does not need a new turn between predictable steps.&lt;/p&gt;
&lt;p&gt;In the full DeepSWE comparison, Balanced used &lt;strong&gt;35.8% fewer turns&lt;/strong&gt; and &lt;strong&gt;31.1% fewer tokens&lt;/strong&gt; than Codex CLI. Direct used &lt;strong&gt;69.1% fewer turns&lt;/strong&gt; and &lt;strong&gt;77.5% fewer tokens&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Tura-AI/tura&quot;&gt;https://github.com/Tura-AI/tura&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Benchmark: &lt;a rel=&quot;nofollow&quot; href=&quot;https://turaai.net/benchmark&quot;&gt;https://turaai.net/benchmark&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/24059/5-coding-agent-turns-vs-1-commandrun-workflow-full-example</guid>
<pubDate>Mon, 03 Aug 2026 21:04:04 +0000</pubDate>
</item>
<item>
<title>Parameterization Is Distillation</title>
<link>https://coderlegion.com/23619/parameterization-is-distillation</link>
<description>&lt;p&gt;&lt;em&gt;Climate modeling and AI compression are one engineering move with two names: replace an expensive process with a cheap function fit to its behavior, and inherit the consequences of what you threw away. One field has been living with the failure modes for fifty years.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In November 2020, a team of climate scientists published a result that should be pinned above the desk of everyone who has ever shipped a compressed model. Brenowitz and colleagues had trained two machine-learning emulators to stand in for expensive atmospheric physics inside a climate model: a neural network and a random forest. On the offline test set, the neural network won. It fit the held-out data better. It was, by the numbers every ML practitioner reports, the better model.&lt;/p&gt;
&lt;p&gt;Then they plugged both into the running atmosphere. Coupled into the climate model at 200-kilometer resolution, the random-forest version ran stably. The neural-network version crashed the simulated planet within seven days.&lt;/p&gt;
&lt;p&gt;The mechanism, when they traced it, is the part worth memorizing (Brenowitz et al., arXiv:2011.03081). Coupled to the model's wave dynamics, the network's small errors fed back into its own inputs, and the feedback loop marched the system into states unlike anything in the training data. The network then did what networks do on inputs far from their training distribution: something confidently wrong, which fed back again. The offline benchmark had tested the model in the one condition that could not reveal this failure, because a static test set never lets the model's outputs become its next inputs. The benchmark measures the open loop. Deployment is the closed loop. And in the closed loop, the more expressive model was the unstable one.&lt;/p&gt;
&lt;p&gt;If you build AI systems, that story should feel less like a curiosity from another field and more like a postcard from your own future. Because the two fields are, in a precise sense, doing the same thing.&lt;/p&gt;
&lt;h3 id=&quot;the-same-move-twice&quot;&gt;The same move, twice&lt;/h3&gt;
&lt;p&gt;A global climate model cannot resolve a cloud. Its grid cells run roughly 100 to 250 kilometers on a side; the convection that actually makes weather happens at the scale of meters, and the droplet physics at microns. Nor can you simply refine the grid: halving the horizontal spacing of a coupled model multiplies compute cost by roughly sixteen, because you get four times the cells and the timestep must shrink too, and a century-long high-resolution run already costs millions of CPU-hours. So climate modelers do something called parameterization: they replace the unresolvable fine-scale physics with a cheap function of the coarse variables the model does track. You do not simulate the cloud. You simulate what the cloud does to the grid cell.&lt;/p&gt;
&lt;p&gt;A frontier network cannot be cheaply served. So engineers distill: they train a small student to reproduce the input-output behavior of a large teacher. You do not reproduce the computation. You reproduce what the computation does to the output.&lt;/p&gt;
&lt;p&gt;Same epistemic move, made independently, under different names: replace an expensive process with a cheap function fit to its behavior, and inherit the consequences of what you threw away. The most famous production example in AI is DistilBERT, which kept 97% of BERT's language-understanding performance on GLUE with 40% fewer parameters and 60% faster inference (Sanh, Debut, Chaumond and Wolf, 2019). The right way to think about that artifact is not “a small BERT someone designed” but “BERT seen through a small aperture.” Climate modeling has been building small apertures onto expensive physics for fifty years.&lt;/p&gt;
&lt;p&gt;An honest boundary before going further: classical parameterizations are not distillation. A scheme like Arakawa-Schubert was derived by hand from physical reasoning, closer to an expert-written heuristic than to a student fit to a teacher. The identity gets tight in two places. One is the machine-learning era of climate modeling, roughly 2018 onward, where networks are literally trained on the outputs of high-resolution physics. The other is older and stranger, and it shows how deep the parallel runs.&lt;/p&gt;
&lt;p&gt;In 2001, two papers (Khairoutdinov and Randall in &lt;em&gt;Geophysical Research Letters&lt;/em&gt;; Grabowski in the &lt;em&gt;Journal of the Atmospheric Sciences&lt;/em&gt;) introduced what the field calls superparameterization: embed a small two-dimensional cloud-resolving model inside each grid column of the coarse global model, and have the coarse model query it for the effects of convection. Look at that architecture with machine-learning eyes. There is an expensive teacher that knows the fine-grained truth. There is a cheap student that runs at scale. The student consults the teacher for the signal it cannot compute itself. The modern ML variant simply swaps the embedded teacher for a neural network trained to mimic it. Two communities built the same scaffolding, named it different things, and did not notice each other for over a decade.&lt;/p&gt;
&lt;p&gt;When Hinton, Vinyals and Dean formalized distillation in 2015 (generalizing a 2006 idea from Buciluǎ, Caruana and Niculescu-Mizil), the heart of it was “dark knowledge”: train the student not on hard labels but on the teacher's softened probability distribution, which encodes the relative judgments the teacher makes about non-winning classes. Climate science even has an analog of that. A grid cell's mean temperature and humidity are its hard labels; the full distribution inside the cell (which parcels are saturated, how vertical velocity covaries with buoyancy) is the soft structure that determines whether convection actually fires. Schemes like SHOC (Bogenschutz and Krueger, 2013) and CLUBB explicitly track those subgrid probability distributions. Climate scientists were writing down dark knowledge years before machine learning handed them the word.&lt;/p&gt;
&lt;p&gt;So the thesis is not an analogy hunting for a rhyme. It is one engineering move with two names, and the useful consequence is this: climate science has been living with the failure modes of that move for decades, at planetary stakes, and has written down lessons AI compression is only now rediscovering.&lt;/p&gt;
&lt;h3 id=&quot;the-two-tails&quot;&gt;The two tails&lt;/h3&gt;
&lt;p&gt;Here is the lesson I find most valuable, because at first glance the two literatures flatly contradict each other.&lt;/p&gt;
&lt;p&gt;From climate: in 2018, Rasp, Pritchard and Gentine published a landmark result in &lt;em&gt;PNAS&lt;/em&gt;. Their neural-network parameterization, trained on a superparameterized model, produced a precipitation distribution that “closely matches that of SPCAM, including the tail,” where conventional hand-written schemes show “too much drizzle and a lack of extremes.” Read that carefully: the compressed model beat the hand-crafted one precisely on extreme events. Compression preserved the tail. (It was also around 20 times faster than the superparameterized physics it replaced, and roughly 8 times faster at the whole-model level once radiation is included. Not the four-orders-of-magnitude speedup that sometimes gets attached to this literature; the honest figures are impressive enough.)&lt;/p&gt;
&lt;p&gt;From AI: in 2019, Hooker, Courville, Clark, Dauphin and Frome asked what compressed networks forget, and found that compression's damage is not spread evenly. It concentrates on the underrepresented long tail of the data distribution: the rare, atypical examples. They even gave the casualties a name, Pruning Identified Exemplars. Compression destroyed the tail.&lt;/p&gt;
&lt;p&gt;Both results are solid. The resolution is that they concern two different tails, and the distinction is worth more than either finding alone.&lt;/p&gt;
&lt;p&gt;Rasp's preserved tail is a tail of the output distribution: extreme rainfall intensities. Those extremes were densely sampled in training, because the teacher simulated plenty of storms. The network had every opportunity to learn them, and it did. Hooker's lost tail is a tail of the input distribution: rare kinds of cases the model seldom saw. And the climate paper confirms this reading inside its own results, because the same network that nailed the rainfall extremes was, in the authors' words, “unable to generalize to much warmer climates.” Pushed about four kelvin beyond its training climate, it broke down. Familiar extremes: preserved, even mastered. Unfamiliar inputs: lost.&lt;/p&gt;
&lt;p&gt;Now say the alarming part plainly. The entire purpose of a climate model is to project a climate that has not happened yet. The compressed model was strongest exactly where the teacher was well-sampled and weakest exactly where the model exists to be used: the novel case. The same sentence transfers to AI word for word. A distilled student shines on the distribution it was fed and fails on the inputs nobody thought to include, and no aggregate benchmark number distinguishes the two, because the aggregate is dominated by the well-sampled middle. When someone tells you their compressed model “preserves performance on hard cases,” the question that matters is: which tail? Hard outputs it saw often, or hard inputs it barely saw? Those are different claims, and only one of them survives contact with novelty.&lt;/p&gt;
&lt;h3 id=&quot;lessons-from-a-field-that-tuned-first&quot;&gt;Lessons from a field that tuned first&lt;/h3&gt;
&lt;p&gt;Climate science also ran ahead of AI into a subtler trap: what happens when you optimize a lossy model against a benchmark for years.&lt;/p&gt;
&lt;p&gt;In 2013, Suzuki and colleagues showed something uncomfortable in &lt;em&gt;Geophysical Research Letters&lt;/em&gt;: a climate model could best match observed temperature trends while adopting parameter values that worst reproduced satellite-observed cloud microphysics. The system got the right answer through compensating errors, one wrong process canceling another. The definitive statement came in Hourdin and colleagues' 2017 survey of model tuning in &lt;em&gt;BAMS&lt;/em&gt;, which describes the compounding trap: improving a component of a heavily tuned model can make its measured skill worse, because a genuine fix breaks the web of compensations, and the harder a model has been tuned, the harder it becomes to demonstrate that any real improvement is one.&lt;/p&gt;
&lt;p&gt;Sit with that in AI terms. A model tuned hard enough to a metric becomes resistant to genuine improvement. Every real fix looks like a regression, because the errors it removes were load-bearing. The AI community is currently rediscovering pieces of this under the names benchmark contamination and eval overfitting; the climate literature stated the mechanism more precisely, a decade earlier. And it points at the same discipline: skill on the tuned metric is evidence about the tuning, not about the model.&lt;/p&gt;
&lt;p&gt;Which leads to the healthiest habit the climate community has and AI mostly lacks. The defining climate quantity, equilibrium climate sensitivity (the long-run warming from doubled CO2), is dominated by exactly these parameterizations, above all clouds. Across the current CMIP6 generation of models, the raw spread runs from 1.8 to 5.6 kelvin (Zelinka et al., 2020), wider than the previous generation's 2.1 to 4.7. Volodin (2021) showed that reasonable changes to cloud parameterization inside a single model could span 1.8 to 4.1 kelvin by itself. The students, in other words, disagree wildly, and more compute has not closed the gap, because the bottleneck was never the grid. Yet the IPCC's assessed range in AR6 is narrower than the raw model spread: likely 2.5 to 4.0. Notice the direction of that move. The assessment did not average the models and call it truth. It brought in observations, paleoclimate evidence, and process understanding, and used them to discount model behaviors it had independent reason to distrust. The models are students; the assessment refuses to grade the students by asking the students.&lt;/p&gt;
&lt;p&gt;Distillation pipelines rarely have this. The teacher defines the target, the benchmark is drawn from the teacher's world, and there is often no outside referent at all. Climate can discover its teacher was wrong, because the atmosphere gets a vote. Your compression pipeline usually cannot, and that asymmetry should make you humbler about what “97% of teacher performance” means.&lt;/p&gt;
&lt;p&gt;Honesty requires the counterweights. The seven-day crash is a discovered principle, not the state of the art: stable neural parameterizations now run across resolutions (Yuval and O'Gorman, 2020, among others), and NeuralGCM (Kochkov and colleagues, &lt;em&gt;Nature&lt;/em&gt;, 2024) tracks climate statistics for decades at 140-kilometer resolution, with realistic tropical-cyclone frequencies emerging on their own, at savings the authors describe as orders of magnitude. The field now has a five-billion-example benchmark, ClimSim, for exactly this hybrid work. And the compression story is not uniformly grim: Rasp's 2018 network conserved column moist static energy to a remarkable degree without ever being told to, a physical invariant emerging from imitation alone. Students sometimes learn structure nobody put in the curriculum. The point is not that compression fails. It is that fifty years of compressing the atmosphere taught one field exactly where the costs hide, and the map transfers.&lt;/p&gt;
&lt;h3 id=&quot;what-to-do-with-the-map&quot;&gt;What to do with the map&lt;/h3&gt;
&lt;p&gt;Four habits, each one a climate lesson wearing AI clothes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evaluate the closed loop, not just the open one.&lt;/strong&gt; The offline benchmark cannot see feedback failures, and agentic deployment (where a model's outputs become its own next inputs through tool calls, memory, and multi-step plans) is exactly the coupled simulation. Before trusting a distilled model in a loop, test it in the loop: long rollouts, self-conditioning, the model marinating in its own outputs. The better offline model can be the one that diverges.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Audit the two tails separately.&lt;/strong&gt; Ask of any compressed model: how does it do on rare but well-sampled outputs (probably fine), and how does it do on rare, undersampled inputs (this is where it quietly died). Build the second test set deliberately, because no aggregate metric will build it for you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ask the tuning question of your own evals.&lt;/strong&gt; How hard has this system been optimized against this metric, and if someone genuinely improved a component tomorrow, would the metric reward them or punish them for breaking the compensations? If you cannot answer, your benchmark score is measuring your tuning history, not your model.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep an outside referent.&lt;/strong&gt; The IPCC narrows the model range using evidence the models never saw. Find your equivalent: human evals off-distribution, live user outcomes, adversarial probes drawn from outside the teacher's world. A student graded only on the teacher's syllabus will look exactly as good as the syllabus, and no better, forever.&lt;/p&gt;
&lt;p&gt;Climate scientists did not choose to compress; the atmosphere forced them, and the forcing made them serious about the costs decades before AI made compression an elective convenience. That is the real gift here. When a field has no choice but to live inside its approximations, it learns precisely how approximations betray you. The parameterization literature is a fifty-year field manual for the thing your team started doing three years ago. Read it before your seven days are up.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;sources&quot;&gt;Sources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Brenowitz, N. D., Henn, B., McGibbon, J., Clark, S. K., Kwa, A., Perkins, W. A., Watt-Meyer, O., &amp;amp; Bretherton, C. S. (2020). “Machine Learning Climate Model Dynamics: Offline versus Online Performance.” arXiv:2011.03081 (Climate Change AI, NeurIPS 2020). The offline-winning neural network crashed the coupled 200-km run within 7 days while the random forest stayed stable; instability traced to linearized network behavior under wave dynamics and feedback-generated out-of-sample inputs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rasp, S., Pritchard, M. S., &amp;amp; Gentine, P. (2018). “Deep learning to represent subgrid processes in climate models.” &lt;em&gt;PNAS&lt;/em&gt;, 115(39), 9684–9689. “Closely matches that of SPCAM, including the tail”; conventional schemes' “too much drizzle and a lack of extremes”; ~20×/~8× speedups; “unable to generalize to much warmer climates” (+4 K); emergent conservation of column moist static energy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hooker, S., Courville, A., Clark, G., Dauphin, Y., &amp;amp; Frome, A. (2019). “What Do Compressed Deep Neural Networks Forget?” arXiv:1911.05248. Long-tail concentration of compression damage; Pruning Identified Exemplars.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Khairoutdinov, M. F., &amp;amp; Randall, D. A. (2001). Superparameterization. &lt;em&gt;GRL&lt;/em&gt;, 28 (doi:10.1029/2001GL013552).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Grabowski, W. W. (2001). Superparameterization. &lt;em&gt;J. Atmos. Sci.&lt;/em&gt;, 58.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hinton, G., Vinyals, O., &amp;amp; Dean, J. (2015). “Distilling the Knowledge in a Neural Network.” arXiv:1503.02531; lineage: Buciluǎ, C., Caruana, R., &amp;amp; Niculescu-Mizil, A. (2006). Dark knowledge and soft targets. Subgrid-PDF analog: Bogenschutz, P., &amp;amp; Krueger, S. (2013), SHOC, &lt;em&gt;JAMES&lt;/em&gt;; CLUBB.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sanh, V., Debut, L., Chaumond, J., &amp;amp; Wolf, T. (2019). “DistilBERT.” arXiv:1910.01108. 40% fewer parameters, 60% faster, ~97% of GLUE.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Suzuki, K., et al. (2013). “Evaluating cloud tuning in a climate model with satellite observations.” &lt;em&gt;GRL&lt;/em&gt; (doi:10.1002/grl.50874).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hourdin, F., et al. (2017). “The Art and Science of Climate Model Tuning.” &lt;em&gt;BAMS&lt;/em&gt;, 98(3) (paraphrased; the compounding-tuning trap).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Zelinka, M., et al. (2020). CMIP6 ECS spread. &lt;em&gt;GRL&lt;/em&gt; (doi:10.1029/2019GL085782): 1.8–5.6 K vs. 2.1–4.7 K previously.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Volodin, E. (2021): 1.8–4.1 K within one model.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IPCC AR6 WG1 Ch. 7: assessed ECS likely 2.5–4.0 °C.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kochkov, D., Yuval, J., Langmore, I., et al. (2024). “Neural general circulation models for weather and climate.” &lt;em&gt;Nature&lt;/em&gt;, 632, 1060–1066. Yuval, J., &amp;amp; O'Gorman, P. A. (2020). &lt;em&gt;Nature Communications&lt;/em&gt;: stable ML parameterizations. ClimSim (NeurIPS 2023 D&amp;amp;B): 5.7 billion training pairs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A student graded only on the teacher's syllabus will look exactly as good as the syllabus, and no better, forever.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23619/parameterization-is-distillation</guid>
<pubDate>Tue, 28 Jul 2026 03:56:17 +0000</pubDate>
</item>
<item>
<title>MD Anderson Spent at Least $62 Million on an AI It Never Tested Outside the Building</title>
<link>https://coderlegion.com/23613/md-anderson-spent-at-least-62-million-on-an-ai-it-never-tested-outside-the-building</link>
<description>&lt;p&gt;&lt;em&gt;The improvement you measured is a covariance, not a cause&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In 2013, MD Anderson Cancer Center began building a clinical decision support tool with IBM, using Watson technology. It was called the Oncology Expert Advisor. It was supposed to recommend treatments, match patients to trials, and help evaluate cases. Over roughly four years the project consumed at least $62 million.&lt;/p&gt;
&lt;p&gt;By September 2016 it was not in clinical use. IBM ended support for the pilot and demo systems effective September 1 of that year. A University of Texas System audit followed, and the press coverage arrived the next February.&lt;/p&gt;
&lt;p&gt;The number everyone quotes is the $62 million. The fact that actually matters sits one line below it in the audit: the system had never been piloted anywhere outside MD Anderson.&lt;/p&gt;
&lt;p&gt;That is not a statement about whether the software was any good. It is a statement about what could possibly have been known. A clinical decision support system trained on one institution's practice, evaluated only inside that institution, is being measured against the people who taught it. Agreement is the expected result. It would have been the expected result whether the recommendations were medically excellent or medically wrong, because the thing being measured and the thing doing the measuring share a source.&lt;/p&gt;
&lt;p&gt;There was no out-of-sample test to fail. That is what the $62 million bought.&lt;/p&gt;
&lt;h3 id=&quot;keep-two-findings-apart&quot;&gt;Keep two findings apart&lt;/h3&gt;
&lt;p&gt;The audit is easy to misread, and misreading it is the fastest way to get this story wrong.&lt;/p&gt;
&lt;p&gt;What the auditors found was a procurement problem. Contracts, approvals, compliance. Nearly all of the spending went ahead without board approval. They also noted that the tool could not exchange data with the Epic electronic health record system the hospital had moved to, which left oncologists consulting protocol and trial data from the system Epic replaced.&lt;/p&gt;
&lt;p&gt;What the auditors explicitly did not do was evaluate the model. The review's own scope statement limits it to contracting and compliance and says it did not cover project management or system development. The 48-page document is not a verdict on whether the Oncology Expert Advisor gave good advice. Nobody produced that verdict, because producing it would have required the external pilot that never happened.&lt;/p&gt;
&lt;p&gt;So there are two failures here and they are not the same failure. One is that money moved without the approvals it needed. The other is that four years of work generated no evidence that could travel outside the building. The first is a governance problem. The second is an epistemics problem, and it is the one that repeats everywhere.&lt;/p&gt;
&lt;h3 id=&quot;what-external-validation-looks-like-when-someone-actually-runs-it&quot;&gt;What external validation looks like when someone actually runs it&lt;/h3&gt;
&lt;p&gt;Watson for Oncology, a related but distinct product, was trained with Memorial Sloan Kettering and did get deployed to other institutions. So we can see what happens when the test finally runs.&lt;/p&gt;
&lt;p&gt;Concordance rates, meaning how often the system's recommendation matched the local tumor board, vary enormously by site and by cancer type. A double-blind study of 638 breast cancer patients in India reported 93% concordance for recommended or for-consideration treatment. Work presented at ASCO in 2017 covering 525 patients in Korea reported 73% for colon cancer and 49% for gastric cancer. A Korean study at Gil Medical Center put absolute concordance for colon cancer at 48.9%, rising to 65.8% when cases judged acceptable were included. For gastric cancer the same kind of analysis reported 41.5% at the recommended level and 87.7% at the for-consideration level.&lt;/p&gt;
&lt;p&gt;Read those numbers as a group rather than individually. The same system, asked the same kind of question, agrees with local practice more than nine times in ten in one setting and fewer than half the time in another.&lt;/p&gt;
&lt;p&gt;The interesting reading is not that the system was bad. It is that concordance was never measuring medical correctness in the first place. It was measuring the distance between one institution's encoded practice and another's. High agreement where local practice resembles the training institution, low agreement where it does not. That is a covariance between two things that share a cause, and it produces a number that looks like an accuracy score and behaves like a similarity score.&lt;/p&gt;
&lt;p&gt;An organization that only ever measured this metric at home would see a high number every time and would learn nothing at all.&lt;/p&gt;
&lt;h3 id=&quot;why-the-home-number-is-so-convincing&quot;&gt;Why the home number is so convincing&lt;/h3&gt;
&lt;p&gt;It would be comforting to file this under carelessness, but the internal number is persuasive for reasons that survive being smart and careful.&lt;/p&gt;
&lt;p&gt;The first is that it is not imprecise. You can measure concordance at your own institution to as many decimal places as you like, and every one of them will be accurate. The precision is real. It is attached to the wrong quantity. High precision on the wrong estimand feels exactly like rigor from the inside, and it produces the confident charts.&lt;/p&gt;
&lt;p&gt;The second is that the people doing the evaluating are the people who supplied the training signal. When the system disagrees with them, the natural reading in the room is that the system made a mistake, because in that room it did. Disagreement gets logged as error and corrected away. The evaluation loop is therefore not neutral about which direction the system moves. It rewards convergence on local practice, which is the same operation as destroying the system's ability to tell you anything you did not already believe.&lt;/p&gt;
&lt;p&gt;The third is that nobody in the building has an incentive to produce the number that would embarrass everyone in it. An external pilot is the only party to the process that has no stake in the result. That is not a cynical point about human character. It is a structural point about where disconfirming evidence comes from, and it is why &quot;we validated it internally&quot; is a description of a procedure rather than of evidence.&lt;/p&gt;
&lt;h3 id=&quot;the-same-bug-in-your-own-field&quot;&gt;The same bug, in your own field&lt;/h3&gt;
&lt;p&gt;If oncology feels far away, here is the version with a coefficient attached.&lt;/p&gt;
&lt;p&gt;In 2024 a team at Scale AI built GSM1k, a fresh benchmark designed to mirror the style and difficulty of GSM8k, the widely used grade school math benchmark. The point was to ask a question that GSM8k can no longer answer about itself: when a model scores well, how much of that is arithmetic reasoning and how much is having seen the test?&lt;/p&gt;
&lt;p&gt;Their paper, &quot;A Careful Examination of Large Language Model Performance on Grade School Arithmetic,&quot; reports accuracy drops of up to 8% when models move from GSM8k to the fresh set. Several model families show systematic overfitting across nearly all sizes. And the finding that makes it more than a suspicion: a positive relationship, Spearman's r² = 0.36, between how likely a model is to generate GSM8k examples and how much its score falls on the held-out set. Models that can recite the test do worse when the test changes.&lt;/p&gt;
&lt;p&gt;That coefficient is what turns an argument about principle into a measurement. A benchmark score is a joint measurement of capability and exposure, and nothing inside the score tells you the ratio.&lt;/p&gt;
&lt;h3 id=&quot;three-numbers-that-drifted-on-the-way-here&quot;&gt;Three numbers that drifted on the way here&lt;/h3&gt;
&lt;p&gt;While assembling this piece we ran into the thesis three separate times, in our own sources.&lt;/p&gt;
&lt;p&gt;The GSM1k accuracy drop is reported in a good deal of secondary coverage as 13%. The paper's abstract says up to 8%. We took the primary.&lt;/p&gt;
&lt;p&gt;The University of Texas audit is described in several retellings as posted on January 31, 2016, which cannot be right, because the events it audits run through September 2016. The posting date is January 31, 2017. A year fell off in transit.&lt;/p&gt;
&lt;p&gt;The split of the $62 million between IBM and the consulting firm that supported the project is given slightly differently across accounts, roughly $39 to $40 million to IBM and roughly $21 to $23 million to the consultancy, while the total holds steady. This is why the figure here is &quot;at least $62 million,&quot; which is the reporting's own hedge, rather than a precise sum.&lt;/p&gt;
&lt;p&gt;None of these drifts is scandalous. Each write-up was doing its honest best to report what a study or an audit found. That is the point. A number does not need anyone to lie about it in order to arrive somewhere false. It only needs to be copied a few times by people who did not go back to the source, and each copy is individually reasonable.&lt;/p&gt;
&lt;h3 id=&quot;the-counterweight-because-the-lazy-version-of-this-argument-is-wrong&quot;&gt;The counterweight, because the lazy version of this argument is wrong&lt;/h3&gt;
&lt;p&gt;The GSM1k paper also found that frontier models showed minimal signs of overfitting. They generalized to problems guaranteed to be absent from their training data.&lt;/p&gt;
&lt;p&gt;That matters, and leaving it out would be the same sin this essay is about. The honest claim is not that benchmarks are theater or that measured progress is fake. Real capability gains exist and the same study that quantifies contamination also demonstrates them.&lt;/p&gt;
&lt;p&gt;The claim is narrower and more useful: a measured improvement licenses a causal reading only when the thing you changed is the only thing that moved. When your evaluation shares a source with your training, whether that source is an institution, a market regime, or a scraped corpus, some fraction of the agreement you observe is an echo, and the score alone will not tell you how much.&lt;/p&gt;
&lt;h3 id=&quot;the-zero-that-was-a-base-rate&quot;&gt;The zero that was a base rate&lt;/h3&gt;
&lt;p&gt;Here is the version of this that nearly got past us this morning.&lt;/p&gt;
&lt;p&gt;Working a research question on July 27, 2026, we wanted a data-grounded read on whether a particular kind of skilled work had been touched by AI adoption. The Anthropic Economic Index publishes a labor market impacts release with task penetration and job exposure data, so we pulled the task-level file and looked at every calibration and metrology task in it.&lt;/p&gt;
&lt;p&gt;Every one read 0.0.&lt;/p&gt;
&lt;p&gt;That is a striking result. Measured AI penetration into this work, zero. It would have made an excellent line, and we were most of the way to writing it.&lt;/p&gt;
&lt;p&gt;Then we counted the rest of the file. By our count of that file, of 17,998 task statements only 1,354 carry a nonzero value. About 92.5% of the file reads 0.0. Our finding was the modal value of the dataset. We had measured the sparsity of a file and were about to report it as a fact about an occupation.&lt;/p&gt;
&lt;p&gt;The fix was to move to the occupation-level file, where the distribution actually discriminates: by our count, a mean of 0.0770 across 756 occupations with 54.4% sitting at exactly zero. There the relevant proxies read 0.0324 and 0.0. Still low, but now meaningfully low, because there was a spread to be low against.&lt;/p&gt;
&lt;p&gt;The zero did not change. What changed was knowing how ordinary a zero was in the population it came from.&lt;/p&gt;
&lt;h3 id=&quot;what-to-compute-before-you-believe-a-delta&quot;&gt;What to compute before you believe a delta&lt;/h3&gt;
&lt;p&gt;The check that catches all four of these cases is short, and it is worth running before the number goes in a slide.&lt;/p&gt;
&lt;p&gt;Ask what else moved during the window you measured. If the answer is anything other than &quot;only the thing I changed,&quot; the improvement is a covariance and you should say so out loud rather than let the reader assume otherwise.&lt;/p&gt;
&lt;p&gt;Ask what the base rate of your value is in the population it came from. An extreme reading means nothing until you know how common that reading is. A zero drawn from a file that is mostly zeros is a description of the file.&lt;/p&gt;
&lt;p&gt;Ask what a fresh sample would say. Not a held-out split of the same collection, which shares every bias the training data has, but a matched sample sourced independently, the way GSM1k was built to mirror GSM8k without inheriting it. If getting one is impractical, that is a real constraint and worth stating. What is not acceptable is spending four years and $62 million without ever noticing that you never had one.&lt;/p&gt;
&lt;p&gt;Three questions. None of them require new tooling, and any of them would have raised a hand somewhere in Houston in 2014.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;University of Texas System Administration, special review of MD Anderson's Oncology Expert Advisor procurement (48 pages; report November 2016, results posted January 31, 2017). Scope limited to contracting, procurement and compliance; explicitly excludes project management and system development.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Matthew Herper, &quot;MD Anderson Benches IBM Watson In Setback For Artificial Intelligence In Medicine,&quot; &lt;em&gt;Forbes&lt;/em&gt;, February 19, 2017.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;The Register&lt;/em&gt;, coverage of the MD Anderson audit, February 20, 2017.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hugh Zhang, Jeff Da, Dean Lee, Vaughn Robinson, Catherine Wu, Will Song, Tiffany Zhao, Pranav Raja, Charlotte Zhuang, Dylan Slack, Qin Lyu, Sean Hendryx, Russell Kaplan, Michele Lunati and Summer Yue (Scale AI), &quot;A Careful Examination of Large Language Model Performance on Grade School Arithmetic,&quot; arXiv:2405.00332, submitted May 1, 2024, revised November 22, 2024. Figures quoted from the abstract: accuracy drops of up to 8%, Spearman's r² = 0.36, frontier models showing minimal signs of overfitting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;S. P. Somashekhar et al., &quot;Watson for Oncology and breast cancer treatment recommendations: agreement with an expert multidisciplinary tumor board,&quot; &lt;em&gt;Annals of Oncology&lt;/em&gt;, 2018 (PMID 29324970). 638 breast cancer cases, Manipal Comprehensive Cancer Center, 2014–2016. Concordance 93%, where a recommendation counts as concordant if the tumor board's choice was designated &quot;recommended&quot; or &quot;for consideration&quot; by the system. The study included a blinded second review by the tumor board in 2016 of the cases where the two disagreed; earlier conference reporting of the same work quotes a lower pre-review figure.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ASCO 2017, Gachon University Gil Medical Center, Incheon: 525 patients treated 2012–2016 (340 colon, stage II–IV; 185 chemotherapy-naïve advanced gastric). Concordance 73% colon, 49% gastric.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Won-Suk Lee et al., &quot;Assessing Concordance With Watson for Oncology, a Cognitive Computing Decision Support System for Colon Cancer Treatment in Korea,&quot; &lt;em&gt;JCO Clinical Cancer Informatics&lt;/em&gt;, 2018 (doi:10.1200/CCI.17.00109, PMID 30652564). 656 patients, stage II–IV colon cancer, 2009–2016. Absolute concordance 48.9%; 65.8% (432 of 656) when cases judged acceptable are included.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Concordance Rate between Clinicians and Watson for Oncology among Patients with Advanced Gastric Cancer: Early, Real-World Experience in Korea (PMC6377977). 65 advanced gastric cancer patients, Gachon Gil Medical Center, 2016–2017. Concordance 41.5% (27 of 65) at the recommended level, 87.7% (57 of 65) at the for-consideration level.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anthropic Economic Index, labor market impacts release: &lt;code&gt;task_penetration.csv&lt;/code&gt; (task level) and &lt;code&gt;job_exposure.csv&lt;/code&gt; (occupation level). The task-level and occupation-level counts given above are our own counts of those two files as accessed on July 27, 2026, not figures published by the index.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Related reading from us&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://vibeagentmaking.com/blog/your-agent-eval-is-one-factor-at-a-time-and-fisher-proved-thats-blind/&quot;&gt;Your Agent Eval Is One-Factor-at-a-Time, and Fisher Proved That's Blind.&lt;/a&gt;&lt;/em&gt; That piece is about experimental design, changing one factor at a time versus factorial designs. This one is the observational counterpart: what you can and cannot infer when you did not run an experiment at all and only have a measured delta.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://vibeagentmaking.com/blog/the-answer-key-was-in-the-training-data/&quot;&gt;The Answer Key Was in the Training Data.&lt;/a&gt;&lt;/em&gt; Direct contamination, which is the sharpest special case of the mechanism described here.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://vibeagentmaking.com/blog/zillow-disabled-its-human-pricing-override/&quot;&gt;Zillow Disabled Its Human Pricing Override. Then It Wrote Down $407.9 Million.&lt;/a&gt;&lt;/em&gt; A governance failure rather than a validation failure. Different bug, comparable bill, and worth reading alongside this one precisely because the two are so often confused.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23613/md-anderson-spent-at-least-62-million-on-an-ai-it-never-tested-outside-the-building</guid>
<pubDate>Tue, 28 Jul 2026 00:31:19 +0000</pubDate>
</item>
<item>
<title>How to batch 5 coding-agent turns into 1 macro workflow</title>
<link>https://coderlegion.com/23099/how-to-batch-5-coding-agent-turns-into-1-macro-workflow</link>
<description>&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I maintain &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Tura-AI/tura&quot;&gt;Tura&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here is the simple idea. A normal coding agent may use five separate LLM turns for one predictable workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Turn 1 — inspect&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rg -n &quot;TODO|command_run|handler&quot; crates/
rg --files crates/runtime/src crates/tools/src
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 2 — apply the patch&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-diff&quot;&gt;- // old command handler logic
+ // patched command handler logic
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 3 — build&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo build -p runtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 4 — test&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo test -p runtime --lib
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Turn 5 — lint&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cargo clippy -p runtime --all-targets
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The overhead is not only the shell commands. The model wakes up five times and receives the growing conversation again.&lt;/p&gt;
&lt;p&gt;Tura exposes one macro tool called command_run, so the agent can send the same workflow once:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;name&quot;: &quot;command_run&quot;,
  &quot;arguments&quot;: {
    &quot;commands&quot;: [
      { &quot;step&quot;: 1, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;inspect files&quot; },
      { &quot;step&quot;: 2, &quot;command_type&quot;: &quot;apply_patch&quot;, &quot;command_line&quot;: &quot;apply patch&quot; },
      { &quot;step&quot;: 3, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;cargo build -p runtime&quot; },
      { &quot;step&quot;: 4, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;cargo test -p runtime --lib&quot; },
      { &quot;step&quot;: 4, &quot;command_type&quot;: &quot;shell_command&quot;, &quot;command_line&quot;: &quot;cargo clippy -p runtime --all-targets&quot; }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Build, test, and lint still run. The model simply does not need a new turn between predictable steps.&lt;/p&gt;
&lt;p&gt;In the full DeepSWE comparison, Balanced used &lt;strong&gt;35.8% fewer turns&lt;/strong&gt; and &lt;strong&gt;31.1% fewer tokens&lt;/strong&gt; than Codex CLI. Direct used &lt;strong&gt;69.1% fewer turns&lt;/strong&gt; and &lt;strong&gt;77.5% fewer tokens&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/Tura-AI/tura&quot;&gt;https://github.com/Tura-AI/tura&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Benchmark: &lt;a rel=&quot;nofollow&quot; href=&quot;https://turaai.net/benchmark&quot;&gt;https://turaai.net/benchmark&lt;/a&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23099/how-to-batch-5-coding-agent-turns-into-1-macro-workflow</guid>
<pubDate>Tue, 21 Jul 2026 02:57:59 +0000</pubDate>
</item>
</channel>
</rss>