mlx-bun 0.0.13 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/README.md +71 -578
  2. package/bin/mlx-bun.mjs +1 -1
  3. package/docs/README.md +91 -0
  4. package/docs/{design → archive}/hlg-sampling.md +3 -3
  5. package/docs/{design → archive/investigations}/audio-input-plan.md +4 -4
  6. package/docs/{design → archive/investigations}/colibri-glm52-port.md +1 -1
  7. package/docs/{design → archive/investigations}/diffusion-gemma-port.md +3 -3
  8. package/docs/{design → archive/investigations}/faithful-l1-consolidation.md +4 -4
  9. package/docs/{investigations → archive/investigations}/hlg-sampling-investigation.md +1 -1
  10. package/docs/{design → archive/investigations}/minicpm5-decode-megakernel.md +11 -11
  11. package/docs/{design → archive/investigations}/optimization_plan.md +1 -1
  12. package/docs/archive/investigations/pareto-specialized-runtime-findings.md +92 -0
  13. package/docs/{design → archive/investigations}/pre-colibri-stabilization.md +5 -5
  14. package/docs/{design → archive/investigations}/the-dreaming-handoff.md +2 -2
  15. package/docs/{planning → archive/planning}/chat-ui-vision.md +1 -1
  16. package/docs/{planning → archive/planning}/chunk-task-roadmap.md +1 -1
  17. package/docs/{planning → archive/planning}/curve-sampler-research-plan.md +4 -4
  18. package/docs/{planning → archive/planning}/memory-docs-and-dag-plan.md +1 -1
  19. package/docs/{planning → archive/planning}/release-notes-v0.0.9.md +1 -1
  20. package/docs/archive/planning/release-notes-v0.2.0.md +49 -0
  21. package/docs/{planning → archive/planning}/website-readme-pass-plan.md +1 -1
  22. package/docs/design/batching.md +569 -0
  23. package/docs/design/decode-speed-program.md +3178 -169
  24. package/docs/design/dreaming-nightly-pipeline.md +675 -282
  25. package/docs/design/generic-model-support.md +579 -334
  26. package/docs/design/kv-cache.md +680 -0
  27. package/docs/design/orpo-training.md +673 -1239
  28. package/docs/design/speculative-decoding.md +1627 -0
  29. package/docs/design/turboquant.md +2102 -0
  30. package/docs/design/unified-engine-frontier-plan.md +1831 -727
  31. package/docs/design/web-chat-redesign.md +666 -1083
  32. package/docs/planning/PRODUCT_ROADMAP.md +34 -1
  33. package/docs/planning/release-notes-v0.3.0.md +35 -0
  34. package/docs/planning/video-series.md +421 -0
  35. package/docs/reference/benchmarks.md +1162 -0
  36. package/docs/reference/cli.md +395 -149
  37. package/docs/reference/distribution.md +321 -181
  38. package/docs/reference/environment.md +348 -0
  39. package/docs/reference/glossary.md +39 -0
  40. package/docs/reference/library-api.md +580 -142
  41. package/docs/reference/memory.md +227 -64
  42. package/docs/reference/models.md +137 -6
  43. package/docs/reference/server-api.md +938 -422
  44. package/docs/reference/server-config.md +652 -320
  45. package/docs/reference/training.md +393 -254
  46. package/docs/reference/troubleshooting.md +166 -0
  47. package/package.json +10 -5
  48. package/src/admission-plan.ts +18 -0
  49. package/src/anthropic.ts +92 -3
  50. package/src/audio/decode.ts +2 -2
  51. package/src/audio/features.ts +2 -2
  52. package/src/backends/mlx/autoregressive.ts +108 -0
  53. package/src/backends/mlx/batch-group.ts +1646 -0
  54. package/src/backends/mlx/diffusion.ts +39 -0
  55. package/src/backends/mlx/draft-target.ts +47 -0
  56. package/src/backends/mlx/evaluation.ts +105 -0
  57. package/src/backends/mlx/fill-append.ts +45 -0
  58. package/src/backends/mlx/gateway-binding.ts +71 -0
  59. package/src/backends/mlx/graph.ts +38 -0
  60. package/src/backends/mlx/memory-client.ts +189 -0
  61. package/src/backends/mlx/memory-guard.ts +40 -0
  62. package/src/backends/mlx/methods.ts +90 -0
  63. package/src/backends/mlx/model-prompt.ts +164 -0
  64. package/src/backends/mlx/model-serving.ts +79 -0
  65. package/src/backends/mlx/prefill.ts +33 -0
  66. package/src/backends/mlx/request-policy.ts +20 -0
  67. package/src/backends/mlx/rollback.ts +51 -0
  68. package/src/backends/mlx/serial-executor.ts +273 -0
  69. package/src/backends/mlx/speculative.ts +114 -0
  70. package/src/backends/mlx/state-views.ts +26 -0
  71. package/src/backends/mlx/text-engine.ts +73 -0
  72. package/src/cli.ts +189 -61
  73. package/src/client.ts +66 -0
  74. package/src/config.ts +21 -4
  75. package/src/contracts/completion.ts +16 -0
  76. package/src/contracts/execution.ts +49 -0
  77. package/src/contracts/generation.ts +103 -0
  78. package/src/contracts/host.ts +7 -0
  79. package/src/contracts/jobs.ts +66 -0
  80. package/src/contracts/pi-provider.ts +30 -0
  81. package/src/contracts/pi.ts +259 -0
  82. package/src/contracts/resources.ts +18 -0
  83. package/src/contracts/scheduling.ts +27 -0
  84. package/src/contracts/tsconfig.json +14 -0
  85. package/src/diffusion/diffusion-generate.ts +218 -153
  86. package/src/embed.ts +1 -1
  87. package/src/engine/admission.ts +59 -0
  88. package/src/engine/cancellation.ts +38 -0
  89. package/src/engine/engine.ts +56 -0
  90. package/src/engine/execution-coordinator.ts +70 -0
  91. package/src/engine/execution-plan.ts +51 -0
  92. package/src/engine/resources.ts +42 -0
  93. package/src/engine/scheduler.ts +67 -0
  94. package/src/engine/session.ts +247 -0
  95. package/src/eval/README.md +44 -1
  96. package/src/eval/kl.ts +263 -23
  97. package/src/eval/reference-logits.ts +207 -0
  98. package/src/eval/runner.ts +10 -79
  99. package/src/eval/tasks/bfcl.ts +2 -1
  100. package/src/eval/tasks/gsm8k.ts +2 -1
  101. package/src/eval/tasks/hashhop.ts +2 -1
  102. package/src/eval/tasks/humaneval.ts +5 -4
  103. package/src/eval/tasks/ifeval.ts +2 -1
  104. package/src/eval/tasks/mmlu.ts +2 -1
  105. package/src/expert-io.ts +3 -1
  106. package/src/expert-offload.ts +3 -1
  107. package/src/fill/echo-index.ts +188 -0
  108. package/src/fill/fill-session.ts +452 -0
  109. package/src/fill/proposal.ts +68 -0
  110. package/src/fill/schema-rows.ts +506 -0
  111. package/src/fill/tool-boundary.ts +103 -0
  112. package/src/fit.ts +24 -43
  113. package/src/generate.ts +740 -337
  114. package/src/grammar.ts +14 -8
  115. package/src/harness-pi.ts +15 -34
  116. package/src/hub-rest.ts +4 -4
  117. package/src/index.ts +27 -0
  118. package/src/inference/denoising.ts +17 -0
  119. package/src/inference/graph.ts +33 -0
  120. package/src/inference/prefill.ts +39 -0
  121. package/src/inference/rollback.ts +7 -0
  122. package/src/jobs/db.ts +4 -0
  123. package/src/jobs/index.ts +2 -0
  124. package/src/jobs/job-entry.ts +15 -14
  125. package/src/jobs/runner.ts +98 -13
  126. package/src/jobs/task-client.ts +19 -0
  127. package/src/jobs/types.ts +2 -58
  128. package/src/kv-scheme.ts +199 -0
  129. package/src/kv-store.ts +459 -234
  130. package/src/lab/README.md +18 -0
  131. package/src/{assets → lab/curve}/curve-designer.html +2 -2
  132. package/src/{curve-sampler.ts → lab/curve/curve-sampler.ts} +2 -2
  133. package/src/{expert-trace.ts → lab/expert-trace/expert-trace.ts} +7 -5
  134. package/src/{model → lab/paged-kv}/paged-kv.ts +9 -6
  135. package/src/library.ts +40 -0
  136. package/src/lora.ts +18 -0
  137. package/src/media-fetch.ts +20 -4
  138. package/src/memory/article.ts +1 -1
  139. package/src/memory/chunk.ts +1 -1
  140. package/src/memory/model.ts +32 -170
  141. package/src/memory/prompts.ts +1 -1
  142. package/src/memory/rest.ts +1 -1
  143. package/src/memory/schedule.ts +1 -1
  144. package/src/memory/stages.ts +4 -1
  145. package/src/memory/vault.ts +3 -4
  146. package/src/mlx/array.ts +9 -10
  147. package/src/mlx/compile.ts +12 -2
  148. package/src/mlx/ffi.ts +66 -22
  149. package/src/mlx/materialize.ts +23 -0
  150. package/src/mlx/metal-kernel.ts +10 -11
  151. package/src/mlx/ops.ts +64 -19
  152. package/src/mlx/quantized-rows.ts +36 -0
  153. package/src/mlx/token-bitmask.ts +52 -0
  154. package/src/mlx/turboquant-kv-decode.ts +82 -0
  155. package/src/mlx/turboquant-kv-inverse.ts +122 -0
  156. package/src/mlx/turboquant-ops.ts +33 -3
  157. package/src/mlx/turboquant-tables.ts +2 -2
  158. package/src/model/batched-mask.ts +9 -3
  159. package/src/model/batched-quant.ts +2 -2
  160. package/src/model/batched-rotating-quant.ts +45 -99
  161. package/src/model/batched-rotating-state.ts +73 -0
  162. package/src/model/batched-rotating.ts +57 -106
  163. package/src/model/batched-row-storage.ts +127 -0
  164. package/src/model/compiled-decode.ts +4 -3
  165. package/src/model/diffusion-gemma.ts +8 -8
  166. package/src/model/factory.ts +87 -49
  167. package/src/model/fingerprint.ts +1 -1
  168. package/src/model/flash-attention.ts +3 -3
  169. package/src/model/gemma4-base.ts +187 -17
  170. package/src/model/gemma4.ts +6 -6
  171. package/src/model/generated/gemma4-12b.ts +52 -148
  172. package/src/model/generated/gemma4-26b.ts +34 -94
  173. package/src/model/generated/gemma4-e4b.ts +28 -76
  174. package/src/model/glm52-cache.ts +19 -9
  175. package/src/model/glm52-dsa.ts +13 -9
  176. package/src/model/glm52-memory.ts +28 -1
  177. package/src/model/implementation.ts +69 -0
  178. package/src/model/minicpm5.ts +7 -8
  179. package/src/model/profile.ts +443 -0
  180. package/src/model/qwen-append.ts +12 -0
  181. package/src/model/qwen-conv.ts +52 -0
  182. package/src/model/qwen3-delta.ts +98 -2
  183. package/src/model/qwen3-mrope.ts +252 -0
  184. package/src/model/qwen3_5-checkpoint.ts +164 -0
  185. package/src/model/qwen3_5.ts +336 -60
  186. package/src/model/support.ts +1 -1
  187. package/src/model/trellis-balanced-scatter.ts +51 -0
  188. package/src/model/trellis-linear.ts +672 -0
  189. package/src/model/trellis-shared-m.ts +151 -0
  190. package/src/model/trellis-shared-scatter.ts +144 -0
  191. package/src/model/trellis-splitk-prefill.ts +158 -0
  192. package/src/model/trellis-tiled-prefill.ts +136 -0
  193. package/src/model/trellis-vector-expand.ts +62 -0
  194. package/src/model/trellis-wide-prefill.ts +94 -0
  195. package/src/model/universal/dense.ts +1 -1
  196. package/src/model/universal/modules.ts +8 -1
  197. package/src/native/frame_extract.swift +140 -0
  198. package/src/native-pack.ts +15 -7
  199. package/src/pi-provider.ts +6 -64
  200. package/src/pi-web.ts +14 -320
  201. package/src/prompt-cache.ts +97 -54
  202. package/src/quantize/allocator.ts +1 -1
  203. package/src/quantize/atomic-output.ts +38 -0
  204. package/src/quantize/calibration.ts +2 -1
  205. package/src/quantize/config-writer.ts +16 -3
  206. package/src/quantize/index.ts +28 -1
  207. package/src/quantize/job.ts +11 -0
  208. package/src/quantize/quantizer.ts +265 -100
  209. package/src/quantize/rotate.ts +603 -0
  210. package/src/quantize/safetensors-writer.ts +79 -1
  211. package/src/quantize/sensitivity.ts +41 -59
  212. package/src/quantize/trellis.ts +586 -0
  213. package/src/quantize/weight-transform.ts +292 -0
  214. package/src/responses.ts +130 -3
  215. package/src/runtime-config.ts +81 -0
  216. package/src/sampler.ts +276 -4
  217. package/src/serve/admin-routes.ts +184 -0
  218. package/src/serve/aux-routes.ts +132 -0
  219. package/src/serve/batch-scheduler.ts +8 -1558
  220. package/src/serve/chat-request.ts +391 -0
  221. package/src/serve/chat-stage.ts +195 -0
  222. package/src/serve/checkpoint-identity.ts +64 -0
  223. package/src/serve/completion-executor.ts +354 -0
  224. package/src/serve/completion-sink.ts +157 -0
  225. package/src/serve/discovery-routes.ts +204 -0
  226. package/src/serve/generation-gateway.ts +211 -243
  227. package/src/serve/http.ts +159 -0
  228. package/src/serve/inference-request.ts +79 -0
  229. package/src/serve/isolate.ts +297 -105
  230. package/src/serve/kv-budget.ts +14 -0
  231. package/src/serve/lab-routes.ts +341 -0
  232. package/src/serve/lane-registry.ts +2 -1
  233. package/src/serve/model-admin-routes.ts +155 -0
  234. package/src/serve/model-binding.ts +43 -0
  235. package/src/serve/model-host.ts +512 -0
  236. package/src/serve/openai-wire.ts +103 -0
  237. package/src/serve/parent-application.ts +56 -0
  238. package/src/serve/pipeline.ts +33 -0
  239. package/src/serve/preparation.ts +33 -0
  240. package/src/serve/prompt-response-trace.ts +147 -0
  241. package/src/serve/request-plan.ts +162 -0
  242. package/src/serve/request-prep.ts +346 -0
  243. package/src/serve/response-lease.ts +24 -0
  244. package/src/serve/responses-client.ts +69 -0
  245. package/src/serve/session-completion-engine.ts +110 -0
  246. package/src/serve/session-search.ts +1 -1
  247. package/src/serve/static-routes.ts +101 -0
  248. package/src/serve/text-completion-stage.ts +104 -0
  249. package/src/serve/token-streams.ts +519 -0
  250. package/src/server.ts +523 -3551
  251. package/src/spec/assistant-source.ts +10 -44
  252. package/src/spec/deepspec-source.ts +6 -6
  253. package/src/spec/dflash-source.ts +9 -8
  254. package/src/spec/dspark/ab-stats.ts +3 -3
  255. package/src/spec/dspark/calibration.ts +2 -2
  256. package/src/spec/dspark/deepspec-module.ts +2 -2
  257. package/src/spec/dspark/generate-dflash.ts +2 -2
  258. package/src/spec/dspark/generate.ts +2 -2
  259. package/src/spec/dspark/loader.ts +1 -1
  260. package/src/spec/dspark/module-dflash.ts +5 -4
  261. package/src/spec/dspark/module.ts +3 -3
  262. package/src/spec/dspark/quantize-drafter.ts +1 -1
  263. package/src/spec/generate.ts +1 -1
  264. package/src/spec/glm52-mtp-source.ts +9 -1
  265. package/src/spec/ngram-source.ts +1 -1
  266. package/src/spec/prefix-state.ts +45 -0
  267. package/src/spec/qwen-mtp-source.ts +528 -0
  268. package/src/spec/serve-loop.ts +179 -213
  269. package/src/spec/source.ts +42 -10
  270. package/src/spec/two-model.ts +1 -1
  271. package/src/ssd-cache.ts +95 -24
  272. package/src/ssd-durability.ts +207 -0
  273. package/src/tool-call.ts +51 -14
  274. package/src/train/flash-cce.ts +14 -13
  275. package/src/train/forward.ts +38 -1
  276. package/src/train/loss.ts +3 -2
  277. package/src/train/prefix-shared.ts +5 -1
  278. package/src/train/segmented.ts +9 -6
  279. package/src/train/trainer.ts +9 -8
  280. package/src/vision/preprocess.ts +1 -1
  281. package/src/vision/prompt.ts +48 -2
  282. package/src/vision/qwen3vl-preprocess.ts +409 -0
  283. package/src/vision/qwen3vl-prompt.ts +196 -0
  284. package/src/vision/qwen3vl-tower.ts +555 -0
  285. package/src/vision/video-frames.ts +148 -0
  286. package/src/web/app.html +1 -1
  287. package/src/web/app.js +15 -6
  288. package/src/web/src/adapters-panel.ts +3 -3
  289. package/src/web/src/assistant.ts +2 -36
  290. package/src/web/src/chat.ts +16 -9
  291. package/src/web/src/composer.ts +4 -4
  292. package/src/web/src/hub.ts +1 -1
  293. package/src/web/src/markdown.ts +0 -0
  294. package/src/web/src/memory-panel.ts +1 -1
  295. package/src/web/src/model-picker.ts +1 -1
  296. package/src/web/src/palette.ts +1 -1
  297. package/src/web/src/protocol.ts +3 -39
  298. package/src/web/src/sessions.ts +1 -1
  299. package/src/web/src/ui-catalog.ts +4 -18
  300. package/src/web-assets.ts +47 -0
  301. package/src/weights.ts +134 -33
  302. package/docs/archive/mlx-bun-lab-report.html +0 -275
  303. package/docs/archive/wwdc-mlx-bun.html +0 -848
  304. package/docs/design/adapters-end-to-end.md +0 -205
  305. package/docs/design/batching-perf-path.md +0 -255
  306. package/docs/design/batching-v2-plan.md +0 -529
  307. package/docs/design/bucketing-stage.md +0 -197
  308. package/docs/design/compat-cli-surface-design.md +0 -230
  309. package/docs/design/docs-reorg-plan.md +0 -165
  310. package/docs/design/dspark-serving-program.md +0 -371
  311. package/docs/design/dspark-speculative-decoding.md +0 -268
  312. package/docs/design/grammar-spec-batching-integration.md +0 -301
  313. package/docs/design/memory-inference-path.md +0 -422
  314. package/docs/design/memory-synthesis.md +0 -287
  315. package/docs/design/memory-system.md +0 -237
  316. package/docs/design/mlx-lm-tool-parity-plan.md +0 -545
  317. package/docs/design/omlx-adoption-map.md +0 -98
  318. package/docs/design/orpo-dynamic-lambda.md +0 -220
  319. package/docs/design/orpo-future-enhancements.md +0 -340
  320. package/docs/design/paged-kv-cache.md +0 -214
  321. package/docs/design/parallel-slots.md +0 -567
  322. package/docs/design/parity-tier-dag.md +0 -161
  323. package/docs/design/repo-cleanup-plan.md +0 -189
  324. package/docs/design/runtime-isolation.md +0 -263
  325. package/docs/design/segmented-backward-training.md +0 -543
  326. package/docs/design/spec-decode-larger-targets.md +0 -229
  327. package/docs/design/ssd-kv-cold-tier.md +0 -288
  328. package/docs/design/structured-output.md +0 -484
  329. package/docs/design/tauri-desktop-app.md +0 -127
  330. package/docs/design/the-dreaming-master-plan.md +0 -445
  331. package/docs/design/turboquant-kv.md +0 -235
  332. package/docs/design/w4a16-compute-precision-spike.md +0 -232
  333. package/docs/design/web-chat-beat-matrix.md +0 -315
  334. package/docs/design/write-pipeline-entity.md +0 -468
  335. package/docs/investigations/curve-runs/bisector-route.json +0 -98
  336. package/docs/investigations/curve-runs/bisector-trace.json +0 -1393
  337. package/docs/investigations/curve-runs/curve-terrain.json +0 -1179
  338. package/docs/investigations/curve-runs/curve-terrain.svg +0 -42
  339. package/docs/investigations/hlg-ab.html +0 -34
  340. package/docs/investigations/hlg-explorer.html +0 -238
  341. package/docs/investigations/hlg-figs/cliff.svg +0 -1
  342. package/docs/investigations/hlg-figs/cross.svg +0 -1
  343. package/docs/investigations/hlg-figs/edges.svg +0 -1
  344. package/docs/investigations/hlg-figs/k20-grids.svg +0 -1
  345. package/docs/investigations/hlg-figs/k20-peaks.svg +0 -1
  346. package/docs/investigations/hlg-figs/lw-curve.svg +0 -1
  347. package/docs/investigations/hlg-figs/terrain.svg +0 -1
  348. package/docs/investigations/hlg-report.html +0 -262
  349. package/docs/investigations/hlg-runs/hlg-ab.json +0 -149
  350. package/docs/investigations/hlg-runs/hlg-blind-prompts.md +0 -87
  351. package/docs/investigations/hlg-runs/hlg-blind.json +0 -107
  352. package/docs/investigations/hlg-runs/hlg-cliff.json +0 -197
  353. package/docs/investigations/hlg-runs/hlg-cross.json +0 -505
  354. package/docs/investigations/hlg-runs/hlg-edge.json +0 -388
  355. package/docs/investigations/hlg-runs/hlg-eval1.json +0 -25
  356. package/docs/investigations/hlg-runs/hlg-frontier.json +0 -86
  357. package/docs/investigations/hlg-runs/hlg-grid.json +0 -242
  358. package/docs/investigations/hlg-runs/hlg-grid2.json +0 -343
  359. package/docs/investigations/hlg-runs/hlg-lw-coarse.json +0 -110
  360. package/docs/investigations/hlg-runs/hlg-map.json +0 -383
  361. package/docs/investigations/hlg-runs/run0-original.log +0 -159
  362. package/docs/investigations/hlg-runs/runA-recommended.log +0 -131
  363. package/docs/investigations/hlg-runs/runAA-cliff-cpm5.log +0 -26
  364. package/docs/investigations/hlg-runs/runAB-grid2-e4b.log +0 -18
  365. package/docs/investigations/hlg-runs/runAC-peak-e4b-partial.log +0 -25
  366. package/docs/investigations/hlg-runs/runAD-ab-samples.log +0 -8
  367. package/docs/investigations/hlg-runs/runAE-edge-e4b.log +0 -51
  368. package/docs/investigations/hlg-runs/runAF-logit-calibration.log +0 -10
  369. package/docs/investigations/hlg-runs/runAG-eval-config2.log +0 -16
  370. package/docs/investigations/hlg-runs/runB-gain-variants.log +0 -192
  371. package/docs/investigations/hlg-runs/runC-pivots.log +0 -162
  372. package/docs/investigations/hlg-runs/runD-oetf.log +0 -132
  373. package/docs/investigations/hlg-runs/runE-eotf.log +0 -162
  374. package/docs/investigations/hlg-runs/runF-shaper-working.log +0 -86
  375. package/docs/investigations/hlg-runs/runG-shaper-sweep.log +0 -101
  376. package/docs/investigations/hlg-runs/runH-wsweep.log +0 -176
  377. package/docs/investigations/hlg-runs/runI-asweep.log +0 -176
  378. package/docs/investigations/hlg-runs/runJ-knobmap.log +0 -49
  379. package/docs/investigations/hlg-runs/runK-frontier.log +0 -19
  380. package/docs/investigations/hlg-runs/runL-widemap.log +0 -65
  381. package/docs/investigations/hlg-runs/runM-frontier-emb.log +0 -15
  382. package/docs/investigations/hlg-runs/runN-verify.log +0 -116
  383. package/docs/investigations/hlg-runs/runO-frontier-seed5000.log +0 -15
  384. package/docs/investigations/hlg-runs/runP-grid-AxSm.log +0 -15
  385. package/docs/investigations/hlg-runs/runQ-grid-tgW.log +0 -15
  386. package/docs/investigations/hlg-runs/runR-blind-transcript.log +0 -79
  387. package/docs/investigations/hlg-runs/runS-cross-coherence.log +0 -33
  388. package/docs/investigations/hlg-runs/runT-cross-cpm5.log +0 -33
  389. package/docs/investigations/hlg-runs/runU-cross-12b.log +0 -33
  390. package/docs/investigations/hlg-runs/runV-lw-e4b.log +0 -22
  391. package/docs/investigations/hlg-runs/runW-lw-12b.log +0 -22
  392. package/docs/investigations/hlg-runs/runX-lw-cpm5.log +0 -22
  393. package/docs/investigations/hlg-runs/runY-cliff-e4b.log +0 -26
  394. package/docs/investigations/hlg-runs/runZ-cliff-12b.log +0 -26
  395. package/docs/planning/IDEAS.md +0 -69
  396. package/docs/reference/embedding.md +0 -197
  397. package/docs/reference/features-matrix.md +0 -100
  398. package/docs/reference/orpo-quickstart.md +0 -135
  399. package/src/flags.ts +0 -13
  400. /package/docs/{investigations → archive/investigations}/chunk-finetune-experiment.md +0 -0
  401. /package/docs/{investigations → archive/investigations}/colibri-oracle-pin.md +0 -0
  402. /package/docs/{investigations → archive/investigations}/curve-bisector-routing.md +0 -0
  403. /package/docs/{investigations → archive/investigations}/decode-roofline-lookagain.md +0 -0
  404. /package/docs/{investigations → archive/investigations}/dspark-handoff.md +0 -0
  405. /package/docs/{investigations → archive/investigations}/expert-offload-single-user-moe.md +0 -0
  406. /package/docs/{investigations → archive/investigations}/indexshare-performance-spike.md +0 -0
  407. /package/docs/{investigations → archive/investigations}/kernel-perf-review-2026-07.md +0 -0
  408. /package/docs/{investigations → archive/investigations}/lab-build-journal.md +0 -0
  409. /package/docs/{investigations → archive/investigations}/openwiki-evaluation.md +0 -0
  410. /package/docs/{investigations → archive/investigations}/orpo-base-uf-experiment-and-directions.md +0 -0
  411. /package/docs/{investigations → archive/investigations}/orpo-flash-cce-pin-leak.md +0 -0
  412. /package/docs/{investigations → archive/investigations}/orpo-uf-testing-handoff.md +0 -0
  413. /package/docs/{investigations → archive/investigations}/pi-builtin-investigation.md +0 -0
  414. /package/docs/{investigations → archive/investigations}/segmented-backward-handoff.md +0 -0
  415. /package/docs/{investigations → archive/investigations}/starter-model-port-handoff.md +0 -0
  416. /package/docs/{investigations → archive/investigations}/steel-flash-cce-handoff.md +0 -0
  417. /package/docs/{investigations → archive/investigations}/trainer-validation-experiment.md +0 -0
  418. /package/docs/{planning → archive/planning}/chat-ui-vision-memory-first.md +0 -0
  419. /package/docs/{planning → archive/planning}/journal.md +0 -0
  420. /package/docs/{planning → archive/planning}/pi-integration-review.md +0 -0
  421. /package/docs/{planning → archive/planning}/release-notes-v0.0.10.md +0 -0
  422. /package/docs/{planning → archive/planning}/release-notes-v0.0.11.md +0 -0
  423. /package/docs/{planning → archive/planning}/release-notes-v0.0.12.md +0 -0
  424. /package/docs/{planning → archive/planning}/release-notes-v0.0.13.md +0 -0
  425. /package/docs/{planning → archive/planning}/web-ui-pass-plan.md +0 -0
  426. /package/{docs/investigations → src/serve/assets}/curve-terrain.html +0 -0
  427. /package/{docs/dag → src/serve/assets}/training-inference-map.html +0 -0
