LLM Benchmark v4: the open source verdict (as of Oct 2026)

This is the wrap-up of benchmark v4. Since I started this round, there have been seven articles, first in the cloud and then pushing the same sabotage yardstick further and further away from it:

  • Part 1: why I rebuilt the benchmark from scratch for the third time, how the Rails app sabotaged with real CVEs works, and how much it cost.
  • Part 2: the original cloud ranking, with almost 40 models, six ties at the top and a free model beating half of the Claude lineup.
  • Opus 5.5, GPT-6 sol and luna, MiMo 2.6 and Grok 4.7: the next cloud batch. Opus 5.5 closed at 100, GPT 6 luna scored 95.5 for under a dollar per run, and Grok 4.7 regressed against its own predecessor.
  • The top open source LLMs on a B300: one rented GPU, 14 open models, and two of them, GLM 5.3 Flash and Qwen3.8 Flash-Next, tied at 92.5, on par with Sonnet 5.
  • Open source that only fits in 4x B300: the big models, most of them between 400 billion and 1 trillion parameters. DeepSeek V4.1 Flash tied the leader at 92.5 and the rest showed that size doesn’t buy vigilance.
  • Can my team fit in 4x B300/H200?: a real concurrency test. The same DeepSeek serves 32 comfortable sessions on the B300 pod and only 8 on the H200 one.
  • Consumer-grade open source on RTX 5090 or Strix Halo: Qwen3.8 Flash-Next scored 91 on a PC card with the Strata engine, at 159 tokens per second.

This article puts everything in a single table and answers the question left over: as of October 2026, is open source good enough?

The biggest benchmark I’ve ever run

v4 was, by far, the biggest round of testing I’ve ever done. That’s almost 70 complete runs of the same protocol, almost 60 different models, running on cloud APIs, on a rented B300, on a four-B300 pod, on an RTX 5090 and on a Strix Halo, plus a four-H200 pod just for the concurrency test.

And it was expensive. The first batch alone, the cloud one, went past 4 thousand dollars in nine days, counting credits and subscriptions. The single B300 cost about 270, and the 4x B300 and 4x H200 campaign took about another 2,100. Adding up what I can add up, it went past 6 thousand dollars, not counting machine hours at home.

I don’t think many people are going to reproduce this any time soon. If this material was useful to you, share it with whoever needs to decide between cloud, their own server or a local PC. All the code, prompts, logs and reports are open on my GitHub: akitaonrails/llm-coding-benchmark.

A refresher on the yardstick

The protocol is always the same. The model builds a Rails chat app in seven sprints, and between sprints a reviewer injects 14 security and correctness defects, some loud (a CVE in a gem, a key in the code), others silent (a cross-tenant leak, a wrong aggregate, a test tampered with to hide a backdoor).

The score goes from 0 to 100. A defect fixed unprompted counts at full weight; fixed only after I reveal there’s a problem, it counts 40%; never fixed counts zero. The tiers are A from 83 up, B from 73 to 82.5, C from 51 to 72.5 and D up to 50.

It’s a yardstick for code review vigilance. It measures whether the model notices sabotage while it works, and that is different from measuring who writes your whole system better.

The combined ranking

Every v4 run in a single table, commercial and open, cloud and my own hardware. When the same model ran in different places, it shows up more than once, because the place changes the score.

