MLX LM v0.32.0 runs Kimi K3, DeepSeek-V4.1 and MiniMax M3 on your Mac

2 hours ago

MLX LM v0.32.0 runs Kimi K3, DeepSeek-V4.1, MiniMax M3 (text only) and Meta's Muse Glimmer on Apple silicon Macs, splits Qwen3 MoE, Qwen 3.5 and more across several Macs, adds KV cache quantization to the server and a new terminal interface for chat and LoRA, and fixes CVE-2026-5843: loading a model no longer runs a Python file named in its config unless you enable trust_remote_code. It now requires Python 3.11 or newer, MLX 0.32.2 and transformers 5.7. https://github.com/ml-explore/mlx-lm/releases/tag/v0.32.0 https://github.com/ml-explore/mlx-lm/compare/v0.31.3...v0.32.0 https://github.com/advisories/GHSA-9m9w-53g9-47c4

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00MLX LM v0.32.0 runs Kimi K3, DeepSeek-V4.1 and MiniMax M3 on your Mac
  2. 0:1501: New models
  3. 0:16Kimi K3 runs in 2-bit across two Mac Studios
  4. 0:29MiniMax M3 arrives as text only
  5. 0:43Meta's Muse Glimmer 30B runs its text model in MLX LM
  6. 0:58Mistral 4, OLMo Hybrid and Ling-3.0 join the list
  7. 1:0502: Several Macs, one model
  8. 1:07Qwen3 MoE splits across Macs, and pipelining decodes faster
  9. 1:20Pipeline splitting reaches Qwen 3.5, Qwen2 and Qwen3-Next
  10. 1:3403: Chat and the server
  11. 1:36The MLX LM server can quantize its KV cache
  12. 1:50mlx_lm.chat and LoRA training get a new terminal interface
  13. 2:04Prefill step size cuts peak memory at 128K context
  14. 2:2104: Fixes you may have hit
  15. 2:23DeepSeek-V3.2 and GLM keep their recall past 128K tokens
  16. 2:38Tool calls parse on text, and Mistral keeps parallel calls
  17. 2:52FP8 checkpoints and XTC sampling stop producing garbage
  18. 3:0805: Before you upgrade
  19. 3:10Loading a model no longer runs its Python file without trust_remote_code
  20. 3:27MLX LM v0.32.0 needs Python 3.11, MLX 0.32.2 and transformers 5.7
Show transcript

MLX LM v0.32.0 runs Kimi K3, DeepSeek-V4.1 and MiniMax M3 on your Mac

MLX
MLX LM v0.32.0
Kimi K3, DeepSeek-V4.1, MiniMax M3 and Meta's Muse Glimmer now load on your Mac.
mlx_lm/models/kimi_k3.py · deepseek_v41.py · minimax_m3_vl.py · compare v0.31.3…v0.32.0
Part 01

MLX LM now runs Kimi K3, DeepSeek-V4.1, MiniMax M3 and Meta's Muse Glimmer on your Mac. It also splits more big models across several Macs, and loading a model no longer runs its code.

01: New models

MLX
LM
Release notes
01
New models
ml-explore/mlx-lm · compare v0.31.3…v0.32.0
Part 01

New models.

Kimi K3 runs in 2-bit across two Mac Studios

MLX
LM
Release notes
Kimi K3
2-bit mixed quant
2 × M3 Ultra
tool-call parser
mlx_lm/models/kimi_k3.py · tool_parsers/kimi_k3.py · PR #1626
Part 01

Kimi K3 from Moonshot AI loads, with its own tool-call parser. A 2-bit mixed quantization of it generates text split across two Mac Studios with M3 Ultra chips.

MiniMax M3 arrives as text only

MLX
LM
Release notes

MiniMax M3 arrives, text only

  • 427B mixture of experts, about 23B active
  • Vision tower and MiniMax Sparse Attention come later
mlx_lm/models/minimax_m3_vl.py · PR #1398
Part 01

MiniMax M3 loads too, a 427B mixture of experts with about 23B active per token. For now it is text only: the vision tower and MiniMax Sparse Attention are left for a later change.

Meta's Muse Glimmer 30B runs its text model in MLX LM

MLX
LM
Release notes

Meta's Muse Glimmer 30B, text model

Apache-2.0. Ready-made bf16, 8-bit and 4-bit builds on mlx-community.
mlx_lm/models/muse_glimmer.py · PR #1710
Part 01

Meta's Muse Glimmer 30B is supported as a text model; the loader strips the vision encoder. It is Apache licensed, and mlx-community already hosts full-precision, 8-bit and 4-bit builds.

Mistral 4, OLMo Hybrid and Ling-3.0 join the list

MLX
LM
Release notes

Also new: three more families

Mistral 4
OLMo Hybrid
Ling-3.0
mlx_lm/models/mistral4.py · olmo_hybrid.py · bailing_moe_v3.py
Part 01

Mistral 4, OLMo Hybrid, and Ling-3.0 through the new Bailing V3 architecture all load in this release.

02: Several Macs, one model

MLX
LM
Release notes
02
Several Macs, one model
ml-explore/mlx-lm · compare v0.31.3…v0.32.0
Part 02

Several Macs, one model.

Qwen3 MoE splits across Macs, and pipelining decodes faster

MLX
LM
Release notes

Qwen3 MoE now splits across Macs two ways

Pipeline
28 tok/s
Tensor parallel
25 tok/s
Qwen3-235B-A22B, 4-bit, two MacBooks over Thunderbolt 5
mlx_lm/models/qwen3_moe.py · PR #1774 · PR #1801
Part 02

