A thinking model in half a gigabyte: Ternary-Bonsai-2 small (2B/4B/9B)
October 2026 · Inference Server team
new in v1.70.52 / 1.15 / 2.42 GB files thinking ON by defaultimages (v1.7.1) Apache 2.0
The 27B Ternary Bonsai made the case that 1.72-bit ternary weights are a real serving format, not a compression demo. prism-ml has now released the small end of the family, and v1.7 serves all three:
| Model | File (PQ2_0) | Runs on | Download |
|---|---|---|---|
| ternary-bonsai-2b | 0.52 GB | 4 GB hosts | ~1.2 GB with vision |
| ternary-bonsai-4b | 1.15 GB | 4–8 GB | ~1.8 GB |
| ternary-bonsai-9b | 2.42 GB | 8 GB hosts | ~3.1 GB |
That last row deserves a second look: a 9B-class reasoning model in 2.42 gigabytes — a third of the RAM the q35-9b needs — with the full 262,144-token context window. All three are Qwen3.5 trunks quantized to ternary {−1, 0, +1} weights with the same folded-Hadamard runtime the 27B uses, so every PQ2_0 kernel optimization from the v1.6.0 performance train applies as-is.
Two things to know before you call them
- Thinking is ON by default — the opposite of every other model
on the server, because that’s how these models’ own chat template ships.
Reasoning streams to
reasoning_content, the answer tocontent. Pass"enable_thinking": falsefor direct answers. - They answer image questions (v1.7.1): the fetch group includes F16 vision projectors, and the 4B/9B reliably read text out of screenshots — on our fixtures the 9B answers "What error code is shown?" with the right number. The 2B sees colors and shapes fine but can misread small digits; it is, after all, half a gigabyte.
sudo ./fetch-models.sh bonsai-small # all three + vision projectors, ~6.1 GB
curl -sS localhost:8081/v1/chat/completions -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
-d '{"model":"ternary-bonsai-2b",
"messages":[{"role":"user","content":"What is the capital of France? One short sentence."}],
"temperature":0}'
# → reasoning_content: "Thinking Process: 1. Identify the question..." content: "The capital of France is Paris."
Measured, as always
- Parity: teacher-forced greedy decoding against the PrismML reference fork — 423/424 tokens exact across our fixture set (the one divergence is a sub-0.05-logit near-tie), and our rendered prompts byte-match the fork’s own template output.
- Speed: measured with the standard page methodology (3×256 greedy, M4, solo): 2B 62.5 tok/s (+48% vs q35-2b), 4B 36.3 (+55%), 9B 22.4 (+62%) — ternary bytes win because decode is bandwidth-bound. Quality spot-check (16 exact-answer questions): the 2B scores 14/16 vs q35-2b’s 10/16; 4B/9B match their siblings at 15/16. Full table on the performance page.
- Honesty row: tiny models think in grooves — at temperature 0 the 2B’s reasoning is formulaic, and its vision misses fine detail. The right frame is the price-performance point: reasoning + 262K context + images on hardware where, a year ago, nothing conversational fit at all.
Apache 2.0, in the catalog and the console now. The 27B remains the family’s quality tier (text-only); these are the deploy-anywhere tier.