@@ -343,7 +343,7 @@ into its own persistent child process behind the existing
343
343
  API + routing, zero MLX calls); one GPU lease serializes all GPU consumers
344
344
  (chat, API, quantize, finetune) — reusing the spawn/lease pattern jobs
345
345
  already prove. Converges with model hot-swap (model lives off the main
346
- thread either way). Full design + phasing: `docs/design/runtime-isolation.md`.
346
+ thread either way). Full design + phasing: `docs/reference/server-config.md`.
347
347
 
348
348
  ## Harness UX
349
349
 
@@ -543,3 +543,36 @@ reuse across pipeline stages.
543
543
  - **What is the right install path?** All of the above — shipped: npm
544
544
  publish (v0.0.4, `bunx mlx-bun`), Homebrew release pipeline (sign,
545
545
  notarize, `joshuarossi/homebrew-tap`), and GitHub release binary.
546
+
547
+ ## Vision notes (merged from IDEAS.md, 2026-08-23)
548
+
549
+ ### Local in the deeper sense
550
+
551
+ Two phrases that capture the thesis — especially **mlx-bun × Lucien**:
552
+
553
+ 1. **"A truly local model in a deeper sense."** Not just local *compute*
554
+ (runs on your Mac, nothing leaves it) — local to *you*: grounded in your
555
+ own context and memory, not only your hardware.
556
+ 2. **"The best model at being yours."** Not the best model in the absolute /
557
+ benchmark sense — the best at *being yours*. A small local model,
558
+ fine-tuned and wired to your personal memory, can lose every general
559
+ benchmark and still win the only one that matters here.
560
+
561
+ Lucien (the Dreaming) is the synthesized, persistent memory of *you*;
562
+ mlx-bun is the local, private model runtime. Combined: a model that runs
563
+ entirely on your machine **and** is continuously grounded in your own
564
+ accumulated context — local in both senses, and yours in a way no hosted
565
+ frontier model can be.
566
+
567
+ ### Library/app split (idea only — NOT planned, Josh 2026-07-05)
568
+
569
+ Two pulls: "one executable, everything you want to do with local AI" (the
570
+ product's charm) vs "some people just want a JS ML library — do they need
571
+ the rest?" The runtime-isolation work (2026-07-05) drew the exact boundary
572
+ either future needs: the engine child = the GPU stuff (src/model, src/mlx,
573
+ caches, scheduler, generate); the parent = the app (serve/UI/registry/
574
+ jobs/proxy). If a split ever happens it is a PACKAGING decision, not a
575
+ refactor — e.g. npm subpath exports (mlx-bun/model vs the full CLI bundle)
576
+ so library users import only the core. Library usage is unaffected by
577
+ isolation today (in-process generate(), no server involved). Revisit only
578
+ if Josh decides; both directions stay open from the current structure.
@@ -0,0 +1,35 @@
1
+ # mlx-bun v0.3.0
2
+
3
+ This release adds the Qwen inference performance work, fixes long-generation
4
+ memory retention, and makes configured serving benchmarks reproducible.
5
+
6
+ - Packed Trellis decode and prefill kernels, interleaved weight readers,
7
+ joint TurboQuant K/V operations and inverse rotation optimizations.
8
+ - Opt-in Qwen uniform KV4 speculation with MTP and bounded paired target/draft
9
+ RAM prefixes. Exact history, model identity and adapter namespace govern
10
+ reuse; paired speculative state does not persist across server restarts.
11
+ - Model-owned structural token appends, serving ownership and parser fixes,
12
+ and a bounded range cache for sustained generation.
13
+ - SSD flushes recognize prefixes covered by snapshots committed later in the
14
+ same flush, preserving errors for genuinely missing state.
15
+ - Native runtime pack 0.4.0, bundling MLX 0.32.2 and the matching MLX-C API.
16
+ Persistent cache compatibility includes the runtime and GPU identity.
17
+ - Serving benchmark controls for explicit draft, KV and prompt-cache settings,
18
+ with saved commands, request hashes, complete-request timing and raw results.
19
+
20
+ The required packed Qwen target completes the fresh Luke Kanban task with
21
+ thinking enabled and the published profile. Its configured KV4/MTP serving
22
+ suite passes every phase on the M4 Pro. Full measurements, machine labels and
23
+ limits are in the [benchmark record](https://github.com/joshuarossi/mlx-bun/blob/v0.3.0/docs/reference/benchmarks.md).
24
+ No matched successful original/final Kanban timing is available, so this
25
+ release claims no percentage reduction in full-task completion time.
26
+
27
+ Optimization defaults remain gated. The standard-suite MiniCPM/Qwen timed
28
+ output differences against the reference and the larger Qwen 4/8-bit
29
+ artifact's prefill memory failures on the 24 GB Mac remain under investigation.
30
+ The SSD restart failures from that suite are fixed and all four affected
31
+ default/mixed serving repeats pass on their first attempt.
32
+
33
+ The [server configuration reference](https://github.com/joshuarossi/mlx-bun/blob/v0.3.0/docs/reference/server-config.md)
34
+ documents experimental switches and their supported combinations. Requires
35
+ Apple Silicon, macOS 14 or later, and Bun 1.4.0 or later for npm installs.
@@ -0,0 +1,421 @@
1
+ # mlx-bun video series
2
+
3
+ ## Episode 1: local AI on a Mac without the setup ritual
4
+
5
+ ### Production brief
6
+
7
+ - **Working title:** Running a 27B Model Locally on a Mac, Without Python
8
+ - **Thumbnail text:** 27B. LOCAL. NO PYTHON.
9
+ - **Target length:** 8 minutes
10
+ - **Audience:** developers who know what local models are but have not used MLX
11
+ - **Machine:** whichever machine is used for the final recorded benchmark; show
12
+ its chip and memory alongside the results
13
+ - **Demo model:** `mlx-community/Qwen3.8-27B-OptiQ-4bit`, already downloaded
14
+ - **Presentation:** calm, direct, mostly terminal and browser capture with short
15
+ pieces to camera
16
+ - **Question the episode answers:** Can local AI on a Mac feel like installed
17
+ software instead of an ML engineering project?
18
+
19
+ This episode proves the product before explaining the implementation. It does
20
+ not tour every feature. Memory, training, model ports, Bun FFI, and the failed
21
+ experiments belong in later episodes.
22
+
23
+ ### Recording setup
24
+
25
+ Prepare two terminal profiles:
26
+
27
+ 1. A clean profile for the installation shot. Do not begin the model download
28
+ during the take unless the download duration is known and useful on camera.
29
+ 2. The normal development profile with Qwen3.8-27B already downloaded. Use
30
+ this for the live server and API demonstrations.
31
+
32
+ Before recording, confirm the exact model selector accepted on the machine:
33
+
34
+ ```sh
35
+ mlx-bun ls
36
+ mlx-bun fit Qwen3.8-27B --ctx 8192
37
+ ```
38
+
39
+ Start the demo server shortly before the live take if model loading or browser
40
+ placement would interrupt the opening. The visible command should still be the
41
+ real command:
42
+
43
+ ```sh
44
+ mlx-bun serve Qwen3.8-27B
45
+ ```
46
+
47
+ Use a fresh chat and disable notifications. Set the terminal to at least 18 pt.
48
+ Keep the browser and terminal at the same zoom level throughout.
49
+
50
+ ### Shot-by-shot script
51
+
52
+ #### 0:00 to 0:12, cold open
53
+
54
+ **Picture**
55
+
56
+ Close shot of an empty terminal. Type `mlx-bun serve Qwen3.8-27B`. Cut directly
57
+ to the browser as the chat opens. Ask a short question whose answer starts
58
+ quickly.
59
+
60
+ Suggested prompt:
61
+
62
+ > Why can a 27-billion-parameter model fit on this 32 GB Mac? Answer in three
63
+ > sentences and show the memory arithmetic.
64
+
65
+ Do not wait for the full answer. Once several words appear, cut to camera.
66
+
67
+ **Voiceover**
68
+
69
+ > That is a 27-billion-parameter Qwen model running locally on a Mac. There is no
70
+ > Python server behind it, no API key, and no request leaving the machine. One
71
+ > command started the model, the chat interface, and an API that existing tools
72
+ > can use. This is mlx-bun.
73
+
74
+ **On-screen text**
75
+
76
+ ```text
77
+ <machine> · Qwen3.8-27B · 20.4 GB weights
78
+ ```
79
+
80
+ #### 0:12 to 0:35, state the problem
81
+
82
+ **Picture**
83
+
84
+ Piece to camera. Brief cuts to a deliberately restrained list of familiar setup
85
+ artifacts: a Python environment, package installation, a server command, and a
86
+ model configuration file. Do not use fake error messages.
87
+
88
+ **Dialogue**
89
+
90
+ > Local AI already works on a Mac. The rough part is everything around the
91
+ > model. You choose a model that might fit, assemble a Python environment,
92
+ > start a server, and then configure the application that was supposed to use
93
+ > it.
94
+ >
95
+ > I wanted the default path to feel like installing software. Run one command,
96
+ > get a useful local assistant, and keep the controls available when you
97
+ > actually need them.
98
+
99
+ #### 0:35 to 1:10, show the real first-run path
100
+
101
+ **Picture**
102
+
103
+ Show the installation command in the clean terminal. Use a pre-recorded,
104
+ time-compressed capture of the first run beside it. Label the time compression.
105
+
106
+ ```sh
107
+ curl -fsSL https://mlx-bun.dev/install.sh | sh
108
+ mlx-bun
109
+ ```
110
+
111
+ Show the starter model becoming ready. Then cut to the explicit Qwen download
112
+ command used before the main recording:
113
+
114
+ ```sh
115
+ mlx-bun get mlx-community/Qwen3.8-27B-OptiQ-4bit
116
+ ```
117
+
118
+ **Voiceover**
119
+
120
+ > The installer downloads a signed, notarized executable. On a fresh machine,
121
+ > bare `mlx-bun` downloads a sub-gigabyte MiniCPM5 starter so the first chat can
122
+ > begin quickly.
123
+ >
124
+ > This episode is about a much larger model, Qwen3.8-27B. Its quantized weights
125
+ > are 20.4 gigabytes, so I downloaded them before recording. I do not think
126
+ > watching a twenty-gigabyte progress bar would improve the video.
127
+
128
+ **Verification note**
129
+
130
+ Capture this section again if first-run behavior changes. Do not narrate the
131
+ device-aware model selection described in the product roadmap until that lookup
132
+ is implemented.
133
+
134
+ #### 1:10 to 1:55, one process with three ways in
135
+
136
+ **Picture**
137
+
138
+ Use a simple screen composition with the running `mlx-bun` process in the
139
+ center. Reveal the chat UI, an HTTP request, and a TypeScript file around it.
140
+
141
+ ```text
142
+ Chat UI
143
+ \
144
+ mlx-bun + MLX + Metal
145
+ / \
146
+ OpenAI-compatible API TypeScript library
147
+ ```
148
+
149
+ **Dialogue**
150
+
151
+ > The visible chat is only one way into the runtime. The same process exposes an
152
+ > OpenAI-compatible API, so applications that already speak that protocol can
153
+ > point at localhost. A Bun application can also call the generation library
154
+ > directly without running a sidecar server.
155
+ >
156
+ > Those are different entry points into the same native runtime. The model
157
+ > weights stay on the Mac, and MLX runs the computation through Metal on the
158
+ > Apple Silicon GPU.
159
+
160
+ #### 1:55 to 2:35, prove the API claim
161
+
162
+ **Picture**
163
+
164
+ Keep the server log visible on the left. Run this request on the right:
165
+
166
+ ```sh
167
+ curl http://localhost:8080/v1/chat/completions \
168
+ -H 'Content-Type: application/json' \
169
+ -d '{
170
+ "messages": [{
171
+ "role": "user",
172
+ "content": "Name two reasons unified memory helps local inference."
173
+ }],
174
+ "max_tokens": 96,
175
+ "temperature": 0
176
+ }'
177
+ ```
178
+
179
+ Format or crop the JSON response so the answer and usage fields remain legible.
180
+
181
+ **Voiceover**
182
+
183
+ > This is a normal chat-completions request. Change an OpenAI client base URL to
184
+ > `localhost:8080`, and the request goes to the model loaded by mlx-bun. There
185
+ > is no translation service on the internet and no account involved.
186
+
187
+ Do not say every OpenAI feature is implemented. The claim is protocol
188
+ compatibility for the documented API, not the entirety of OpenAI's platform.
189
+
190
+ #### 2:35 to 3:25, explain why Bun matters
191
+
192
+ **Picture**
193
+
194
+ Piece to camera, followed by a clean runtime diagram. Avoid scrolling through
195
+ large source files here.
196
+
197
+ ```text
198
+ TypeScript application
199
+ ↓
200
+ Bun
201
+ ↓
202
+ mlx-bun native bindings
203
+ ↓
204
+ MLX
205
+ ↓
206
+ Apple Silicon GPU
207
+ ```
208
+
209
+ **Dialogue**
210
+
211
+ > Most MLX applications are written in Python. mlx-bun calls MLX's native C API
212
+ > from Bun instead.
213
+ >
214
+ > It loads safetensors weights, builds the model graph, manages the attention
215
+ > cache, samples tokens, and serves requests from TypeScript. It does not start
216
+ > Python in the background.
217
+ >
218
+ > That does not make GPU matrix multiplication faster because it passed through
219
+ > JavaScript. The GPU still sets that limit. It does make the application easier
220
+ > to distribute, and it gives the server less work to do around each model step.
221
+
222
+ #### 3:25 to 4:15, show the finite-matrix idea
223
+
224
+ **Picture**
225
+
226
+ Run the fit command. Hold on the result long enough to read memory use, safe
227
+ context, and predicted speed. Use the exact live output rather than rebuilding
228
+ it for the edit.
229
+
230
+ ```sh
231
+ mlx-bun fit Qwen3.8-27B --ctx 8192
232
+ ```
233
+
234
+ **Dialogue**
235
+
236
+ > The project makes one opinionated bet. Local AI on a Mac is a finite problem.
237
+ > Apple ships a known set of chips and memory sizes. mlx-bun supports a curated
238
+ > set of model families. We can measure those combinations instead of asking
239
+ > every user to become a model-serving specialist.
240
+ >
241
+ > The `fit` command estimates whether a model and context length are safe before
242
+ > loading the weights. The default path can be simple because the measurements
243
+ > and the failure checks live underneath it.
244
+
245
+ Do not claim that automatic device-specific recommendation is complete. Today,
246
+ the fit contract is the concrete proof of this idea.
247
+
248
+ #### 4:15 to 5:20, correctness before speed
249
+
250
+ **Picture**
251
+
252
+ Show a two-column comparison titled `Python oracle` and `mlx-bun`. Animate two
253
+ small arrays of identical hexadecimal or decimal values. Follow with a quick
254
+ shot of a parity test name from the repository.
255
+
256
+ ```text
257
+ same model + same input
258
+
259
+ mlx-lm logits = mlx-bun logits
260
+ bit-exact
261
+ ```
262
+
263
+ **Dialogue**
264
+
265
+ > Reimplementing a model runtime creates a nasty testing problem. Wrong models
266
+ > still write convincing sentences.
267
+ >
268
+ > So I do not use "the answer looked reasonable" as the correctness test. For
269
+ > the compatibility path, the Python MLX implementation is the oracle. The same
270
+ > weights and inputs go through both runtimes, and the tests compare the logits
271
+ > before a token is selected.
272
+ >
273
+ > On the validated paths, those logits match bit for bit. That catches errors in
274
+ > attention masks, normalization, position encoding, cache updates, and model
275
+ > loading that a chat demo can easily hide.
276
+ >
277
+ > Compatibility work has a strict order here. Match the reference first. Then
278
+ > measure any optimization against that baseline.
279
+
280
+ #### 5:20 to 6:20, measured performance
281
+
282
+ **Picture**
283
+
284
+ Display one benchmark card. Do not show the entire results table.
285
+
286
+ ```text
287
+ Qwen3.8-27B · <machine> · warm HTTP serving
288
+ Preflight-gated run · 2026-08-22 · Bun 1.4.0
289
+
290
+ short decode decode at 15.8k warm TTFT aggregate ×4
291
+ mlx-bun 18.6 tok/s 17.0 tok/s 116 ms 19.5 tok/s
292
+ mlx-lm 16.5 tok/s 14.8 tok/s 284 ms 18.6 tok/s
293
+ ```
294
+
295
+ Add a small source line: `docs/reference/benchmarks.md`.
296
+
297
+ **Dialogue**
298
+
299
+ > Here is a measured comparison on this Mac. Same Qwen model snapshot, same
300
+ > machine state, warm HTTP serving.
301
+ >
302
+ > On the short request, mlx-bun generated 18.6 tokens per second. mlx-lm
303
+ > generated 16.5. At about 15,800 tokens of context, the result was 17.0 versus
304
+ > 14.8. Warm time to first token was 116 milliseconds for mlx-bun and 284 for
305
+ > mlx-lm.
306
+ >
307
+ > This is the kind of comparison I care about. It uses the server path an
308
+ > application actually hits, the same weights, and a machine that passed the
309
+ > benchmark preflight. The GPU sets the speed limit, but the runtime still has
310
+ > to reach that limit without wasting memory or time around each token.
311
+
312
+ **Editorial note**
313
+
314
+ These are controlled same-machine results. Put the run date and Bun version on screen.
315
+ If a fresh cleared-machine benchmark is available before publication, replace
316
+ the full card and narration together. Never mix live numbers with this table.
317
+
318
+ #### 6:20 to 7:05, show the larger project without losing focus
319
+
320
+ **Picture**
321
+
322
+ Use four quick clips, about three seconds each:
323
+
324
+ 1. An image input in chat.
325
+ 2. The Markdown memory directory.
326
+ 3. A training progress display.
327
+ 4. A benchmark or parity result from the lab.
328
+
329
+ Return to camera before naming more features.
330
+
331
+ **Dialogue**
332
+
333
+ > Serving is the base of the project, not its boundary. The same binary also has
334
+ > image and video input on supported Qwen models, a local Markdown memory, LoRA
335
+ > training, and a lab for decoding and quantization experiments.
336
+ >
337
+ > I am not going to explain those in a thirty-second feature list. Each one has
338
+ > an implementation story, measurements, and a few failures worth discussing.
339
+ > Those will be separate videos.
340
+
341
+ #### 7:05 to 7:50, close and set up episode 2
342
+
343
+ **Picture**
344
+
345
+ Return to the original chat. Show the local URL, server process, and activity
346
+ monitor GPU history in quick succession. End on the repository and site URLs.
347
+
348
+ **Dialogue**
349
+
350
+ > mlx-bun is my attempt to make local AI on Apple Silicon behave like software
351
+ > you can install, use, and build on.
352
+ >
353
+ > The short version is one command. Underneath it is a TypeScript model runtime,
354
+ > native bindings, model-family ports, memory accounting, and a lot of parity
355
+ > tests.
356
+ >
357
+ > In the next video, I am going to trace one generated token through that whole
358
+ > path, from the TypeScript call to MLX and the GPU, then back to the response.
359
+ > That is where the project gets strange.
360
+
361
+ **On-screen text**
362
+
363
+ ```text
364
+ mlx-bun.dev
365
+ github.com/joshuarossi/mlx-bun
366
+ ```
367
+
368
+ ### Required captures
369
+
370
+ - Clean installer command.
371
+ - Time-compressed first run with MiniCPM5 becoming ready.
372
+ - The explicit Qwen3.8-27B download command or a short time-compressed capture.
373
+ - `mlx-bun serve Qwen3.8-27B` startup and automatic browser open.
374
+ - A short streamed chat response.
375
+ - A successful `/v1/chat/completions` curl request.
376
+ - Live `mlx-bun fit Qwen3.8-27B --ctx 8192` output.
377
+ - One real parity test or stored oracle comparison.
378
+ - Four brief clips for vision, memory, training, and benchmark evidence.
379
+ - Repository and website closing shot.
380
+
381
+ ### Graphics to prepare
382
+
383
+ Only three graphics are needed:
384
+
385
+ 1. The three-entry-point runtime diagram.
386
+ 2. The bit-exact oracle comparison.
387
+ 3. The dated Qwen3.8-27B benchmark card.
388
+
389
+ Keep them monochrome except for one mlx-bun accent color. Use the same terminal
390
+ font in the diagrams and screen recordings.
391
+
392
+ ### Recording-day checks
393
+
394
+ - Confirm the current release installation command.
395
+ - Confirm the Qwen3.8-27B selector and exact displayed model name.
396
+ - Confirm port 8080 is unused before the take.
397
+ - Confirm no private paths, tokens, conversations, or model-cache usernames are
398
+ visible.
399
+ - Confirm first-run behavior still matches the narration.
400
+ - Confirm the API request and response fields against the current reference
401
+ docs.
402
+ - Confirm the benchmark card still matches `docs/reference/benchmarks.md`.
403
+ - Record room tone and five seconds of clean terminal footage for edits.
404
+ - Capture every important terminal action twice.
405
+
406
+ ### Episode 2 handoff
407
+
408
+ The promised follow-up is: **What happens when mlx-bun generates one token?**
409
+
410
+ Trace this path without turning the episode into a source-tree tour:
411
+
412
+ ```text
413
+ request
414
+ → tokenizer
415
+ → model forward pass
416
+ → MLX lazy graph evaluation
417
+ → Metal execution
418
+ → GPU sampling
419
+ → one token returned to Bun
420
+ → streamed protocol event
421
+ ```