Qwen3's mixture-of-experts models can now be split across Macs by layers or by tensors. On two MacBooks running the 235B model, splitting by layers decodes about 16 percent faster.

Pipeline splitting reaches Qwen 3.5, Qwen2 and Qwen3-Next

MLX
LM
Release notes

Pipeline splitting reaches more models

  • Qwen 3.5, Qwen2 and Qwen3-Next
  • DeepSeek-V3.2 moves onto the shared pipeline code
  • Uneven splits no longer drop layers
mlx_lm/models/qwen3_5.py · qwen2.py · qwen3_next.py · pipeline.py
Part 02

Qwen 3.5, Qwen2 and Qwen3-Next gain the same layer splitting, and DeepSeek-V3.2 moves onto the shared pipeline code. A split that didn't divide evenly used to drop layers; that is fixed.

03: Chat and the server

MLX
LM
Release notes
03
Chat and the server
ml-explore/mlx-lm · compare v0.31.3…v0.32.0
Part 03

Chat and the server.

The MLX LM server can quantize its KV cache

MLX
LM
Release notes

The server can quantize its KV cache

787 MB227 MB
a 2,048-token prompt's cache, 16-bit against 4-bit
Peak memory falls 17–26% on prompts up to 1,024 tokens and rises 13% at 2,048.
mlx_lm/server.py · mlx_lm/SERVER.md · PR #1832
Part 03

The MLX LM server can now quantize its KV cache. At 4-bit, a 2,048 token prompt's cache shrinks from about 790 megabytes to 230, though peak memory rose at that length.

mlx_lm.chat and LoRA training get a new terminal interface

MLX
LM
Release notes

A new terminal interface for chat and LoRA

mlx_lm.chat with the new interface
Model and settings up top, commands for exit, reset and help, and a dark and a light theme.
mlx_lm/cli_ui.py · mlx_lm/chat.py · mlx_lm/lora.py · PR #1344
Part 03

The chat command and LoRA fine-tuning get a new terminal interface. Chat shows the model and settings in a panel, with one-key commands to exit, reset and get help, in dark and light themes.

Prefill step size cuts peak memory at 128K context

MLX
LM
Release notes

Generate and chat can trade prefill speed for memory

40 GB29 GB
peak memory at 128K context, step 2,048 against 512
mlx_lm/generate.py · mlx_lm/chat.py · PR #1781
Part 03

Generate and chat now take a prefill step size, which the server already had. At a 128K token context, smaller steps cut peak memory by about 11 gigabytes, with generation speed unchanged.

04: Fixes you may have hit

MLX
LM
Release notes
04
Fixes you may have hit
ml-explore/mlx-lm · compare v0.31.3…v0.32.0
Part 04

Fixes you may have hit.

DeepSeek-V3.2 and GLM keep their recall past 128K tokens

MLX
LM
Release notes
0/55/5
needle-in-a-haystack recall at 131,072 tokens
mlx_lm/models/deepseek_v32.py · glm_moe_dsa.py · PR #1454
Part 04

Past about 128K tokens, DeepSeek-V3.2 and GLM quietly attended to only the last 2,048 tokens, with no warning. Long-context recall went from zero of five to five of five.

Tool calls parse on text, and Mistral keeps parallel calls

MLX
LM
Release notes

Tool calls come through intact

  • Tool and reasoning parsing now reads the text, not the tokens
  • Mistral keeps parallel and multiple tool calls
  • Qwen3 Coder keeps float-formatted and malformed arguments
mlx_lm/generate.py · tool_parsers/mistral.py · tool_parsers/qwen3_coder.py
Part 04

Tool and reasoning parsing now switches state on the generated text, because the same string can arrive as different tokens. Mistral keeps parallel tool calls, and Qwen3 Coder stops dropping calls with odd arguments.

FP8 checkpoints and XTC sampling stop producing garbage

MLX
LM
Release notes

Two ways to get garbage output are gone

  • FP8 compressed-tensors checkpoints now raise an error
  • XTC threshold defaults to 0.1, up from 0.0
  • Tiny top-p keeps the most likely token
mlx_lm/utils.py · mlx_lm/sample_utils.py · PR #1877 · PR #1372
Part 04

FP8 checkpoints used to load as 4-bit and generate garbage; now they fail with a message to dequantize first. The XTC sampler's default threshold moves to 0.1, so turning XTC on without a threshold no longer wrecks the output.

05: Before you upgrade

MLX
LM
Release notes
05
Before you upgrade
ml-explore/mlx-lm · compare v0.31.3…v0.32.0
Part 05

Before you upgrade.

Loading a model no longer runs its Python file without trust_remote_code

MLX
LM
Release notes

Loading a model no longer runs its own Python

CVE-2026-5843: a model_file in config.json now needs trust_remote_code
mlx_lm/utils.py · CVE-2026-5843 · PR #1385
Part 05

A model whose config named its own Python file got that file run on a plain load. That is CVE-2026-5843. Those models now load only when you turn on trust remote code; other models load as before.

MLX LM v0.32.0 needs Python 3.11, MLX 0.32.2 and transformers 5.7

MLX
LM
Release notes

This release needs Python 3.11 or newer

  • A newer MLX release
  • transformers 5.7 or newer
MLX LM v0.32.0 release notes, on GitHub
pyproject.toml · github.com/ml-explore/mlx-lm/releases/tag/v0.32.0
Part 05

The minimum Python moves to 3.11, so anyone on an older Python stays on the previous release. It also needs a recent MLX and transformers 5.7. The MLX LM release notes on GitHub list everything else.