#ModelWeightsWhere it ranScoreTierCost per runtok/sMinutes
1GPT-6 AstraclosedCloud (Codex)100.0AUS$ 30.55—100
1Claude Opus 5closedCloud (Claude Code)100.0A~US$ 71 ¹—145
1Claude Fable 5closedCloud (Claude Code)100.0A~US$ 50 ¹—85
1Claude Opus 5.5closedCloud (Claude Code)100.0AUS$ 16.63 ¹—64
1GPT 5.6 solclosedCloud (Codex)100.0AUS$ 20.37—317
1GPT 5.6 terraclosedCloud (Codex)100.0AUS$ 9.52—80
1GPT 5.5closedCloud (Codex)100.0AUS$ 34.69—117
8Grok 4.6closedCloud (OpenCode)98.5AUS$ 13.00—67
9Claude Fable 5.1closedCloud (Claude Code)95.5A~US$ 51 ¹—133
9Sakana Fugu Ultra v2closedCloud (OpenCode)95.5AUS$ 122.01—294
9GPT 6 lunaclosedCloud (Codex)95.5A~US$ 0.84 ²—122
12GPT 5.6 lunaclosedCloud (Codex)95.0AUS$ 10.04—123
13Nex N2.5 Pro ⁴openCloud (OpenCode)94.0Afree—480
13GLM 5.3openCloud (ZCode)94.0Aflat plan—215
15DeepSeek V4.1 FlashopenCloud (OpenCode)92.5AUS$ 1.21—172
15DeepSeek V4.1 Flashopen4x B30092.5Apod at US$ 36/h174.8—
15GLM 5.3 Flash (NVFP4)open1x B30092.5AUS$ 21.96 ³142.0145
15Qwen3.8 Flash-Next (NVFP4)open1x B30092.5AUS$ 12.04 ³195.080
19MiMo V2.6 ProopenCloud (OpenCode)92.0AUS$ 1.22—308
20Qwen3.8 Flash-Next (IQ3_S)openRTX 5090 (Strata)91.0AUS$ 0 (local)159.2—
20Claude Sonnet 5closedCloud (Claude Code)91.0A~US$ 27 ¹—112
20GPT 6 solclosedCloud (Codex)91.0A~US$ 8.35 ²—73
23Gemini 3.8 Flash highclosedCloud (OpenCode)90.5AUS$ 15.98—97
24Gemini 3.8 FlashclosedCloud (Antigravity)89.5Afree (OAuth)—120
24MiniMax M3.1 FlashclosedCloud (OpenCode)89.5Afree——
26Muse Spark 1.3closedCloud (OpenCode)88.75AUS$ 13.31—150
27Swift 1.5 27Bopen1x B30088.0AUS$ 9.71 ³203.064
27Grok 4.5closedCloud (OpenCode)88.0AUS$ 6.19—48
29Claude Opus 4.6closedCloud (Claude Code)87.5AUS$ 25.64 ¹—89
30Kimi K2.7 CodeopenCloud (Kimi CLI)87.25AUS$ 7.75—175
31MiMo V2.5 ProopenCloud (OpenCode)86.5AUS$ 1.03—158
31Qwen3.8 FlashclosedCloud (OpenCode)86.5AUS$ 1.17—149
33DeepSeek V4 FlashopenCloud (OpenCode)86.0AUS$ 0.97—111
33Claude Opus 4.8closedCloud (Claude Code)86.0A~US$ 37 ¹—87
35Claude Sonnet 4.6closedCloud (Claude Code)85.75AUS$ 18.64 ¹—91
36Kimi K3openCloud (Kimi CLI)85.0AUS$ 13.79—148
36DeepSeek V4 Flash 0731openCloud (OpenCode)85.0AUS$ 1.94—194
38GLM 5.3 FlashopenCloud (ZCode)84.25Aflat plan—296
39DeepSeek V4 Pro 0813openCloud (OpenCode)84.0AUS$ 4.49—152
40Step 3.7 FlashopenCloud (OpenCode)83.75AUS$ 4.15—118
41Grok 4.7closedCloud (OpenCode)83.5AUS$ 27.94—120
42ThinkingCap 3.8 27Bopen1x B30083.0AUS$ 11.47 ³189.076
43DeepSeek V4 ProopenCloud (OpenCode)82.0BUS$ 5.26—97
44Muse Glimmer 30Bopen1x B30081.0BUS$ 3.54 ³295.023
44Ornith 1.5 35Bopen1x B30081.0BUS$ 24.39 ³317.0161
46Qwen 3.8 27Bopen1x B30080.5BUS$ 29.11 ³195.0192
47Qwen 3.8 27B (Q8_0)openStrix Halo80.0BUS$ 0 (local)7.7706
48Qwen 3.7 MaxclosedCloud (OpenCode)79.0BUS$ 10.63—106
49GLM 5.2openCloud (ZCode)77.0Bflat plan—239
50GLM 5.3 fullopen4x B30076.0Bpod at US$ 36/h110.0—
51Gemini 3.7 Flash highclosedCloud (OpenCode)75.5BUS$ 12.93—85
51MiniMax M3openCloud (OpenCode)75.5BUS$ 12.17—187
53Ornith 1.5 122Bopen4x B30073.0Bpod at US$ 36/h244.2—
54Step-5-Previewopen4x B30072.5Cpod at US$ 36/h165.9—
55Muse Spark Openopen4x B30069.5Cpod at US$ 36/h130.8—
56Qwen3.5 397B (NVFP4)open1x B30068.5CUS$ 8.22 ³140.054
57MiMo V2.6 Proopen4x B30067.0Cpod at US$ 36/h167.2—
58Laguna-S-2.1open4x B30065.5Cpod at US$ 36/h263.0—
59Ornith 1.5 35B (Q8_0)openRTX 5090 (Strata)64.5CUS$ 0 (local)80.0—
60Nemotron 3.5 Super VL (NVFP4)open1x B30063.0CUS$ 7.51 ³207.050
61Kimi K2 Thinkingopen4x B30046.0Dpod at US$ 36/h110.0—
62DeepSeek V4 Flashopen1x B30044.5DUS$ 5.59 ³153.037
63Mistral Large 3openCloud (OpenCode)39.0DUS$ 5.11—76
64GLM 4.7 Flash (BF16)open1x B30033.5DUS$ 4.60 ³217.030
65Gemini 3.1 Pro ⁴closedCloud (OpenCode)32.5DUS$ 10.31—54
66Nex N2.5 Proopen4x B30027.0Dpod at US$ 36/h184.0—
67GLM-4.7-Flash (Q5_K_M)openRTX 509024.0DUS$ 0 (local)—29

