MTPLX 2.7.0: Qwen3.8 support 🎉

Qwen3.8-27B came out on 14 August. This release runs it the way the model card says it should be run, with three MTPLX builds tuned for it, FP16 versions of all three for M1 and M2 Macs, and a longer compiled verify window that helps every model. It also fixes a CPU drain in the SSD session cache and a crash on macOS 27.

Every speed number below was measured on one M5 Max with fans verified at maximum, die temperature gated before each run, one request at a time, generation running to the model's own stop. Other Macs will land elsewhere. Nothing here was measured on M1 or M2.

Qwen 3.8, served properly

There is a new qwen3_8 model family in the engine and the app. It carries Qwen's official inference contract instead of the Qwen 3.6 coding defaults:

The 3.8 trunk keeps the 3.6 hybrid attention layout, so the whole kernel stack transfers as is: compiled verify graphs, the custom verify kernels and the GQA fast paths engage identically, with the same load-time self-check on your own chip.

Three builds, calibration included

Each build states its measured calibration in its own runtime metadata: recommended draft sampler (Bare Speed 0.6, the Optimized pair 1.0), tuned MTP depth (3 for all three), and peak memory measured on that build. The runtime reads that metadata ahead of profile fallbacks, so a build launches at its own tuned depth even when the serving profile disagrees, and the app and the CLI launch every 3.8 build identically because neither pins a draft sampler of its own any more.

Sizes shown in the app and CLI are the exact byte sums of the published Hub files, and the peak memory numbers are measured, not inherited from a 3.6 sibling.

What the default is now

mtplx quickstart, mtplx start and the app's first-run picker offer the whole 3.8 line-up in the same order with the same one-line descriptions: Optimized Speed as the recommended default, then Bare Speed, then Optimized Quality (Quality is hidden on 32 GB Macs because its measured 33 GB peak does not fit there). Qwen 3.6 Optimized Speed V2 stays directly below them and keeps its turbo profile.

If you already use MTPLX and your last run used the recommended default, mtplx start says once that the default moved and from which model, instead of quietly relabeling. The app keeps whatever model you had; it does not switch you.

FP16 builds for M1 and M2

M1 and M2 have no native bf16, so every 3.8 build has an FP16 sibling on the Hub (Youssofal/Qwen3.8-27B-MTPLX-...-FP16). They are the identical model: every quantized pack is byte for byte the parent's (498 of 498 per build), and every 16-bit tensor is the bf16 value cast to fp16 (99.992% of elements exact; the remaining 0.008% are magnitudes below 7.6e-6 rounded on the fp16 subnormal grid, largest error 3.0e-8, none overflow). No bf16 tensor is left in any of them.

The M1/M2 tier of the CLI and the app routes to the FP16 siblings automatically: same three picks, same order, same descriptions, and the OpenCode config names the id the server actually advertises (mtplx-qwen38-27b-...-fp16). All three launch on turbo like their parents and pass the fp16 kernel self-check at boot; if a chip ever disagrees, the affected lane falls back to the stock path on its own.

Compiled verify to 32k

Since July the compiled verify graph stopped at 12,288 tokens of context, because a KV copy tax at the time made longer compiled windows a regression. That tax is gone, so turbo now compiles verify to 32,768 tokens. Interleaved A/B on Qwen 3.8 Bare Speed under die-temperature gates: the compiled path beat the eager fallback in every paired epoch (48.5 against 45.4 tok/s at 20k context, +6.9%), with flat peak memory at 20k and lower at 30k (25.4 GB against 28.5 GB; the eager path is the one that spikes). Past the fence the same custom kernels run eagerly, exactly as before. MTPLX_COMPILED_VERIFY can now be set by hand for parity and exactness runs against the shipped profile.

Coding agents

App

Fixes

Thermal honesty

Forge

Known issues, fixed in 2.7.1

QA for this release

Thanks

@joshlacal for the macOS 27 crash report and fix (#256, #257), and everyone who filed the download and mirror reports behind #259.