Tmax-9B & Tmax-27B
Hamish Ivison's hybrid Gated-DeltaNet agent model — and the first family Rapid-MLX took from "broken on import" to "first-class end-to-end tool calling" on Apple Silicon. We publish every quant and own the alias config.
Pick a size and run it
- 16 GB Mac:
rapid-mlx serve tmax-9b(4-bit, ~4.7 GB of weights) - 24–32 GB Mac:
rapid-mlx serve tmax-27b(4-bit, ~14 GB) — ortmax-9b-6bit/tmax-9b-8bitfor the small model at higher precision - 48 GB Mac:
rapid-mlx serve tmax-27b-6bit(~20 GB) - 64 GB Mac or larger:
rapid-mlx serve tmax-27b-8bit(~27 GB)
Tool calling works out of the box: the aliases select the
qwen3_xml tool-call parser and the hybrid-cache path for
you. The endpoint is OpenAI-compatible at
http://localhost:8000/v1; examples are
below.
Download
Every alias on this page downloads with one command — the pull buttons in the tables below copy it. 5 of the 7 aliases on this page are mirrored on the rapid-mlx CDN; the rest pull from Hugging Face directly — with automatic mid-pull fallback to Hugging Face if a mirror file slows down. Weights land in the standard Hugging Face cache, and rapid-mlx serve pulls automatically on first use. Live mirror status →
Why Tmax matters
Tmax is a hybrid Gated-DeltaNet architecture — a 3:1 ratio of RNN-style Gated-DeltaNet blocks to full self-attention. The RNN blocks give it constant per-token memory cost (no quadratic KV explosion at long context) while the attention blocks keep recall strong on agentic workloads. It comes out of Hamish Ivison's agent-tuning lineage at Ai2 and inherits that family's bias toward tool use and code.
For a Mac, this is interesting because the RNN portion means the memory footprint at 64k or 128k context is dramatically smaller than a pure-attention model of the same parameter count. You can hold Tmax-27B 4-bit plus a comfortable working context inside 24 GB of RAM.
Quants we publish
All quants live under mlx-community. The Rapid-MLX aliases below resolve to these repos automatically:
Tmax-9B family
| alias | hf repo | weights | recommended for | get it |
|---|---|---|---|---|
| tmax-9b | mlx-community/Tmax-9B-MLX-4bit | ~4.7 GB | ≤16 GB Macs — MacBook Air M1/M2/M3 base | CDN |
| tmax-9b-6bit | mlx-community/Tmax-9B-MLX-6bit | ~6.8 GB | 24 GB sweet spot | CDN |
| tmax-9b-8bit | mlx-community/Tmax-9B-MLX-8bit | ~8.9 GB | 32 GB · highest quality at 9B | CDN |
| tmax-9b-bf16 | mlx-community/Tmax-9B-MLX-bf16 | ~17 GB | research / fine-tuning baseline | CDN |
Tmax-27B family
| alias | hf repo | weights | recommended for | get it |
|---|---|---|---|---|
| tmax-27b | mlx-community/Tmax-27B-MLX-4bit | ~14 GB | ≤32 GB Macs | CDN |
| tmax-27b-6bit | mlx-community/Tmax-27B-MLX-6bit | ~20 GB | 48 GB · quality-throughput sweet spot | HF |
| tmax-27b-8bit | mlx-community/Tmax-27B-MLX-8bit | ~27 GB | 64 GB+ · highest quality at 27B | HF |
We deliberately do not publish a tmax-27b-bf16 — the
~54 GB footprint is prohibitive for the small set of machines that
could load it, and the 8-bit quant is within KLD noise of bf16.
Engineering notes
What it takes for rapid-mlx serve tmax-9b to just work.
These notes are a starting point for anyone porting other
hybrid-Gated-DeltaNet models.
Phantom vision tower in the config
The Tmax checkpoints declare Qwen3_5ForConditionalGeneration
in config.json — a class that includes a vision tower
stub — but ship zero vision-tower tensors in the safetensors
shards. Standard mlx-lm sanitization fails on the
missing keys at load time. We strip the vision-tower entries during
MLX conversion before publishing, so the quants at
mlx-community/Tmax-*-MLX-* load cleanly.
Hybrid cache path
Tmax needs the hybrid (RNN + attention) KV path; without it, the
cache is treated as fully rewindable and prefix-cache hits corrupt
the RNN state. Every Tmax alias (9B and 27B, all quants) ships with
is_hybrid: true, which also keeps the speculative-decode
and suffix-decode paths that are unsound on hybrids switched off.
Tool-call parser
Both 9B and 27B use the qwen3_xml tool-call parser —
they emit Qwen3-style <tool_call>…</tool_call>
XML blocks rather than JSON-fenced or Hermes-style envelopes. The
alias config wires this in by default, so OpenAI-shape
tools=[…] requests round-trip cleanly without any
client-side massaging.
Request examples
$ rapid-mlx serve tmax-9b # or, for the larger model: $ rapid-mlx serve tmax-27b
Chat completion (cURL)
$ curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "tmax-9b", "messages": [ {"role": "user", "content": "Plan a weekend in Kyoto."} ] }'
Tool call (Python)
from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-used") tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Get the current weather for a city.", "parameters": { "type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"], }, }, }] resp = client.chat.completions.create( model="tmax-27b", messages=[{"role": "user", "content": "Weather in Osaka?"}], tools=tools, ) print(resp.choices[0].message.tool_calls)
Benchmarks
Measured on a Mac Studio M3 Ultra with rapid-mlx 0.8.19,
single-stream, median of 3 rounds — the same numbers as the model
cards at mlx-community/Tmax-27B-MLX-*. This is the only
Tmax measurement we have; it has not been re-run on the current
engine.
Tmax-27B
| quant | RAM footprint | prefill @ 16k | tool-call latency |
|---|---|---|---|
| 4bit | ~14 GB | 311.2 tok/s | 2180.9 ms |
| 6bit | ~20 GB | 303.4 tok/s | 2488.5 ms |
| 8bit | ~27 GB | 308.3 tok/s | 2680.6 ms |
Prefill is "tokens per second of input ingestion at a 16k-token
context"; tool-call latency is end-to-end time from request to
parsed tool_calls array on a small toolchain.
Full single-stream / multi-stream tables live on the
HF model
card and the
engine
README.
References
- Upstream Tmax repo: github.com/hamishivi/tmax
- MLX quant family: huggingface.co/mlx-community (search "Tmax")
- Alias config:
rapid_mlx/aliases.json