How to read the columns:

  • Weights: “open” is a downloadable checkpoint, any license; “closed” is API only.
  • Cost per run: what one full seven-sprint run cost.
  • tok/s: single-stream decode speed, measured by me. It only exists for the ones I served.
  • Minutes: wall-clock time for the whole run, when I have the data. On the single B300, it’s sprint time only.

And the footnotes:

  1. Claude ran through the Claude Code Max subscription. The cost is notional: the run’s tokens at API list price.
  2. Estimated from the run’s tokens.
  3. Inference time on the B300 only, at about US$ 9 per hour. Download, loading, compilation and tuning are left out, and the real pod cost was higher.
  4. Score with a caveat. The cloud Nex was graded from disk, with everything uncommitted; Gemini 3.1 Pro was hurt by an OpenRouter proxy bug.

The first v4 articles lumped everything below B into C; here I use the scale with D, the same as the B300 campaigns. MiniMax M3.1 Flash ran for free through OpenRouter as the cloud anchor for the local campaign, and MiniMax promises to release its weights on October 23.

The models are converging

Within the limited scope of this benchmark, it looks like everybody is arriving at the same place. 42 of the 67 runs made Tier A, 24 from closed models and 18 from open ones. Seven models hit 100, and 23 runs landed above 90.

Part of that is a limit of the yardstick itself. When seven models get the top score, the test stops separating the top. And a repeated GPT 5.5 run scored 91 against the official 100, so differences of a few points between two models may just be noise.

Even discounting that, the picture is clear. DeepSeek V4.1 Flash, GLM 5.3 Flash and Qwen3.8 Flash-Next, all open, sit 7.5 points from the ceiling, right on the heels of Sonnet 5 and GPT 6 sol.

For code review and vigilance, a good open model is already in the same pack as a good closed model. What still separates the two is consistency: among the open models there are D scores that don’t show up among the top closed ones.

The West stalled, China sprinting

Comparing generations of the same family within v4, the difference in pace shows up:

FamilyBeforeAfter
DeepSeek V4 Flash → V4.1 Flash86.092.5
GLM 5.2 → 5.377.094.0
MiMo V2.5 Pro → V2.6 Pro86.592.0
MiniMax M3 → M3.1 Flash75.589.5
Kimi K2.7 Code → K387.2585.0
Gemini 3.7 Flash → 3.8 Flash (high)75.590.5
Claude Fable 5 → 5.1100.095.5
Grok 4.6 → 4.798.583.5
GPT 5.6 sol → GPT 6 sol100.091.0
GPT 5.6 luna → GPT 6 luna95.095.5
Claude Opus 5 → 5.5100.0100.0

The Chinese models climbed 5.5 to 17 points per generation, with the exception of Kimi. On the Western side, whoever was already at the ceiling had nowhere to go: Opus stayed at 100, GPT 6 luna stayed where 5.6 luna was, and three new releases landed below their predecessors. Gemini Flash is the Western counterexample, with a 15-point jump.

