MTPLX 2.5.0 prepares the engine for the next Qwen architecture while making today's coding-agent workflows more dependable. It also lands David Tai's DeepSeek V4, Laguna, and GDN performance work as explicit experimental lanes, without changing the conservative defaults existing users rely on.
The MTP runtime no longer assumes a single draft layer. It now honors
mtp_num_hidden_layers = N, and a checkpoint with a new model_type can load
through the architecture class it declares instead of waiting for a hard-coded
name to ship in MTPLX.
Because Qwen 3.8 weights were not public during this release gate, we did not
pretend to benchmark them. We instead ran a synthetic qwen3_8 alias drill
through model loading, generation, CLI discovery, and the app catalog. This
removes the known integration blockers and leaves real-weight validation as
the first task when the checkpoint appears.
The bridge used to confuse a large JSON write body with hidden raw tool markup and abort an otherwise valid call. It now distinguishes the dialects correctly and repairs common near-miss argument keys at the protocol boundary.
The release was exercised from the user's seat, not only with unit tests:
App and CLI launches now use the same coding-agent engine settings, and
start / quickstart --dry-run show the profile that will actually run.
HY3 now has an MTP-capable model implementation, official serving defaults, model discovery, suffixed think-tag handling, and native OpenCode tool calls. AR-only exports are detected and stay on the safe AR path instead of touching an uninitialized draft head.
David Tai's DeepSeek V4 work adds shape-specialized output-LoRA routes, adaptive speculative width, exact M3 attention projection, sinkhorn and attention-island kernels, and compiled post-attention verifier islands.
We downloaded the exact model used by the contribution
(mlx-community/DeepSeek-V4-Flash-2bit-DQ) and combined it with the official
DeepSeek MTP shard. It loads on this 128 GB Mac. Under verified maximum fans,
the candidate measured about 31 AR tok/s and 36 MTP tok/s, compared with about
4 AR and 6 MTP tok/s on the conservative path. Memory peaked around 102 GB.
The fast routes are opt-in. A real OpenCode edit proved that the engine and native tool call work, but the model then over-generated instead of completing the edit. That is why this release calls the lane experimental: the speed work is real, while broader agent-quality calibration is still required.
Thank you to David Tai (@davidtai) for the DeepSeek work in #223. His original commits and authorship are preserved in the release history.
Also from David Tai:
mlx.fast, includingBoth remain explicit opt-ins. They expand the performance frontier without quietly changing behavior for an existing installation.
The Qwen V2 baseline and candidate were run on separate installs in an alternating A/B sequence under verified maximum fans. The repeat pair put the candidate slightly ahead on decode and both prefill sizes; aggregate variation stayed within the heat/order noise band, with equal-or-lower candidate memory. There is no consistent decode, prefill, or memory regression.
The candidate also passed the complete Python suite (about 3,179 tests, zero failures), 547 Swift tests, signed-app build checks, and real visible app QA.
pip install -U mtplxbrew upgrade mtplxNo speculative-depth, cache, sampler, or speed default changed. Experimental kernel lanes fail closed to their established implementations.