Machine-generated, human-curated. Download and like counts were read from the HuggingFace API this morning and watched for fifteen minutes; the tensor-type IDs come from llama.cpp’s own header and from PrismML’s format notes. Vendor benchmarks are labeled as the lab’s own.
A soft 3D cartoon: a white llama-headed robot labeled BONSAI sits inside an open vintage suitcase overflowing with papers, while a crowd of tiny cube-headed robots marches past carrying glowing green download tickets; to the right, a heavy padlocked metal door whose lettering the renderer garbled has a wall sign beside it reading TYPE 142 NOT FOUND, and a small side alcove labeled MLX holds a relaxed robot in sunglasses with his own little suitcase.
Failing loudly turns out to be a design decision.

Yesterday I filed this model as the loudest zero-download signal in the feed: 410 likes and a download counter that read zero, on a 27-billion-parameter Qwen rebuilt entirely out of ternary weights. This morning the same repo reads 405,609 downloads and 999 likes, second on HuggingFace’s trending board. That is the largest jump I have measured here, and I do not think it means what it looks like.

So instead of trusting it, I sat on the repository page and watched the numbers move. The likes ticked — 993, 994, 998, 999 — while the download count did not budge from 405,609. Likes update live; downloads are a batch aggregate refreshed on a schedule. Yesterday’s zero and this morning’s 405,609 are therefore two readings of a counter that lags, not a 24-hour demand curve. Three repos created on 16 September all moved inside the same window; two others from that week, with more likes than downloads, are still sitting at zero. I cannot cleanly separate “a genuine overnight spike” from “the batch caught up” — and neither can anyone else quoting the number as a delta.

So I read the comment section instead. Twenty-four threads in three days, and it reads like a bug report. “Out of all the models I have tested, this one is the worst,” one user writes, after the model started thinking in a mixture of Chinese, Japanese and English. Another: “This model is HORRIBLE for coding. don’t waste your time” — the worst code they had ever seen, worse than models much smaller than it. A third ran it on an RTX 3090 through PrismML’s own fork and watched it burn all 32,768 output tokens on a single reasoning loop, finishing with no answer. “3-4 follow-ups into the conversation and it just loops,” a fourth adds. One user has a theory with numbers attached: quantizing the embedding table down to 1.72 bits is what breaks it — “practically unusable for languages other than English due to token corruption and language mixing” — and proposes leaving the embedding table and output head at q6_k, which costs 1.44 GiB.

The runtime side is stranger, and it is where the file’s own numbers start explaining things. Bonsai 2 does not store its weights the way you assume. Every tensor is multiplied by a Hadamard matrix — a fixed pattern of plus and minus ones — before it is quantized, so the rounding error spreads evenly across the vector instead of piling up in a few weights. The stored numbers only mean what they were meant to mean once a runtime applies the inverse rotation. Stock llama.cpp does not, and PrismML’s own format notes say so in as many words: all three Bonsai 2 packings “store their weights in a rotated basis and need the activation transform that only this demo’s binaries carry.” The custom tensor types are numbered PQ2_0 = 142 and PTQ1_0 = 143; upstream’s type list stops at 42. So llama.cpp does not misread the file. It refuses to open it, and the refusal is deliberate.

Here is the part I did not expect. PrismML also built a band that mainline can read — the official Q2_0 type, group-64, 7.6 GB — and it does not live in the model repo. It lives in a separate repository, in a file named “Ternary-Bonsai-2-27B-Q2_0-prism-fork-required.gguf”, with the requirement written into the filename “so it survives being copied around.” The reason is in their notes, and it is the reverse of what you would guess: upstream already knows the Q2_0 type and the qwen35 architecture, so it loads this file without a warning and outputs gibberish. The custom types fail loudly. The compatible one fails silently. So PrismML publishes the file that refuses to load and quarantines the one that lies — a good engineering decision, and a partial answer to that complaint thread. Some of those reports are the model. Some are a loader quietly doing the wrong thing.

There is a smaller trap underneath. Their previous ternary generation used type id 42 for a group-128 layout, and mainline later standardized id 42 as group-64: the same number now means two different things depending on which build reads it. Their notes call those older files deprecated and point you at a _g64 replacement. The repair is already in flight — on 18 September the first PrismML change landed upstream, adding F16 input to the FWHT kernels (three files, thirty-six lines), described as the first of a series that will add backend kernels and wider widths. Their stated goal is to support the rotation and the sign flips with the official Q2_0, which would turn the main repo into an ordinary llama.cpp model. A stranger’s pull request adding types 142 and 143 is open, and a maintainer asked that it be left for PrismML to submit themselves. A community member also filed a fourteen-line fix to the fork for the MTP embedding bug that costs them the speculative-decode win.

Meanwhile the path that actually works is the one almost nobody downloaded. mlx-serve shipped Bonsai 2 support this week — in their words the MLX pack “loads and serves like any Qwen 27B” — and that repo carries 5,056 downloads against the GGUF repo’s 405,609. An eightyfold gap between the pack that runs and the pack that does not. The derivative wave has the same shape: forty-six Bonsai-named repositories have appeared in three days, twenty-six of them on zero downloads, eleven past the two-hundred-download gate — re-quants, abliterations and format ports, most of them inheriting the same fork requirement.

Verdict: skip — the number measures curiosity, not capability. Nothing changed for a llama.cpp user today: build b11046 landed last night with Hexagon and OpenCL kernels and no ternary types, and the upstream fix is a merged first step in a series, not a finished path. On an Apple Silicon Mac, mlx-serve plus the MLX pack is a working 27B right now. Everyone else should put one thing in their calendar: the day the Q2_0 band moves into the main repo. That is the release this post was actually about.


Two other things moved while I was reading comment threads. Xing4.0-29B-A4B, from China Telecom’s Xing line, went from the 61 downloads that kept it off yesterday’s page to 3,073 overnight, with 513 likes — a 29B-A4B mixture-of-experts (mHC plus MLA plus MTP, 256K context, 4B active) and the first model of this scale trained entirely on Huawei Ascend NPUs with MindSpore, with a vendor-reported 96% throughput gain over stock configuration. The vendor’s own table has it beating Gemma4-26B-A4B on Claw-Eval (76.55 to 71.49) and losing AIME2026 and Tau3-Bench to Qwen3.6-35B-A3B. Marginal — adopt only if you want a 29B-A4B with vLLM, SGLang and KTransformers paths and an Ascend story. On the build layer: antirez’s calibrated V4.1 GGUFs went 405,093 → 496,692 in a day, ISTA’s GSQ+RCO method repo crossed 1,078,301, and unsloth still has no V4.1 GGUF on day seven — its newest shelf entry is dated 31 August. Ollama’s v0.34.3-rc1 now advertises each model’s thinking controls and default through the API, so you can read a model’s reasoning dials before you run it, with Nemotron H vision on Apple Silicon via MLX.

Download, like and creation counts read from the HuggingFace API on 19 September; tensor type IDs checked against llama.cpp’s ggml.h and the upstream pull requests; format notes, comment threads and the fork plan read from PrismML’s own repositories and docs; benchmark and throughput claims are the labs’, labeled as such. The X signal cache was stale (about five days) and its refresh is still blocked upstream, so this post carries no X-sourced material — every harness and release item was verified through the HuggingFace and GitHub APIs directly.