mlx-optiq
Family guide · Mage-VL

Mage-VL on Apple Silicon

Mage-VL is Microsoft's 5B vision-language model that reads still images and video. It pairs a from-scratch Mage-ViT visual encoder with a Qwen3-4B language model. It is the first video model in the OptiQ lineup, and the quant runs entirely on Apple Silicon with no PyTorch.

Needs OptiQ 0.4.8+ Stock mlx-lm has no mage_vl class, so OptiQ ships a vendored, mlx-native port of the vision tower that registers with mlx-lm on import optiq and loads the bf16 vision sidecar. This is the same vendored approach used for dhara and nanbeige. Run pip install "mlx-optiq>=0.4.8", then import optiq before mlx_lm.load. For image and video input, serve it with optiq serve.

The quant

OptiQ quantizes only the language tower and keeps the vision tower at bf16 in a sidecar, so one checkpoint does text, image, and video.

PropertyValue
ModelMage-VL-OptiQ-4bit · base microsoft/Mage-VL
ArchitectureMage-ViT vision encoder + Qwen3-4B language model, ~5B params
Language towermixed 4/8-bit · 164 layers at 4-bit, 90 at 8-bit · 5.90 bpw
Vision towerbf16, kept in optiq/optiq_vision.safetensors (297 tensors)
On disk3.7 GB (3.0 GB language + 0.63 GB vision)

It reads images and video

Both of these ran through the quantized model on Apple Silicon, MLX only. The input is shown, and the quote below each one is what the model returned.

A dog sitting on a patterned rug, the image given to Mage-VL
Image input.
A dog is sitting on a rug in front of a patterned rug.
Three frames sampled from a soccer broadcast, the video given to Mage-VL
Video input: three of the six frames sampled from a soccer broadcast.
A man is reporting on a soccer game.

Capability Score

The standard OptiQ six-metric text eval. Strong for a 4B language tower, and it does function calling well once the tools are in the prompt. Long-context multi-hop retrieval (HashHop) is the weak spot.

MetricScore
MMLU (5-shot, 969 samples)74.6%
GSM8K (1000 samples)88.7%
IFEval (full set, strict)68.6%
BFCL-V3 simple (200 calls)88.5%
HumanEval (164 problems, pass@1)76.2%
HashHop (long-context retrieval)25.0%
Capability Score (mean of 6)70.27

Hello world

Text-only generation loads directly through mlx-lm once OptiQ has registered the architecture.

hello.pypython
import optiq  # registers the mage_vl arch + vision sidecar
from mlx_lm import load, generate

model, tok = load("mlx-community/Mage-VL-OptiQ-4bit")
print(generate(model, tok, prompt="Hello", max_tokens=100))

Image and video input

For pixels, serve the model over the OpenAI and Anthropic compatible endpoint, then send an image (or sampled video frames) as image_url content.

serve.shbash
$ optiq serve --model mlx-community/Mage-VL-OptiQ-4bit

Video is handled as sampled frames. The DCVC neural codec in the base repo is an optional efficiency path and is not needed here.

How the sidecar works OptiQ quantizes only the language tower; the Mage-ViT vision tower stays at bf16 in optiq/optiq_vision.safetensors. mlx-lm globs model*.safetensors, so it ignores the sidecar, and the same published repo loads text-only under stock mlx-lm and full VLM under OptiQ. The vision tower was reimplemented in MLX and checked bit-exact against the reference, with a max absolute difference of 1.7e-3 in float32.