Enjoying this issue?
Get tomorrow's AI & engineering digest in your inbox — hand-picked, summarized, and always spam-free.
TLDR
Ornith 1.5 35B is a capable local coding model that fits on a 12-24 GB GPU, but the viral claim of 155 tokens/sec on a 4090 is unverified, and the 170K context window is misleading because the model degrades after ~70K tokens. The real story is that a single architectural choice—only 10 of 40 layers use full attention—makes the memory math work, but the community's focus on throughput numbers ignores whether the model can still reason at the far end of its context.
Key points
- Ornith 1.5 35B is a Mixture of Experts model with 256 experts, 8 active per token, giving ~3B active parameters out of 36B total.
- The model is MIT licensed and available on Hugging Face; it is a fine-tune of Qwen 3.5/3.6, which the vendor acknowledges in its own comparison table.
- The viral claim of 155 tokens/sec on an RTX 4090 has no published post or measurement behind it; it is plausible but unsourced.
- The claim of 53 tokens/sec on an RTX 3060 with 170K context is partially supported: a separate user measured 50-56 tokens/sec on a 4070 Ti (same memory class) but with only 32K context, not 170K.
- The 170K context window is technically possible because only 10 of 40 layers use full attention (KV cache), the other 30 use linear attention that doesn't grow with context. At 8-bit quantization, the cache for 170K tokens is under 2 GB.
- However, user reports on Ornith 1.0 show reasoning degradation and tool-calling failures starting at 70-80K tokens, with complete breakdown above 90K. No similar test has been published for 1.5.
- In independent benchmarks, Ornith 1.5 35B loses to Qwen 3.8 27B on 3 of 5 benchmarks (Terminal Bench, QDeep, Humanity's Last Exam), ties on one (GPQA Diamond), and wins on one (NL2Repo).
- At stock settings (temperature 0.8), the model refused 8 of 12 tasks in an independent test; retuned to 0.6, it completed all 12 faster and with less memory.
- The Q4KM GGUF build (21.71 GB) is the most commonly downloaded but has the worst quality-per-byte among six quantizations tested; an alternative build is 1 GB smaller with 92.7% top-1 agreement vs. 91% for Q4KM.
Tools mentioned
Techniques
- Mixture of Experts (MoE) with 256 experts, 8 active per token
- Linear attention in 30 of 40 layers (no KV cache growth)
- Full attention in 10 of 40 layers (KV cache grows with context)
- Self-play training: model proposes progressively harder tasks, generates scaffolds, produces solution rollouts, and uses reward to improve policy, tasks, and scaffolds
- KV cache quantization to 8 bits
Stop scrolling. Start reading smarter.
Receive the day's most important AI & engineering updates in one concise email. No spam.
Transcript (captions)
One forum title, four numbers, a 35 billion parameter coding model running on a consumer graphics card, 155 tokens a second on an RTX 4090. That is the first number and it is the loudest. Then
a second machine entirely, an RTX 3060, 12 GB of video memory, 16 of system RAM, 170,000 tokens of context, 53 tokens a second coming out, 900 going in. That 3060 launched in February of 2021 at
$329. So, the claim on the table is that a 5-year-old budget card runs a frontier-shaped coding agent at speed. Every one of those four numbers can be
checked against a file, not argued about on a forum, checked with arithmetic. One of them holds up almost exactly. One is off by a whole card class. One has no post behind it that a search can find.
And the fourth, the 170,000 is true and misleading at the same time, which is the worst of the four because the context window a machine can hold and the context window a model can actually
use are two different numbers. The screenshots going around this week measure the first one. So, let us do the arithmetic properly. Or 1.5 went up on hugging face on the 18th of August and
the team announced it the next day. three models, a 9B dense, a 35B mixture of experts, and a 397B. All MIT licensed, so the weights are yours, and there is no bill per token.
The training pitch is the unusual part. According to the team's own writeup, the model was not fed a fixed pile of human written tasks. It proposes progressively harder tasks itself, generates a
scaffold for each one, instructions, tools, decomposition, and then produces a solution roll out. reward from that roll out flows back through all three stages. Better policy, harder tasks,
better scaffolds, better training signal, round and round. It is also the kind of paragraph that makes a forum immediately suspicious. One commenter said, "The writeup deserved a Nobel
Prize in vague but wildly grandiose promises, which is unkind and not entirely wrong. Underneath all of it, this is a fine tune." The config file names the architecture as QN 3.5 mixture
of experts and the community read is that 1.5 is post-trained on QN 3.6. Ornith puts that base model in its own comparison table which answers the usual complaint about finetuners hiding what
they started from. The 35B is where this story lives. 36 billion parameters in total. 256 experts. Eight of them fire on any given token which works out to roughly 3 billion parameters doing
actual work. That ratio is the entire trick. You pay for 36 billion in storage and you pay for 3 billion in speed. Hold on to that because in about 4 minutes it becomes the whole answer. The scores the
vendor publishes are strong. 67.8 on terminal bench 2.1 under one harness 68.5 under another. 79 on SBW bench verified 59.6 on S. We bench pro against the base model it started from. Those
are wide margins, not rounding. And credit where it is due because this is rarer than it should be. The footnotes under that table name, the harness for each row, the temperature, the context
window, and the fact that every result is the mean of five runs. The SWE bench rows even state that git history was stripped and network access disabled, so the model could not look up its own
answers. It is still the vendor's own measurement. Terminal bench keeps a public leaderboard of agent and model pairs. And as of the 20th of August, ornith does not appear on it. Not 1.5,
not 1.0, not one row. Which brings us to the part you can settle for yourself. File sizes. The official GGUF repository list the Q4KM build of the 35B at 21.71 GB. Full precision is 71. And for a
sense of what you have escaped, the 397B at the same quantization is 240 GB. An R TX49090 has 24 GB of video memory. So the weights land with about 2.3 to spare, which is comfortable until you
remember you have not loaded any context yet. The 3060 has 12. The weights do not fit. Roughly 10 GB of this model has to live in ordinary system memory and get read back across the bus while it works.
Now put 170,000 tokens of context on top of that and the whole arrangement should collapse. It does not. And the reason is sitting in the config file in plain text, 40 layers. And the layer list says
only every fourth one is full attention. 10 layers keep a cache that grows as you talk. The other 30 are linear attention and their state does not grow with the conversation at all. Two key value heads
head dimension 256 keys and values two bytes each at half precision. Multiplied out across the 10 layers that care and one token of context costs about 20 kilob. So 170,000 tokens is about 3 1/2
GB. Quantize that cache to 8 bits, which most local setups do, and it is under two. Had all 40 layers kept a cache, the same window would have cost close to 14 GB, more than a 3060 has in total, four
times the memory for the same conversation. That one architectural choice is the difference between a video and a joke. So the memory claim survives. 21.7 of weights plus under two
of cash is 23 and a half and a 4090 holds 24. It fits barely and only if you quantize the cache. Leave it at half precision and you are over the card by more than a gigabyte. Speed is harder
because speed needs somebody who owns the card and is willing to publish what they ran. On the 20th of August, somebody did a full run of Ornith 1.5 on an RTX 4070 Ti. 12 GB of video memory.
the same class as the card in our title. 32 GB of system RAM Q4KM llama.cp build number and flags all in the post. Prompt processing 650 to 700 tokens a
second. Generation sustained 50 to 56 in an isolated bench with no context to carry 65 50 to 56. The title said 53. On a different card, in a different house, on a different day, the headline decode
number lands inside a measured range. That is the one claim in this title that survives contact with somebody else's hardware. Prefill is where it comes apart. 900 tokens a second on a 3060
against 650 measured on a 4070 Ti, a card with 40% more memory bandwidth. The slower card is supposed to be faster by a third, and there is no configuration in the post that explains it. and the
155 on a 4090. A 4090 moves a thousand gigabytes a second and 3 billion active parameters at this quantization is under 2 GB of reading per token. Divide one by the other and the physical ceiling is
somewhere near 550. So 155 is entirely plausible. It simply has no post behind it. Plausible and sourced are not the same word and a title is not a citation which raises the question the whole
genre keeps skipping. If the number is right, what exactly did it measure? Go back to that 4070Ti run for one detail. The context is set to 32,000 tokens, not 170,000, 32. And the author says so
himself in the post. The context is admittedly tight. Same model, same quantization, same 12 GB as the card in our title, and he allocated less than a fifth of the window the title quotes. He
is not being modest. he has used it for why open the model's own community tab. On the 29th of June, a user opened a thread on the 1.0 repository with a title that is the entire problem in one
line. Reasoning degradation and tool calling failures at 70 to 80,000 context tokens. His method is the part worth stealing. 20 files, 200,000 tokens in total, loaded one at a time. analyze,
fix, rewrite, move to the next. Gradually filling the window instead of declaring it in a launch flag and calling that a benchmark up to 65,000 tokens fully functional. Everything
works. 70 to 80,000 noticeable degradation. 90 and above completely broken, looping, re-checking the same file it had already finished, describing tool calls instead of making them. A
second user running an entirely different job on entirely different work hit the same threshold independently though he added that it does eventually reason its way back out which the first
thread had not seen. Two strangers, one number, no coordination. That is ornith 1.0 tested in June and pinning it on 1.5 without a rerun would be unfair. What is fair is the shape it exposes because
that shape is not about ornith at all. A context window is a memory allocation. The number in your launch flag says how much cash you are willing to buy. It says precisely nothing about whether the
model can still think at the far end of it. The throughput post measure the allocation. That is benchmark worship wearing a hobbyist clothes. And it is why the same readers are disappointed by
the same model month after month. None of which makes this a bad model. It makes the numbers around it soft. And those are different problems with different fixes. So here is the ledger
both directions. A commenter lined Ornne's 35B up against CUNE 3.8 27B on every benchmark where both had published figures. Terminal bench 73 against 68.5 Q deep 42 against 22 Quinn badly.
Humanity's last exam without tools 30.8 against 25.6 Quinn again. GPQA diamond ties. Ornith takes NL2 repo. Three losses, one tie, one win. And the man who compiled it flagged that several
Quinn cells have no official figure at all. And deep sui is the row to squint at. Ornith 1.0 scored a flat zero. 1.5 scores 22. One commenter's red was blunt. That jump is the public deep SOE
data set arriving in the training mix. Not new debugging ability. That is an accusation, not a finding, but a jump from exactly zero is the right place to make it. Then there is the setting the
announcement thread skip. An independent tester ran 1.0 against 1.5 on his own task battery. 12 tests, five runs each. At stock settings, the new model refused eight of the 12. Its package default
temperature is not8. The model card itself recommends not 6. Retuned to the older model's sampling parameters. The same weights went 12 for 12 and faster with less memory overhead. The upgrade
is real. It is just not a drop in and the launch day screenshots left that out. One last thing for anyone about to download this. A team that Quantis' models for a living measured each build
against full precision. The stock Q4KM holds 91% top one agreement. Their alternative is a gigabyte smaller and holds 92.7. Of the six builds they measured, the file most people will grab
is the worst quality per bite on the shelf. So where does that leave the card on your desk? Ornith 1.535B is the model to put on a 12 to 24 GB card this week. And I would take it over
waiting for something tidier to arrive. Three receipts, 21.7 GB of weights, plus under two of cash at 170,000 tokens. A memory shape that would have cost four times as much on a conventional layout.
50 to 56 tokens a second measured by a stranger on 12 GB. Config published an M it so it cannot be taken back. metered or read on the way past. The concession is real and it is not small. At stock
settings, it refuses. QN beats it on three of the five benchmarks where both show up. Its own predecessor came apart between 70 and 90,000 tokens of filled context and no rerun on 1.5 has been
published. If your work really lives at 100,000 tokens, this is not your model yet. Take the 9b at 5.6 GB. But the villain in this story is not ornith. It is the screenshot. A tokens per second
figure printed beside a context size measures how much memory somebody was willing to buy and the local scene reads it as a measure of what a model can do. We built a culture of receipts and then
agreed not to read them. Which leaves one question worth sitting with. If a 5-year-old $300 card can hold something this capable, hardware stopped being the interesting constraint a while ago. So,
who publishes the first local benchmark that reports its number as the context fills and gets worse on