v0.13.2
What's new in v0.13.2
Rapid-MLX 0.13.2 makes long-running local assistants faster and more
dependable: Qwen3.8 Flash-Next gains opt-in native MTP and faster long-context
prefill, repeated prompts recover their prefix cache, offline speech pulls
include their runtime requirements, and Desktop tightens attachment, credential,
and web-browsing safety. This stable release also includes the fixes validated
after rc1 and replaces the stable Desktop updater feed.
Final release validation
- The protected Desktop publication path now promotes the exact signed and
notarized candidate bytes, including the canonical DMG and updater payloads,
rather than rebuilding after the release tag. (#2775) - On memory-constrained Macs, choosing a photo with a model whose text lane is
still usable now explains that text chat remains ready and recommends a
lower-memory vision model. The notice clears after the user continues with a
text turn, changes model capability, or chooses another attachment path.
(#2778)
Highlights
Qwen3.8 Flash-Next gains native MTP — The engine can opt into the
checkpoint's one-layer prediction head while the target model verifies every
proposal and all recurrent, QSA, and KV state rolls back atomically. The
measured fixed-K1 workload accepted 76.41% of proposals.
(#2572,
#2655)
| Context | Serial decode | Native MTP | Change |
|---|---|---|---|
| 128 | 25.17 tok/s | 34.85 tok/s | +38.5% |
| 2K | 23.64 tok/s | 33.53 tok/s | +41.8% |
| 8K | 22.82 tok/s | 32.20 tok/s | +41.1% |
| 32K | 21.16 tok/s | 28.82 tok/s | +36.2% |
Desktop's normal temperature, top-p, top-k, min-p, and penalty settings can use
the lane. Seeded requests and stateful grammar, tool, reasoning, or suppression
processors continue on ordinary decoding rather than silently weakening their
contract. The measured MTP path used up to 6.6 GB more active memory, and 192 GB
remains the recommended hardware tier for this experimental checkpoint.
Faster long-context prefill and reusable prompts — QSA index-cache work is
batched across eligible prefills, reducing measured time to first token by
28.9–32.5% while decode speed and cache precision remain unchanged. A completed
32K request can no longer poison the next request in the same process.
(#2574,
#2596)
| Prompt | Previous TTFT | Batched TTFT | Change |
|---|---|---|---|
| 2K | 3.346 s | 2.262 s | -32.4% |
| 8K | 13.689 s | 9.236 s | -32.5% |
| 32K | 62.851 s | 44.659 s | -28.9% |
Semantic prefix snapshots now follow the exact rendered prompt and preserve the
Flash-Next recurrent cache through batching and persistence. A measured
5,288-token warm request reused 5,273 tokens and completed in 0.539 seconds
instead of 6.497 seconds; native MTP continued proposing after the hit.
(#2588,
#2644)
Kokoro is ready before the machine goes offline — rapid-mlx pull now
fetches the voice assets and prepares the English G2P requirement as part of
the pull transaction. The clean-cache validation downloaded 54 voice files and
generated speech with networking disabled. If a runtime requirement is missing,
an inference request returns an actionable readiness error instead of trying to
download or install software on demand.
(#2648,
#2664)
A smaller, byte-identical-to-approved Desktop release path — LZMA packaging
and dependency-proven pruning reduced the signed and notarized comparison DMG
from 187,505,002 to 105,881,983 bytes, a 43.53% reduction. The tradeoff is a
slower one-time Finder copy on the measured host: 17.80 seconds instead of 5.94
seconds. Candidate builds now identify their source commit, and protected
publication promotes the exact approved DMG and updater payloads instead of
rebuilding different bytes after the tag. Tier 1 and Desktop now install the
same candidate wheel, with a shared contract matrix keeping text and
multimodal request behavior aligned.
(#2668,
#2450,
#2530,
#2726)
Desktop safety and workflow corrections
- After the first completed exchange, Desktop can derive one short local title
without replacing a user rename. Settled text answers can also offer three
optional follow-up prompts; malformed, duplicate, wrong-script, or incomplete
suggestions stay hidden. (#2698) - A chat message accepts up to four images and 6 MiB of aggregate encoded image
data, preserves selection order, and explains whether count or size rejected
the remainder. A repeatedly failing image gets one bounded follow-up retry
instead of contaminating every later text turn.
(#2541,
#2585) - Generated-image deletion uses an app-owned confirmation sheet: Keep remains
pressable in native GUI automation, Escape is safe, and Return cannot delete
an image. (#2387,
#2578) - Switching away from a busy model asks first; Cancel preserves the live model
and in-flight response. Recommendation, review, and engine admission use one
measured footprint for known models, and already-resident models remain
usable through the safe replacement path.
(#2430,
#2543,
#2619) - The installer recommends
lfm2.5-1b-4bitbelow 16 GB and
qwen3.5-4b-4biton larger Macs, while preferring an eligible cached model
from the same memory tier. (#2426) - Exited server leaders are reaped without blocking a shared worker, and stale
dual-stacktcp46listeners are recognized when Desktop clears a server
port. A stopped dictation model reloads when the user next presses the hotkey
instead of during foreground activation.
(#2562,
#2593,
#2663) - Tools settings resolve the selected search key's real Keychain state without
exposing it, dictation errors no longer guess at an unproven memory cause,
and photo guidance names the remedy for the engine's actual serving-lane
reason. (#2514,
#2523,
#2602,
#2607) - After 35 successful chats, dictations, or generated images, established
Desktop users may see a quiet, nonmodal invitation to visit the project on
GitHub. Dismissing it starts a three-day cooldown and a progressively larger
local usage threshold; Rapid performs no account or star-status lookup.
(#2675)
Engine, API, and CLI reliability
- Qwen3.8 27B required and named tool calls use the checkpoint-native format
and return OpenAI-compatible JSON arguments. Invalid required arguments fail
with a client error instead of appearing executable.
(#2660) - Explicit
--mllmselection wins over automatic architecture, cache, and
runtime fallback. The measured vision-memory floor remains mandatory, and
speculative decoding still uses its supported text lane.
(#2643,
#2669) - Explicit
timeout: 0means the server default, request-local
chat_template_kwargsreach the tokenizer, cancellations are distinct from
max-length completion, and orphaned streaming reservations cannot keep model
replacement busy until restart.
(#2583,
#2614,
#2625,
#2636) - Explicit
--bitsand--formatpulls remain eligible for the mirror.
Malformed or interrupted cache metadata no longer crashes cached-model
listing, pull admission, or chat model switching.
(#2610,
#2613) - Explicit variant pulls persist their selected subfolder, so a later
servecommand resolves the pulled checkpoint instead of the repository
root. Catalog aliases retain precedence over this pull marker, and
mirror-backed pulls now persist the same selection as fallback downloads.
(#2558,
#2750) - Oversized vision images are automatically reduced to the model's patch-aware
token budget before preprocessing. Multiple images share that budget, and a
measured retry handles processor rounding. If the minimum aligned image
remains over budget, the server warns and leaves the existing downstream
prefill-cap guard as the final rejection boundary.
(#2694) - Image edits derive their output canvas from the uploaded source instead of
silently falling back to the text-to-image 1024×1024 default. Square and
non-square FLUX.2 Klein edits now preserve the source dimensions.
(#2759) - Forced assistant prefixes become visible as soon as the scheduler admits the
request instead of waiting for the first decoded token. Empty, failed, and
cancelled streams retire their pending admission work cleanly.
(#2674) - Suffix decoding now checks the full verify-forward cache growth before
advancing a sliding-window cache. At a rollback-unsafe boundary it falls
back to ordinary decoding instead of aborting the request.
(#2682) - A terminal MTP response that has verified farther than its visible output no
longer publishes that advanced state as a reusable prefix cache. Ordinary
completed-response cache reuse is unchanged.
(#2751) - Parakeet v3 metadata and the Desktop picker now agree on all 25 supported ISO
languages and automatic language detection instead of describing the
checkpoint as English-only.
(#2729) - Passive version checks correctly order
rcNbelow the matching final and now
coverpull,ps,info,bench, anddoctor; automatic upgrade prompts
remain off for development, RC, and local builds.
(#2431)
Privacy and security
- Desktop activation milestones are created and sent only after explicit
telemetry consent. Request attribution uses an allowlisted client bucket;
raw user-agent text never enters the payload.
(#2428,
#2436) - Embedded API bearer credentials support per-launch, daily, and manual
rotation. The bearer stays in a code-identity-scoped Keychain item while
preferences contain only non-secret metadata.
(#2639) - Desktop web browsing validates every DNS answer, then pins the socket to the
selected address while preserving hostname-based TLS verification. Validated
IPv4 and IPv6 destinations are raced with a short stagger so one black-holed
route cannot consume the whole deadline. Redirect, body-size, and timeout
limits remain fail closed.
(#2645,
#2747)
All changes
Install: brew upgrade rapid-mlx or pip install -U rapid-mlx==0.13.2 (or just rapid-mlx upgrade).