Skip to content

v1.4.1 — open-issue triage + cross-platform parity

Choose a tag to compare

@jjang-ai jjang-ai released this 30 Apr 22:42
· 3663 commits to main since this release

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_hnemotron_h_omni when config_omni.json is present alongside config.json.
  • SSM companion hash convergence: both Swift L1 (SSMStateCache.makeKey) and Swift L2 (SSMCompanionDiskStore.keyFor) now produce byte-identical SHA-256 to Python's formula SHA256(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 wallclocks
  • STRESS-TEST-API.md — 9/9 reasoning + 7/7 delete-bounds + 3/3 dup-mlx detector
  • STRESS-TEST-SWIFT.md — 5/5 (build, hash, 9-turn cache, gate A/B, boundary)
  • RELEASE-BLOCKERS-CROSS-PARITY.md — full open-issue parity matrix
  • AUDIT-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#99 DSV4 8-bit Flash infinite-loop on greedy chat-mode — workaround: temperature=0.6 + repetition_penalty≥1.05.
  • vmlx#86 multi-user isolation — feature request, single-tenant today.
  • vmlx#76 DFlash 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).