---
library_name: mlx
pipeline_tag: image-text-to-text
base_model: XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B
base_model_relation: quantized
tags:
- mlx
- qwen3_5
- mimo_v2
- image-text-to-text
---
# MiMo-V2.6-Distill-Qwen-9B — MLX mixed 3/6-bit
mlx-vlm recipe `mixed_3_6`.
22 quantized modules at 6-bit and 228 quantized modules at 3-bit.
Converter-reported size: 5.018 bits/weight, as printed by mlx-vlm 0.7.2. Not independently recomputed.
## What this is
Format conversion of [XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B](https://huggingface.co/XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B) at commit `f2773fb482ac3dd047a4af4003b86e56b7225d0d` into MLX safetensors. Produced with mlx-vlm 0.7.2 and mlx 0.32.2 (CUDA 13 wheel) on spark-d500 (NVIDIA GB10). The four source shards matched the Hub LFS SHA-256 values before conversion.
This is not a new training run. Upstream describes the checkpoint as a supervised fine-tune of [Qwen/Qwen3.5-9B](https://huggingface.co/Qwen/Qwen3.5-9B) on MiMo-generated agent data (code, general agent tasks, visual coding, cybersecurity). Upstream benchmark numbers were not re-run here.
The pinned upstream card does not declare a license. This repository redistributes converted weights of that public checkpoint.
## Architecture
- `Qwen3_5ForConditionalGeneration` / `model_type: qwen3_5`
- Text: 32 layers, hidden 4096, 16 query heads / 4 KV heads, full attention every 4th layer, config context 262144
- Vision: Qwen3.5 vision tower, depth 27, hidden 1152, patch 16
- Chat template is the upstream MiMo v2.6 template shipped in `chat_template.jinja`
## Quantization
Mixed recipes are mlx-vlm's built-in predicates, not a sensitivity search. Group size 64, affine mode. The predicate skips multimodal modules, so the vision tower stays BF16.
The 22 high-bit overrides, read from `config.json` on mixed-4-6 and the same pattern on the other mixed builds, are:
- `embed_tokens` and `lm_head`
- `down_proj` in layers 0, 1, 2, 3, 6, 9, 12, 15, 18, 21, 24, 27, 28, 29, 30, 31
- `v_proj` only in full-attention layers 3, 15, 27, 31
The other 228 quantized modules use the lower width. Those 22 / 228 figures are quantization-override entries, not safetensor tensor counts. Mixed builds store 1260 tensors because quantized weights are split into weight, scales, and biases. BF16 stores 760 tensors.
On mixed builds, top-level `quantization.bits` is 4. That is mlx-vlm's default field. The per-module `bits` entries are what was applied.
## Smoke
CUDA smoke on spark-d500, device `gpu:0`, mlx-vlm 0.7.2. One greedy generation per build, `max_tokens=64`, `temperature=0.0`. Prompts went through `apply_chat_template(..., enable_thinking=False)`. The formatted text prompt ended in `` and had no image token. The image prompt contained `<|vision_start|><|image_pad|><|vision_end|>`.
Text prompt: `What is 15% of 240? Answer with the number only.`
Image-input smoke, mixed-4-6 only: a 64x64 solid red PNG, `What color is the square in the image? Answer with one word.`
| Build | Kind | Pass | Output |
| --- | --- | --- | --- |
| `bf16` | text | yes | `36` |
| `mixed-3-5` | text | yes | `36` |
| `mixed-3-6` | text | yes | thinking block, then `36` |
| `mixed-3-8` | text | yes | thinking block, then `36` |
| `mixed-4-6` | text | yes | `36` |
| `mixed-4-6` | image-input | yes | `Red` |
| `mixed-4-8` | text | yes | `36` |
`mixed-3-6` and `mixed-3-8` emitted a `` block even though the prompt closed thinking, then the number. `mixed-3-5` wrapped the number in `` tags. That is a quality difference on this one prompt, not a load failure. No perplexity or benchmark was run. Decode rates and peak memory are not reported: the BF16 call was cold, later outputs were 3–64 tokens, and peak memory stayed at the BF16 process high-water mark.
The pass/output log is `smoke-results.json` in this repo.
## Usage
```python
from mlx_vlm import load, generate
from mlx_vlm.prompt_utils import apply_chat_template
model, processor = load("DJLougen/MiMo-V2.6-Distill-Qwen-9B-MLX-mixed-3-6")
prompt = apply_chat_template(
processor,
model.config,
"What is 15% of 240? Answer with the number only.",
num_images=0,
enable_thinking=False,
)
print(generate(model, processor, prompt, max_tokens=64, temperature=0.0).text)
```
For an image, pass `num_images=1` and the image path to `generate`. Image-input smoke was only run for mixed-4-6.
## Provenance
| Item | Value |
| --- | --- |
| Source | `XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B` |
| Source revision | `f2773fb482ac3dd047a4af4003b86e56b7225d0d` |
| Converter | mlx-vlm 0.7.2, mlx 0.32.2 CUDA 13 |
| Machine | spark-d500, NVIDIA GB10 |
| Source shard check | SHA-256 matched Hub LFS hashes for all 4 shards |
| Smoke | `smoke-results.json` from the conversion host, 2026-09-21 |