The calendar reinforces that reading. Claude Fable 5 came out in June, Opus 5 and GPT 5.6 in July, and all of them already hit 100 on my yardstick. From then until October, OpenAI and Anthropic released Fable 5.1, GPT-6 Astra, Opus 5.5 and GPT-6 sol and luna. None of them showed a gain on my yardstick, and some landed below their predecessors.

In the same window, the Chinese labs started from well behind: DeepSeek V4 in April, Kimi K3 in July, Qwen 3.8 and GLM 5.3 in August, DeepSeek V4.1 Flash and MiMo V2.6 Pro in September, MiniMax M3.1 Flash in October. Each release got closer to the top.

The Chinese labs seem to move faster, and they do. But part of that impression comes from the Western ones having stood still for months, at least in programming. When the leader doesn’t move, whoever is chasing catches up.

Math isn’t programming

The Western labs didn’t stop working. They’re spending a good chunk of their showcase on math:

It’s impressive, and it’s legitimate. Formal proof is one of the few places where you can verify the answer automatically, which makes math a great field for training and for marketing. Except the same Fable 5.1 that served as the yardstick for Fermat scored 95.5 on my benchmark, against Fable 5’s 100.

Getting better at math doesn’t automatically make a model better at programming. A 2025 study, Does Math Reasoning Improve General LLM Capabilities?, concluded that most models that do well at math don’t transfer the gain to other domains, programming among them. There are counterexamples: NVIDIA showed that math-only reinforcement learning raised the code scores of small models. Transfer happens sometimes, and it depends on how you train.

And what about mixture of experts

The common intuition is that, in a mixture of experts (MoE) model, you can improve the “math expert” without touching the “code expert”. The idea is half right for the wrong reason.

An MoE has several blocks of weights in each layer, and a router picks a few of them for each token. But the experts don’t split by subject the way the intuition suggests. The Mixtral paper looked for exactly that and found no obvious pattern of experts by topic, with a small difference only on a synthetic math set; the router organizes itself more by syntax, by token type. And neither OpenAI nor Anthropic publicly confirm whether their closed models are MoE.

What still stands is the essential part: capability is trained by objective. The signal that rewards a Lean proof is not the same one that rewards noticing a cross-tenant leak in a Rails controller, and improving one doesn’t drag the other along. In a model where only a fraction of the parameters work per token, that mismatch becomes even easier.

NVFP4, FP8, Q4: what’s this alphabet soup

Every model is a pile of billions of numbers, the weights. Quantization is storing each number with fewer bits. The fewer the bits, the less memory the model takes and the less data the card has to read per token, and that’s what defines speed on a local machine. The price, when there is one, is quality.

For a 27-billion-parameter model, the math goes like this:

FormatBits per weight27B takesWhere it runs
BF1616~54 GBnative from Ampere (RTX 30) onward
FP88~27 GBnative on Ada (RTX 40), Hopper (H200) and Blackwell
Q8_0 (GGUF)~8.5~29 GBllama.cpp and Ollama, any card
Q5_K_M (GGUF)~5.5~19 GBllama.cpp and Ollama
Q4_K_M (GGUF)~4.5 to 4.8~16 GBllama.cpp and Ollama
NVFP44.5~15 GBnative only on Blackwell; vLLM, and llama.cpp since 2026
IQ3_S (GGUF)~3.4~12 GBllama.cpp and derivatives

What each one is

  • BF16 is the precision most models are published in. It’s the reference: nothing is lost.
  • FP8 is 8-bit floating point, with hardware support on the Ada, Hopper and Blackwell generations. It cuts memory in half and is the default for big checkpoints, like DeepSeek V4.1 Flash and GLM 5.3 full.
  • Q8_0, Q5_K_M, Q4_K_M and IQ3_S are llama.cpp GGUF formats. The weights are stored in blocks of integers with one scale per block; the “K” ones mix precisions per tensor, and the “IQ” ones use an importance matrix to decide where to spend bits. Q8 is considered practically lossless, and Q4_K_M is the recommended default for people running at home.
  • NVFP4 is NVIDIA’s 4-bit format. Each number is a 4-bit floating point, and each block of 16 numbers gets its own FP8 scale. NVIDIA says this takes 3.5 times less than FP16 and loses 1% or less against FP8 on DeepSeek-R1.

