MTPLX 2.2.0

The copy-drafting and small-Mac release.

Context-copy drafting, on by default

MTPLX now drafts from your prompt as well as from the MTP head. When the model is about to restate something that already exists in the context (a function it is editing, a config block it is moving, a quote from a document), an n-gram index proposes the whole span as a copy block and one forward pass verifies it. Contributed by lBroth (#151), landed with an exact temperature path: a copied token is accepted with the target model's own shaped probability, and a rejection samples the residual, so the output distribution is unchanged at any temperature — the same guarantee the MTP verify path has always had.

Measured on an M5 Max, Qwen3.6-27B Speed at temperature 0.6 in a real tool-calling edit session: +53% on the edit-heavy turn (56 vs 37 tok/s), +25% on test-file generation, parity on novel text. lBroth's own suites measured +39-74% on public code-edit benchmarks. Disable with MTPLX_CONTEXT_COPY=0.

The 4B pair actually works now

The shipped 4B Speed artifact drafted at zero acceptance for everyone — MTP made it slower than plain decoding (#176, the best bug report this repo has received, also by lBroth). Root cause: the MTP sidecar stored its RMSNorm weights in the raw zero-centered convention and never restored them, corrupting every draft. Two forge defects (an fp16-cast that could corrupt a correct sidecar in place, and blind reuse of existing sidecar files) compounded it.

All three are fixed, and the engine now detects the raw-norm fingerprint and heals it at load — your existing download starts drafting correctly on this release without re-downloading (measured: 0 acceptance to 228.5 tok/s on the same artifact file). The rebuilt artifacts go further:

Both are in the app catalog. Macs under 16 GB finally get first-class recommendations, and every Apple Silicon Mac sees the pair in the picker. In-app, the Quality 4B answers chat at ~170 tok/s on an M5 Max.

Tune can no longer persist garbage

A tune result whose measured acceptance was 0.0 could win, be saved, and be replayed forever (#177, another exemplary lBroth report). Now: a collapsed depth can never win or be saved, a measured no-winner verdict clears the stored record, and poisoned records from earlier versions are quarantined at load — no manual retune needed.

Also in 2.2.0

Credits

lBroth (context-copy drafting, and the #176/#177 reports that fixed the 4B), davidtai (#167, #174). Thank you.