mlx-bun 0.5.0 → 1.0.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 (640) hide show
  1. package/README.md +1449 -109
  2. package/THIRD_PARTY_NOTICES.md +882 -0
  3. package/bin/mlx-bun.convert.mjs +4 -0
  4. package/bin/mlx-bun.fuse.mjs +4 -0
  5. package/bin/mlx-bun.generate.mjs +4 -0
  6. package/bin/mlx-bun.lora.mjs +4 -0
  7. package/bin/mlx-bun.mjs +13 -21
  8. package/bin/mlx-bun.server.mjs +4 -0
  9. package/bin/mlx-bun.upload.mjs +4 -0
  10. package/dist/web/app.js +9584 -0
  11. package/package.json +50 -53
  12. package/src/cli/ane-install.ts +76 -0
  13. package/src/cli/args.ts +179 -0
  14. package/src/cli/engine-entry.ts +68 -0
  15. package/src/cli/inference.ts +214 -0
  16. package/src/cli/job-entry.ts +97 -0
  17. package/src/cli/library-host.ts +117 -0
  18. package/src/cli/main.ts +57 -0
  19. package/src/cli/memory-engine.ts +163 -0
  20. package/src/cli/memory.ts +36 -0
  21. package/src/cli/mlx-lm-aliases.ts +309 -0
  22. package/src/cli/model-choice.ts +33 -0
  23. package/src/cli/model-selection.ts +84 -0
  24. package/src/cli/module-host.ts +11 -0
  25. package/src/cli/module-verbs.ts +50 -0
  26. package/src/cli/numerical-policy.ts +12 -0
  27. package/src/cli/perplexity.ts +89 -0
  28. package/src/cli/serve-host.ts +423 -0
  29. package/src/cli/serve-isolated.ts +217 -0
  30. package/src/cli/serve-options.ts +106 -0
  31. package/src/cli/serve-state.ts +205 -0
  32. package/src/cli/serve.ts +500 -0
  33. package/src/cli/served-model-host.ts +102 -0
  34. package/src/cli/server-entry.ts +148 -0
  35. package/src/cli/serving-unit.ts +177 -0
  36. package/src/{tui.ts → cli/terminal.ts} +13 -8
  37. package/src/cli/worker-adapters.ts +34 -0
  38. package/src/cli/worker-entry.ts +272 -0
  39. package/src/cli/worker-unit.ts +179 -0
  40. package/src/engine/adapter-operation.ts +26 -0
  41. package/src/engine/cache-services.ts +114 -0
  42. package/src/engine/completion.ts +39 -0
  43. package/src/engine/generation-gateway.ts +358 -0
  44. package/src/engine/index.ts +59 -0
  45. package/src/engine/kv-budget.ts +120 -0
  46. package/src/engine/media-preparation.ts +232 -0
  47. package/src/engine/model-binding.ts +24 -0
  48. package/src/engine/model-host.ts +513 -0
  49. package/src/engine/model-serving.ts +89 -0
  50. package/src/{serve → engine}/preparation.ts +7 -5
  51. package/src/{serve → engine}/session-completion-engine.ts +6 -6
  52. package/src/engine/telemetry.ts +109 -0
  53. package/src/hub/downloads.ts +116 -0
  54. package/src/jobs/db.ts +16 -7
  55. package/src/jobs/events.ts +29 -0
  56. package/src/jobs/executable.ts +5 -0
  57. package/src/jobs/host.ts +51 -0
  58. package/src/jobs/in-process.ts +55 -0
  59. package/src/{contracts/jobs.ts → jobs/protocol.ts} +7 -9
  60. package/src/jobs/runner.ts +150 -231
  61. package/src/jobs/service.ts +75 -0
  62. package/src/jobs/sse.ts +59 -23
  63. package/src/jobs/worker-memory.ts +46 -0
  64. package/src/jobs/worker-process.ts +163 -0
  65. package/src/jobs/worker-supervisor.ts +258 -0
  66. package/src/modules.ts +58 -0
  67. package/src/publishing/catalog-hub.ts +18 -0
  68. package/src/publishing/credentials.ts +31 -0
  69. package/src/publishing/upload.ts +37 -0
  70. package/src/residency/leased-adapters.ts +21 -0
  71. package/src/residency/local-records.ts +16 -0
  72. package/src/residency/model-residency.ts +405 -0
  73. package/src/residency/record-index.ts +28 -0
  74. package/src/residency/resident-estimate.ts +50 -0
  75. package/src/{anthropic.ts → server/anthropic.ts} +3 -81
  76. package/src/server/cache-routes.ts +36 -0
  77. package/src/{serve → server}/chat-request.ts +10 -10
  78. package/src/{serve → server}/chat-stage.ts +14 -14
  79. package/src/{client.ts → server/client.ts} +28 -2
  80. package/src/{serve → server}/completion-executor.ts +33 -41
  81. package/src/server/decision-body.ts +55 -0
  82. package/src/server/decision-routes.ts +134 -0
  83. package/src/server/decision-wire.ts +228 -0
  84. package/src/{serve → server}/discovery-routes.ts +25 -82
  85. package/src/{serve → server}/http.ts +25 -13
  86. package/src/{serve → server}/inference-request.ts +5 -5
  87. package/src/server/job-routes.ts +20 -0
  88. package/src/server/media-prompt.ts +63 -0
  89. package/src/server/memory-completion-client.ts +46 -0
  90. package/src/server/model-routes.ts +192 -0
  91. package/src/{serve → server}/openai-wire.ts +3 -2
  92. package/src/{serve → server}/pipeline.ts +1 -1
  93. package/src/server/prompt-builder.ts +13 -0
  94. package/src/server/prompt-contracts.ts +17 -0
  95. package/src/server/proxy-routes.ts +187 -0
  96. package/src/server/publishing-routes.ts +41 -0
  97. package/src/{serve → server}/request-plan.ts +6 -8
  98. package/src/{serve → server}/request-prep.ts +47 -50
  99. package/src/{serve → server}/responses-client.ts +30 -13
  100. package/src/{responses.ts → server/responses.ts} +12 -93
  101. package/src/server/routes.ts +205 -0
  102. package/src/server/start.ts +72 -0
  103. package/src/server/status-routes.ts +108 -0
  104. package/src/{serve → server}/text-completion-stage.ts +25 -4
  105. package/src/server/text-prompt.ts +12 -0
  106. package/src/{serve → server}/token-streams.ts +36 -38
  107. package/src/server/worker-routes.ts +311 -0
  108. package/src/storage/paths.ts +61 -0
  109. package/src/web/assets.ts +37 -0
  110. package/src/web/{src → browser}/api.ts +5 -23
  111. package/src/web/browser/chat-host.ts +17 -0
  112. package/src/web/browser/installed-panels.ts +6 -0
  113. package/src/web/browser/main.ts +55 -0
  114. package/src/web/browser/markdown.ts +279 -0
  115. package/src/web/browser/memory-panel.ts +9 -0
  116. package/src/web/browser/palette.ts +64 -0
  117. package/src/web/browser/protocol.ts +13 -0
  118. package/src/web/browser/shell.ts +467 -0
  119. package/src/web/{src → browser}/status.ts +32 -36
  120. package/src/web/build.ts +51 -0
  121. package/src/web/public/app.html +1054 -0
  122. package/src/web/{sw.js → public/sw.js} +4 -3
  123. package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
  124. package/src/web/{vendor → public/vendor}/hljs.js +2 -2
  125. package/THIRD_PARTY_LICENSES.md +0 -51
  126. package/docs/README.md +0 -107
  127. package/docs/archive/hlg-sampling.md +0 -350
  128. package/docs/archive/investigations/audio-input-plan.md +0 -356
  129. package/docs/archive/investigations/benchmark-ledger-through-v0.4.0.md +0 -3617
  130. package/docs/archive/investigations/chunk-finetune-experiment.md +0 -84
  131. package/docs/archive/investigations/colibri-glm52-port.md +0 -1486
  132. package/docs/archive/investigations/colibri-oracle-pin.md +0 -1284
  133. package/docs/archive/investigations/curve-bisector-routing.md +0 -123
  134. package/docs/archive/investigations/decode-roofline-lookagain.md +0 -348
  135. package/docs/archive/investigations/diffusion-gemma-port.md +0 -602
  136. package/docs/archive/investigations/dspark-handoff.md +0 -224
  137. package/docs/archive/investigations/expert-offload-single-user-moe.md +0 -292
  138. package/docs/archive/investigations/faithful-l1-consolidation.md +0 -310
  139. package/docs/archive/investigations/hlg-sampling-investigation.md +0 -970
  140. package/docs/archive/investigations/indexshare-performance-spike.md +0 -357
  141. package/docs/archive/investigations/kernel-perf-review-2026-07.md +0 -171
  142. package/docs/archive/investigations/lab-build-journal.md +0 -157
  143. package/docs/archive/investigations/minicpm5-decode-megakernel.md +0 -489
  144. package/docs/archive/investigations/openjarvis-fit.md +0 -198
  145. package/docs/archive/investigations/openwiki-evaluation.md +0 -249
  146. package/docs/archive/investigations/optimization_plan.md +0 -346
  147. package/docs/archive/investigations/orpo-base-uf-experiment-and-directions.md +0 -120
  148. package/docs/archive/investigations/orpo-flash-cce-pin-leak.md +0 -167
  149. package/docs/archive/investigations/orpo-uf-testing-handoff.md +0 -126
  150. package/docs/archive/investigations/pareto-specialized-runtime-findings.md +0 -92
  151. package/docs/archive/investigations/pi-builtin-investigation.md +0 -308
  152. package/docs/archive/investigations/pre-colibri-stabilization.md +0 -329
  153. package/docs/archive/investigations/qwen38-27b-campaign-log.md +0 -1092
  154. package/docs/archive/investigations/segmented-backward-handoff.md +0 -148
  155. package/docs/archive/investigations/starter-model-port-handoff.md +0 -342
  156. package/docs/archive/investigations/steel-flash-cce-handoff.md +0 -489
  157. package/docs/archive/investigations/the-dreaming-handoff.md +0 -141
  158. package/docs/archive/investigations/trainer-validation-experiment.md +0 -173
  159. package/docs/archive/planning/chat-ui-vision-memory-first.md +0 -199
  160. package/docs/archive/planning/chat-ui-vision.md +0 -50
  161. package/docs/archive/planning/chunk-task-roadmap.md +0 -77
  162. package/docs/archive/planning/curve-sampler-research-plan.md +0 -331
  163. package/docs/archive/planning/journal.md +0 -316
  164. package/docs/archive/planning/memory-docs-and-dag-plan.md +0 -194
  165. package/docs/archive/planning/pi-integration-review.md +0 -178
  166. package/docs/archive/planning/release-notes-v0.0.10.md +0 -57
  167. package/docs/archive/planning/release-notes-v0.0.11.md +0 -239
  168. package/docs/archive/planning/release-notes-v0.0.12.md +0 -80
  169. package/docs/archive/planning/release-notes-v0.0.13.md +0 -77
  170. package/docs/archive/planning/release-notes-v0.0.9.md +0 -122
  171. package/docs/archive/planning/release-notes-v0.2.0.md +0 -49
  172. package/docs/archive/planning/release-notes-v0.3.0.md +0 -35
  173. package/docs/archive/planning/release-notes-v0.4.0.md +0 -45
  174. package/docs/archive/planning/release-notes-v0.5.0.md +0 -37
  175. package/docs/archive/planning/web-ui-pass-plan.md +0 -213
  176. package/docs/archive/planning/website-readme-pass-plan.md +0 -224
  177. package/docs/design/batching.md +0 -2054
  178. package/docs/design/decode-speed-program.md +0 -2404
  179. package/docs/design/dreaming-nightly-pipeline.md +0 -684
  180. package/docs/design/generic-model-support.md +0 -821
  181. package/docs/design/kv-cache.md +0 -993
  182. package/docs/design/orpo-training.md +0 -680
  183. package/docs/design/speculative-decoding.md +0 -2129
  184. package/docs/design/turboquant.md +0 -2225
  185. package/docs/design/unified-engine-frontier-plan.md +0 -1987
  186. package/docs/design/web-chat-redesign.md +0 -695
  187. package/docs/planning/PRODUCT_ROADMAP.md +0 -593
  188. package/docs/planning/ResearchTopics.md +0 -119
  189. package/docs/planning/public-readiness-handoff.md +0 -244
  190. package/docs/planning/public-readiness.md +0 -149
  191. package/docs/planning/video-series.md +0 -421
  192. package/docs/reference/benchmarks.md +0 -3587
  193. package/docs/reference/cli.md +0 -646
  194. package/docs/reference/distribution.md +0 -380
  195. package/docs/reference/environment.md +0 -494
  196. package/docs/reference/glossary.md +0 -39
  197. package/docs/reference/library-api.md +0 -688
  198. package/docs/reference/memory.md +0 -260
  199. package/docs/reference/models.md +0 -346
  200. package/docs/reference/server-api.md +0 -1945
  201. package/docs/reference/server-config.md +0 -973
  202. package/docs/reference/training.md +0 -462
  203. package/docs/reference/troubleshooting.md +0 -158
  204. package/src/admission-plan.ts +0 -18
  205. package/src/audio/audiotoolbox.ts +0 -112
  206. package/src/audio/conformer.ts +0 -655
  207. package/src/audio/decode.ts +0 -133
  208. package/src/audio/features.ts +0 -202
  209. package/src/audio/mic-capture.ts +0 -98
  210. package/src/audio/silero-vad.ts +0 -379
  211. package/src/audio/transcode.ts +0 -67
  212. package/src/audio/whisper-decode.ts +0 -774
  213. package/src/audio/whisper-fast.ts +0 -732
  214. package/src/audio/whisper-format.ts +0 -73
  215. package/src/audio/whisper-mel.ts +0 -185
  216. package/src/audio/whisper-timing.ts +0 -274
  217. package/src/audio/whisper-tokenizer.ts +0 -239
  218. package/src/audio/whisper-transcribe.ts +0 -410
  219. package/src/backends/mlx/assistant-target.ts +0 -46
  220. package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
  221. package/src/backends/mlx/autoregressive.ts +0 -129
  222. package/src/backends/mlx/batch-group.ts +0 -1874
  223. package/src/backends/mlx/cache-attachment.ts +0 -67
  224. package/src/backends/mlx/cache-layout.ts +0 -31
  225. package/src/backends/mlx/checkpoint-state.ts +0 -53
  226. package/src/backends/mlx/continuation-persistence.ts +0 -107
  227. package/src/backends/mlx/continuation-request.ts +0 -43
  228. package/src/backends/mlx/continuation.ts +0 -77
  229. package/src/backends/mlx/diffusion.ts +0 -39
  230. package/src/backends/mlx/draft-target.ts +0 -32
  231. package/src/backends/mlx/encoder-cache.ts +0 -25
  232. package/src/backends/mlx/evaluation.ts +0 -105
  233. package/src/backends/mlx/fill-append.ts +0 -58
  234. package/src/backends/mlx/fill-group.ts +0 -497
  235. package/src/backends/mlx/full-kv-row-append.ts +0 -32
  236. package/src/backends/mlx/full-kv-row-donor.ts +0 -54
  237. package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
  238. package/src/backends/mlx/gateway-binding.ts +0 -174
  239. package/src/backends/mlx/graph.ts +0 -38
  240. package/src/backends/mlx/kv-codec.ts +0 -9
  241. package/src/backends/mlx/kv-maintenance.ts +0 -161
  242. package/src/backends/mlx/kv-tensor-rows.ts +0 -212
  243. package/src/backends/mlx/memory-client.ts +0 -189
  244. package/src/backends/mlx/methods.ts +0 -90
  245. package/src/backends/mlx/mixed-iteration.ts +0 -62
  246. package/src/backends/mlx/model-prompt.ts +0 -178
  247. package/src/backends/mlx/model-serving.ts +0 -80
  248. package/src/backends/mlx/paged-cache-codec.ts +0 -27
  249. package/src/backends/mlx/prefill-cohort.ts +0 -100
  250. package/src/backends/mlx/prefill-policy.ts +0 -26
  251. package/src/backends/mlx/prefill-rows.ts +0 -244
  252. package/src/backends/mlx/prefill.ts +0 -33
  253. package/src/backends/mlx/projected-context-rows.ts +0 -72
  254. package/src/backends/mlx/prompt-input.ts +0 -29
  255. package/src/backends/mlx/qwen-prompt-input.ts +0 -40
  256. package/src/backends/mlx/request-policy.ts +0 -20
  257. package/src/backends/mlx/request-state-policy.ts +0 -54
  258. package/src/backends/mlx/rollback.ts +0 -92
  259. package/src/backends/mlx/row-sampling.ts +0 -49
  260. package/src/backends/mlx/serial-executor.ts +0 -251
  261. package/src/backends/mlx/speculative-group.ts +0 -438
  262. package/src/backends/mlx/speculative-round.ts +0 -161
  263. package/src/backends/mlx/speculative.ts +0 -131
  264. package/src/backends/mlx/state-rows.ts +0 -104
  265. package/src/backends/mlx/state-views.ts +0 -46
  266. package/src/backends/mlx/target-layout-capability.ts +0 -35
  267. package/src/backends/mlx/text-engine.ts +0 -73
  268. package/src/backends/mlx/transitioning-kv-rows.ts +0 -173
  269. package/src/chat-template.ts +0 -382
  270. package/src/cli.ts +0 -3490
  271. package/src/config.ts +0 -399
  272. package/src/contracts/completion.ts +0 -16
  273. package/src/contracts/execution.ts +0 -70
  274. package/src/contracts/generation.ts +0 -103
  275. package/src/contracts/host.ts +0 -7
  276. package/src/contracts/object-cache.ts +0 -8
  277. package/src/contracts/pi-provider.ts +0 -30
  278. package/src/contracts/pi.ts +0 -261
  279. package/src/contracts/prefix-cache.ts +0 -33
  280. package/src/contracts/resources.ts +0 -25
  281. package/src/contracts/sampling.ts +0 -23
  282. package/src/contracts/scheduling.ts +0 -54
  283. package/src/contracts/tsconfig.json +0 -14
  284. package/src/dataset/generators.ts +0 -1087
  285. package/src/dataset/index.ts +0 -12
  286. package/src/dataset/job.ts +0 -81
  287. package/src/dataset/llm.ts +0 -71
  288. package/src/dataset/registry.ts +0 -528
  289. package/src/diffusion/diffusion-generate.ts +0 -507
  290. package/src/download.ts +0 -505
  291. package/src/embed.ts +0 -77
  292. package/src/engine/admission.ts +0 -59
  293. package/src/engine/cancellation.ts +0 -38
  294. package/src/engine/engine.ts +0 -56
  295. package/src/engine/execution-coordinator.ts +0 -70
  296. package/src/engine/execution-plan.ts +0 -64
  297. package/src/engine/execution-tasks.ts +0 -44
  298. package/src/engine/namespaced-cache.ts +0 -13
  299. package/src/engine/resources.ts +0 -53
  300. package/src/engine/scheduler.ts +0 -92
  301. package/src/engine/session.ts +0 -247
  302. package/src/eval/README.md +0 -130
  303. package/src/eval/ifeval.ts +0 -81
  304. package/src/eval/kl-prompts.ts +0 -29
  305. package/src/eval/kl.ts +0 -590
  306. package/src/eval/perplexity.ts +0 -164
  307. package/src/eval/quality-db.ts +0 -92
  308. package/src/eval/reference-logits.ts +0 -207
  309. package/src/eval/runner.ts +0 -124
  310. package/src/eval/score.ts +0 -49
  311. package/src/eval/tasks/bfcl.ts +0 -535
  312. package/src/eval/tasks/gsm8k.ts +0 -98
  313. package/src/eval/tasks/hashhop.ts +0 -139
  314. package/src/eval/tasks/humaneval.ts +0 -275
  315. package/src/eval/tasks/ifeval.ts +0 -525
  316. package/src/eval/tasks/mmlu.ts +0 -157
  317. package/src/eval/ultrafeedback.ts +0 -60
  318. package/src/evaldb.ts +0 -199
  319. package/src/expert-io.ts +0 -393
  320. package/src/expert-offload-build.ts +0 -77
  321. package/src/expert-offload.ts +0 -76
  322. package/src/expert-residency.ts +0 -1134
  323. package/src/expert-usage.ts +0 -415
  324. package/src/fill/echo-index.ts +0 -188
  325. package/src/fill/fill-session.ts +0 -463
  326. package/src/fill/proposal.ts +0 -68
  327. package/src/fill/schema-rows.ts +0 -506
  328. package/src/fill/tool-boundary.ts +0 -103
  329. package/src/fit.ts +0 -249
  330. package/src/generate.ts +0 -1352
  331. package/src/grammar.ts +0 -604
  332. package/src/harness-pi.ts +0 -184
  333. package/src/hf-push.ts +0 -628
  334. package/src/hub-rest.ts +0 -242
  335. package/src/index.ts +0 -63
  336. package/src/inference/denoising.ts +0 -17
  337. package/src/inference/draft-acceptance.ts +0 -41
  338. package/src/inference/draft-output.ts +0 -49
  339. package/src/inference/graph.ts +0 -33
  340. package/src/inference/prefill.ts +0 -45
  341. package/src/inference/rollback.ts +0 -7
  342. package/src/jobs/index.ts +0 -31
  343. package/src/jobs/job-entry.ts +0 -107
  344. package/src/jobs/task-client.ts +0 -19
  345. package/src/jobs/types.ts +0 -2
  346. package/src/kv-scheme.ts +0 -279
  347. package/src/kv-store.ts +0 -1135
  348. package/src/lab/README.md +0 -22
  349. package/src/lab/curve/curve-designer.html +0 -303
  350. package/src/lab/curve/curve-sampler.ts +0 -122
  351. package/src/lab/expert-trace/expert-trace.ts +0 -69
  352. package/src/lab/paged-kv/paged-attention.ts +0 -117
  353. package/src/lab/paged-kv/paged-kv-rows.ts +0 -111
  354. package/src/lab/paged-kv/paged-kv.ts +0 -336
  355. package/src/library.ts +0 -40
  356. package/src/lora.ts +0 -408
  357. package/src/md-modules.d.ts +0 -54
  358. package/src/media-fetch.ts +0 -442
  359. package/src/memory/article.ts +0 -558
  360. package/src/memory/chunk-validation.ts +0 -150
  361. package/src/memory/chunk.ts +0 -318
  362. package/src/memory/cluster.ts +0 -351
  363. package/src/memory/coverage.ts +0 -134
  364. package/src/memory/crosslink.ts +0 -0
  365. package/src/memory/db.ts +0 -253
  366. package/src/memory/entity.ts +0 -203
  367. package/src/memory/gate.ts +0 -187
  368. package/src/memory/history.ts +0 -152
  369. package/src/memory/ingest.ts +0 -335
  370. package/src/memory/model.ts +0 -183
  371. package/src/memory/normalize.ts +0 -671
  372. package/src/memory/parse.ts +0 -22
  373. package/src/memory/pipeline.ts +0 -275
  374. package/src/memory/prompts.ts +0 -65
  375. package/src/memory/query.ts +0 -334
  376. package/src/memory/reconcile.ts +0 -734
  377. package/src/memory/redirect.ts +0 -108
  378. package/src/memory/reindex.ts +0 -325
  379. package/src/memory/resolve.ts +0 -307
  380. package/src/memory/rest.ts +0 -245
  381. package/src/memory/route.ts +0 -272
  382. package/src/memory/schedule.ts +0 -165
  383. package/src/memory/stages.ts +0 -777
  384. package/src/memory/synthesize.ts +0 -1638
  385. package/src/memory/tools.ts +0 -749
  386. package/src/memory/vault.ts +0 -1194
  387. package/src/memory/wikify.ts +0 -1064
  388. package/src/mlx/array.ts +0 -425
  389. package/src/mlx/autograd.ts +0 -304
  390. package/src/mlx/checkpoint.ts +0 -149
  391. package/src/mlx/compile.ts +0 -168
  392. package/src/mlx/custom-vjp.ts +0 -188
  393. package/src/mlx/ffi.ts +0 -531
  394. package/src/mlx/materialize.ts +0 -23
  395. package/src/mlx/metal-kernel.ts +0 -159
  396. package/src/mlx/normalized-argmax.ts +0 -116
  397. package/src/mlx/ops.ts +0 -1108
  398. package/src/mlx/quantized-rows.ts +0 -36
  399. package/src/mlx/token-bitmask.ts +0 -52
  400. package/src/mlx/turboquant-kv-decode.ts +0 -82
  401. package/src/mlx/turboquant-kv-inverse.ts +0 -122
  402. package/src/mlx/turboquant-ops.ts +0 -861
  403. package/src/mlx/turboquant-tables.ts +0 -237
  404. package/src/mmap.ts +0 -90
  405. package/src/model/artifact-identity.ts +0 -73
  406. package/src/model/batched-kv.ts +0 -235
  407. package/src/model/batched-mask.ts +0 -279
  408. package/src/model/batched-quant.ts +0 -212
  409. package/src/model/batched-quantized-kv.ts +0 -144
  410. package/src/model/batched-rotating-quant.ts +0 -353
  411. package/src/model/batched-rotating-state.ts +0 -149
  412. package/src/model/batched-rotating.ts +0 -338
  413. package/src/model/batched-row-storage.ts +0 -179
  414. package/src/model/batched-ssm.ts +0 -52
  415. package/src/model/batched-turboquant-kv.ts +0 -94
  416. package/src/model/compiled-decode.ts +0 -712
  417. package/src/model/decoded-kv-donor.ts +0 -12
  418. package/src/model/delayed-quantized-kv.ts +0 -72
  419. package/src/model/delayed-rotating-quantized-kv.ts +0 -93
  420. package/src/model/delayed-turboquant-kv.ts +0 -57
  421. package/src/model/diffusion-gemma.ts +0 -1026
  422. package/src/model/factory.ts +0 -215
  423. package/src/model/fingerprint.ts +0 -45
  424. package/src/model/flash-attention.ts +0 -694
  425. package/src/model/full-prefill-padding.ts +0 -56
  426. package/src/model/full-prefill-row.ts +0 -105
  427. package/src/model/gemma4-base.ts +0 -2370
  428. package/src/model/gemma4.ts +0 -1395
  429. package/src/model/generated/gemma4-12b.ts +0 -429
  430. package/src/model/generated/gemma4-26b.ts +0 -448
  431. package/src/model/generated/gemma4-e4b.ts +0 -717
  432. package/src/model/generated/index.ts +0 -18
  433. package/src/model/glm52-atlas.ts +0 -511
  434. package/src/model/glm52-cache.ts +0 -792
  435. package/src/model/glm52-config.ts +0 -262
  436. package/src/model/glm52-container.ts +0 -305
  437. package/src/model/glm52-coupling.ts +0 -388
  438. package/src/model/glm52-dsa.ts +0 -606
  439. package/src/model/glm52-expert-layout.ts +0 -253
  440. package/src/model/glm52-layout.ts +0 -152
  441. package/src/model/glm52-memory.ts +0 -500
  442. package/src/model/glm52-mla.ts +0 -792
  443. package/src/model/glm52-moe.ts +0 -223
  444. package/src/model/glm52-pilot.ts +0 -537
  445. package/src/model/glm52-reference.ts +0 -445
  446. package/src/model/glm52-residency.ts +0 -557
  447. package/src/model/glm52-resident-weights.ts +0 -135
  448. package/src/model/glm52-streamed-experts.ts +0 -453
  449. package/src/model/glm52-streamed-metal.ts +0 -610
  450. package/src/model/glm52-weights.ts +0 -503
  451. package/src/model/glm52.ts +0 -1132
  452. package/src/model/implementation.ts +0 -69
  453. package/src/model/kv-attention-view.ts +0 -70
  454. package/src/model/minicpm5.ts +0 -376
  455. package/src/model/profile.ts +0 -468
  456. package/src/model/quantized-append-attention.ts +0 -31
  457. package/src/model/qwen-append.ts +0 -12
  458. package/src/model/qwen-conv.ts +0 -52
  459. package/src/model/qwen3-delta-state.ts +0 -74
  460. package/src/model/qwen3-delta.ts +0 -451
  461. package/src/model/qwen3-moe.ts +0 -404
  462. package/src/model/qwen3-mrope.ts +0 -250
  463. package/src/model/qwen3.ts +0 -277
  464. package/src/model/qwen3_5-checkpoint.ts +0 -164
  465. package/src/model/qwen3_5.ts +0 -881
  466. package/src/model/rotating-kv-donor.ts +0 -35
  467. package/src/model/rotating-kv-layout.ts +0 -262
  468. package/src/model/rotating-row-transaction.ts +0 -35
  469. package/src/model/speculative-rotating-kv.ts +0 -101
  470. package/src/model/ssm-prefill-padding.ts +0 -39
  471. package/src/model/support.ts +0 -110
  472. package/src/model/token-groups.ts +0 -66
  473. package/src/model/trellis-balanced-scatter.ts +0 -51
  474. package/src/model/trellis-linear.ts +0 -672
  475. package/src/model/trellis-shared-m.ts +0 -151
  476. package/src/model/trellis-shared-scatter.ts +0 -144
  477. package/src/model/trellis-splitk-prefill.ts +0 -158
  478. package/src/model/trellis-tiled-prefill.ts +0 -136
  479. package/src/model/trellis-vector-expand.ts +0 -62
  480. package/src/model/trellis-wide-prefill.ts +0 -94
  481. package/src/model/turboquant-codec.ts +0 -89
  482. package/src/model/universal/archs.ts +0 -332
  483. package/src/model/universal/dense.ts +0 -612
  484. package/src/model/universal/modules.ts +0 -170
  485. package/src/model/universal/rope.ts +0 -381
  486. package/src/model/whisper.ts +0 -435
  487. package/src/native/expert_io.c +0 -523
  488. package/src/native/frame_extract.swift +0 -140
  489. package/src/native/mic_capture.swift +0 -92
  490. package/src/native-pack.ts +0 -163
  491. package/src/pi-provider.ts +0 -53
  492. package/src/pi-session.ts +0 -81
  493. package/src/pi-terminal.ts +0 -274
  494. package/src/pi-web.ts +0 -1940
  495. package/src/preflight.ts +0 -158
  496. package/src/prompt-cache.ts +0 -682
  497. package/src/quantize/allocator.ts +0 -627
  498. package/src/quantize/atomic-output.ts +0 -38
  499. package/src/quantize/calibration.ts +0 -181
  500. package/src/quantize/config-writer.ts +0 -145
  501. package/src/quantize/index.ts +0 -84
  502. package/src/quantize/job.ts +0 -162
  503. package/src/quantize/quantizer.ts +0 -666
  504. package/src/quantize/rotate.ts +0 -603
  505. package/src/quantize/safetensors-writer.ts +0 -249
  506. package/src/quantize/sensitivity.ts +0 -216
  507. package/src/quantize/trellis.ts +0 -586
  508. package/src/quantize/weight-transform.ts +0 -292
  509. package/src/registry.ts +0 -602
  510. package/src/runtime-config.ts +0 -77
  511. package/src/safetensors.ts +0 -165
  512. package/src/sampler.ts +0 -1012
  513. package/src/serve/admin-routes.ts +0 -184
  514. package/src/serve/assets/curve-terrain.html +0 -105
  515. package/src/serve/assets/training-inference-map.html +0 -575
  516. package/src/serve/audio-routes.ts +0 -323
  517. package/src/serve/aux-routes.ts +0 -132
  518. package/src/serve/batch-scheduler.ts +0 -8
  519. package/src/serve/checkpoint-identity.ts +0 -64
  520. package/src/serve/generation-gateway.ts +0 -537
  521. package/src/serve/isolate.ts +0 -609
  522. package/src/serve/kv-budget.ts +0 -14
  523. package/src/serve/lab-routes.ts +0 -341
  524. package/src/serve/lane-registry.ts +0 -45
  525. package/src/serve/model-admin-routes.ts +0 -155
  526. package/src/serve/model-binding.ts +0 -49
  527. package/src/serve/model-host.ts +0 -511
  528. package/src/serve/parent-application.ts +0 -56
  529. package/src/serve/prompt-response-trace.ts +0 -161
  530. package/src/serve/response-lease.ts +0 -24
  531. package/src/serve/session-search.ts +0 -326
  532. package/src/serve/static-routes.ts +0 -101
  533. package/src/serve/transcription-server.ts +0 -64
  534. package/src/serve/transcription-service.ts +0 -502
  535. package/src/server.ts +0 -1282
  536. package/src/spec/assistant-rows.ts +0 -93
  537. package/src/spec/assistant-source.ts +0 -126
  538. package/src/spec/cache-identity.ts +0 -22
  539. package/src/spec/deepspec-rows.ts +0 -29
  540. package/src/spec/deepspec-source.ts +0 -145
  541. package/src/spec/dflash-source.ts +0 -149
  542. package/src/spec/drafter.ts +0 -304
  543. package/src/spec/dspark/ab-stats.ts +0 -136
  544. package/src/spec/dspark/calibration.ts +0 -112
  545. package/src/spec/dspark/data-dflash.ts +0 -156
  546. package/src/spec/dspark/data.ts +0 -201
  547. package/src/spec/dspark/deepspec-module.ts +0 -776
  548. package/src/spec/dspark/generate-dflash.ts +0 -245
  549. package/src/spec/dspark/generate.ts +0 -290
  550. package/src/spec/dspark/loader.ts +0 -23
  551. package/src/spec/dspark/loss.ts +0 -213
  552. package/src/spec/dspark/module-dflash.ts +0 -560
  553. package/src/spec/dspark/module.ts +0 -540
  554. package/src/spec/dspark/quantize-drafter.ts +0 -91
  555. package/src/spec/dspark/sample.ts +0 -112
  556. package/src/spec/generate.ts +0 -276
  557. package/src/spec/glm52-mtp-graph.ts +0 -29
  558. package/src/spec/glm52-mtp-rows.ts +0 -132
  559. package/src/spec/glm52-mtp-source.ts +0 -318
  560. package/src/spec/glm52-mtp-state.ts +0 -33
  561. package/src/spec/ngram-source.ts +0 -226
  562. package/src/spec/projected-draft-rows.ts +0 -73
  563. package/src/spec/qwen-mtp-module.ts +0 -171
  564. package/src/spec/qwen-mtp-rows.ts +0 -230
  565. package/src/spec/qwen-mtp-source.ts +0 -386
  566. package/src/spec/qwen-mtp-state.ts +0 -30
  567. package/src/spec/serve-loop.ts +0 -587
  568. package/src/spec/source.ts +0 -228
  569. package/src/spec/two-model-rows.ts +0 -62
  570. package/src/spec/two-model.ts +0 -113
  571. package/src/ssd-cache.ts +0 -431
  572. package/src/ssd-durability.ts +0 -209
  573. package/src/storage/host-buffer.ts +0 -24
  574. package/src/storage/kv-writer.ts +0 -83
  575. package/src/storage/kv-writer.worker.js +0 -264
  576. package/src/storage/retention-policy.ts +0 -37
  577. package/src/tiered-prompt-cache.ts +0 -45
  578. package/src/tokenizer.ts +0 -335
  579. package/src/tool-approvals.ts +0 -131
  580. package/src/tool-call.ts +0 -695
  581. package/src/train/dataset.ts +0 -484
  582. package/src/train/diffusion-lora.ts +0 -216
  583. package/src/train/export.ts +0 -32
  584. package/src/train/flash-cce.ts +0 -1234
  585. package/src/train/forward.ts +0 -266
  586. package/src/train/fuse.ts +0 -243
  587. package/src/train/index.ts +0 -46
  588. package/src/train/job.ts +0 -205
  589. package/src/train/lora-params.ts +0 -254
  590. package/src/train/loss.ts +0 -1591
  591. package/src/train/merge.ts +0 -195
  592. package/src/train/optimizer.ts +0 -183
  593. package/src/train/prefix-shared.ts +0 -490
  594. package/src/train/rank.ts +0 -137
  595. package/src/train/segmented.ts +0 -1828
  596. package/src/train/steel-qmm-header.ts +0 -1461
  597. package/src/train/trainer.ts +0 -1221
  598. package/src/train/watch.ts +0 -542
  599. package/src/vision/diffusion-vision.ts +0 -620
  600. package/src/vision/embedder.ts +0 -176
  601. package/src/vision/preprocess.ts +0 -247
  602. package/src/vision/prompt.ts +0 -409
  603. package/src/vision/qwen3vl-preprocess.ts +0 -409
  604. package/src/vision/qwen3vl-prompt.ts +0 -233
  605. package/src/vision/qwen3vl-tower.ts +0 -566
  606. package/src/vision/siglip.ts +0 -607
  607. package/src/vision/video-frames.ts +0 -148
  608. package/src/web/app.html +0 -2155
  609. package/src/web/app.js +0 -5863
  610. package/src/web/skills/memory/SKILL.md +0 -120
  611. package/src/web/skills/web-research/SKILL.md +0 -46
  612. package/src/web/skills.ts +0 -97
  613. package/src/web/src/adapters-panel.ts +0 -288
  614. package/src/web/src/assistant.ts +0 -451
  615. package/src/web/src/chat.ts +0 -1060
  616. package/src/web/src/composer.ts +0 -962
  617. package/src/web/src/dataset.ts +0 -132
  618. package/src/web/src/finetune.ts +0 -267
  619. package/src/web/src/hub.ts +0 -428
  620. package/src/web/src/main.ts +0 -98
  621. package/src/web/src/markdown.ts +0 -0
  622. package/src/web/src/memory-panel.ts +0 -572
  623. package/src/web/src/model-picker.ts +0 -159
  624. package/src/web/src/palette.ts +0 -346
  625. package/src/web/src/protocol.ts +0 -26
  626. package/src/web/src/quantize.ts +0 -167
  627. package/src/web/src/rag.ts +0 -274
  628. package/src/web/src/sessions.ts +0 -469
  629. package/src/web/src/shell.ts +0 -804
  630. package/src/web/src/ui-catalog.ts +0 -78
  631. package/src/web/src/voice.ts +0 -141
  632. package/src/web/vendor/README.md +0 -61
  633. package/src/web-assets.ts +0 -47
  634. package/src/web-tools.ts +0 -478
  635. package/src/weights.ts +0 -255
  636. /package/src/{serve → server}/completion-sink.ts +0 -0
  637. /package/src/{serve → server}/generated-token-history.ts +0 -0
  638. /package/src/web/{icon.svg → public/icon.svg} +0 -0
  639. /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
  640. /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