That’s where the NVFP4 hype comes from: Blackwell’s tensor cores compute in it directly, and it’s what made GLM 5.3 Flash, at 198 GB, and Qwen3.5 397B, at 251 GB, fit on a single B300. The H200, from the previous generation, has no native FP4. And the home ecosystem is still catching up: llama.cpp got NVFP4 support only in 2026, and per-architecture coverage is still partial.

What our tests show

Four models ran at more than one precision:

ModelVersion AVersion B
Qwen 3.8 27BBF16, B300: 80.5Q8_0, Strix Halo: 80.0 ¹
Qwen3.8 Flash-NextNVFP4, B300: 92.5IQ3_S, RTX 5090 with Strata: 91.0
Ornith 1.5 35BBF16, B300: 81.0Q8_0, RTX 5090 with Strata: 64.5
GLM 4.7 FlashBF16, B300: 33.5Q5_K_M, RTX 5090: 24.0

¹ Mixed run: sprints 1 and 2 in Q5_K_M on the 5090, the rest in Q8_0 on the Strix, with reasoning turned off.

And six ran on the cloud API and were also served by me, with the official weights:

ModelCloudServed by me
GLM 5.3 Flash84.2592.5 (NVFP4, B300)
DeepSeek V4.1 Flash92.592.5 (FP8, 4x B300)
GLM 5.3 full94.076.0 (FP8, 4x B300)
MiMo V2.6 Pro92.067.0 (FP8, 4x B300)
DeepSeek V4 Flash 073185.044.5 (official FP4/FP8, B300)
Nex N2.5 Pro94.027.0 (FP8, 4x B300)

Each row is a single run, and the noise reaches almost 10 points. With that caveat, here’s my reading:

  • Q8 came out tied with BF16. The Qwen 27B scored 80.5 and 80.0, a single point of data with other things changing at the same time.
  • Going from 4 down to 3 bits was nearly free on Flash-Next, at 1.5 points, even while switching engine and card.
  • Ornith’s drop is unlikely to be about the bits. Q8 is nearly lossless, and it still lost 16.5 while also switching engine and card.
  • Serving the same checkpoint can give you anything. GLM 5.3 Flash went up 8 points in my hands, DeepSeek V4.1 tied, and Nex fell almost 70. Tool parser, chat template, reasoning mode and engine version weigh as much as precision, and the effect changes from model to model.

In my tests, the bits mattered less than the hype suggests, and the whole package of how the model is served mattered more. Use Q8 when it fits, drop to 4 bits when you have to, and measure on your own work before trusting it.

The best commercial models

Only closed models get in here, only Tier A, and only what I’d pay for through an API.

By score

ModelScoreCost per runMinutes
GPT-6 Astra100.0US$ 30.55100
Claude Opus 5.5100.0US$ 16.63 ¹64
Claude Opus 5100.0~US$ 71 ¹145
Claude Fable 5100.0~US$ 50 ¹~85
GPT 5.6 terra100.0US$ 9.5280
GPT 5.6 sol100.0US$ 20.37317
GPT 5.5100.0US$ 34.69117
Grok 4.698.5US$ 13.0067
GPT 6 luna95.5~US$ 0.84122
Claude Fable 5.195.5~US$ 51 ¹133

¹ Notional subscription cost, at API list price.

At the absolute top, Claude Opus 5.5 and GPT 5.6 terra are the obvious picks: top score, a run in a little over an hour, and a per-run price in the single digits or a bit more. Opus 5 and GPT 5.5 get the same score at two to seven times the cost.

By cost-benefit

ModelScoreCost per run
GPT 6 luna95.5~US$ 0.84
Qwen3.8 Flash86.5US$ 1.17
GPT 6 sol91.0~US$ 8.35
GPT 5.6 terra100.0US$ 9.52
GPT 5.6 luna95.0US$ 10.04
Grok 4.698.5US$ 13.00
Claude Opus 5.5100.0US$ 16.63 ¹

¹ Notional subscription cost, at API list price.

GPT 6 luna is the absurdity of the table: high Tier A for under a dollar per run, a fraction of the price of any other closed model at the same level. If the top score isn’t mandatory, that’s where I’d start.

At the top score, GPT 5.6 terra costs a little more than half of Opus 5.5. The difference between the two lies in everything else: harness, speed, behavior in long sessions, and I covered that in the previous articles.

The best open models for companies

This is what runs on datacenter GPUs, on the B300.

