v1.4.1 — open-issue triage + cross-platform parity
vMLX v1.4.1 — open-issue triage + cross-platform parity
Patch release closing 8 open issues across jjang-ai/vmlx and jjang-ai/mlxstudio. Released to PyPI as vmlx==1.4.1 (https://pypi.org/project/vmlx/1.4.1/).
What's fixed
| # | Repo | Title | Fix |
|---|---|---|---|
| #119 | vmlx | DeepSeek-V4-Flash-2bit-DQ not supported | Register jang_tools.dsv4 at engine init unconditionally so any DSV4 bundle (MXTQ/JANGTQ/plain DQ/BF16) loads — was previously gated inside the MXTQ branch |
| #120 | vmlx | Critical nanobind error (still with v1.4.0) | Startup detector walks sys.path for multiple mlx packages, exits with a 3-step fix instead of cryptic dyld panic |
| #125 | vmlx | flash-moe OOM on 48 GB MBP | Pre-load memory gate skipped when Flash MoE setting is on — bundles whose raw weights exceed RAM but stream experts at runtime now load |
| #57 | vmlx | How to remove models? | POST /api/delete does the actual delete with model-directory bounding (refuses paths outside, refuses traversal). Swift app: "Delete model files…" context menu in chat picker |
| #100 | vmlx | Image gen optimization (cancel) | ImageGenEngine.cancel() + POST /v1/images/cancel + disconnect-watchdog so the panel Stop button + browser close actually abort instead of OOM-after-cancel |
| #90 | mlxstudio | Symbol not found exception_ptr | Pre-import macOS check exits with actionable message (you need macOS ≥ 14.5; bundled MLX wheel uses libc++ symbols added in 14.5) |
| #95 | mlxstudio | vmlx serve can't find 'jang_tools' | New [mxtq] and [jang] install extras: pip install vmlx[mxtq]. Warning is now an actionable error pointing at the install command |
| #100 | mlxstudio | fail to enable reasoning (Continue) | Accept Anthropic-style reasoning: {effort: ...} and reasoning: {type:'enabled', budget_tokens:N} request bodies; normalize into reasoning_effort / enable_thinking |
| #101 | mlxstudio | Process exited before becoming ready: nanobind dup cpu | Same fix as vmlx#120 |
| #31 | mlxstudio | MCP HTTP/SSE Transport (Swift side) | Replaced the stdio-only guard with a real HTTP+SSE implementation: streaming via URLSession.bytes(for:), legacy endpoint-event handling, Streamable-HTTP inline-JSON-RPC fallback. Python side already shipped |
Cross-platform parity
- NemotronH-Omni Swift wiring: registered in VLMModelFactory + processor registry + silver row + capability detector. Auto-promotes
nemotron_h→nemotron_h_omniwhenconfig_omni.jsonis present alongsideconfig.json. - SSM companion hash convergence: both Swift L1 (
SSMStateCache.makeKey) and Swift L2 (SSMCompanionDiskStore.keyFor) now produce byte-identical SHA-256 to Python's formulaSHA256(model_key + "\x00" + json.dumps(token_ids[:N], separators=(",",":"))). Disk L2 backfill into L1 finally lands. - storeAfterGeneration boundary: uses exact
storeTotal(drop the floor-align to 64-token paged-block size), so all three SSM store paths converge on the same cache key.
Audit + stress test docs
Shipped in this commit under docs/:
STRESS-TEST-LOADER.md— 4/4 fixes verified, real bundles, real wallclocksSTRESS-TEST-API.md— 9/9 reasoning + 7/7 delete-bounds + 3/3 dup-mlx detectorSTRESS-TEST-SWIFT.md— 5/5 (build, hash, 9-turn cache, gate A/B, boundary)RELEASE-BLOCKERS-CROSS-PARITY.md— full open-issue parity matrixAUDIT-NEMO-*.md,AUDIT-SSM-*.md,AUDIT-TURBOQUANT-KV.md,AUDIT-L2-DISK-CACHE.md,AUDIT-RELEASE-READINESS.md
Install
pip install -U vmlx==1.4.1
# For JANG/MXTQ/DSV4/MiniMax-JANG/Nemotron-Omni bundles:
pip install -U "vmlx[mxtq]==1.4.1"
Compatibility
- macOS ≥ 14.5 (Sonoma/Sequoia/Tahoe). 14.4.x is not supported — the bundled MLX wheel uses libc++ symbols added in 14.5.
- Python 3.11–3.14.
- Apple Silicon only.
Known carry-forwards (post-ship)
mlxstudio#99DSV4 8-bit Flash infinite-loop on greedy chat-mode — workaround: temperature=0.6 + repetition_penalty≥1.05.vmlx#86multi-user isolation — feature request, single-tenant today.vmlx#76DFlash native Python — Swift has it, Python catch-up is multi-day port.- Cross-session SSM companion fetch — write-only across processes due to MLX 0.31.x stream-thread-locality. Tracked at
AUDIT-SSM-WARMPASS-FINAL.md. Within-session multi-turn unaffected (paged + block-disk L2 deliver the warm-pass).