Groot-19B-A3B — TTQ quant set
TTQ (TokenTinkerer Quant) is an eleven-rung GGUF ladder for GrootTeam/Groot-19B-A3B-261023, from 3.56 bpw to 8.50 bpw (7.88 → 18.59 GiB), plus a Q8_0 vision projector for the model's 27-block ViT. Every rung uses our TTQ recipe — the same per-tensor shape we built for the Qwen3.6-35B-A3B TTQ ladder and then replayed onto the Cyber-Tiel TTQ ladder, now applied to Groot by exact tensor name — because Groot and Cyber-Tiel share the identical 753-tensor name set. Every rung was verified against the expected per-tensor map from our Cyber-Tiel build: 10/10 exact. Every number below is a measurement on this box, not an estimate.
The source is better than any TTQ set has had before. These rungs are quantized directly from a BF16 conversion of the original model (
GrootTeam/Groot-19B-A3B-261023, 38.9 GB, 753 tensors,sha256 4c69e32f…), which we built and verified tensor-by-tensor against the safetensors payload — bit-identical body, exact F32 upcasts, documented V-head reorder. There is no requantization step anywhere in this ladder, so unlike our Cyber-Tiel set every rung inherits no upstream quantization noise. The BF16 file is also the KLD reference for every row below, and it ships in this repo asGroot-19B-A3B-261023-BF16.gguf(35.4 GiB).
The ladder
KLD is KL divergence against the BF16 reference's logits, measured over 40 fixed chunks of 512
tokens (lower is better; ± is the standard error over chunks). top-1 is same-top-token
agreement. Two corpora, fixed and identical for every row: code (70% code / 10% diff / 10%
terminal / 10% config from a frozen agentic eval split) and wikitext-2 test. Rows in bold
are this set; the last row is upstream's only published GGUF, measured by the same protocol on the
same box so the columns are directly comparable.
| file | declared type | GiB | bpw | code KLD ± | code top-1 | wiki KLD ± | wiki top-1 |
|---|---|---|---|---|---|---|---|
Groot-19B-A3B-TTQ-3.56bpw-IQ3_XXS.gguf |
IQ3_XXS (23) | 7.88 | 3.56 | 0.052631 ± 0.001539 | 92.39% | 0.063697 ± 0.001198 | 87.43% |
Groot-19B-A3B-TTQ-3.72bpw-IQ3_XS.gguf |
IQ3_XS (22) | 8.23 | 3.72 | 0.047863 ± 0.001494 | 92.69% | 0.053595 ± 0.001020 | 88.45% |
Groot-19B-A3B-TTQ-3.87bpw-Q3_K_S.gguf |
Q3_K_S (11) | 8.55 | 3.87 | 0.040031 ± 0.001433 | 93.29% | 0.047536 ± 0.001012 | 89.64% |
Groot-19B-A3B-TTQ-4.09bpw-Q3_K_M.gguf |
Q3_K_M (12) | 9.06 | 4.09 | 0.031842 ± 0.001109 | 94.03% | 0.037841 ± 0.000875 | 90.33% |
Groot-19B-A3B-TTQ-4.34bpw-IQ4_XS.gguf |
IQ4_XS (30) | 9.60 | 4.34 | 0.025918 ± 0.001027 | 94.57% | 0.028927 ± 0.000615 | 91.68% |
Groot-19B-A3B-TTQ-4.70bpw-IQ4_NL.gguf |
IQ4_NL (25) | 10.39 | 4.70 | 0.015894 ± 0.000558 | 95.81% | 0.021609 ± 0.000699 | 92.58% |
Groot-19B-A3B-261023-Q4_K_M (upstream) |
Q4_K_M (15) | 10.86 | 4.80 | 0.025780 ± 0.000715 | 94.51% | 0.033124 ± 0.000627 | 91.10% |
Groot-19B-A3B-TTQ-5.05bpw-Q4_K_M.gguf |
Q4_K_M (15) | 11.17 | 5.05 | 0.012791 ± 0.000406 | 96.08% | 0.018195 ± 0.000502 | 93.40% |
Groot-19B-A3B-TTQ-5.73bpw-Q5_K_S.gguf |
Q5_K_S (16) | 12.68 | 5.73 | 0.009432 ± 0.000294 | 96.72% | 0.014180 ± 0.000406 | 94.40% |
Groot-19B-A3B-TTQ-6.16bpw-Q5_K_M.gguf |
Q5_K_M (17) | 13.63 | 6.16 | 0.006510 ± 0.000265 | 97.20% | 0.010011 ± 0.000220 | 94.82% |
Groot-19B-A3B-TTQ-6.76bpw-Q6_K.gguf |
Q6_K (18) | 14.96 | 6.76 | 0.005081 ± 0.000177 | 97.55% | 0.008637 ± 0.000339 | 95.67% |
Groot-19B-A3B-TTQ-8.50bpw-Q8_0.gguf |
Q8_0 (7) | 18.59 | 8.50 | 0.004526 ± 0.000220 | 98.02% | 0.007521 ± 0.000197 | 95.78% |
Full filenames are Groot-19B-A3B-TTQ-<bpw>bpw-<type>.gguf. Total 124.75 GiB for the eleven
rungs, plus a 586 MiB projector.
Read it against upstream. The author publishes exactly one GGUF, Q4_K_M at 10.86 GiB. This
ladder brackets it from both sides:
Groot-19B-A3B-TTQ-4.34bpw-IQ4_XS.gguf(9.60 GiB) is 11.6% smaller and measures the same code KLD (0.02592 vs 0.02578 — a 0.1 σ difference) with better prose (0.0289 vs 0.0331).Groot-19B-A3B-TTQ-4.70bpw-IQ4_NL.gguf(10.39 GiB) is 4.3% smaller with 38% lower code KLD and 35% lower wikitext KLD.- Everything from 5.05 bpw upward is strictly more accurate, and bigger.
How to read the names
Two independent fields:
<bpw>bpwis whatllama-quantizereported for that rung — the number the filename carries, the same convention as our other TTQ ladders. It runs ~2.5% above the rate you get by dividing the file's bytes by 19.43 B (3.48 for the3.56bpwfile, 8.22 for the8.50bpwone): the quantizer measures the tensors it quantizes, while the file also carries the 301 F32 tensors. The GiB column is exact — it isstaton the file.- The trailing token is the file's declared
general.file_typeand is distinct across the whole set — if two files declare the same ftype the Hub's download selector collapses them.
Which rung should I use?
| if you want | use | why |
|---|---|---|
| the smallest that still works | 3.87 bpw Q3_K_S (8.55 GiB) | linear K-quant, not a codebook — the IQ3_* rungs are smaller but slower on CPU and worse on both corpora |
| the best quality per byte | 4.34 bpw IQ4_XS (9.60 GiB) | matches upstream's Q4_K_M code KLD at 11.6% smaller |
| the best balance | 4.70 bpw IQ4_NL (10.39 GiB) | 95.8% top-1 on code, 38% cleaner than upstream at 4.3% smaller — the pick of the set |
| daily coding at high fidelity | 5.73 bpw Q5_K_S (12.68 GiB) | 0.0094 code KLD, 96.7% top-1 |
| near-ceiling, sensible | 6.76 bpw Q6_K (14.96 GiB) | within 11% of Q8_0 for 3.6 GiB less — see below |
| effectively lossless | 8.50 bpw Q8_0 (18.59 GiB) | the ceiling of this ladder; quantizes the 432 body weights to 8-bit and keeps 301 tensors F32 |
Does the top of the ladder pay?
No, and this is the useful result. Q8_0 costs +24% size over Q6_K (14.96 → 18.59 GiB) and returns −11% code KLD (0.00508 → 0.00453) and −13% wikitext (0.00864 → 0.00752). The two code means differ by ~2 σ: real, but small.
Q8_0 was built deliberately as the ladder's maximum-quality cap, and it earns its place as a practically-lossless artifact to compare against — not as a quality upgrade. Q6_K is where this model's quantization stops paying. This is the same shape the earlier TTQ work found (the Q6_K → Q5_K_M cliff, then a flat top), now quantified on this model.
Note the recipe: the Q8_0 rung is the only one not shaped by the TTQ body map. It is pure
Q8_0 on the 432 quantizable body tensors (301 stay F32: norms, ssm_a, ssm_dt, ssm_conv1d,
routers), with the TTQ MTP map layered on top. No importance matrix was passed — Q8_0
treats every tensor identically, so a matrix has nothing to choose.
Vision projector
Groot is a vision-language model, but llama.cpp's GGUF path for qwen35moe keeps the vision tower
out of the model file — upstream ships it separately, and so do we.
| file | bytes | note |
|---|---|---|
mmproj-Groot-19B-A3B-261023-Q8_0.gguf |
614,194,176 | −32% vs upstream's F16 (902,822,016), 334 tensors |
It is 11.0 BPW rather than 8.5 because 224 of the 334 tensors are F32 (norms and the merger) and stay F32, while 27 fall back to F16 because their dims are not Q8_0-block divisible.
Serving
llama-server -m Groot-19B-A3B-TTQ-4.70bpw-IQ4_NL.gguf \
-ngl 99 -ncmoe 40 --ctx-size 32768 --jinja
--n-cpu-moe Nkeeps the MoE weights of the first N layers on the CPU.- MTP drafting:
--spec-type draft-mtp --spec-draft-n-max 2— 2–3 tokens ahead; deeper is not better, because later drafts are mostly rejected. - Vision:
--mmproj mmproj-Groot-19B-A3B-261023-Q8_0.gguf --image <file>on a build withqwen35moevision support, plus--no-mmproj-offloadif you want the encoder on CPU to keep more layers on the GPU or more headroom.
Sampling
Use the presets the base model publishes — they are the model's own recommendations, not ours:
| when | settings |
|---|---|
| General tasks, thinking mode | --temp 1.0 --top-p 0.95 --top-k 20 --min-p 0 --presence-penalty 1.5 --repeat-penalty 1.0 |
| Precise coding (e.g. WebDev) | --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0 --presence-penalty 0 --repeat-penalty 1.0 |
| Instruct / non-thinking | --temp 0.7 --top-p 0.80 --top-k 20 --min-p 0 --presence-penalty 1.5 --repeat-penalty 1.0 |
Flags are llama.cpp's names for the equivalent parameters, and framework support for individual samplers varies. All KLD and top-1 figures in this card are sampler-independent — deterministic passes, not generations — so no measurement here depends on the choice.
How these were made
- BF16 source.
convert_hf_to_gguf.py --outtype bf16from the safetensors release (llama.cppa37cc461), 38,006,441,824 bytes, 753 tensors. Verified three ways: every non-GDN tensor byte-identical to the source payload, F32 tensors exact upcasts, the GDN grouped→tiled V-head reorder (PR #19468) reproduced exactly; norms storedw+1; functional check PPL 3.2520 on the eval corpus. - Importance matrix. Built from our frozen agentic calibration split — 108 documents, 464
chunks of 512 tokens, the eight content-type slices held within 0.4 pp of their weights
(code .38 / tool_output .15 / reasoning .13 / docs .11 / diff .06 / terminal .07 / config .05 /
meta .05).
llama-imatrix --parse-special --no-ppl, KV pinnedf16. It covers 510 of the 753 tensors — every expert, shared-expert, attention/GDN projection and router; nothing ontoken_embd,output,blk.40or the norms.
Measurement protocol
Same harness for every row — the one every TTQ ladder in this account is measured with — on the same 8 GB VRAM / 32 GB RAM box.
- KLD / top-1 / PPL: divergence against a stored reference produced by the BF16 file itself,
40 chunks of 512 tokens, KV pinned to
f16, a single greedy deterministic pass.±is the standard error over chunks. - Null test: the BF16 source against its own reference returns
Mean KLD −0.000000 ± 0.000000, same-top-p 99.990%. The harness contributes nothing. - The code corpus is the frozen agentic eval split's code/diff/terminal/config documents, reduced to payload (system preambles and reasoning blocks stripped; tool-call and tool-response wrappers kept), interleaved 7:1:1:1 so the measured window carries the mix rather than being 100% code. 26,892 tokens.
- The prose corpus is wikitext-2 test, 40 × 512 — the same protocol as our other ladders, which keeps the wikitext column comparable across our repos (the code column is not: the corpus and its mix differ).
Benchmarks
Greedy, single pass, same harness and packs as our other TTQ ladders. The rung column is a header because this is the only rung we benchmark; more rows land as runs finish, as a new commit rather than a new model — and all three TTQ cards are updated together when a result lands.
| 4.70 IQ4_NL (10.39 GiB) | benchmark | Qwen TTQ 3.93 (15.85 GiB) | Cyber-Tiel 3.92 (16.22 GiB) | reference: base model (full precision) | notes |
|---|---|---|---|---|---|
| 86 | GPQA Diamond, 198 q | 84.8 | 88 | 85.35 published (thinking, temp 1.0) | pass@1, greedy — ±2.5 SE |
| 84.3 | LiveCodeBench v6, 1,055 problems | 79.9 | 86.5 | 85.69 published (thinking) | pass@1, greedy — ±1.1 SE |
| 98.2 | HumanEval, 164 problems | 97.0 | 98.2 | no published figure | pass@1, greedy — 161/164, ±1.0 SE |
| pending | MMLU-Redux, 5,330 q | 92.6 | pending | no published figure | accuracy, answer-match, greedy |
| 92 | IFEval, 541 prompts | 93.05 | pending | no published figure | prompt-level accuracy (strict/loose), greedy — ±1.2 SE |
The Qwen TTQ 3.93 and Cyber-Tiel 3.92 columns are context, not controls — different 35B
fine-tunes at the same ladder position, measured by the same harness on the same packs. Sizes are in
the headers for that reason: this rung is 10.39 GiB against their 15.85 and 16.22 — 5.8 GiB smaller
than Cyber-Tiel yet within 0.2 points of it on HumanEval and 2 points on GPQA.
HumanEval 98.2 (161 of 164) is a "not broken" result, not a ranking one. 164 short Python problems sit close to ceiling for models of this class — Cyber-Tiel scores the same 98.2 — and ±1.0 SE at n=164 means the two are indistinguishable. What it establishes is that the 4.70 bpw rung still writes working functions on the standard set; LiveCodeBench is the unsaturated code benchmark and will say more when it runs.
IFEval 92 on 541 prompts holds instruction following at 4.70 bpw — within a point of Qwen's 93.05 on the same pack, and ±1.2 SE at that n makes the gap noise. This is the row that would move first if quantization had cost the model its format compliance, so it is the useful negative result.
LiveCodeBench 84.3 is the one row where the sign is against us — 1,055 problems, no saturation to hide behind, and the base published 85.69. That is −1.4 points, ≈1.2 σ: not significant on its own, but it is the largest gap in this table and the first that is both unsaturated and comparable, so it is where a small real quantization loss would show. Contrast Cyber-Tiel at 86.5 — 2.2 points higher from a file 5.8 GiB larger, which is the trade this ladder is making: at 4.70 bpw you spend a little competitive-programming accuracy to save most of the size.
The reference column is the base model's own published number, which is what makes the GPQA row
readable: 86 against 85.35 is +0.65, ≈0.2 σ — no measurable degradation at 4.70 bpw. The base
figure is thinking mode at default reasoning effort with temp=1.0, top_p=0.95, top_k=20; ours is a
single greedy pass, the stricter protocol of the two. At n=198 only a >5-point collapse resolves in
one run, so read it as "not damaged", not "improved".
The base card publishes sixteen benchmarks (Terminal-Bench 2.1 52.10, SWE-bench Pro 49.79, Toolathlon Verified 42.90, NL2Repo 35.65, ALE 29.59, SWE-bench Verified 31.66, LiveCodeBench v6 85.69, GPQA 85.35, HLE 21.21 / 32.39 with tools, LongBench v2 62.03, BFCL v4 74.13, plus AutomationBench, JobBench, DeepSWE, BigCodeBench Hard). We do not re-run that suite per rung — it is agentic and hours per cell, while KLD resolves quantization damage far more sharply. The rows we do run are set against those published figures wherever the protocol allows.
Limits and things that did not work
- The vision tower is not in the model files. Every rung is a text GGUF. Images need this repo's
mmprojand a build withqwen35moevision support. - Q8_0 does not pay (see above): +24% size for −11% code KLD.
IQ3_XXSis dominated byQ3_K_S: 0.64 GiB smaller, but worse on both corpora and slower on CPU (codebook tables). It exists to complete the ladder, not to be recommended.
Credits and licence
Base model GrootTeam/Groot-19B-A3B-261023
(Apache-2.0), which also provides the F16 projector this repo's mmproj is quantized from.
The ladder is our own design — TokenTinkerer's. It is the same TTQ recipe we built for our Qwen3.6-35B-A3B TTQ ladder and then replayed onto our Cyber-Tiel TTQ ladder; Groot is the third model it has been applied to, unchanged. Cyber-Tiel is where the recipe was previously used, not where it came from. The BF16 conversion, importance matrix, quantization, measurements and this card are all TokenTinkerer's work.
Licence inherited from the base model: Apache-2.0. The GGUF ladder is text-only; the mmproj is a
quantized derivative of upstream's F16 projector.