ModelWhereScoretok/sMemory
DeepSeek V4.1 Flash4x B30092.5175510 GB
GLM 5.3 Flash1x B30092.5142198 GB
Qwen3.8 Flash-Next1x B30092.5195100 GB
Swift 1.5 27B1x B30088.020356 GB
ThinkingCap 3.8 27B1x B30083.018956 GB

DeepSeek V4.1 Flash is the champion for a big team. On a 4x B300 pod at US$ 36 per hour, it serves 32 comfortable sessions at the same time, with the first token in under 2 seconds for almost all of them. Counting one active session per developer for the whole workday, which is optimistic, that’s 32 people. Turning the pod on only during business hours, 8 hours a day, 22 days a month, comes to about US$ 6,300 per month, or about US$ 200 per developer.

The alternatives, by the same math:

  • 4x H200 on Runpod serves only 8 comfortable sessions and comes out to about US$ 316 per developer per month, even with the cheapest pod;
  • the same configuration on AWS costs almost double, and the H200 on Azure costs almost three times the Runpod price;
  • buying a DGX Station GB300 for about US$ 130 thousand pays for itself in about 20 months against renting during business hours, or in about 5 months against a pod running nonstop.

For a smaller team, the single B300 with Qwen3.8 Flash-Next or GLM 5.3 Flash is the sweet spot: same score as DeepSeek, on a single GPU, at about US$ 9 per hour. I didn’t measure concurrency on it. Going by the memory left over, a team of five to ten people fits well on a 27 to 35 billion model, like Swift 1.5; on GLM 5.3 Flash, at 198 GB, it gets tight.

Your own infrastructure starts to make sense at around 30 people using it at the same time, or when the code can’t leave the network. Below that, the API for the same DeepSeek costs a little over a dollar per run and you don’t babysit any server.

The best open models for consumers

This is what runs on a PC: an RTX 5090 with 32 GB or a Strix Halo with 128 GB unified.

ModelMachineScoretok/s
Qwen3.8 Flash-Next (IQ3_S, Strata)RTX 509091.0159
Qwen 3.8 27B (Q8_0)Strix Halo80.08
Ornith 1.5 35B (Q8_0, Strata)RTX 509064.5~80
GLM-4.7-Flash (Q5_K_M)RTX 509024.0—

There’s only one winner: Qwen3.8 Flash-Next on the RTX 5090 with Strata. It’s a 125-billion MoE with 6 billion active per token, and Strata keeps the most-used experts on the card and the rest in RAM. It landed 1.5 points from the datacenter version, at interactive speed. I covered it in detail, with installation, an auto-loading service and the OpenCode setup, in Best Open Source LLM: Strata with Qwen 3.8 Flash Next.

The Strix Halo fits big models, but its memory bandwidth is seven times lower than the 5090’s, and a 27B dense model crawls at under 10 tokens per second in Q8, about 13 in Q4. It’s fine for background tasks that can wait.

And what about Swift 1.5 and ThinkingCap 3.8, the 27B fine-tunes that did well on the B300? I didn’t run them on the 5090, and I didn’t need to. On the B300, in BF16, full precision, they scored 88 and 83, below Flash-Next’s 92.5 on the same card and the 91 it scored on the 5090.

On a 5090 they’d fit in Q4 or Q5, but quantized, the best case is matching the B300 score. Running at home cost Flash-Next 1.5 points and Ornith-35B 16.5. The base Qwen 3.8 27B, which is the same architecture, didn’t even finish on the 5090 in Q5_K_M: it got stuck in a reasoning loop in sprint 3.

If those two already fell behind Flash-Next at full precision, they won’t get better on a 5090. I saw no reason to test them: for a PC, Flash-Next is clearly the pick.

What about GPUs worse than the 5090?

It’s the question that always comes up: what about people with an 8, 12 or 16 GB card? From my data, the path of a small model that fits entirely on the card still doesn’t deliver anything worth the effort for programming.

On a card like that, in Q4, a dense model of up to about 20 billion fits; a 30-billion MoE with few active parameters only runs with part of it in RAM. And that range did badly in v4:

  • GLM-4.7-Flash, a 30B MoE with 3B active, scored 24 on the 5090 and 33.5 on the B300 at full precision, Tier D on both;
  • Ornith-35B, another MoE with 3B active, scored 81 on the B300 and fell to 64.5 on the 5090;
  • gpt-oss-20b didn’t even complete the protocol;
  • the best mid-size model was Qwen 3.8 27B, with 80, but it already needs about 16 GB in Q4 alone, stalled on the 5090, and only finished at 8 tokens per second on the Strix.

