The Tess-4 family
Tess-4 models are post-trained on 64K-token long-context agentic traces — real engineering work done with Fable-5, not synthetic single-turn data. Reasoning style is distilled from a three-model teacher ensemble (Opus-4.8, GPT-5.5, and GLM-5.2) into coherent deliberation patterns, using explicit <think>…</think> blocks for private reasoning before the visible answer.
The same dataset and recipe produced Tess-4-27B (dense), which community BenchLocal runs placed first at 81% (122/150) ahead of larger models including Qwen3.6-35B-A3B and Gemma-4-31B (community-reported; see Tess-4-27B discussions).
Tess-4-35B-A3B applies that recipe to the MoE base: 35B-class capacity with sparse activation for local/interactive use.
Why Tess-4 is different
- Weight-scaled reasoning — keeps routine steps tight; pours deliberation into planning, debugging, synthesis, and judgment calls.
- Agentic by design — native/parallel tool use and multi-step problem solving over real codebases and docs.
- Long-context post-train — 64K-token agentic traces; base architecture supports up to 262K positions.
- Multimodal — Qwen3.6 vision path retained in the checkpoint (
vision_config, image/video token IDs).
- Honest, not sycophantic — trained toward grounded pushback over flattery (family claim from Tess-4-27B card).
Architecture (from config.json)
Table with columns: Property, Value| Property | Value |
|---|
| Layers | 40 |
| Hidden size | 2048 |
| Attention | Hybrid: gated-delta-net linear attention, with full GQA every 4th layer (full_attention_interval: 4) |
| Full-attn heads | 16 query heads · 2 KV heads · head_dim 256 |
| Experts | 256 total · 8 active per token |
| MoE intermediate | 512 (shared expert intermediate also 512) |
| Vocab | 248,320 |
| RoPE |
Sparse activation is the practical win on local hardware: ~3B active parameters per token with a wide expert pool.
Qwen3.5-family chat template with explicit think blocks (embedded as chat_template.jinja in this repo):
<|im_start|>user
Your prompt here<|im_end|>
<|im_start|>assistant
<think>
… private reasoning …
</think>
… visible answer …<|im_end|>
- transformers:
processor.apply_chat_template(messages, add_generation_prompt=True)
- llama.cpp:
--jinja (template is in the GGUFs / can be loaded from this repo’s jinja file)
Tool calling is intended to work through the same chat template path (family + GGUF card).
Table with columns: Repo, Format, Notes| Repo | Format | Notes |
|---|
| migtissera/Tess-4-35B-A3B (this model) | BF16 Safetensors | Full weights; ~72 GB across 26 shards |
| migtissera/Tess-4-35B-A3B-GGUF | GGUF + native MTP | Q8_0 / Q6_K / Q4_K_M trunks with spliced MTP for self-speculation in a supporting llama.cpp fork |
| Author announcements | NVFP4 and other optimized profiles | Mentioned on release; check the author’s org for latest quants |
GGUF + MTP (summary)
The GGUF repo is not a plain trunk dump: each main file embeds a multi-token-prediction (MTP) block for native self-speculative decoding (no separate -md draft model). Author-reported gains on Apple M4 Max (128 GiB), production gate p_min=0.70, include roughly +23–50% decode on code-heavy loads (e.g. Q8_0 code ~75 → ~110 tok/s). Every draft token is verified by the full trunk.
Important runtime notes (from the GGUF card):
- Built/validated on the opt-minimax branch of a trinity-cloud llama.cpp fork (
--spec-type draft-mtp). Untested on stock llama.cpp; extra blk.40.* tensors may be rejected by strict loaders.
- Use
-np 1 for speculation.
- Always set
--spec-draft-p-min 0.70 (default 0.0 ungated drafting hurts throughput and greedy reproducibility).
- For strict eval harness determinism, serve without speculation flags (rare near-tie argmax flips possible under long greedy + MTP, worse on coarser quants).
Example (GGUF / fork):
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
Quickstart
Requires a recent transformers with Qwen3.5 / Qwen3.6 MoE multimodal support.
import torch
from transformers import AutoProcessor, AutoModelForImageTextToText
model_id = "migtissera/Tess-4-35B-A3B"
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForImageTextToText.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
messages = [
{
"role": "user",
"content": "Refactor this function and explain your reasoning.",
}
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
out = model.generate(**inputs, max_new_tokens=1024)
print(processor.decode(out[0][inputs["input_ids"].shape[-1] :], skip_special_tokens=True))
Multimodal: pass image (+ text) content blocks the same way as other Qwen3.5-VL / Qwen3.6 multimodal checkpoints (see Tess-4-27B card for a worked image example).
vLLM / SGLang
# vLLM (version must support qwen3_5_moe)
vllm serve migtissera/Tess-4-35B-A3B
# SGLang
python3 -m sglang.launch_server \
--model-path migtissera/Tess-4-35B-A3B \
--host 0.0.0.0 \
--port 30000
Pin stack versions that explicitly list Qwen3.6-35B-A3B / qwen3_5_moe support; older builds will fail on architecture or hybrid attention.
llama.cpp (GGUF)
Prefer the GGUF repo and a runtime that understands the architecture (and MTP morph if you want speculation). For plain trunk decode, serve without --spec-type.
# Example: HF-hub launch of a quant tag (app/runtime dependent)
llama-server -hf migtissera/Tess-4-35B-A3B-GGUF:Q4_K_M --jinja -c 32768 -ngl 99
What it’s good at
- Agentic coding — explore unfamiliar repos, plan changes, run multi-step tool loops.
- Long-context technical work — large codebases and docs with relatively cheap KV on this hybrid stack.
- Judgment calls — structured analysis with evidence-backed pushback rather than default agreement.
- Interactive local use — MoE sparsity targets single-machine decode; MTP GGUFs push decode further on supporting runtimes.
Hardware ballpark
Table with columns: Setup, Rough expectation| Setup | Rough expectation |
|---|
| BF16 full weights | Multi-GPU or high-VRAM; ~72 GB weights alone before KV |
| GGUF Q4_K_M (~22 GB) | Fits many 24 GB class GPUs with room for context; fastest trunk among published MTP set |
| GGUF Q8_0 (~38 GB) | Higher fidelity; needs more VRAM/unified memory |
| Apple M4 Max 128 GB (author figures) | Interactive decode; MTP Q8 code workloads reported ~110 tok/s class under gated speculation |
Context is comparatively cheap: author note ~20 KB/token scale when raising server context on this architecture (only a minority of layers keep full KV). Keep server -c ≥ client ceiling.
Code samples above that load migtissera/Tess-4-35B-A3B work unchanged against this mirror if you swap in this repo id.
Credits
- Model weights & Tess-4 training: Migel Tissera — original release migtissera/Tess-4-35B-A3B.
- Base architecture: Qwen/Qwen3.6-35B-A3B by the Qwen team.
- This repository: Unofficial mirror. Weights are a straight copy of the original; the only local addition is this README (upstream BF16 card was empty). Not affiliated with or endorsed by the author unless stated otherwise.
License
Apache License 2.0, inherited from the original model / Qwen base. Redistribution here does not change the license terms.
Citation
The original author release:
@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/Tess-4-35B-A3B}
}
Unofficial mirror of Tess-4-35B-A3B (Migel Tissera) with documentation only. Community evaluations for the MoE variant are still catching up to the denser Tess-4-27B BenchLocal results; treat third-party scores as provisional until more independent runs land.