MTPLX 2.9.0
Faster decode, smooth streaming at any context length, smaller model packs, and built-in model updates.
|
2.8.3 |
2.9.0 |
| Decode throughput |
baseline |
15 to 20% faster typical, up to 60% on code-heavy output |
| Visible stream freezes (8k context, ~100 tok/s) |
102 per session |
5 |
| Worst streaming stall (minified JSON) |
725 ms |
109 ms |
| CPU while streaming |
26 to 28% |
18 to 23% |
| CPU with Settings open while streaming |
82 to 97% |
30 to 37% |
| Qwen 3.8 pack downloads |
15 to 21 GB |
0.4 to 0.6 GB smaller per pack |
| Updating a pack you already have |
full re-download |
240 to 450 MB |
Engine
- Decode is 15 to 20% faster than 2.8.3 on typical workloads, combining the decoder work below with the re-quantized draft heads. Code-heavy generations measured up to 60% faster in paired same-machine runs.
- Streamed output is released on token boundaries and grouped into fixed-cadence rounds. Long streams no longer freeze and then dump text: 102 visible freezes per 8k-context session is now 5, and the worst stall dropped from 725 ms to 109 ms.
- Engine CPU while streaming dropped from 26 to 28% down to 18 to 23%.
- The daemon stops rebuilding its full dashboard payload ten times a second when nothing is running. Idle means idle now, and live metrics are unchanged while a request is active.
- The depth tuner warms every candidate before its timed rows. It used to pay model load and kernel compile inside the first measurement, which penalized deeper depths and made it save shallow configs that lost to a static depth 3 (#271).
- If you consume raw SSE and want every token the instant it decodes, set
MTPLX_STREAM_COALESCE=0.
Models
- Every
mtplx pull now records which revision it downloaded and pins the download to that exact commit. A pack on disk can no longer silently differ from what is published.
- New:
mtplx models --check shows the update state of every cached pack. mtplx models --update <repo> syncs one, downloading only the changed files: typically 240 to 450 MB instead of a 15 to 21 GB re-pull.
- Works for packs downloaded by older MTPLX versions too. When the check cannot prove your copy is current, it says unknown instead of guessing.
- All six Qwen 3.8 packs re-shipped with quantized speculative-decoding draft heads: 4-bit heads on 4-bit trunks, 8-bit on the 8-bit trunk, FP16 variants for M1/M2 contain no BF16 anywhere. Trunk weights are unchanged, so upgrading rides the delta updater.
- Same answers, verified: every pack ran a paired multi-seed acceptance battery against its previous head and shipped only flat-or-better at every speculation depth. The Quality FP16 head reproduces its source head token for token on every gated run.
| Pack |
Draft head |
Download |
Decode at depth 3 |
| Optimized Speed |
INT4/g64 |
610 MB smaller |
46.8 tok/s, 2.3x plain decode |
| Bare Speed |
INT4/g64 |
610 MB smaller |
49.9 tok/s, 2.3x plain decode |
| Optimized Quality |
INT8/g64 |
398 MB smaller |
39.2 tok/s, 3.0x plain decode |
| Speed FP16 (M1/M2) |
INT4/g64 |
610 MB smaller |
45.4 tok/s, 2.3x plain decode |
| Bare FP16 (M1/M2) |
INT4/g64 |
610 MB smaller |
50.2 tok/s, 2.3x plain decode |
| Quality FP16 (M1/M2) |
INT8/g64 |
398 MB smaller |
48.7 tok/s, 2.8x plain decode |
App
- The model picker shows when a cached pack has an update, with its download size. One click updates it. If the model you are running was updated, you get a restart prompt.
- Rendering a live stream now costs the same whether the message is 10 lines or 10,000. CPU with Settings open during a stream dropped from 82 to 97% down to 30 to 37%.
- Long code streams flow inside the message with no nested scrollbars and no sideways travel. Code wraps, grows live with its content, and hands off cleanly to the final syntax-highlighted view. Verified on a 42,000-token generation.
- Streamed Markdown stays visually stable. Prose no longer reflows or flashes as lines arrive, and code keeps its colors while it grows.
- Reasoning streams as append-only text in the order the model produced it. No more briefly duplicated or reshuffled thoughts.
- Forged models are first-class: your own Qwen 3.8 builds report the right capabilities (vision included), Use Now puts them straight into the model picker, Forge profile metadata is honored, and verification is tied to the exact artifact you built.
Fixes
- Switching models while the daemon was degraded could hang forever. It restarts cleanly now.
- Fans no longer stay pinned at max after a failed startup.
- Pressing Return to send no longer drops the first characters of fast typing. Shift+Return inserts a newline.
- The status dot now says why the daemon is degraded instead of only changing color.
- Catalog download sizes were re-audited against the live repos and corrected.
Updating
- App: Sparkle offers 2.9.0 automatically, or download the DMG at mtplx.com.
- CLI:
pip install -U mtplx or brew upgrade mtplx.
- After updating, run
mtplx models --check to pick up the smaller packs.