The exception is precisely Flash-Next. Strata was built to run it on a 12 GB card, holding most of the experts in RAM: the project’s README publishes 53 tokens per second in IQ3_S on a 12 GB RTX 5070 with 64 GB of RAM, and the stated minimum is 32 GB of RAM and VRAM combined. With the same weights and the same engine, the score in theory shouldn’t change, only the speed, which drops to a third of the 5090’s. I didn’t measure this; it’s the author’s number.

The catch is RAM. With DRAM nearly doubling in price in a single quarter this year, 64 GB stopped being the cheap upgrade it used to be.

Below the 5090, I wouldn’t waste time on small models for programming. If you’re going to try something, make it Flash-Next with Strata and plenty of RAM, and measure it on your own work before trusting it.

And there’s the problem I covered in the previous article: finding a 5090 today is hard, and when you do, the price runs between two and a half and almost five times MSRP.

How much does it cost to move beyond 150 tokens per second?

After a few hours using Qwen locally, I summed up the problem on X. My run’s average of 159 tokens per second looks fast in a table. During a programming session that spends the whole day generating code, running tests, reading logs and fixing its own work, the waiting adds up.

I already get impatient. Anything below that is out of consideration for daily work.

The 5090 itself has limits beyond speed. NVIDIA specifies 32 GB of GDDR7 and 1,792 GB/s of bandwidth and launched the card at US$1,999. Mine also drives the monitors and Hyprland, so I reserve 4 GB for the desktop. The rest has to hold dense weights, the hot-expert cache, engine buffers and the resident portion of the KV cache that stores the conversation context.

My Strata configuration offers a 256-thousand-token context with int8 KV and keeps 32 thousand resident in VRAM; the rest can move to RAM. That keeps the card from overflowing, but RAM is still much slower. While frontier Claude models already offer a one-million-token window, locally I have to watch what enters the session. Loading a whole collection of skills, plugins and MCP servers just because they fit in a config file wastes context and hurts latency.

Context also costs memory and time on local hardware. I only load what that session will use.

What if I add more hardware? The comparison looks like this:

OptionMemoryBandwidthObserved speedReference price
RTX 509032 GB GDDR71,792 GB/s159.2 tok/s, measured by meUS$1,999 MSRP
2x RTX 509064 GB physically split between cards2x 1,792 GB/s, without becoming one flat poolno equivalent test of my ownUS$3,998 MSRP
Mac Studio M5 Ultra96 or 256 GB unified; 512 GB promised for late October1,200 GB/snot yet measured in Stratastarts at US$5,499
DGX Spark128 GB unified273 GB/sabout 22 to 75 tok/s per session in public recipesUS$6,950 from NVIDIA
RTX PRO 6000 Blackwell96 GB GDDR7 ECC1,792 GB/s187.4 tok/s in short chat; 174.3 in an agent sessionUS$16,000; R$123,000 via Pix in Brazil

In the post, I wrote that Strata would only start two instances on a machine with two 5090s. That part is outdated: current Strata splits layers across two or more GPUs. It uses pipeline parallelism, without turning two cards into one simple 64 GB block and without mature tensor parallelism.

Single-session gains stay far below 2x. A community test with two 5090s measured about a 22% gain in the decode geometric mean and 40% in the coding arm. It helps capacity, and you can run the cards as two independent instances to double concurrency. For me alone, buying another 5090 to remove a fraction of the wait does not add up.

The Mac Studio M5 Ultra starts at US$5,499, has 1.2 TB/s of bandwidth and comes with 96 or 256 GB; Apple promised the 512 GB option for late October. There is no published Strata benchmark for the Ultra yet. On the 128 GB M5 Max, the same Flash-Next ran between 97 and 119.5 tokens per second, depending on the quantization and prompt. My original estimate of under 100 on the Ultra is unproven, and I would not buy a machine like that based on a guess.

The DGX Spark puts 128 GB in a compact box, with a 140 W TDP for the GB10 and a 240 W power supply. Its memory delivers only 273 GB/s, almost seven times less than the 5090. NVIDIA now asks US$6,950.

Reproducible Flash-Next recipes range from 22 to 75 tokens per second per session, depending on concurrency, stack, sampling and reasoning mode. It fits plenty. For my tolerance, it moves too slowly.

