Views
No views yet
KQuant-17GB-Q4_K_M passes this project's quality
bar against the BF16 checkpoint it came from — margin-qualified top-1
99.25%, mean KLD 0.030, against a bar of ≥97% and ≤0.05. It is a
well-made file.--type-plan can write q8_0, q4_0, q3_k and f16 — no k-quants. The
closest candidate clears margin-qualified top-1 at 97.75% and misses mean
KLD at 0.056, and every route to the missing ~11% of divergence costs
more bytes than the comparator has.xyntetik-runner — tool calls that still parse when the budget runs outWhen a tool call runs past its token budget, Runner closes it to the smallest schema-legal document, so the arguments still parse.
finish_reason: "length" with an empty or malformed tool_calls the caller has to repair or retry. Runner does forced-truncation recovery: once a JSON document starts, it emits a legal ending when the budget expires. On local models — tight context, slow generation — that is the difference between an agent loop that finishes and one that retries from scratch.tool_choice:"required", temperature 0, budgets 1→64):| engine | budget too small (1–16 tokens) | enough budget (64, control) |
|---|---|---|
| Runner | executable tool_calls, arguments parse | completes |
| vLLM 0.27.1 | no call; protocol framing leaks into content | completes |
| llama.cpp b10488 | no call; leak, then tool_calls with unparseable args | completes |
| Ollama 0.32.14 | no call; empty content, then HTTP 500 | completes |
| TensorRT-LLM 1.2.1 † | no call; <tool_call> leak, then empty content | completes |
| SGLang 0.5.17 † | no call; <tool_call> leak, then empty content | completes |
1# build the single binary (no deps), then serve this GGUF:
2runner -m Muse-Glimmer-30B-KQuant-17GB-Q4_K_M.gguf --serve
3# point any OpenAI-compatible client at http://localhost:8080/v1tools. Evidence:
docs/muse-atem-cert-2026-08-11.md.1python3 convert_hf_to_gguf.py Muse-Glimmer-30B/ --outtype bf16 \
2 --outfile Muse-Glimmer-30B-BF16.gguf # llama.cpp 521a64cdd22e290d242aaf1eee6ee185e15e905fce41afba5fb03ac22aad7c08a0603406. The vision
encoder is not converted — mmproj is a separate upstream file and Runner has
no vision path — and the tokenizer and vocabulary are untouched, multimodal
special tokens included. Full detail in PROVENANCE.md.| arm | bytes | vs Meta | plain top-1 | margin-qualified | mean KLD | verdict |
|---|---|---|---|---|---|---|
| BF16 parent vs itself (zero point) | 55,725,514,176 | — | 100.00% | 100.00% | 0.000 | exact |
Meta KQuant-17GB-Q4_K_M | 16,756,683,904 | — | 90.25% | 99.25% | 0.030 | passes |
| M1 — FFN Q3_K, everything else Q8_0 | 16,492,547,520 | ‑1.6% | 80.25% | 92.00% | 0.123 | fails |
| M2 — M1 + embed/output Q4_0 | 15,147,716,032 | ‑9.6% | 79.25% | 92.00% | 0.125 | fails |
M4 — Q3_K except attn_k/v + output | 13,801,180,608 | ‑17.6% | 77.00% | 89.75% | 0.170 | fails |
M5 — gate/up Q3_K, ffn_down Q4_0, embed Q4_0 | 16,065,605,056 | ‑4.1% | 83.00% | 94.50% | 0.090 | fails |
M7 — no Q3_K at all: Q4_0 but attn_v Q8_0 | 15,730,568,640 | ‑6.1% | 89.50% | 97.75% | 0.056 | fails |
nemotron_h_moe, where every tensor
carrying mass has a row width that is an odd multiple of 128 and Q3_K is
silently declined.) Q3_K being available turned out not to help.token_embd and output
from Q8_0 to Q4_0: 1.35 GB saved (‑8.2%) for a KLD move of 0.123 → 0.125.
On a 202k-token vocabulary that is the cheapest 1.3 GB on the table, and it is
reusable knowledge for any plan on this checkpoint.ffn_down is the sensitive FFN tensor — Meta's own file says so. Meta
protects ffn_down with Q6_K on 26 of 52 layers while leaving ffn_gate/
ffn_up at Q4_K. Moving only ffn_down off Q3_K to Q4_0 (M5) improved
0.123 → 0.090 for +0.9 GB, with gate/up still at Q3_K. The asymmetry is
real and reproducible.ffn_down at Q8_0 alone adds 3.45 GB and lands at 19.2 GB against Meta's
16.76 GB.--quantize to WRITE Q4_K/Q5_K/Q6_K. Runner reads them already. Until it can
write them, a Runner-built selective quant cannot match a well-made k-quant at
the 4-bit size point on a dense model — measured here, not assumed.1git clone https://github.com/Joakimpalm-Zen/xyntetik-runner && cd xyntetik-runner
2make && ./runner --version # runner 0.1.20-alpha
3
4# size a plan from the header before spending a build on it — this also
5# catches a rule the quantizer will silently decline
6python3 scripts/type-plan-size.py Muse-Glimmer-30B-BF16.gguf plans/plan-m7-allQ4_0-attnQ4.json
7
8./runner -m Muse-Glimmer-30B-BF16.gguf --quantize m7.gguf \
9 --type-plan plans/plan-m7-allQ4_0-attnQ4.json
10
11# zero point first — it must read exactly 0.0 / 100% / 100%
12python3 scripts/kld-compare-raw.py --model-a Muse-Glimmer-30B-BF16.gguf \
13 --model-b Muse-Glimmer-30B-BF16.gguf --runner ./runner \
14 --corpus tests/fixtures/mixed-corpus.txt --max-positions 400 --out zero.json
15python3 scripts/kld-compare-raw.py --model-a m7.gguf \
16 --model-b Muse-Glimmer-30B-BF16.gguf --runner ./runner \
17 --corpus tests/fixtures/mixed-corpus.txt --max-positions 400 --out m7.jsonplans/ was confirmed exact against the built file
(M2 predicted 15,147,716,032 and built 15,147,716,032; M5 and M7 likewise).--kv q8, which is a separate
runtime profile and is never folded into a weight claim.docs/muse-glimmer-cert-2026-08-11.md in the Runner repo certifies the
k-quant at sha256 7e9b74b7…; upstream has since re-published it and the
current blob is 4cc57c0f…, 2,848 bytes longer. The numbers here use the
current file.USAGE_POLICY.md, reproduced here verbatim as the
upstream repository requires.