@@ -1,593 +0,0 @@
1
- # PRODUCT ROADMAP
2
-
3
- Working notes for the product shape of mlx-bun. This is intentionally
4
- less settled than PLAN.md: PLAN is the engineering contract; this file is
5
- the evolving UI/UX/DX north star.
6
-
7
- ## Product north star
8
-
9
- Josh's guiding principle for the entire project is "The absolute BEST local
10
- AI experience on a mac". This governs installation, application development,
11
- everyday use and inference performance.
12
-
13
- Offer multiple simple installation methods without asking users to manage
14
- a Python virtual environment. Let developers import local AI into their
15
- applications without managing a separate inference sidecar. Make JavaScript
16
- and TypeScript first-class ways to build with local AI, without requiring
17
- Python. Make more capable models practical on the same Mac and reduce the
18
- time users wait for successful results.
19
-
20
- Every workstream must serve that experience. Evaluate engineering choices
21
- by the setup, integration and operating burden they remove, as well as the
22
- quality, reliability, speed and hardware efficiency they deliver. Research
23
- and publication can support the project; user benefit determines priority.
24
-
25
- Make the answer to "what is the best way to use local AI on my Mac?"
26
- boringly simple:
27
-
28
- ```sh
29
- mlx-bun
30
- ```
31
-
32
- The user should not need to research Hugging Face variants, quantization
33
- formats, context windows, Python environments, server commands, or agent
34
- provider config before they can try local AI. They should install one
35
- binary, run one command, wait for one resumable model download, and get a
36
- working local chat UI plus a local AI server.
37
-
38
- The intended first-run shape is product, not demo: start with the tiny
39
- welcoming model quickly, begin the stronger recommended model download in the
40
- background, and graduate the user into the best default profile for their
41
- actual Mac without requiring them to learn the model zoo first.
42
-
43
- The runtime can still expose every advanced knob. The default path should
44
- not require them.
45
-
46
- ## Four product faces
47
-
48
- The same runtime has to support four related but distinct jobs:
49
-
50
- 1. **Local AI product** — the one-command experience for someone who just wants
51
- useful local AI. This path should be opinionated, benchmarked, and boringly
52
- reliable.
53
- 2. **Library for app developers** — the embeddable TypeScript/MLX layer for
54
- Bun, Tauri, Electron, and desktop tools that want local inference without a
55
- Python sidecar.
56
- 3. **AI lab for researchers** — the place where parity, evals, kernels,
57
- compiled graphs, ORPO, LoRA adapters, and model experiments can happen in
58
- the same stack that serves the result.
59
- 4. **Autonomous background agent runtime** — the always-available local server
60
- for scripts, recurring tasks, personal tools, and per-request adapter
61
- routing.
62
-
63
- These are not separate products. They are one runtime with progressive
64
- disclosure: appliance defaults at the front, sharp instruments underneath.
65
-
66
- ## The three modes (the organizing design law)
67
-
68
- mlx-bun is published. Existing commands, flags, and package exports are
69
- compatibility commitments; changes need documented migration behavior.
70
- Where an mlx-lm flag has matching semantics, prefer its established name.
71
- The CLI serves three audiences through one set of verbs, with more explicit
72
- configuration available as users need it:
73
-
74
- 1. **Automatic mode** — first-time local-AI users. `mlx-bun` (and bare
75
- verbs) with zero flags. Smart, sane defaults from the device-profile
76
- table (see Core idea). Typing to a chatbot in a web UI in under a
77
- minute, with no knowledge of HF variants, quant formats, or context
78
- windows required.
79
- 2. **Compat mode** — people moving over from mlx-lm. The same verbs,
80
- plus dotted aliases (`mlx-bun.server` *is* `mlx-bun serve`), using
81
- mlx-lm's flag vocabulary, so existing muscle memory and scripts port
82
- with a one-token rename. mlx-lm is canonical because it is the
83
- default Apple references at WWDC and outweighs the alternative by
84
- ~425× monthly installs (1.64M vs 3.85k; mlx-lm 5.8k stars / 765
85
- forks; mlx-optiq has no public repo — measured 2026-06-12).
86
- 3. **Stick-shift mode** — power users and researchers. The full knob
87
- surface: every mlx-lm flag, every optiq feature, plus our own
88
- envelope-pushing ones, all exposed and composable. Build the exact
89
- system you want.
90
-
91
- ### Laws that keep the three modes coherent
92
-
93
- - **One surface, mlx-lm vocabulary.** The dotted form is a pure alias
94
- of the space form. Adopt mlx-lm's flag names wherever they are the
95
- standard; only name a flag ourselves where mlx-lm has no concept for
96
- it (and there we are free to improve on optiq's name, not bound to
97
- it).
98
- - **Compatibility = superset, never intersection.** Every documented
99
- mlx-lm flag/verb behaves faithfully so scripts drop in unchanged. We
100
- never subtract or gate a capability we already have for free to
101
- resemble an upstream — e.g. we serve OpenAI + Anthropic + Responses
102
- from one server, and that stays on: it costs nothing and is invisible
103
- to a beginner.
104
- - **Gate only on conflict.** A capability is always on UNLESS leaving
105
- it on would degrade the automatic or compat experience (it changes
106
- output determinism, trades quality, or surprises a script). Only then
107
- does it move behind a stick-shift flag. This is rule 3 yielding to
108
- rules 1 and 2.
109
- - **optiq is a feature set to absorb, not a flag dialect to honor.**
110
- Its distinctive features (sensitivity mixed-precision convert,
111
- per-layer KV sensitivity profiling, LoRA rank scaling, dual-protocol
112
- serving, latency prediction, the Lab UI) graft onto the mlx-lm spine
113
- as additive flags and a few new verbs.
114
-
115
- ### Status (2026-06-12; compat surface design remains open as of 2026-06-17)
116
-
117
- The compat layer does not exist yet: today's commands (`serve`, `fit`,
118
- `benchmark`, `evals`, `get`/`scan`/`ls`, `pi`, `harness`) are ad-hoc,
119
- not a designed mlx-lm-matching surface — though their flags already
120
- overlap mlx-lm/optiq heavily, so this is mostly rename-and-confirm, not
121
- migration. The work: design the full surface against mlx-lm vocabulary,
122
- reconcile the existing commands into it, and fill the capability matrix
123
- behind it (convert/quantize, LoRA training, eval/perplexity, fuse,
124
- cache_prompt, upload/share). Decomposed into phases in PLAN.md.
125
-
126
- ## Core idea: finite matrix runtime
127
-
128
- The local-AI problem is not continuous for Mac users. MLX means Apple Silicon,
129
- and Apple ships a finite set of real chip/RAM/bandwidth combinations. The
130
- supported model universe is also curated. For each physical device profile and
131
- model snapshot, we can research and preselect the best known model artifact,
132
- context target, KV mode, memory budget, kernel route, graph route, and runtime
133
- flags.
134
-
135
- That means first-run behavior can be a measured lookup table, not a wizard or
136
- an exploratory benchmark:
137
-
138
- ```text
139
- detect exact Mac profile
140
- fingerprint the model snapshot
141
- choose the task mode: chat, vision, tool loop, adapter, training, eval
142
- look up the measured execution plan
143
- download/resume the exact model artifact
144
- start the tuned local server
145
- open the built-in UI
146
- show how to connect external tools and harnesses
147
- ```
148
-
149
- The current `fit` endpoint is the nucleus of this idea: it already reasons over
150
- real Apple Silicon profiles, model bytes, KV bytes, context, and predicted
151
- decode. The product version should evolve from "does this fit?" into:
152
-
153
- ```text
154
- device profile + model checksum + task mode + live memory pressure
155
- -> recommended execution plan
156
- ```
157
-
158
- Execution plans can eventually include specialized graph variants, fused kernel
159
- routes, prompt-cache policy, adapter policy, safe context limits, expected
160
- decode/TTFT, and user-facing rationale. The research work feeds the table. The
161
- table feeds the user.
162
-
163
- ## Recommended profiles
164
-
165
- Initial profile work should stay narrow and excellent. Start with the
166
- Gemma 4 OptiQ family and expand only when the project has a better answer.
167
-
168
- Candidate shape:
169
-
170
- | Device profile | Default model | Intent |
171
- |---|---|---|
172
- | MacBook Air / 16 GB | `mlx-community/gemma-4-e4b-it-OptiQ-4bit` | Fast first local-AI experience. |
173
- | MacBook Pro / 24-32 GB | `mlx-community/gemma-4-12B-it-OptiQ-4bit` | Strong default chat/agent model. |
174
- | Mac Studio / 64 GB | `mlx-community/gemma-4-26B-A4B-it-OptiQ-4bit` | Larger local-agent profile. |
175
-
176
- Exact model choices, context lengths, and flags are not frozen here. They
177
- should be updated from benchmarks, evals, fit predictions, and real use.
178
-
179
- Each profile should eventually carry:
180
-
181
- ```ts
182
- {
183
- id: "macbook-pro-24gb",
184
- model: "mlx-community/gemma-4-12B-it-OptiQ-4bit",
185
- context: 65536,
186
- kv: "mixed",
187
- memoryBudgetBytes: "...",
188
- compiledDecode: true,
189
- expectedDecodeTps: 30,
190
- expectedTtftMs: 100,
191
- label: "Recommended for this Mac",
192
- }
193
- ```
194
-
195
- The important rule: an optimization matters for product defaults when it
196
- changes a device-tier decision, unlocks a larger useful context window,
197
- keeps decode above a user-visible threshold, improves quality at the same
198
- budget, or prevents failure. Saving memory for its own sake is secondary.
199
-
200
- ## Specialization strategy
201
-
202
- For the curated product path, it is acceptable to trade more work up front for a
203
- better hot path later. The Mac is known, the model snapshot is known, and the
204
- task mode is known. That lets us precompute or cache exact plans instead of
205
- shipping every decision to runtime.
206
-
207
- Candidate plan fields:
208
-
209
- - Model checksum and architecture fingerprint.
210
- - Apple Silicon profile: chip, unified memory, bandwidth tier, GPU/CPU shape.
211
- - Context buckets and fixed-shape cache layouts.
212
- - Kernel choices: MLX built-ins, MLX fast paths, custom Metal kernels, or
213
- eager fallback.
214
- - Graph choices: eager, compiled exact-shape graph, compiled bucketed graph,
215
- or prebuilt graph table.
216
- - Adapter choices: none, single LoRA, stacked LoRA, task-routed LoRA.
217
- - Measured results: TTFT, decode tok/s, peak memory, failure envelope.
218
-
219
- This is where loop unrolling, branch deletion, static DAG extraction, fused
220
- kernels, and shape-specialized compiled graphs become product features rather
221
- than abstract optimizations. They matter when they let the default profile be
222
- faster, larger, more stable, or better aligned without asking the user to tune
223
- anything.
224
-
225
- ## First-run UX
226
-
227
- The no-args command should be the friendly path:
228
-
229
- ```sh
230
- mlx-bun
231
- ```
232
-
233
- Likely behavior:
234
-
235
- 1. Detect the hardware profile. *(not yet: `recommendedRepoId()` at `src/fit.ts:86` returns `DEFAULT_REPO_ID` unconditionally — device-profile lookup table is unimplemented)*
236
- 2. Pick the recommended runtime profile. *(same caveat as above)*
237
- 3. Show the selected model and why it was chosen. *(not yet: model is printed, rationale is not)*
238
- 4. Start or resume the background download. **Shipped** — auto-download on first run; resumable.
239
- 5. Start the local server when ready. **Shipped.**
240
- 6. Open or serve the built-in chat UI. **Shipped** — browser tab opened automatically; URL printed either way; `--no-open` skips the tab.
241
- 7. Show connection details for OpenAI/Anthropic-compatible clients. **Shipped** — printed at startup.
242
- 8. Offer harness setup actions for Pi, Hermes, OpenClaw, and others. *Partially shipped: `mlx-bun harness pi` configures an existing Pi install; Hermes and OpenClaw adapters do not exist.*
243
-
244
- This should feel like an appliance, not a framework tutorial.
245
-
246
- ## Adapter catalog vision
247
-
248
- The average user should not have to train adapters to benefit from them. The
249
- product path can ship or offer a curated catalog of lightweight LoRA adapters:
250
- assistant, coding, writing, research, planning, personal-ops, and other
251
- well-scoped modes. A user can install one small adapter and get a better local
252
- assistant without changing the base model.
253
-
254
- Advanced users can still train their own adapters with mlx-bun. The broader
255
- product loop is:
256
-
257
- ```text
258
- curate conversations and task data
259
- train / ORPO task adapters
260
- publish small adapter artifacts
261
- route requests through the right adapter per task
262
- keep the base model resident
263
- ```
264
-
265
- This makes ORPO performance directly product-relevant. If training is cheap and
266
- repeatable enough, the project can keep improving small local models through
267
- adapter updates instead of asking every user to download a larger base model.
268
-
269
- ## Built-in UI
270
-
271
- Bun can serve the UI directly from the same executable. The default UI
272
- does not need to be elaborate at first, but it should work immediately.
273
-
274
- Expected surfaces:
275
-
276
- - Chat UI backed by the local model server.
277
- - Download progress, resume status, and model readiness.
278
- - Current device profile and selected model.
279
- - Server URL and API compatibility hints.
280
- - Simple controls for common settings: context, temperature, max tokens.
281
- - Advanced panel for explicit model/profile overrides.
282
- - Integration panel for harnesses and external clients.
283
-
284
- ### Model hot-swap from the UI (candidate)
285
-
286
- Let the user switch the served model at runtime — e.g. Gemma e4b →
287
- MiniCPM5 — from a picker in the web UI, without restarting the server.
288
- Weight load is cheap (mmap is lazy, load runs on the CPU stream; ~0.5 s
289
- for a small model), so a swap can feel like changing a setting rather
290
- than a relaunch. `/library` already enumerates every model on disk with
291
- a per-machine fit assessment and flags the active one (`serving`), so the
292
- menu and the "does it fit" data already exist — the missing pieces are a
293
- swap action and a mutable served context.
294
-
295
- Sketch:
296
- - Today the server is single-model-per-process: `serve()` captures one
297
- `ServerContext` as a const in the `Bun.serve` closure. Hot-swap needs a
298
- mutable "current context" ref that all handlers and the generation
299
- gateway read through.
300
- - A swap endpoint (e.g. `POST /library/activate`) drains in-flight
301
- generations, frees the old model's GPU buffers + KV/prompt caches,
302
- `loadContext()`s the target, rebuilds the gateway, then atomically
303
- swaps the ref. `/v1/models`, `/status`, and the Pi probe report the new
304
- id afterward.
305
-
306
- Constraints to honor:
307
- - On a memory-bound Mac you can't hold two models at once — unload before
308
- load. There is an unavoidable brief "swapping…" gap, not an instant
309
- switch. Validate fit() before unloading the current model.
310
- - Load time scales with model size; don't promise instant for large ones.
311
- - Decide adapter behavior on swap (dropped vs. model-scoped) and surface
312
- it. Active LoRA adapters are tied to the base model.
313
-
314
- The UI should not hide that this is local. It should make "local" feel
315
- easy: predictable memory, transparent downloads, offline-capable serving,
316
- and clear integration instructions.
317
-
318
- ### SigLIP vision sidecar — image input for gemma e4b (shipped, 2026-06-17)
319
-
320
- The Gemma 4 e4b vision encoder (`src/vision/siglip.ts`) is a faithful port
321
- of the optiq SigLIP tower. It auto-loads on first image input and falls back
322
- to text-only mode when no image is present, so the chat UI gains image support
323
- with no startup cost. Features are within ~1% rel-RMSE of the optiq oracle;
324
- every MLX primitive (rms_norm, gelu, matmul, SDPA, RoPE, pooling) is bit-exact.
325
- The residual is sub-bf16 floating-point accumulation across the deep encoder,
326
- not a porting gap. The L1 and L2 paths both work; vision falls back to the
327
- monolith path on L1 and L2.
328
-
329
- ### Adapter web selector and CLI /v1/adapters (shipped)
330
-
331
- Trained LoRA adapters can be selected from the chat UI via a per-conversation
332
- picker (`#chat-adapter` in `src/web/app.html`). The picker lists adapters
333
- discovered by `GET /v1/adapters/available`, mounts the chosen one via
334
- `POST /v1/adapters`, and sends a `set_adapter` message to Pi-web so that
335
- every subsequent turn is routed through the right adapter — including the
336
- `before_provider_request` hook in `src/pi-web.ts`. Adapters are base-model-scoped
337
- and dropped on model swap.
338
-
339
- ### The UI must never lag while the AI is busy (candidate, 2026-06-16)
340
-
341
- A product guarantee: **the AI may crash, the UI never may** — and the UI
342
- must stay responsive no matter how hard the model is working. Waiting for
343
- a *chat reply* is fine and expected (local inference takes time). A laggy
344
- web UI — slow refreshes, stalled `/status`, a frozen page while an agentic
345
- pipeline hammers the GPU — is not.
346
-
347
- One `mlx-bun` process plays three roles on one event-loop thread: it
348
- serves the UI, serves the API, and runs the AI. The AI work is synchronous
349
- blocking GPU/FFI (each `mlx_eval` is atomic and uninterruptible), so it
350
- starves the loop — worst in the non-streaming path and during prefill,
351
- where nothing hands a macrotask back. Yielding between tokens helps the
352
- common case but cannot isolate the UI under sustained load.
353
-
354
- Direction (decided: **subprocess**, not worker thread — only address-space
355
- isolation survives the uncatchable GPU OOM): move the inference runtime
356
- into its own persistent child process behind the existing
357
- `GenerationGateway` seam. The main process becomes a pure reactor (UI +
358
- API + routing, zero MLX calls); one GPU lease serializes all GPU consumers
359
- (chat, API, quantize, finetune) — reusing the spawn/lease pattern jobs
360
- already prove. Converges with model hot-swap (model lives off the main
361
- thread either way). Full design + phasing: `docs/reference/server-config.md`.
362
-
363
- ## Harness UX
364
-
365
- Harness setup should be executable, not just documented.
366
-
367
- ```sh
368
- mlx-bun harness
369
- mlx-bun harness pi
370
- mlx-bun harness hermes
371
- mlx-bun harness openclaw
372
- ```
373
-
374
- `mlx-bun harness` should open an interactive picker. Direct subcommands
375
- should configure a specific harness.
376
-
377
- Each harness adapter can:
378
-
379
- - Detect whether the harness is installed.
380
- - Preserve existing user config.
381
- - Add or update the local mlx-bun provider entry.
382
- - Point it at the local server.
383
- - Select the right API protocol.
384
- - Validate the connection with a tiny request.
385
- - Show the command to launch the harness.
386
-
387
- Pi deserves a first-class path because it can be embedded through its SDK:
388
-
389
- ```sh
390
- mlx-bun harness pi
391
- mlx-bun pi
392
- ```
393
-
394
- `mlx-bun harness pi` configures the user's existing Pi install. `mlx-bun
395
- pi` should start the local mlx-bun runtime and launch Pi itself against
396
- that runtime. If the Pi TUI is the right surface, use it. If an embedded
397
- SDK session is the right surface, use that.
398
-
399
- Other harnesses should follow the same adapter pattern.
400
-
401
- Sketch:
402
-
403
- ```ts
404
- interface HarnessAdapter {
405
- id: "pi" | "hermes" | "openclaw";
406
- label: string;
407
- detect(): Promise<Detection>;
408
- configure(profile: RuntimeProfile): Promise<ConfigureResult>;
409
- validate(profile: RuntimeProfile): Promise<ValidationResult>;
410
- launch?(profile: RuntimeProfile): Promise<void>;
411
- }
412
- ```
413
-
414
- ## CLI shape
415
-
416
- Possible command map:
417
-
418
- ```sh
419
- mlx-bun # recommended model + server + UI
420
- mlx-bun serve # server only
421
- mlx-bun ui # UI only, connect to local/running server
422
- mlx-bun repl # Bun REPL with a local AI client preloaded
423
- mlx-bun pi # launch embedded Pi against mlx-bun
424
- mlx-bun harness # interactive harness setup
425
- mlx-bun harness pi # configure existing Pi
426
- mlx-bun harness hermes # configure Hermes
427
- mlx-bun harness openclaw # configure OpenClaw
428
- mlx-bun models # installed and recommended models
429
- mlx-bun fit # device/model fit information
430
- mlx-bun doctor # diagnostics
431
- ```
432
-
433
- Flags should compose with these modes. The default is opinionated, not
434
- restrictive.
435
-
436
- Examples:
437
-
438
- ```sh
439
- mlx-bun --model gemma-4-12b --context 65536
440
- mlx-bun serve --no-ui --port 8080
441
- mlx-bun pi --model qwen-profile
442
- mlx-bun harness pi --base-url http://localhost:8080/v1
443
- ```
444
-
445
- ## Research loop behind the product
446
-
447
- The product table should be backed by the same research discipline as
448
- PLAN.md:
449
-
450
- 1. Pick a small set of real target devices.
451
- 2. Pick a small set of candidate model artifacts.
452
- 3. Measure fit, context, decode speed, TTFT, memory, and quality.
453
- 4. Specialize the runtime for winning artifacts.
454
- 5. Promote only defaults that pass clean-machine measurements.
455
- 6. Keep fallback and explicit override paths for research and power users.
456
-
457
- The first family is Gemma 4 OptiQ. Qwen is the next obvious family to
458
- evaluate. The default model should be whichever gives the best experience
459
- for a device profile and use case, not whichever family arrived first.
460
-
461
- ## Artifact design
462
-
463
- Longer term, mlx-bun may not only choose among existing model artifacts.
464
- It may create artifacts for exact device/use-case targets.
465
-
466
- The useful question is not "can we save 1% RAM?" It is:
467
-
468
- ```text
469
- Can this model fit on this device,
470
- with this context window,
471
- above this decode-speed floor,
472
- while preserving enough quality for this use case?
473
- ```
474
-
475
- TurboQuant plus sensitivity analysis fits this direction. The quantizer
476
- can target concrete SKU boundaries and context tiers:
477
-
478
- - Make a specific model fit on 16 GB with useful context.
479
- - Make a 12B-class model hit 64k context on 24-32 GB.
480
- - Keep decode above 30 tok/s on the recommended profile.
481
- - Preserve tool/agent behavior under the chosen quantization.
482
-
483
- This turns quantization from generic compression into product-driven
484
- artifact design.
485
-
486
- ## Runtime specialization
487
-
488
- When a user asks to run a specific model, there is no ambiguity in the hot
489
- path. The artifact, config, tensor shapes, KV config, quantization layout,
490
- chat template, and architectural quirks are known.
491
-
492
- The generic runtime is scaffolding for research, portability, and
493
- fallback. The served instance can be specialized:
494
-
495
- - Generated per-model execution paths.
496
- - Branches and loops removed where the model shape is fixed.
497
- - Per-layer quant bits/group sizes baked in.
498
- - Known cache layouts and attention patterns used directly.
499
- - Custom kernels generated or selected for exact dispatch sites.
500
-
501
- Compatibility paths remain the oracle. Specialized paths are promoted
502
- only when they are correct, measured, and useful.
503
-
504
- ## Lucien / memory-system direction (candidate, 2026-06-12)
505
-
506
- A second product direction under debate alongside the UI/harness work:
507
- make mlx-bun the local-model engine for Lucien (the Dreaming memory
508
- system), in two stages.
509
-
510
- 1. **Prove the models do real work.** Run Lucien's pipeline tasks
511
- (session ingestion, synthesis into articles, recall-grounded chat)
512
- against mlx-bun-served models. Measure quality and performance per
513
- task — this is a real-workload eval, not a benchmark row, and it
514
- feeds the profile table (which model tier can sustain synthesis
515
- work? what context does recall actually need?).
516
- 2. **Package it.** If the models hold up: mlx-bun as a Lucien backend
517
- option — one executable that creates the memory store, gathers
518
- session transcripts, synthesizes them into articles, and serves
519
- conversations grounded on those articles. Same appliance principle
520
- as the chat default: one binary, one command, a working memory
521
- system.
522
-
523
- This stresses exactly the things the runtime is good at measuring:
524
- long-context prefill, sustained batch-ish generation, prompt-cache
525
- reuse across pipeline stages.
526
-
527
- ## Non-goals for the default UX
528
-
529
- - Do not make the user choose from thousands of Hugging Face variants on
530
- first run.
531
- - Do not benchmark their machine before giving a recommendation.
532
- - Do not require Python, a venv, or manual server setup.
533
- - Do not require hand-editing harness config files.
534
- - Do not expose every research flag before the user has a working local
535
- AI experience.
536
-
537
- ## Open questions
538
-
539
- - What exact profile table should ship first? *(The device-profile lookup
540
- table is unimplemented — `recommendedRepoId()` returns `DEFAULT_REPO_ID`
541
- for every SKU. The profile shape in this doc is the spec; the research
542
- work and the fill remain open.)*
543
- - How should background downloads interact with server startup and UI
544
- readiness?
545
- - How should profile recommendations be versioned as benchmarks improve?
546
- - When Qwen lands, what evals decide whether it replaces a Gemma default?
547
-
548
- ### Resolved
549
-
550
- - **Should no-args open the UI automatically, print a local URL, or both?**
551
- Both: the browser tab is opened automatically on start; the URL is always
552
- printed; `--no-open` suppresses the tab without hiding the URL.
553
- - **Which UI stack should be embedded? / How much of Pi should be bundled?**
554
- Resolved by harness-pi + pi-web shipping: the web UI is the bundled
555
- `src/web/app.html` chat page talking to Pi via `pi-web.ts`; Pi is
556
- configured externally via `mlx-bun harness pi`, or launched embedded via
557
- `mlx-bun pi`.
558
- - **What is the right install path?** All of the above — shipped: npm
559
- publish (v0.0.4, `bunx mlx-bun`), Homebrew release pipeline (sign,
560
- notarize, `joshuarossi/homebrew-tap`), and GitHub release binary.
561
-
562
- ## Vision notes (merged from IDEAS.md, 2026-08-23)
563
-
564
- ### Local in the deeper sense
565
-
566
- Two phrases that capture the thesis — especially **mlx-bun × Lucien**:
567
-
568
- 1. **"A truly local model in a deeper sense."** Not just local *compute*
569
- (runs on your Mac, nothing leaves it) — local to *you*: grounded in your
570
- own context and memory, not only your hardware.
571
- 2. **"The best model at being yours."** Not the best model in the absolute /
572
- benchmark sense — the best at *being yours*. A small local model,
573
- fine-tuned and wired to your personal memory, can lose every general
574
- benchmark and still win the only one that matters here.
575
-
576
- Lucien (the Dreaming) is the synthesized, persistent memory of *you*;
577
- mlx-bun is the local, private model runtime. Combined: a model that runs
578
- entirely on your machine **and** is continuously grounded in your own
579
- accumulated context — local in both senses, and yours in a way no hosted
580
- frontier model can be.
581
-
582
- ### Library/app split (idea only — NOT planned, Josh 2026-07-05)
583
-
584
- Two pulls: "one executable, everything you want to do with local AI" (the
585
- product's charm) vs "some people just want a JS ML library — do they need
586
- the rest?" The runtime-isolation work (2026-07-05) drew the exact boundary
587
- either future needs: the engine child = the GPU stuff (src/model, src/mlx,
588
- caches, scheduler, generate); the parent = the app (serve/UI/registry/
589
- jobs/proxy). If a split ever happens it is a PACKAGING decision, not a
590
- refactor — e.g. npm subpath exports (mlx-bun/model vs the full CLI bundle)
591
- so library users import only the core. Library usage is unaffected by
592
- isolation today (in-process generate(), no server involved). Revisit only
593
- if Josh decides; both directions stay open from the current structure.