mlx-optiq
Family guide · Muse-Glimmer

Muse-Glimmer on Apple Silicon

Muse-Glimmer-30B is a 30B image-text reasoning model. It answers in two channels, thinking to itself before it replies, and it holds the highest Capability Score in the OptiQ lineup.

The architecture

52 decoder layers with gated attention. Three layers in four use a 2048-token sliding window and the fourth attends globally, which is what keeps memory flat as context grows while still letting the model reach back across a long document. It reasons before it answers, in a separate channel.

Nothing else implements this family: stock mlx-lm has no class for it, neither does mlx-vlm, and the checkpoint asks for a newer transformers than OptiQ pins. OptiQ ships an MLX-native port of both towers, checked against the reference implementation and matching to float32 round-off, so answers are the base model's rather than an approximation.

The quant

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

PropertyValue
ModelMuse-Glimmer-30B-OptiQ-4bit · base meta-models/Muse-Glimmer-30B
Architecture52-layer decoder, gated attention, sliding window 2048 on 3 layers in 4, ~30B params
Language towermixed 4/8-bit · 169 layers at 4-bit, 248 at 8-bit · 5.10 bpw
Vision towerbf16, kept in optiq/optiq_vision.safetensors (806 tensors)
On disk18.6 GB language + 3.5 GB vision

The sweep measured all 417 projections. Sensitivity falls steadily with depth, so the early layers keep their precision and the back half gets compressed:

LayersMean bits
0–126.88
13–256.50
26–386.27
39–515.85

Capability Score

The standard OptiQ six-metric text eval, and the highest score in the lineup. Perfect long-context retrieval, and the strongest GSM8K we have measured.

MetricScore
MMLU (5-shot, 969 samples)83.1%
GSM8K (1000 samples)92.1%
IFEval (full set, strict)80.6%
BFCL-V3 simple (200 calls)88.5%
HumanEval (164 problems, pass@1)79.9%
HashHop (long-context retrieval)100.0%
Capability Score (mean of 6)87.36

Two channels

Muse-Glimmer reasons before it answers, and it separates the two. The reasoning goes to self and the user-facing reply to user:

raw outputtext
to=self<|message|>April: 48. May: half as many = 24. Total 72.<|eom|>
<|start|>assistant to=user<|message|>In April she sold 48 clips.
48 + 24 = 72 clips altogether.

Read the final channel, not the whole string. The reasoning restates the question and floats candidates it then rejects, so anything parsing the raw output will pick up numbers the model did not commit to. The same applies to tool calls, which arrive in an <atem:invoke> block rather than the more common <tool_call> JSON.

Hello world

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

model, tok = load("mlx-community/Muse-Glimmer-30B-OptiQ-4bit")
msgs = [{"role": "user", "content": "Explain why the sky is blue."}]
prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
print(generate(model, tok, prompt=prompt, max_tokens=800))

Give it room. It is a reasoning model, and a short token budget cuts it off mid-thought before the answer channel opens.