--- license: apache-2.0 base_model: Qwen/Qwen3.6-35B-A3B language: - en pipeline_tag: text-generation tags: - gguf - llama.cpp - speculative-decoding - multi-token-prediction - mixture-of-experts - agentic - reasoning - tess --- # Tess-4-35B-A3B — GGUF with native MTP self-speculation **Reasoning that scales with the problem — now with decode speed that scales with your hardware.** Tess-4-35B-A3B is the Mixture-of-Experts member of the Tess-4 family: an agentic, thinking-native model that deliberates harder exactly when it matters, on an architecture light enough to run interactively on a single consumer machine. These are not ordinary GGUFs. Each file carries the model's **multi-token-prediction (MTP) block spliced back in**, enabling native self-speculative decoding in llama.cpp — **+23–50% decode throughput, with the trunk weights byte-identical to a standard conversion**. Every speculative proposal is verified by the full model before acceptance; reduced precision exists only on the proposal path. ## The Tess-4 family Tess-4 models are trained by [Migel Tissera](https://huggingface.co/migtissera) on **64K-token long-context agentic traces — real engineering work done with Fable-5** — not synthetic single-turn data. Reasoning is distilled from a **three-model teacher ensemble (Opus-4.8, GPT-5.5, and GLM-5.2)** into coherent deliberation patterns, using explicit `...` blocks for private reasoning before the visible answer. The same dataset and recipe produced [Tess-4-27B](https://huggingface.co/migtissera/Tess-4-27B), which ranks **first on BenchLocal at 81% (122/150), ahead of larger models including Qwen3.6-35B and Gemma-4-31B**. Tess-4-35B-A3B applies that recipe to **Qwen3.6-35B-A3B**: a 40-block hybrid MoE — gated-delta-net linear attention with full GQA every fourth layer, 256 experts with 8 active (~3B active parameters), 262,144-token trained context. The sparse activation is what makes it special on local hardware: you get 35B-class breadth at ~3B-class decode cost, and with the MTP morph below, over 100 tokens/second on an Apple M4 Max. ## What's in this repo | File | Size | Use | |---|---:|---| | `Tess-4-35B-A3B-Q8_0-MTP-Q4D-Q4H-PV64K.gguf` | 37.7 GB | Reference quality; cleanest determinism record | | `Tess-4-35B-A3B-Q6_K-MTP-Q4D-Q4H-PV64K.gguf` | 29.4 GB | Mid-size | | `Tess-4-35B-A3B-Q4_K_M-MTP-Q4D-Q4H-PV64K.gguf` | 22.0 GB | Smallest, fastest trunk | | `mtp-Qwen3.6-35B-A3B-Q4_0.gguf` | 1.2 GB | Donor: MTP block (rebuilds only — not needed to run) | | `Qwen3.6-35B-A3B-base.gguf` | 3.7 GB | Donor: MTP block, BF16 master (rebuilds only) | | `tess-draft-head-Q4_0.gguf` | 0.3 GB | Donor: Tess draft head (rebuilds only) | Naming: `MTP` = embedded nextn block, `Q4D`/`Q4H` = Q4_0 draft block/head, `PV64K` = pruned 65,536-token draft vocabulary (the draft's LM-head matvec drops ~75% of its bytes; the full head remains in-file as a fallback via `LLAMA_MTP_PRUNED_HEAD=0`). ## Requirements Built and validated on the `opt-minimax` branch of the trinity-cloud llama.cpp fork, which provides the `--spec-type draft-mtp` runtime and the pruned-vocab draft path. On llama.cpp builds without MTP support these files are untested — the extra `blk.40.*` tensors may be rejected by stricter loaders. Single-stream serving (`-np 1`) is required for speculation. ## Quickstart ```bash llama-server -m Tess-4-35B-A3B-Q8_0-MTP-Q4D-Q4H-PV64K.gguf \ -c 32768 -ub 2048 -np 1 -ngl 99 -fa on --jinja --metrics \ --spec-type draft-mtp \ --spec-draft-n-max 5 --spec-draft-n-min 0 --spec-draft-p-min 0.70 \ --host 127.0.0.1 --port 8787 ``` No separate draft model (`-md`) — the MTP block lives inside the GGUF. The chat template (Qwen3.5-family, `` blocks) is embedded; `--jinja` enables it, and tool calling works through it. ``` <|im_start|>user prompt<|im_end|> <|im_start|>assistant reasoning answer<|im_end|> ``` Context is cheap on this architecture (only ~10/40 layers carry KV): raising `-c` toward the trained 262,144 costs roughly 20 KB/token. Keep the server context at or above your client's ceiling, with client-side compaction triggering a margin below it. ## Measured performance Apple M4 Max (128 GiB), llama.cpp fork `opt-minimax`, greedy decoding, production speculation config (`n_max=5, p_min=0.70`), 32K context: | Variant | Workload | No speculation | MTP | Draft acceptance | |---|---|---:|---:|---:| | Q8_0 | code, 1536 tok | 74.8 t/s | **109.9 t/s** (+47%) | 88.9% | | Q8_0 | prose, 768 tok | 80.0 t/s | **92.4 t/s** (+15%) | 84.9% | | Q8_0 | mixed sweep, 1024 tok | 70.7 t/s | **102.6 t/s** (+45%) | 85.9% | | Q4_K_M | code, 1536 tok | 98.6 t/s | **120.9 t/s** (+23%) | 90.9% | | Q4_K_M | prose, 768 tok | 99.1 t/s | **103.0 t/s** (+4%) | 82.4% | | Q6_K | prose, 768 tok | 80.9 t/s | **106.8 t/s** (+32%) | 84.5% | | Q6_K | code, 1536 tok | 80.8 t/s | ~128 t/s¹ | 91.9% | ¹ Divergent token stream (see determinism notes); ballpark only. Speculation never degrades output quality: the trunk verifies every drafted token, and rejected proposals cost only the draft step. Warm long-form code generation on Q8_0 reached 116.8 t/s. ## Important: run it gated The llama.cpp binary default for `--spec-draft-p-min` is **0.0 (ungated)**. If you launch with `--spec-type draft-mtp` and forget the flag, deep low-confidence drafting silently degrades both throughput at depth (acceptance measured collapsing from 85.9% to 54.5%) **and** greedy reproducibility versus non-speculative decode. Always pass `--spec-draft-p-min 0.70`. Per-request override of speculation parameters is disabled in the fork's server, so a correctly launched server cannot be un-gated by clients. ## Determinism notes (read before building eval harnesses) With the production config, greedy MTP output was verified token-identical to non-speculative decode on multi-prompt probes: Q8_0 to 1536 tokens plus a 1024-token sweep, Q4_K_M to 1536 tokens. Serving a PV64K file *without* speculation flags is verified byte-identical to a plain trunk conversion — so these files fully substitute for the originals in non-speculative use. One open, characterized deviation: on very long generations, speculative and non-speculative greedy decode can diverge at a rare near-tie token (different kernel batch widths → last-ulp numeric differences → an occasional argmax flip between near-equal candidates). Both branches are coherent greedy continuations; this is a reproducibility deviation, not a quality loss. Measured incidence scales with trunk quant coarseness: - **Q8_0:** ~1 flip per few thousand tokens on some prompts (first seen at ~token 110 of a 4096-token probe). - **Q4_K_M:** clean at all tested lengths (≤1536). - **Q6_K:** flips readily on code prompts (as early as ~token 10). If you need strict spec-vs-nospec determinism (evals, regression gates, reproducible pipelines), serve without the speculation flags. If you validate identity yourself, use ≥4096-token probes across several prompts — short probes provably miss this class. ## How these files were made The fine-tune's GGUF conversions are trunk-only (fine-tuning does not train the MTP block). The morph restores speculation ability with three parts: 1. **MTP block from the base model** — Qwen3.6-35B-A3B's trained `mtp.*` tensors, converted directly from the HF checkpoint and quantized to Q4_0. Draft-side precision affects only acceptance rate, never correctness. 2. **A Tess-native draft head** — this fine-tune's own `output.weight` (F16 source) quantized to Q4_0, so drafts rank tokens in Tess's distribution. Result: 82–92% acceptance, the same range the base model achieves drafting itself. 3. **A pruned 64K draft vocabulary** — bit-identical row copies of the Q4_0 head (non-normal tokens ∪ code-corpus tokens ∪ frequency-ordered BPE fill), scattered back to full-vocab logits at −inf, leaving sampling and confidence gating untouched. The trunk tensors are byte-for-byte the standard conversion. The three donor files in this repo are sufficient to rebuild the morph onto any future trunk requantization. ## Best practices - Production speculation config: **`n_max=5, n_min=0, p_min=0.70`**. Deeper ungated drafting is strictly worse on throughput *and* reproducibility. - Pick Q8_0 for maximum fidelity, Q4_K_M for speed/memory (its faster trunk narrows the relative MTP gain — the draft step is a fixed cost), Q6_K in between (weakest spec-determinism record of the three). - Greedy evals: serve without speculation flags. - Apple Silicon benchmarking: the M4 Max throttles hard under sustained load; only back-to-back A/Bs in one thermal state are comparable. ## License Apache 2.0, inherited from Qwen3.6-35B-A3B. ## Citation ```bibtex @misc{tess4-35b-a3b, title = {Tess-4-35B-A3B: an agentic, thinking-native Mixture-of-Experts model with native MTP self-speculation}, author = {Tissera, Migel}, year = {2026}, url = {https://huggingface.co/migtissera} } ```