Downloads · 30 days
407
16% of all-time downloads
nathansutton/Qwen3.8-27B-UD-Q3_K_XL-MTP-MLX
Qwen3.8-27B-UD-Q3_K_XL-MTP-MLX is a text generation model from nathansutton. Use it when you need the model to write or continue text. It is set up for mlx.
An MLX quantization of Qwen/Qwen3.8-27B for running locally on Apple Silicon — the default model for chad, a Claude-Code-style local coding agent.
Downloads · 30 days
407
16% of all-time downloads
All-time downloads
2.5K
Public
Parameters
26.9B
12.3 GB on disk
Likes
3
Public
Click a slice to open those files.
.safetensors12.3 GB · 100%
How the weights are stored.
U3226.9B · 100%
From the Hugging Face model README
An MLX quantization of
Qwen/Qwen3.8-27B for running locally on Apple Silicon —
the default model for chad, a Claude-Code-style
local coding agent.
The naming follows Unsloth's Dynamic 2.0 convention (UD-Q3_K_XL = a dynamic quant that spends extra bits on the layers that matter) so the scheme is recognizable at a glance. It is not literally a llama.cpp k-quant — this is an MLX group-64 affine quant produced by our own per-module predicate (the bulk low-bit, sensitive layers high), with the bit allocation chosen by measured held-out perplexity per gigabyte across candidate recipes.
mtp.safetensors is the checkpoint's own trained MTP head, quantized to 4-bit
group-64 and bundled alongside the weights. chad loads it as a sidecar and uses it
for self-speculative decoding: draft several tokens with the head, verify them in
one batched forward, accept by exact rejection sampling — so greedy output is
token-identical to the unspeculated path and sampled output keeps the model's true
distribution at any temperature.
The filename matters. mlx-lm globs model*.safetensors, so mtp.safetensors is
invisible to the base loader — which is the point. Named model-mtp.safetensors it
would be picked up by the base loader, has_mtp_weights would go true in
qwen3_5.TextModel.sanitize, and every norm weight would get a second +1.0 shift:
silent corruption, no error.
chat_template.jinja differs from upstream in exactly one line: the default
reasoning_effort is medium, where upstream defaults to xhigh. Pass
reasoning_effort explicitly to override it.
With chad (auto-downloads this model on first run):
uvx chad-code
Or directly with mlx-lm:
from mlx_lm import load, generate
model, tok = load("nathansutton/Qwen3.8-27B-UD-Q3_K_XL-MTP-MLX")
print(generate(model, tok, "Write a haiku about quantization.", max_tokens=64))
Inherits the license of the base model
Qwen/Qwen3.8-27B. Review it before use or redistribution.