mlx-optiq
Family guide · Laguna

Laguna on Apple Silicon

Laguna-XS-2.1 is a sparse mixture-of-experts reasoning model from poolside, built for coding and agentic work. The OptiQ quant runs at about 4.5 bits per weight (20 GB on disk) with per-layer bit-widths set by a KL-divergence sensitivity pass. It is a reasoning model, so it thinks before it answers; give it a generous token budget.

Needs OptiQ 0.4.7+ Stock mlx-lm has no laguna class, so OptiQ ships a vendored, mlx-native port of the architecture (sigmoid MoE with a shared expert, QK-norm, GLM partial-rotary, a softplus attention gate, and hybrid full and sliding attention with dual RoPE) that registers with mlx-lm on import optiq. Run pip install "mlx-optiq>=0.4.7", then import optiq before mlx_lm.load.

The quant

ModelSize on diskAvg precisionCapability Score
Laguna-XS-2.1-OptiQ-4bit20 GB~4.5 bpw mixed85.81

Capability Score

The six-metric Capability Score is the unweighted mean of MMLU, GSM8K, IFEval, BFCL, HumanEval, and HashHop. Laguna was scored in reasoning mode, the setting that measures an always-on thinking model fairly. At 85.81 it sits just behind our best quant, Qwen3.6-27B.

BenchmarkOptiQ-4bit
MMLU (reasoning, 969)86.2%
GSM8K (1000)95.6%
IFEval (strict)76.5%
BFCL-V3 simple (200 calls)89.0%
HumanEval (pass@1)83.5%
HashHop (long-context)84.0%
Capability Score85.81
A note on tool calls Laguna emits a tool call as <tool_call>name<arg_key>k</arg_key><arg_value>v</arg_value></tool_call>, a key and value tag format rather than JSON. OptiQ's eval and server both read that dialect, so BFCL scores its function calls correctly (89.0%) and agent loops work through optiq serve.

Hello world

hello.pypython
import optiq  # registers the laguna arch with mlx-lm
from mlx_lm import load, generate

model, tok = load("mlx-community/Laguna-XS-2.1-OptiQ-4bit")
prompt = tok.apply_chat_template(
    [{"role": "user", "content": "Write a Python function that returns the nth Fibonacci number."}],
    tokenize=False, add_generation_prompt=True,
)
print(generate(model, tok, prompt=prompt, max_tokens=400))