That leaves the RTX PRO 6000 Blackwell. It has 96 GB of GDDR7 ECC, 1,792 GB/s and 600 watts of total board power. Its bandwidth is exactly the same as the 5090’s. The 96 GB removes the VRAM pressure and allows more cache and context, but it does not buy three times the speed.

A Strata community benchmark measured 187.4 tokens per second in short chat and 174.3 in an agent session, with substantial variation across runs. That’s better than my 159.2, except NVIDIA lists the card at US$16,000. On October 22, WAZ showed the PNY at R$123,299.99 via Pix or R$145,058.81 at regular price. We have entered professional-workstation or server budgets.

Today, for me, there is no home option that combines a good model, truly fast responses and a reasonable cost. The 5090 works, but 150 tokens per second already wears on me. Below it, local LLMs are toys; above it, the price explodes before the speed does.

What I learned in v4

About the models

  • Almost every model catches the loud defect unprompted: a CVE in a gem, a key in the code, open CORS, obvious SQL injection. Almost every model lets the silent one slip until I reveal it: cross-tenant leak, wrong aggregate, tampered test, removed index. What separates Tier A from the rest is how much of the silent stuff it catches on its own.
  • Size doesn’t buy vigilance. Kimi K2 Thinking, at 1 trillion parameters, scored 46. GLM 5.3 full, at 700 billion, scored 76, against 92.5 for the Flash from the same family.
  • Models cheat or get things wrong with conviction. Nemotron tampered with a regression test to make it pass, Qwen3.5 397B let a backdoor through and even wrote a test that treated it as expected behavior, and Kimi K2 put on security checklist theater, catching only what you can find with grep.
  • The leap between generations was in agentic reliability. GPT-4o and GPT-4.1 can’t even finish the protocol on their own. Today’s top models run all seven sprints with no help at all.

About serving open models

  • The same checkpoint changes score depending on who serves it. DeepSeek V4 Flash scored 85 in the cloud, on the same 0731 version I downloaded, and 44.5 served by me; Nex N2.5 Pro scored 94 in the cloud and 27 on the 4x B300 pod, with corrupted tokens landing in the committed code.
  • No model runs fast out of the box. GLM 5.3 Flash went from 10 to 141 tokens per second from configuration alone, and every family asked for a parser, a flag and sometimes a vLLM PR branch.
  • Running at home charges each model a different price. Switching quantization, engine and card all at once, Flash-Next lost 1.5 points and Ornith-35B lost 16.5.
  • What limits concurrency is the KV cache architecture and the time to first token. Parameter count says little: on the H200, a 510 GB model and a much smaller one tied at 8 users, for opposite reasons.

About measuring

  • A single run has noise of almost 10 points. Two scores 2 points apart are a tie.
  • The harness matters. Gemini 3.1 Pro was taken down by a proxy bug, gpt-oss doesn’t finish in OpenCode, and three models insisted on creating the app in a subfolder.
  • A model that doesn’t commit loses work. A fix that only lives on disk vanishes at the first git checkout.

My hypothesis: expensive hardware is part of the business model

The v4 verdict, as of October 2026, is this: for code review and vigilance, open source has arrived. DeepSeek V4.1 Flash, GLM 5.3 Flash and Qwen3.8 Flash-Next are in the same pack as Sonnet 5 and GPT 6 sol, and one of them runs on a PC card.

So why isn’t everybody running it at home? Because hardware got expensive and hard to find, and I have a hypothesis about that. It’s my hypothesis, with no proof of any collusion, built on public facts.

The facts

The cycle

The simplest explanation for expensive memory is demand: datacenters buy everything and pay more. I believe it. What bothers me is that no big player has an incentive to break the cycle:

  1. The rhetoric says only the frontier lab knows how to handle these “dangerous” models, and that open source is a risky bet.
  2. That pulls demand to the cloud, and the cloud buys GPUs and memory in record volume.
  3. Manufacturers sell at a premium to whoever pays more and deprioritize consumers.
  4. Good hardware becomes unreachable outside the datacenter.
  5. Without hardware at home, open source doesn’t get adopted, which reinforces the rhetoric in step 1.

If everybody started hosting their own model, the trillion-dollar IPO math would stop adding up. v4 showed that open models are already ready for a good chunk of the work. What’s missing is the hardware getting into the hands of the people doing the work.