Views
No views yet
Kwaipilot/KAT-Coder-V2.5-Dev with its
vision tower and MTP head restored from the base model it was fine-tuned from, quantized to
4-bit for Apple Silicon. 20 GB.| level | size | HumanEval pass@1 | MTP acceptance | tok/cycle |
|---|---|---|---|---|
| oQ8e | 36 GB | 0.8598 | 74.1% | 2.27 |
| oQ6e | 28 GB | 0.8659 | 75.5% | 2.46 |
| oQ4e | 20 GB | 0.8963 | 79.3% | 2.54 |
batch_size=1, thinking enabled, deterministic profile). The oQ8e
build scored 146/164 on an earlier run and 141/164 on the run in this table — a 5-problem swing on
an unchanged model, which is as large as the entire spread between levels. Speculative decoding plus
Metal batching numerics means "deterministic" is not bit-reproducible here. The honest conclusion is
that 8, 6, and 4-bit are indistinguishable on this benchmark, not that 4-bit is better.Read this first: what you need to load it.TheoQ4equantization is not a proprietary format. oQ writes standard mlx-lm safetensors with a standard per-module quantization config, and portable oQ models load in stock MLX apps.What makes this repo oMLX-only is the restored MTP head. Stockmlx-vlmdoes a strict load and rejects the 42 extralanguage_model.mtp.*tensors:ValueError: Received 42 parameters not in model. So as published this needs oMLX on Apple Silicon — for the MTP tensors, not the quant.Not loadable by llama.cpp, vLLM, or Transformers (MLX safetensors either way).
| source | |
|---|---|
| text weights | Kwaipilot/KAT-Coder-V2.5-Dev, unmodified (bit-exact; only the MoE expert tensor layout was converted) |
| vision tower (333 tensors) | Qwen/Qwen3.6-35B-A3B |
| MTP head (19 tensors) | Qwen/Qwen3.6-35B-A3B |
| quantization | oMLX oQ4 enhanced, group_size=64, affine, bf16 scales, 128x512 imatrix |
config.json is
byte-identical to Qwen/Qwen3.6-35B-A3B's except for one field, and the text architecture is
unchanged.oQ8e-mtp build of the stock base model — 2052
tensors, with the MTP head correctly switch_mlp-named.VLMBatchedEngine loaded, not the silent VLM to LLM
fallback that yields a vision-less model.Q in sk-7Qv3... reads as lowercase,
and a sparse 384x320 @64px image misreads. No regression against the oQ8e build.MTP[n] ... accept= line before trusting the
speedup — do not assume 4-bit is universally safe for MTP-preserved heads.build/merge_kat_vl.py
and build/graft_mtp.py, with full instructions in its
README. Budget ~146 GB of free disk; peak RAM is about 8 GB."oq_level": 4:1curl -X POST http://127.0.0.1:8899/admin/api/oq/start \
2 -H 'Content-Type: application/json' -d '{
3 "model_path": "'"$HOME"'/Models/_build/KAT-Coder-V2.5-Dev-VL",
4 "oq_level": 4, "enhanced": true, "dtype": "bfloat16", "group_size": 64,
5 "preserve_mtp": true }'mtp_enabled on the new model id — it is per-model and off by default, and a model with
MTP disabled logs no acceptance line at all, which is easy to misread as a collapsed head.mtp.*
tensors and set text_config.mtp_num_hidden_layers = 0 and the remainder is a portable oQ
checkpoint that loads in stock MLX apps; you lose speculative decoding, keep vision and the text
model.max_tokens cap. Long reasoning excursions stall rather than error in an agent loop.