← Back to Home

Ornith 1.5 vs GLM-5.2 on the M3 Ultra

Created Updated

James Meadlock and Milo · Central Time

Decision — August 20, 2026. For this box, keep Ornith 1.5-397B Q6_K as the M3 Ultra local-text candidate. GLM-5.2 Unsloth UD-IQ3_S loaded and passed the same tool/agent smokes, but decode is about half as fast and a 32k prefill did not finish in 400 seconds. GLM-5.3 weights are still unreleased; this is not that comparison. DS4-Flash stays the Spark default. Not an SWE or Terminal-Bench score.
Ornith decode
32–35 t/s
GLM decode
17–18 t/s
Ornith 32k prefill
100 s
GLM 32k prefill
DNF

I wanted a local A/B of Ornith 1.5 against “GLM 5.3 with good context.” GLM-5.3 is the same 753B base as 5.2 with extra post-training, and Z.ai has not published weights yet. So the honest local test is Ornith 1.5 Q6_K versus GLM-5.2 at a quant that still leaves KV headroom on 512 GB.

The 435 GB UD-Q4_K_XL we already had on disk is the quality quant, not the context quant. June work on this machine already got ugly past 32k with it. The pick for this A/B was Unsloth UD-IQ3_S (~288 GB on disk, eight shards) so the two residents sit in the same RAM envelope.

What we ran

Sequential, one giant at a time, stock Homebrew llama-server b9700, thinking off, OpenAI tools. Download of IQ3_S ran while Ornith stayed up. Then Ornith baseline, then Ornith down, then GLM on a temp port at 64k context and q8 KV.

Ornith 1.5 Q6_KGLM-5.2 UD-IQ3_S
Weightsofficial GGUF, 303 GiB fileUnsloth dynamic, 288 GB dir
Params (server)396.3B MoE753.9B MoE
RSS after load~310 GiB at 262k ctx~282 GiB at 64k ctx
Train window262,1441,048,576
Serve window this run262,14465,536
Exact string / add() / toolsPASSPASS
2-turn run_python loopPASS (5.63 s + 0.52 s)PASS (4.36 s + 0.53 s)
Decode (server eval)31.9–34.8 tok/s16.8–18.1 tok/s
32k-class prefill36,029 toks, 100.1 s, PREFILL_OKcancelled at 24,066 toks / 400 s

Decode rows are llama-server slot eval timings, not Terminal-Bench accounting. Ornith 32k prompt was the same fox-sentence dump used on GLM. GLM prefill was still running (~60–80 tok/s and falling) when the HTTP client cancelled; the server stayed up.

Why Ornith wins this job

Both models are real. Both emit OpenAI tool_calls[]. Both stopped after the fake tool result 2870 instead of looping. That kills the “one of them is unusable garbage” take from a two-turn smoke. It does not pick a winner on SWE.

The Ultra job is interactive local text with long prompts. Decode and prefill are the scarce resources. Ornith is about 2× on decode. Ornith finished a 36k prefill in 100 seconds. GLM had not finished 24k in 400 seconds. The 1M train window on the GLM card is not free on llama.cpp at this quant.

I would not put GLM IQ3_S on the default Hermes route. I would not displace DS4-Flash on the Sparks for either of these. Ornith stays the M3 Ultra candidate if we want a whole-box open 397B. GLM IQ3_S is a slow-lane spare if we later care about the 753B post-train, not the daily driver.

What this is not

Related: Ornith 1.5 Q6_K 262k recipe, Ornith 1.0 GGUF + MLX, GLM-5.2 MXFP4 MLX recipe (different engine), GLM-5.2 Terminal-Bench.

All A/B numbers above came from direct HTTP calls on August 19–20, 2026 against localhost llama-server b9700 on the M3 Ultra. Official Ornith and Z.ai card scores are not reproduced here.