Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
345 commits
Select commit Hold shift + click to select a range
0dc2ada
fix(patches): sharded_load fallback for sanitize-fused local checkpoints
jundot Aug 13, 2026
6cf1056
feat(cluster): store snapshot chains of segments instead of cumulativ…
jundot Aug 13, 2026
005f755
Merge pull request #2620 from jundot/feat/distributed-boundary-snapsh…
jundot Aug 13, 2026
8ba620f
fix(mtp): guard loop-tax probe against cross-engine prefill contentio…
jundot Aug 13, 2026
4144c77
chore(deepseek_v4): warn when a native kernel fallback latches (#2622)
jundot Aug 13, 2026
9f563da
Decode fairness for concurrent prefill (#2633)
jundot Aug 13, 2026
ac32ea2
Chore: bump version to 0.6.0.dev1
jundot Aug 13, 2026
fcc201e
fix(deepseek_v4): relocate tool-adjacent system runs to latest_reminder
jundot Aug 14, 2026
08aee5e
fix(cache): guard tip-strip lineage and backfill dedup placeholder bl…
jundot Aug 14, 2026
aef5a0c
fix(scheduler): keep contended prefill chunks on the 64-token grid
jundot Aug 14, 2026
d92ed3c
fix(oq): strip HF org prefix from quantized model names (#2652)
monroewilliams Aug 15, 2026
80aa600
fix(qwen35): skip native qmm routing at group_size=128 on NAX hardwar…
True2456 Aug 15, 2026
cc9944e
fix(qwen35): gate gs128 fallback on stock NAX
jundot Aug 15, 2026
7eea370
fix(vlm): thread tools through chat path (#2645)
mkmsyk Aug 15, 2026
3b2e02e
feat(cache): add storage codecs and policy for persisted GDN sidecars…
hojin12312 Aug 15, 2026
5926ce7
chore(cache): drop duplicate gdn sidecar properties and repeated test…
jundot Aug 15, 2026
ae1883c
test: cover VLM tool schema forwarding (#2646)
jundot Aug 15, 2026
1ee0aa9
feat(vlm): sync Muse Glimmer vendor with mlx-vlm #1848 numerics (#2643)
nazerim Aug 15, 2026
2bb2cc5
feat(qwen): support Qwen3.8 FP8 and reasoning levels (#2653)
scaryrawr Aug 15, 2026
a719ba9
fix(vlm): align Muse Glimmer FP32 scaling paths
jundot Aug 15, 2026
ee2d68d
fix(memory): reclaim MLX pool before hot-cache shrink (#2635)
PhilipJohnBasile Aug 15, 2026
db4331e
fix(benchmark): preserve VLM engine for Lightning MTP (#2651)
jundot Aug 15, 2026
71b9d52
fix(mac): scope main window URL to current app (#2658)
jundot Aug 15, 2026
101b211
fix: make mac updater swap crash-safe (#2522)
jundot Aug 15, 2026
5ee881b
feat(ui): add Enhanced Readability accessibility toggle (#2542)
LXD-8 Aug 15, 2026
cdb6117
fix(dspark): stop thinking-budget counter drift from MTP speculative …
mvdbos Aug 15, 2026
3fcacbd
fix(ui): refine enhanced readability controls
jundot Aug 15, 2026
e4bab83
fix(responses): start thinking parser when prompt opens <think> (#2623)
leepokai Aug 15, 2026
f04f377
test: remove updater relaunch smoke (#2522)
jundot Aug 15, 2026
1693022
fix(tool-calling): stop deep nesting escaping the parse chain (#2593)
richgoodson Aug 15, 2026
9174102
fix(muse): keep tool calls when the turn opens with one (#2599)
dawgflymd Aug 15, 2026
997c9b6
fix: support unaligned DeepSeek V4 indexer tails (#2674)
jundot Aug 15, 2026
22cab14
fix: make Claude cross-session messaging opt-in (#2601)
fparrav Aug 15, 2026
80f4031
fix: honor Claude cross-session opt-out semantics (#2601)
jundot Aug 15, 2026
9dbc3f3
feat(cache): surface hot cache promotion failures in stats
jundot Aug 15, 2026
e81e825
chore: bump version to 0.6.0rc1
jundot Aug 15, 2026
b2fdc71
formula: bump to 0.6.0rc1
github-actions[bot] Aug 15, 2026
1177b88
feat(mtp): support Gemma4 unified Lightning MTP (#2683)
djr747 Aug 16, 2026
4a1c635
chore(deps): bump ddgs from 9.14.1 to 9.14.4 (#2685)
dependabot[bot] Aug 16, 2026
5890d0d
fix(admin): support free-form reasoning_effort values (#2675)
Pietroski Aug 16, 2026
03bbdec
fix: improve reasoning effort controls
jundot Aug 16, 2026
c4095af
fix(cluster): Keep display names out of node IDs (#2679)
jundot Aug 16, 2026
42813b4
fix(eval): handle prompt-opened thinking output (#2661)
jundot Aug 16, 2026
1a0f691
fix(mtp): preserve rollback for depth-8 Lightning verify (#2690)
adamw3455 Aug 16, 2026
c82cabc
feat(model-loading): support Qwen3.8 mixed ModelOpt NVFP4 (#2659)
LKyaha Aug 16, 2026
8bdeacb
feat(ui): use PingFang for Chinese and improve accessibility (#2671)
LXD-8 Aug 16, 2026
a32b6b1
fix(embeddings): honour checkpoint pooling metadata (#2594)
cedricamram Aug 16, 2026
fd14f7f
fix(ui): make focus ring visible in dark mode
jundot Aug 16, 2026
3fd83ff
feat: upload intelligence benchmark results to omlx.ai (#2693)
jundot Aug 16, 2026
734219e
fix(embeddings): keep last-token pooling compile-safe
jundot Aug 16, 2026
150279d
fix(discovery): skip incompletely downloaded sharded models (#2432)
JimStenstrom Aug 16, 2026
5326687
fix: update Homebrew install requirements (#2694)
jundot Aug 16, 2026
6b3d7e5
fix(oq): clamp the sensitivity perturbation to a valid affine group s…
JimStenstrom Aug 16, 2026
9be9219
fix(admin): localize model settings labels (#2480)
aosama Aug 16, 2026
a857d52
fix(i18n): sync model settings labels across locales (#2476)
jundot Aug 16, 2026
81c4394
fix(deepseek_v4): always emit the generation anchor for system-final …
jonathan308 Aug 16, 2026
19a7b1e
fix(deepseek_v4): preserve task generation transitions
jundot Aug 16, 2026
0fbc5a4
fix(engine_core): don't re-abort requests already finished or pending…
jonathan308 Aug 16, 2026
ac58d7c
test(engine_core): cover repeated bulk aborts
jundot Aug 16, 2026
b11ec0d
fix(deepseek_v4): make tool-call turn re-rendering byte-stable with m…
JimStenstrom Aug 16, 2026
fb60222
Chore: Bump version to 0.6.0
jundot Aug 16, 2026
ecc79a8
fix(admin): clarify and reorganize global settings
jundot Aug 16, 2026
5d41139
fix(server): surface unenforced response_format on /v1/responses (#2560)
fxd0h Aug 16, 2026
5175562
fix(memory): align DeepSeek-V4 prefill estimate with WSDPA route (#2639)
mvdbos Aug 16, 2026
1a7e567
feat(mcp): add dashboard toggle to expose backend MCP tools to client…
cgs4github Aug 16, 2026
daf74d1
feat: update model preset profiles
jundot Aug 16, 2026
f983355
fix(cluster): discover peer runtimes and verify parity (#2697)
hellodk Aug 16, 2026
4f5ba16
fix(mcp): complete expose-tools toggle follow-up (#2699)
jundot Aug 16, 2026
ddb1ee0
fix(cluster): allow mixed Python minor versions
jundot Aug 16, 2026
9f115c7
fix: honor web search test result limit (#2696)
jundot Aug 16, 2026
818f1a5
fix: make chat tool round limits configurable (#2702)
jundot Aug 16, 2026
5ba3d6a
fix: quiesce active engines before admin unload
jundot Aug 16, 2026
c9952e3
fix(mac): reset restart budget after stable health
jundot Aug 16, 2026
78a1464
fix(cluster): align runtime version checks and status (#2704, #2705)
jundot Aug 16, 2026
b16a1d1
chore: finalize 0.6.0 release
jundot Aug 16, 2026
854060f
formula: bump to 0.6.0
github-actions[bot] Aug 16, 2026
fceb5af
fix: publish org-qualified model names to omlx.ai
jundot Aug 17, 2026
3355679
fix(deepseek_v4): map client reasoning_effort aliases instead of 400 …
jonathan308 Aug 17, 2026
b876be8
fix: normalize reasoning effort across chat templates (#2740)
jundot Aug 17, 2026
a593a55
fix: load root MTP weights for Qwen VLMs (#2732)
jundot Aug 17, 2026
c77db0d
fix: guard model type during batched preflight (#2740)
jundot Aug 17, 2026
cfdb079
fix: keep filtered HF cache models discoverable (#2742)
jundot Aug 17, 2026
fc640a8
perf(vlm-mtp): prefer batching under scheduler contention (#2752)
DiscoStew6082 Aug 17, 2026
edb7290
Added Qwen3.5 architecture ANE Kernel, benchmark options, and model s…
Aug 17, 2026
c8940ca
fix(vlm): normalize Qwen3.5 patch embedding layout (#2754)
frank-beans Aug 17, 2026
293d697
perf: speed up qwen3.5 MTP verify and prefill (#2751)
jundot Aug 17, 2026
d5637c5
fix: preserve mid-system cache after tool results (#2753)
q-p Aug 17, 2026
a9de32c
perf: fuse qwen MoE decode router top-k (#2755)
jundot Aug 17, 2026
f610c6a
feat: upload model repo id separately from model name
jundot Aug 17, 2026
bddc9f8
fix: validate tool-adjacent mid-system templates (#2483)
jundot Aug 17, 2026
eed0844
fix(cluster): compare probe versions against the source the peer repo…
hellodk Aug 17, 2026
fbb98dc
feat(qwen3.5): add experimental dual-ANE/GPU prompt processing (#2756)
jundot Aug 17, 2026
b2873ed
feat(qwen3.5): extend ANE prefill to oQ4e and harden runtime (#2760)
jundot Aug 17, 2026
9b494be
fix(admin): preserve measured ANE select defaults
jundot Aug 17, 2026
b587575
chore: bump version to 0.6.1
jundot Aug 17, 2026
6307e39
formula: bump to 0.6.1
github-actions[bot] Aug 17, 2026
255c356
fix(qwen3.5): don't crash MTP verify-attention on TurboQuant cache (#…
aaramos Aug 18, 2026
49b4cea
fix(cache): restore exact GDN SSD output by default (#2775)
jundot Aug 18, 2026
d7e43a4
fix(qwen3.5): harden ANE prefill for NAX GPUs and single-die banks
jundot Aug 18, 2026
6151c8a
fix(scheduler): stop stranding boundary-snapshot arrays in a closure …
hojin12312 Aug 18, 2026
df1d827
fix(memory): align wired-limit hints to whole MiB (#2799)
jakeuj Aug 18, 2026
c4fe2a7
fix(profiles): resolve VLM MTP conflicts on apply (#2806)
jakeuj Aug 18, 2026
1c45ef3
fix: update MCP streamable HTTP client (#2776)
nnhanndakara Aug 18, 2026
29d0dd4
fix: align MCP dependency with SDK 2.x (#2520)
jundot Aug 18, 2026
e74201a
fix(admin): preserve a user-set role for the local coordinator node (…
xunlinkx Aug 18, 2026
aecf205
test(admin): cover local cluster role preservation (#2723)
jundot Aug 18, 2026
0bb766f
feat(distributed): make request read timeout configurable via env var…
xunlinkx Aug 18, 2026
7e1c5c8
fix(cluster): don't fail preflight on a peer that predates omlx._vers…
hellodk Aug 18, 2026
c94f8d3
test(cluster): clean up runtime version fallback coverage (#2737)
jundot Aug 18, 2026
f550fe2
fix(admin): don't auto-plan from cluster polling (#2721)
xunlinkx Aug 18, 2026
8ed285a
fix(admin): preserve first-load cluster planning (#2721)
jundot Aug 18, 2026
d6d5af8
fix(cluster): stop calling a missing worker runtime a version mismatc…
hellodk Aug 18, 2026
562a91e
fix(cluster): keep unverified worker status fail-closed (#2738)
jundot Aug 18, 2026
9613b85
feat(distributed): enforce thinking budgets on the rank decode path (…
xunlinkx Aug 18, 2026
db1423d
feat(ane): add split tuning utility and NAX GPU hybrid suffix (#2814)
onthehub97 Aug 18, 2026
de10ae7
fix(distributed): align thinking budget behavior across engines (#2731)
jundot Aug 18, 2026
924d536
docs(qwen35): refresh NAX section after ANE tuner merge
jundot Aug 18, 2026
1c10730
fix(admin): escape apostrophes in JS-embedded translations
jundot Aug 18, 2026
f2d36f3
chore: bump version to 0.6.2
jundot Aug 18, 2026
1f1aff3
formula: bump to 0.6.2
github-actions[bot] Aug 18, 2026
8b0aa99
chore: bump dflash-mlx pin for DFlash 2 runtime support
jundot Aug 19, 2026
cfa6653
feat(dflash): support DFlash 2 and update draft defaults (#2840)
liang2kl Aug 19, 2026
c1a3d44
feat(dflash): finalize DFlash 2 rollout (#2850)
jundot Aug 19, 2026
12841f2
feat(qwen35): enable affine q6 and q8 ANE prefill (#2833)
GordoAR Aug 19, 2026
ac34387
fix(qwen35): route q8 GDN b/a through the q8 token threshold
jundot Aug 19, 2026
d6b823f
fix(cluster): initialize settings before memory guard fallback (#2835)
xunlinkx Aug 19, 2026
cf91538
fix(cluster): validate remote process identity and escalate reaping o…
xunlinkx Aug 19, 2026
cea0420
fix(cluster): stop the planner from re-scanning every model on each a…
alytaphoenix Aug 19, 2026
677dc45
fix(cluster): two-Mac clustering reliability (poll jitter, VLM tensor…
alytaphoenix Aug 19, 2026
d85c0d9
fix(cluster): make quantized Nemotron-H run tensor-parallel at TP=2 (…
alytaphoenix Aug 19, 2026
254793d
fix(cluster): retry an unsupported reasoning_effort against rank-zero…
alytaphoenix Aug 19, 2026
ed35acc
feat(cluster): add stable machine codes to failure guidance
jundot Aug 19, 2026
ef53202
feat(cluster): server-owned incident feed with monotonic-merge pollin…
alytaphoenix Aug 19, 2026
dde94f7
fix(ane): reject tuning candidates whose ANE never executed (#2829)
beaglemoo Aug 19, 2026
375d3f5
fix(ane): follow ups for the idle-candidate tuner guard
jundot Aug 19, 2026
a389f19
fix(ane): measure tuner prompts with a non-ANE tail chunk
jundot Aug 19, 2026
2caa3ee
fix(cluster): read operator settings without publishing the global si…
jundot Aug 19, 2026
5830658
fix(cluster): keep rank markers as crash evidence and report reap res…
jundot Aug 19, 2026
1f49541
fix(cluster): dashboard sync guards, peer-home source paths, drop ssh…
jundot Aug 19, 2026
15ed484
fix(cluster): close planner guard gaps for quantized nemotron_h TP (#…
jundot Aug 19, 2026
e92f6b5
fix(cluster): try the normalized reasoning_effort tier first (#2869 f…
jundot Aug 19, 2026
7f6419f
fix(cluster): record incidents off the event loop, add store epoch (#…
jundot Aug 19, 2026
9f13324
fix(cluster): include shard stats in the layout cache fingerprint (#2…
jundot Aug 19, 2026
c7ca2c5
Add Q5 ANE prefill support (#2889)
onthehub97 Aug 19, 2026
1e03b5e
Add wide GPU prefill blocks, internal ANE tiling, and benchmark fidel…
onthehub97 Aug 19, 2026
582fc84
fix(admin): clear default_model pointer when is_default is unset (#2884)
alytaphoenix Aug 19, 2026
44bf3c2
fix(qwen35): follow ups for wide prefill tiling
jundot Aug 19, 2026
166c8f4
Qwen35: ANE Tuner V2 (#2891)
onthehub97 Aug 19, 2026
af9ac31
fix(patches): heal reinstalled nemotron chain surfaces instead of tru…
jundot Aug 19, 2026
f487604
fix(cluster): preflight cluster health so a dead rank fails before th…
jundot Aug 19, 2026
4c00bbe
fix(ane): tuner v2 follow ups
jundot Aug 19, 2026
ec9769d
fix(admin): accept versioned DFlash2 names in draft-model picker (#2879)
williamxie1989 Aug 19, 2026
4ee255b
fix(api): strip Claude Code total_tokens budget markers from system t…
Pietroski Aug 19, 2026
99549f6
fix(cli): strip leaked -- separator from launch extra_args (#2818)
fparrav Aug 19, 2026
5ff08cd
feat(admin): add max_tokens override for external accuracy benchmarks…
williamxie1989 Aug 19, 2026
c8bfcc2
fix(responses): surface max_output_tokens truncation as incomplete (#…
mvdbos Aug 19, 2026
280e2ce
fix(cli): preserve forwarded argument separators
jundot Aug 19, 2026
aadfb42
fix(responses): emit incomplete terminal event
jundot Aug 19, 2026
18b2f9a
perf(laguna): port mlxfast-challenge decode optimizations (#2827)
0xClandestine Aug 19, 2026
274d17f
chore: bump version to 0.6.3rc1
jundot Aug 19, 2026
0ed0187
fix: make Laguna compiled-tail test hardware-independent
jundot Aug 19, 2026
146d272
formula: bump to 0.6.3rc1
github-actions[bot] Aug 19, 2026
740854c
feat(ane): warm compiled procedures at load so the first request meas…
beaglemoo Aug 20, 2026
0e72928
feat(ane): surface Qwen ANE prefill no-ops in logs and /api/status (#…
finaltv971 Aug 20, 2026
be5aaf5
fix: preserve Qwen ANE app profile (#2932)
popfido Aug 20, 2026
3d8e661
Qwen35 ANE: CPU Sharing (#2892)
onthehub97 Aug 20, 2026
99b5398
docs: add M5 to Apple Silicon requirements (#2925)
qdaszx Aug 20, 2026
4ff5858
fix: keep packed q6 GDN b/a suffix on the banked ANE path
jundot Aug 20, 2026
7576cf7
fix: ANE follow-ups after the CPU sharing merge
jundot Aug 20, 2026
a79ce4b
fix: warm the CPU sharing path at load
jundot Aug 20, 2026
2a7bac9
fix: harden ANE tuner staging, GDN floor, and memory release
jundot Aug 20, 2026
dcb317f
fix: reserve ANE prefill I/O surfaces in admission
jundot Aug 20, 2026
1f6302e
feat: M2-tuned MMA indexer score kernel for DSV4F (#2802)
nathanodle Aug 20, 2026
5a81899
style: drop an extra blank line after the mma score gate helper
jundot Aug 20, 2026
5b6f2a7
chore: remove unused BK template param and stale doc ref in the mma s…
jundot Aug 20, 2026
c6cb4b6
test: cover batched inputs in the mma score bit-exact suite
jundot Aug 20, 2026
4af370f
fix(memory): size hybrid KV blocks by cache layers (#2912)
saichowdary007 Aug 20, 2026
7b47331
Fix reasoning effort editor layout (#2922)
popfido Aug 20, 2026
45c7eb9
fix: write settings.json atomically and move corrupt files aside (#2926)
alexferrao Aug 20, 2026
a42d837
fix(settings): use per-process temp names for atomic saves
jundot Aug 20, 2026
df05710
perf: stage ANE bank weights incrementally at compile (#2781)
jundot Aug 20, 2026
df3a0c2
fix: drain committed qmm buffers when a CPU share dispatch throws
jundot Aug 20, 2026
e0be3c0
fix(cluster): recover from SSH pairing failures (#2930)
ashhart Aug 20, 2026
4810f55
fix(cluster): keep SSH key rotation state consistent (#2930)
jundot Aug 20, 2026
cce2bca
fix(cluster): harden CUDA enrollment and ConnectX verification (#2929)
ashhart Aug 20, 2026
d4efd93
fix(cluster): enforce CUDA activation and SSH path guards (#2929)
jundot Aug 20, 2026
336e558
fix(ane): isolate ANE warmup failures per module (#2946)
beaglemoo Aug 20, 2026
4cb5516
chore: bump version to 0.6.3rc2
jundot Aug 20, 2026
fa3e94b
formula: bump to 0.6.3rc2
github-actions[bot] Aug 20, 2026
d2110d1
feat(Qwen35) Fused Qwen MLP/down offload and hardware-adaptive tuner …
onthehub97 Aug 21, 2026
f14796f
Added tail padding (#2966)
onthehub97 Aug 21, 2026
c267fc6
fix: stream fused ANE bank staging through an incremental builder
jundot Aug 21, 2026
e200e0d
fix: guard the fused dispatch site against mid-flight exceptions
jundot Aug 21, 2026
a1ebecb
fix: extend admission pricing and CPU warmup to fused and ANE-down st…
jundot Aug 21, 2026
0436bdf
fix: reject fused down settings that disable ANE at load
jundot Aug 21, 2026
c0d2eec
fix: re-enter Lightning MTP after performance parking (#3004)
jundot Aug 21, 2026
295eba4
fix(mtp): scope the prime window to the folded span (#3005)
beaglemoo Aug 21, 2026
78c799c
fix(mtp): keep prime-window overflow latched
jundot Aug 21, 2026
2df39bf
fix(responses): route function_call_output images to vlm instead of p…
jundot Aug 21, 2026
dbce333
chore(deps): bump ddgs from 9.14.4 to 9.15.0 (#3052)
dependabot[bot] Aug 23, 2026
be7cac6
fix(ane): bound waits and cancel failed dispatches (#3002)
beaglemoo Aug 23, 2026
a23692d
fix(hy_v3): normalize legacy RoPE config across oQ paths (#3042)
chenqianhe Aug 23, 2026
531e7bb
feat(sampling): forward repetition context size end-to-end (#3012)
xunlinkx Aug 23, 2026
1931c6c
fix(ane): roll back partial dual dispatch (#2974)
jundot Aug 23, 2026
f244ac0
fix(dflash): honor repetition context size (#3011)
jundot Aug 23, 2026
adbdd7c
fix(ane): disable SpecPrefill during ANE split tuning
monroewilliams Aug 24, 2026
ed338fb
fix(cache): serialize preload's mx.load, don't run it in worker threa…
alytaphoenix Aug 24, 2026
0f52a43
fix(cache): fsync before rename for SSD blocks, GDN sidecars, snapsho…
alytaphoenix Aug 24, 2026
990e7fd
feat(cache): hot cache write-through — RAM-speed sessions with SSD du…
jonathan308 Aug 24, 2026
ca35b6b
fix(cache): fsync parent dir after vision feature cache rename
jundot Aug 24, 2026
8223bbb
fix(cache): skip clear_hot_cache flush when writer thread is dead
jundot Aug 24, 2026
eb3b3ed
feat(admin): move write-through toggle into advanced settings
jundot Aug 24, 2026
a09a19d
chore(cache): drop stale doc references and getattr fallbacks
jundot Aug 24, 2026
522e727
fix(gdn): don't run the stock fallback on clobbered conv state (#3085)
alytaphoenix Aug 24, 2026
8986da1
fix(cache): stop last-block GDN/rotating state desync on store (#3086)
alytaphoenix Aug 24, 2026
30e7204
fix(cache): close shared-prefix TOCTOU with hash-validated acquire (#…
alytaphoenix Aug 24, 2026
b25dc31
fix(cache): validate token_count against actual stored slice length (…
alytaphoenix Aug 24, 2026
00a1b1c
fix(cache): remove decorative pressure-valve methods (#3098)
alytaphoenix Aug 24, 2026
faa2143
fix(cache): exempt non-sliceable layers from the token_count check
jundot Aug 24, 2026
5fb0201
fix(gdn): drop the fused sink entry when falling back to stock
jundot Aug 24, 2026
ae06d83
fix(cache): align Qwen GDN boundaries with wide prefill (#3066)
hesara Aug 24, 2026
1efd3ae
fix(ane): circuit-break the procedure bank compile retry ladder befor…
alytaphoenix Aug 24, 2026
366bffa
refactor(ane): tidy the bank compile headroom gate
jundot Aug 24, 2026
8ce5e38
fix(ane): roll back single/dual dispatch on mid-flight exceptions (#3…
alytaphoenix Aug 24, 2026
55865a2
fix(ane): guard the fused dispatch ticket window too
jundot Aug 24, 2026
cec20e7
fix(ane): slice down matrix before dequantizing, not after (#3110)
alytaphoenix Aug 24, 2026
8d6ddfa
fix(memory): shed ANE prefill banks under recurring prefill-headroom …
beaglemoo Aug 24, 2026
f2ef8ab
fix(scheduler): break the prefill-guard admission bound into loggable…
alytaphoenix Aug 24, 2026
230f51b
fix(memory): reprice admission and surface status after an ANE bank shed
jundot Aug 24, 2026
a481a08
fix(server): non-streaming JSON responses must not report 200 on a fa…
alytaphoenix Aug 24, 2026
404c059
fix(server): keep the prefill-guard's structured error body on the st…
beaglemoo Aug 24, 2026
5c2ee7f
fix(ane-tuner): return a completed GPU-only verdict when the ANE comp…
beaglemoo Aug 24, 2026
8c35124
fix(mac): decode null tuner tps after the GPU-only preflight
jundot Aug 24, 2026
1c9e661
Merge main into fix/ane-tuner-disable-specprefill
jundot Aug 24, 2026
216333c
Merge pull request #3080 from monroewilliams/fix/ane-tuner-disable-sp…
jundot Aug 24, 2026
85bfb56
perf(ane): reuse compiled Qwen programs across loads (#2975)
joshuaswarren Aug 24, 2026
678a468
feat(admin): expose the ANE compile cache in advanced settings
jundot Aug 24, 2026
f83c926
fix(ane): keep compile cache cleanup inside the cache root
jundot Aug 24, 2026
209b186
fix(ane): explain a below-floor GDN fraction instead of compiling not…
jundot Aug 24, 2026
1f36a19
fix(ane): keep compile cache lock files stable
jundot Aug 24, 2026
af35c59
fix(server): cancel JSON grace tasks on teardown
jundot Aug 24, 2026
f5852c7
test: cover ANE compile cache settings
jundot Aug 24, 2026
368acff
fix(gdn): restore recurrent state on fused fallback
jundot Aug 24, 2026
53e8389
fix(cache): validate both KV slice lengths
jundot Aug 24, 2026
5a40707
fix(ane): transfer dispatch tickets after thread spawn
jundot Aug 24, 2026
fb80440
docs(ko): sync Korean README with English (#2982)
stellarsailor Aug 24, 2026
8662ad0
Chore: bump version to 0.6.3rc3
jundot Aug 24, 2026
12a2e2f
formula: bump to 0.6.3rc3
github-actions[bot] Aug 24, 2026
5d17d34
Prepare signed notarized fork DMG releases
jonathan308 Aug 23, 2026
49e91b8
Merge remote-tracking branch 'fork/main' into release/signed-dmg
jonathan308 Aug 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
240 changes: 240 additions & 0 deletions .github/workflows/release-macos-dmg.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
---
name: Signed macOS DMG

on:
workflow_dispatch:
inputs:
tag:
description: Existing version tag to build (for example, v0.6.3)
required: true
type: string

permissions:
contents: read

concurrency:
group: signed-macos-release
cancel-in-progress: false

jobs:
build-unsigned-app:
name: Build unsigned arm64 app
runs-on: macos-26
timeout-minutes: 120
steps:
- name: Check out the release tag
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ inputs.tag }}
fetch-depth: 0

- name: Validate tag and source version
env:
RELEASE_TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
[[ "$RELEASE_TAG" =~ ^v[0-9][0-9A-Za-z.+-]*$ ]] || {
echo "invalid release tag: $RELEASE_TAG" >&2
exit 1
}
git show-ref --verify --quiet "refs/tags/$RELEASE_TAG" || {
echo "tag does not exist: $RELEASE_TAG" >&2
exit 1
}
version=$(sed -n 's/^__version__ = "\([^"]*\)"$/\1/p' omlx/_version.py)
[[ -n "$version" && "v$version" == "$RELEASE_TAG" ]] || {
echo "tag $RELEASE_TAG does not match omlx version $version" >&2
exit 1
}

- name: Set up Python 3.11
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: "3.11"

- name: Select release Xcode
run: |
sudo xcode-select --switch /Applications/Xcode_26.6.app/Contents/Developer
xcodebuild -version

- name: Install host-side packaging tools
run: |
python -m pip install "pip==26.1.2"
python -m pip install \
"venvstacks==0.7.0" "cmake==4.4.2" "nanobind==2.13.0" \
"setuptools==80.10.2" "wheel==0.47.0"

- name: Build staged app with native kernels
env:
OMLX_RELEASE_REPOSITORY: ${{ github.repository }}
run: apps/omlx-mac/Scripts/build.sh release --with-custom-kernel --rebuild-donor

- name: Confirm arm64 application output
run: |
set -euo pipefail
app=apps/omlx-mac/build/Stage/oMLX.app
test -d "$app"
test "$(lipo -archs "$app/Contents/MacOS/oMLX")" = arm64
actual_repo=$(/usr/libexec/PlistBuddy -c 'Print :OMLXReleaseRepository' "$app/Contents/Info.plist")
test "$actual_repo" = "${{ github.repository }}"

- name: Archive app without losing symlinks or extended attributes
run: |
mkdir -p release-input
ditto -c -k --keepParent --sequesterRsrc \
apps/omlx-mac/build/Stage/oMLX.app release-input/oMLX-unsigned.zip

- name: Upload unsigned app for the gated signing job
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: unsigned-macos-app
path: release-input/oMLX-unsigned.zip
if-no-files-found: error
retention-days: 1

sign-notarize-release:
name: Sign, notarize, and draft release
needs: build-unsigned-app
runs-on: macos-26
timeout-minutes: 180
environment: macos-release
permissions:
contents: write
steps:
# Release tooling and entitlements come from the protected default
# branch, while the untrusted/tagged app payload comes from the prior
# secretless job.
- name: Check out trusted release tooling
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ github.event.repository.default_branch }}
persist-credentials: false

- name: Select release Xcode
run: |
sudo xcode-select --switch /Applications/Xcode_26.6.app/Contents/Developer
xcodebuild -version

- name: Download unsigned app
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: unsigned-macos-app
path: release-input

- name: Extract unsigned app
run: |
mkdir -p release-stage
ditto -x -k release-input/oMLX-unsigned.zip release-stage
test -d release-stage/oMLX.app

- name: Import Developer ID identity and prepare notary key
env:
APPLE_DEVELOPER_ID_APPLICATION_P12_BASE64: ${{ secrets.APPLE_DEVELOPER_ID_APPLICATION_P12_BASE64 }}
APPLE_DEVELOPER_ID_APPLICATION_P12_PASSWORD: ${{ secrets.APPLE_DEVELOPER_ID_APPLICATION_P12_PASSWORD }}
APPLE_NOTARY_API_KEY_P8_BASE64: ${{ secrets.APPLE_NOTARY_API_KEY_P8_BASE64 }}
APPLE_NOTARY_KEY_ID: ${{ secrets.APPLE_NOTARY_KEY_ID }}
APPLE_NOTARY_ISSUER_ID: ${{ secrets.APPLE_NOTARY_ISSUER_ID }}
APPLE_TEAM_ID: ${{ vars.APPLE_TEAM_ID }}
run: |
set -euo pipefail
for name in \
APPLE_DEVELOPER_ID_APPLICATION_P12_BASE64 \
APPLE_DEVELOPER_ID_APPLICATION_P12_PASSWORD \
APPLE_NOTARY_API_KEY_P8_BASE64 \
APPLE_NOTARY_KEY_ID APPLE_NOTARY_ISSUER_ID APPLE_TEAM_ID; do
[[ -n "${!name:-}" ]] || { echo "missing release credential: $name" >&2; exit 1; }
done
[[ "$APPLE_TEAM_ID" =~ ^[A-Z0-9]{10}$ ]] || { echo "invalid APPLE_TEAM_ID" >&2; exit 1; }

keychain="$RUNNER_TEMP/omlx-release.keychain-db"
p12="$RUNNER_TEMP/developer-id-application.p12"
notary_key="$RUNNER_TEMP/AuthKey_${APPLE_NOTARY_KEY_ID}.p8"
{
echo "RELEASE_KEYCHAIN=$keychain"
echo "RELEASE_NOTARY_KEY=$notary_key"
} >> "$GITHUB_ENV"
keychain_password=$(openssl rand -hex 32)
echo "::add-mask::$keychain_password"

printf '%s' "$APPLE_DEVELOPER_ID_APPLICATION_P12_BASE64" | /usr/bin/base64 --decode >"$p12"
printf '%s' "$APPLE_NOTARY_API_KEY_P8_BASE64" | /usr/bin/base64 --decode >"$notary_key"
chmod 600 "$p12" "$notary_key"

security create-keychain -p "$keychain_password" "$keychain"
security set-keychain-settings -lut 21600 "$keychain"
security unlock-keychain -p "$keychain_password" "$keychain"
security import "$p12" -k "$keychain" -f pkcs12 -x \
-P "$APPLE_DEVELOPER_ID_APPLICATION_P12_PASSWORD" \
-T /usr/bin/codesign >/dev/null
rm -f "$p12"
security set-key-partition-list \
-S apple-tool:,apple:,codesign: -s -k "$keychain_password" \
"$keychain" >/dev/null
security list-keychains -d user -s "$keychain"

identities=$(security find-identity -v -p codesigning "$keychain")
identity=$(printf '%s\n' "$identities" | awk -v team="($APPLE_TEAM_ID)" \
'/Developer ID Application:/ && index($0, team) {print $2}')
count=$(printf '%s\n' "$identity" | sed '/^$/d' | wc -l | tr -d ' ')
[[ "$count" = 1 ]] || {
echo "expected exactly one Developer ID Application identity for APPLE_TEAM_ID" >&2
exit 1
}

echo "RELEASE_SIGNING_IDENTITY=$identity" >> "$GITHUB_ENV"

- name: Sign, notarize, staple, and verify DMG
env:
APPLE_NOTARY_KEY_ID: ${{ secrets.APPLE_NOTARY_KEY_ID }}
APPLE_NOTARY_ISSUER_ID: ${{ secrets.APPLE_NOTARY_ISSUER_ID }}
APPLE_TEAM_ID: ${{ vars.APPLE_TEAM_ID }}
RELEASE_TAG: ${{ inputs.tag }}
run: |
chmod +x scripts/release_macos_dmg.sh
scripts/release_macos_dmg.sh \
--app release-stage/oMLX.app \
--output-dir dist \
--identity "$RELEASE_SIGNING_IDENTITY" \
--team-id "$APPLE_TEAM_ID" \
--notary-key "$RELEASE_NOTARY_KEY" \
--notary-key-id "$APPLE_NOTARY_KEY_ID" \
--notary-issuer "$APPLE_NOTARY_ISSUER_ID" \
--version "${RELEASE_TAG#v}"

- name: Upload verified workflow artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: signed-notarized-macos-dmg
path: |
dist/*.dmg
dist/*.sha256
if-no-files-found: error

- name: Create or update draft GitHub Release
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ inputs.tag }}
run: |
set -euo pipefail
release_json=$(gh api "repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_TAG" 2>/dev/null || true)
if [[ -n "$release_json" ]]; then
[[ "$(jq -r .draft <<<"$release_json")" = true ]] || {
echo "refusing to modify an already-published release" >&2
exit 1
}
else
prerelease=()
[[ "$RELEASE_TAG" =~ (a|b|rc|dev)[0-9]+$ ]] && prerelease=(--prerelease)
gh release create "$RELEASE_TAG" --verify-tag --draft \
--generate-notes --title "$RELEASE_TAG" "${prerelease[@]}"
fi
gh release upload "$RELEASE_TAG" dist/*.dmg dist/*.sha256 --clobber

- name: Remove ephemeral signing material
if: always()
run: |
if [[ -n "${RELEASE_KEYCHAIN:-}" ]]; then
security delete-keychain "$RELEASE_KEYCHAIN" >/dev/null 2>&1 || true
fi
rm -f "${RELEASE_NOTARY_KEY:-}" \
"$RUNNER_TEMP/developer-id-application.p12"
23 changes: 23 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,23 @@ packaging/_export/
packaging/_build/
*.dmg

# Apple signing/notarization credentials and temporary keychains
*.p12
*.pfx
*.p8
*.cer
*.crt
*.pem
*.jks
*.keystore
*.provisionprofile
*.mobileprovision
*.keychain
*.keychain-db
AuthKey_*.p8
.env.*
!.env.example

# Generated engine commit metadata (build-time artifact)
omlx/_engine_commits.json

Expand All @@ -123,3 +140,9 @@ docs/native_app_architecture.md
uv.lock
# generated TurboQuant memory report (machine-specific)
tq_batch_memory.md

# Local working notes and session tooling — never part of a PR
.audit/
.claude/
issues.md
clusterPlan.md
6 changes: 3 additions & 3 deletions Formula/omlx.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ class Omlx < Formula

desc "LLM inference server optimized for Apple Silicon"
homepage "https://github.com/jundot/omlx"
url "https://github.com/jundot/omlx/archive/refs/tags/v0.5.5.tar.gz"
sha256 "d77b58c007b3f1d3b5463ac66ddcd9923db5839f82213d9b221e0f68b867ff3c"
url "https://github.com/jundot/omlx/archive/refs/tags/v0.6.3rc3.tar.gz"
sha256 "1d08ff4585eb796f34f56d266b69cae65b51a48d98a4b213caca094d7c82a839"
license "Apache-2.0"

head "https://github.com/jundot/omlx.git", branch: "main"
Expand All @@ -15,7 +15,7 @@ class Omlx < Formula

depends_on "rust" => :build
depends_on arch: :arm64
depends_on :macos
depends_on macos: :sequoia
depends_on "python@3.11"

# macOS 27 beta's `strip` corrupts dynamic offsets in Mach-O libraries
Expand Down
2 changes: 1 addition & 1 deletion README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ pip install -e ".[mcp]" # Avec support MCP (Model Context Protocol)
OMLX_WITH_CUSTOM_KERNEL=1 pip install -e .
```

Nécessite macOS 15.0+ (Sequoia), Python 3.10+, et Apple Silicon (M1/M2/M3/M4).
Nécessite macOS 15.0+ (Sequoia), Python 3.10+, et Apple Silicon (M1/M2/M3/M4/M5).

## Démarrage rapide

Expand Down
2 changes: 1 addition & 1 deletion README.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ pip install -e ".[mcp]" # MCP(Model Context Protocol)サポート付き
OMLX_WITH_CUSTOM_KERNEL=1 pip install -e .
```

Python 3.10+とApple Silicon(M1/M2/M3/M4)が必要です。
Python 3.10+とApple Silicon(M1/M2/M3/M4/M5)が必要です。

## クイックスタート

Expand Down
Loading