mlx-bun 0.4.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 (601) hide show
  1. package/README.md +1453 -88
  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 +10 -8
  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 +12 -10
  78. package/src/{serve → server}/chat-stage.ts +27 -22
  79. package/src/{client.ts → server/client.ts} +28 -2
  80. package/src/{serve → server}/completion-executor.ts +42 -42
  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 +42 -83
  85. package/src/server/generated-token-history.ts +57 -0
  86. package/src/{serve → server}/http.ts +25 -13
  87. package/src/{serve → server}/inference-request.ts +5 -5
  88. package/src/server/job-routes.ts +20 -0
  89. package/src/server/media-prompt.ts +63 -0
  90. package/src/server/memory-completion-client.ts +46 -0
  91. package/src/server/model-routes.ts +192 -0
  92. package/src/{serve → server}/openai-wire.ts +3 -2
  93. package/src/{serve → server}/pipeline.ts +1 -1
  94. package/src/server/prompt-builder.ts +13 -0
  95. package/src/server/prompt-contracts.ts +17 -0
  96. package/src/server/proxy-routes.ts +187 -0
  97. package/src/server/publishing-routes.ts +41 -0
  98. package/src/{serve → server}/request-plan.ts +8 -8
  99. package/src/{serve → server}/request-prep.ts +82 -68
  100. package/src/{serve → server}/responses-client.ts +30 -13
  101. package/src/{responses.ts → server/responses.ts} +12 -93
  102. package/src/server/routes.ts +205 -0
  103. package/src/server/start.ts +72 -0
  104. package/src/server/status-routes.ts +108 -0
  105. package/src/{serve → server}/text-completion-stage.ts +25 -4
  106. package/src/server/text-prompt.ts +12 -0
  107. package/src/{serve → server}/token-streams.ts +36 -38
  108. package/src/server/worker-routes.ts +311 -0
  109. package/src/storage/paths.ts +61 -0
  110. package/src/web/assets.ts +37 -0
  111. package/src/web/{src → browser}/api.ts +5 -23
  112. package/src/web/browser/chat-host.ts +17 -0
  113. package/src/web/browser/installed-panels.ts +6 -0
  114. package/src/web/browser/main.ts +55 -0
  115. package/src/web/browser/markdown.ts +279 -0
  116. package/src/web/browser/memory-panel.ts +9 -0
  117. package/src/web/browser/palette.ts +64 -0
  118. package/src/web/browser/protocol.ts +13 -0
  119. package/src/web/browser/shell.ts +467 -0
  120. package/src/web/{src → browser}/status.ts +32 -36
  121. package/src/web/build.ts +51 -0
  122. package/src/web/public/app.html +1054 -0
  123. package/src/web/{sw.js → public/sw.js} +4 -3
  124. package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
  125. package/src/web/{vendor → public/vendor}/hljs.js +2 -2
  126. package/THIRD_PARTY_LICENSES.md +0 -51
  127. package/docs/README.md +0 -94
  128. package/docs/archive/hlg-sampling.md +0 -350
  129. package/docs/archive/investigations/audio-input-plan.md +0 -356
  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/web-ui-pass-plan.md +0 -213
  174. package/docs/archive/planning/website-readme-pass-plan.md +0 -224
  175. package/docs/design/batching.md +0 -1841
  176. package/docs/design/decode-speed-program.md +0 -2349
  177. package/docs/design/dreaming-nightly-pipeline.md +0 -684
  178. package/docs/design/generic-model-support.md +0 -705
  179. package/docs/design/kv-cache.md +0 -824
  180. package/docs/design/orpo-training.md +0 -680
  181. package/docs/design/speculative-decoding.md +0 -1990
  182. package/docs/design/turboquant.md +0 -2212
  183. package/docs/design/unified-engine-frontier-plan.md +0 -1880
  184. package/docs/design/web-chat-redesign.md +0 -695
  185. package/docs/planning/PRODUCT_ROADMAP.md +0 -594
  186. package/docs/planning/ResearchTopics.md +0 -119
  187. package/docs/planning/release-notes-v0.4.0.md +0 -45
  188. package/docs/planning/video-series.md +0 -421
  189. package/docs/reference/benchmarks.md +0 -3613
  190. package/docs/reference/cli.md +0 -585
  191. package/docs/reference/distribution.md +0 -355
  192. package/docs/reference/environment.md +0 -398
  193. package/docs/reference/glossary.md +0 -39
  194. package/docs/reference/library-api.md +0 -674
  195. package/docs/reference/memory.md +0 -260
  196. package/docs/reference/models.md +0 -334
  197. package/docs/reference/server-api.md +0 -1775
  198. package/docs/reference/server-config.md +0 -846
  199. package/docs/reference/training.md +0 -462
  200. package/docs/reference/troubleshooting.md +0 -158
  201. package/src/admission-plan.ts +0 -18
  202. package/src/audio/conformer.ts +0 -647
  203. package/src/audio/decode.ts +0 -133
  204. package/src/audio/features.ts +0 -202
  205. package/src/audio/transcode.ts +0 -67
  206. package/src/backends/mlx/assistant-target.ts +0 -46
  207. package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
  208. package/src/backends/mlx/autoregressive.ts +0 -108
  209. package/src/backends/mlx/batch-group.ts +0 -1790
  210. package/src/backends/mlx/cache-attachment.ts +0 -67
  211. package/src/backends/mlx/cache-layout.ts +0 -31
  212. package/src/backends/mlx/checkpoint-state.ts +0 -53
  213. package/src/backends/mlx/continuation-persistence.ts +0 -106
  214. package/src/backends/mlx/continuation-request.ts +0 -43
  215. package/src/backends/mlx/continuation.ts +0 -77
  216. package/src/backends/mlx/diffusion.ts +0 -39
  217. package/src/backends/mlx/draft-target.ts +0 -32
  218. package/src/backends/mlx/evaluation.ts +0 -105
  219. package/src/backends/mlx/fill-append.ts +0 -45
  220. package/src/backends/mlx/full-kv-row-append.ts +0 -32
  221. package/src/backends/mlx/full-kv-row-donor.ts +0 -54
  222. package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
  223. package/src/backends/mlx/gateway-binding.ts +0 -130
  224. package/src/backends/mlx/graph.ts +0 -38
  225. package/src/backends/mlx/kv-codec.ts +0 -9
  226. package/src/backends/mlx/kv-maintenance.ts +0 -133
  227. package/src/backends/mlx/kv-tensor-rows.ts +0 -212
  228. package/src/backends/mlx/memory-client.ts +0 -189
  229. package/src/backends/mlx/methods.ts +0 -90
  230. package/src/backends/mlx/model-prompt.ts +0 -164
  231. package/src/backends/mlx/model-serving.ts +0 -79
  232. package/src/backends/mlx/prefill-cohort.ts +0 -89
  233. package/src/backends/mlx/prefill-rows.ts +0 -200
  234. package/src/backends/mlx/prefill.ts +0 -33
  235. package/src/backends/mlx/projected-context-rows.ts +0 -72
  236. package/src/backends/mlx/request-policy.ts +0 -20
  237. package/src/backends/mlx/request-state-policy.ts +0 -41
  238. package/src/backends/mlx/rollback.ts +0 -89
  239. package/src/backends/mlx/row-sampling.ts +0 -49
  240. package/src/backends/mlx/serial-executor.ts +0 -242
  241. package/src/backends/mlx/speculative-group.ts +0 -359
  242. package/src/backends/mlx/speculative-round.ts +0 -161
  243. package/src/backends/mlx/speculative.ts +0 -114
  244. package/src/backends/mlx/state-rows.ts +0 -104
  245. package/src/backends/mlx/state-views.ts +0 -46
  246. package/src/backends/mlx/target-layout-capability.ts +0 -35
  247. package/src/backends/mlx/text-engine.ts +0 -73
  248. package/src/backends/mlx/transitioning-kv-rows.ts +0 -165
  249. package/src/chat-template.ts +0 -382
  250. package/src/cli.ts +0 -3168
  251. package/src/config.ts +0 -399
  252. package/src/contracts/completion.ts +0 -16
  253. package/src/contracts/execution.ts +0 -60
  254. package/src/contracts/generation.ts +0 -103
  255. package/src/contracts/host.ts +0 -7
  256. package/src/contracts/pi-provider.ts +0 -30
  257. package/src/contracts/pi.ts +0 -259
  258. package/src/contracts/prefix-cache.ts +0 -23
  259. package/src/contracts/resources.ts +0 -25
  260. package/src/contracts/sampling.ts +0 -23
  261. package/src/contracts/scheduling.ts +0 -45
  262. package/src/contracts/tsconfig.json +0 -14
  263. package/src/dataset/generators.ts +0 -1087
  264. package/src/dataset/index.ts +0 -12
  265. package/src/dataset/job.ts +0 -81
  266. package/src/dataset/llm.ts +0 -71
  267. package/src/dataset/registry.ts +0 -528
  268. package/src/diffusion/diffusion-generate.ts +0 -507
  269. package/src/download.ts +0 -505
  270. package/src/embed.ts +0 -77
  271. package/src/engine/admission.ts +0 -59
  272. package/src/engine/cancellation.ts +0 -38
  273. package/src/engine/engine.ts +0 -56
  274. package/src/engine/execution-coordinator.ts +0 -70
  275. package/src/engine/execution-plan.ts +0 -53
  276. package/src/engine/resources.ts +0 -53
  277. package/src/engine/scheduler.ts +0 -72
  278. package/src/engine/session.ts +0 -247
  279. package/src/eval/README.md +0 -130
  280. package/src/eval/ifeval.ts +0 -81
  281. package/src/eval/kl-prompts.ts +0 -29
  282. package/src/eval/kl.ts +0 -590
  283. package/src/eval/perplexity.ts +0 -164
  284. package/src/eval/quality-db.ts +0 -92
  285. package/src/eval/reference-logits.ts +0 -207
  286. package/src/eval/runner.ts +0 -124
  287. package/src/eval/score.ts +0 -49
  288. package/src/eval/tasks/bfcl.ts +0 -535
  289. package/src/eval/tasks/gsm8k.ts +0 -98
  290. package/src/eval/tasks/hashhop.ts +0 -139
  291. package/src/eval/tasks/humaneval.ts +0 -275
  292. package/src/eval/tasks/ifeval.ts +0 -525
  293. package/src/eval/tasks/mmlu.ts +0 -157
  294. package/src/eval/ultrafeedback.ts +0 -60
  295. package/src/evaldb.ts +0 -199
  296. package/src/expert-io.ts +0 -393
  297. package/src/expert-offload-build.ts +0 -77
  298. package/src/expert-offload.ts +0 -76
  299. package/src/expert-residency.ts +0 -1134
  300. package/src/expert-usage.ts +0 -415
  301. package/src/fill/echo-index.ts +0 -188
  302. package/src/fill/fill-session.ts +0 -452
  303. package/src/fill/proposal.ts +0 -68
  304. package/src/fill/schema-rows.ts +0 -506
  305. package/src/fill/tool-boundary.ts +0 -103
  306. package/src/fit.ts +0 -249
  307. package/src/generate.ts +0 -1346
  308. package/src/grammar.ts +0 -591
  309. package/src/harness-pi.ts +0 -184
  310. package/src/hf-push.ts +0 -628
  311. package/src/hub-rest.ts +0 -242
  312. package/src/index.ts +0 -63
  313. package/src/inference/denoising.ts +0 -17
  314. package/src/inference/draft-acceptance.ts +0 -41
  315. package/src/inference/draft-output.ts +0 -49
  316. package/src/inference/graph.ts +0 -33
  317. package/src/inference/prefill.ts +0 -39
  318. package/src/inference/rollback.ts +0 -7
  319. package/src/jobs/index.ts +0 -31
  320. package/src/jobs/job-entry.ts +0 -107
  321. package/src/jobs/task-client.ts +0 -19
  322. package/src/jobs/types.ts +0 -2
  323. package/src/kv-scheme.ts +0 -257
  324. package/src/kv-store.ts +0 -1099
  325. package/src/lab/README.md +0 -18
  326. package/src/lab/curve/curve-designer.html +0 -303
  327. package/src/lab/curve/curve-sampler.ts +0 -122
  328. package/src/lab/expert-trace/expert-trace.ts +0 -69
  329. package/src/lab/paged-kv/paged-kv-rows.ts +0 -83
  330. package/src/lab/paged-kv/paged-kv.ts +0 -270
  331. package/src/library.ts +0 -40
  332. package/src/lora.ts +0 -408
  333. package/src/md-modules.d.ts +0 -49
  334. package/src/media-fetch.ts +0 -442
  335. package/src/memory/article.ts +0 -558
  336. package/src/memory/chunk-validation.ts +0 -150
  337. package/src/memory/chunk.ts +0 -318
  338. package/src/memory/cluster.ts +0 -351
  339. package/src/memory/coverage.ts +0 -134
  340. package/src/memory/crosslink.ts +0 -0
  341. package/src/memory/db.ts +0 -253
  342. package/src/memory/entity.ts +0 -203
  343. package/src/memory/gate.ts +0 -187
  344. package/src/memory/history.ts +0 -152
  345. package/src/memory/ingest.ts +0 -335
  346. package/src/memory/model.ts +0 -183
  347. package/src/memory/normalize.ts +0 -671
  348. package/src/memory/parse.ts +0 -22
  349. package/src/memory/pipeline.ts +0 -275
  350. package/src/memory/prompts.ts +0 -65
  351. package/src/memory/query.ts +0 -334
  352. package/src/memory/reconcile.ts +0 -734
  353. package/src/memory/redirect.ts +0 -108
  354. package/src/memory/reindex.ts +0 -325
  355. package/src/memory/resolve.ts +0 -307
  356. package/src/memory/rest.ts +0 -245
  357. package/src/memory/route.ts +0 -272
  358. package/src/memory/schedule.ts +0 -165
  359. package/src/memory/stages.ts +0 -777
  360. package/src/memory/synthesize.ts +0 -1638
  361. package/src/memory/tools.ts +0 -749
  362. package/src/memory/vault.ts +0 -1194
  363. package/src/memory/wikify.ts +0 -1064
  364. package/src/mlx/array.ts +0 -388
  365. package/src/mlx/autograd.ts +0 -304
  366. package/src/mlx/checkpoint.ts +0 -149
  367. package/src/mlx/compile.ts +0 -168
  368. package/src/mlx/custom-vjp.ts +0 -188
  369. package/src/mlx/ffi.ts +0 -512
  370. package/src/mlx/materialize.ts +0 -23
  371. package/src/mlx/metal-kernel.ts +0 -159
  372. package/src/mlx/ops.ts +0 -1021
  373. package/src/mlx/quantized-rows.ts +0 -36
  374. package/src/mlx/token-bitmask.ts +0 -52
  375. package/src/mlx/turboquant-kv-decode.ts +0 -82
  376. package/src/mlx/turboquant-kv-inverse.ts +0 -122
  377. package/src/mlx/turboquant-ops.ts +0 -861
  378. package/src/mlx/turboquant-tables.ts +0 -237
  379. package/src/mmap.ts +0 -90
  380. package/src/model/artifact-identity.ts +0 -73
  381. package/src/model/batched-kv.ts +0 -235
  382. package/src/model/batched-mask.ts +0 -279
  383. package/src/model/batched-quant.ts +0 -212
  384. package/src/model/batched-quantized-kv.ts +0 -144
  385. package/src/model/batched-rotating-quant.ts +0 -353
  386. package/src/model/batched-rotating-state.ts +0 -149
  387. package/src/model/batched-rotating.ts +0 -338
  388. package/src/model/batched-row-storage.ts +0 -179
  389. package/src/model/batched-ssm.ts +0 -52
  390. package/src/model/batched-turboquant-kv.ts +0 -93
  391. package/src/model/compiled-decode.ts +0 -712
  392. package/src/model/decoded-kv-donor.ts +0 -12
  393. package/src/model/delayed-quantized-kv.ts +0 -72
  394. package/src/model/delayed-rotating-quantized-kv.ts +0 -93
  395. package/src/model/delayed-turboquant-kv.ts +0 -55
  396. package/src/model/diffusion-gemma.ts +0 -1026
  397. package/src/model/factory.ts +0 -189
  398. package/src/model/fingerprint.ts +0 -33
  399. package/src/model/flash-attention.ts +0 -694
  400. package/src/model/full-prefill-padding.ts +0 -56
  401. package/src/model/full-prefill-row.ts +0 -105
  402. package/src/model/gemma4-base.ts +0 -2351
  403. package/src/model/gemma4.ts +0 -1315
  404. package/src/model/generated/gemma4-12b.ts +0 -429
  405. package/src/model/generated/gemma4-26b.ts +0 -448
  406. package/src/model/generated/gemma4-e4b.ts +0 -717
  407. package/src/model/generated/index.ts +0 -18
  408. package/src/model/glm52-atlas.ts +0 -511
  409. package/src/model/glm52-cache.ts +0 -792
  410. package/src/model/glm52-config.ts +0 -262
  411. package/src/model/glm52-container.ts +0 -305
  412. package/src/model/glm52-coupling.ts +0 -388
  413. package/src/model/glm52-dsa.ts +0 -606
  414. package/src/model/glm52-expert-layout.ts +0 -253
  415. package/src/model/glm52-layout.ts +0 -152
  416. package/src/model/glm52-memory.ts +0 -500
  417. package/src/model/glm52-mla.ts +0 -792
  418. package/src/model/glm52-moe.ts +0 -223
  419. package/src/model/glm52-pilot.ts +0 -537
  420. package/src/model/glm52-reference.ts +0 -445
  421. package/src/model/glm52-residency.ts +0 -557
  422. package/src/model/glm52-resident-weights.ts +0 -135
  423. package/src/model/glm52-streamed-experts.ts +0 -453
  424. package/src/model/glm52-streamed-metal.ts +0 -610
  425. package/src/model/glm52-weights.ts +0 -503
  426. package/src/model/glm52.ts +0 -1132
  427. package/src/model/implementation.ts +0 -69
  428. package/src/model/kv-attention-view.ts +0 -67
  429. package/src/model/minicpm5.ts +0 -376
  430. package/src/model/profile.ts +0 -443
  431. package/src/model/qwen-append.ts +0 -12
  432. package/src/model/qwen-conv.ts +0 -52
  433. package/src/model/qwen3-delta-state.ts +0 -74
  434. package/src/model/qwen3-delta.ts +0 -451
  435. package/src/model/qwen3-moe.ts +0 -404
  436. package/src/model/qwen3-mrope.ts +0 -252
  437. package/src/model/qwen3.ts +0 -277
  438. package/src/model/qwen3_5-checkpoint.ts +0 -164
  439. package/src/model/qwen3_5.ts +0 -819
  440. package/src/model/rotating-kv-donor.ts +0 -35
  441. package/src/model/rotating-kv-layout.ts +0 -262
  442. package/src/model/rotating-row-transaction.ts +0 -35
  443. package/src/model/speculative-rotating-kv.ts +0 -101
  444. package/src/model/ssm-prefill-padding.ts +0 -39
  445. package/src/model/support.ts +0 -102
  446. package/src/model/trellis-balanced-scatter.ts +0 -51
  447. package/src/model/trellis-linear.ts +0 -672
  448. package/src/model/trellis-shared-m.ts +0 -151
  449. package/src/model/trellis-shared-scatter.ts +0 -144
  450. package/src/model/trellis-splitk-prefill.ts +0 -158
  451. package/src/model/trellis-tiled-prefill.ts +0 -136
  452. package/src/model/trellis-vector-expand.ts +0 -62
  453. package/src/model/trellis-wide-prefill.ts +0 -94
  454. package/src/model/turboquant-codec.ts +0 -83
  455. package/src/model/universal/archs.ts +0 -332
  456. package/src/model/universal/dense.ts +0 -612
  457. package/src/model/universal/modules.ts +0 -170
  458. package/src/model/universal/rope.ts +0 -381
  459. package/src/native/expert_io.c +0 -523
  460. package/src/native/frame_extract.swift +0 -140
  461. package/src/native-pack.ts +0 -162
  462. package/src/pi-provider.ts +0 -53
  463. package/src/pi-session.ts +0 -81
  464. package/src/pi-terminal.ts +0 -274
  465. package/src/pi-web.ts +0 -1932
  466. package/src/preflight.ts +0 -158
  467. package/src/prompt-cache.ts +0 -460
  468. package/src/quantize/allocator.ts +0 -627
  469. package/src/quantize/atomic-output.ts +0 -38
  470. package/src/quantize/calibration.ts +0 -181
  471. package/src/quantize/config-writer.ts +0 -145
  472. package/src/quantize/index.ts +0 -84
  473. package/src/quantize/job.ts +0 -162
  474. package/src/quantize/quantizer.ts +0 -666
  475. package/src/quantize/rotate.ts +0 -603
  476. package/src/quantize/safetensors-writer.ts +0 -249
  477. package/src/quantize/sensitivity.ts +0 -216
  478. package/src/quantize/trellis.ts +0 -586
  479. package/src/quantize/weight-transform.ts +0 -292
  480. package/src/registry.ts +0 -602
  481. package/src/runtime-config.ts +0 -81
  482. package/src/safetensors.ts +0 -158
  483. package/src/sampler.ts +0 -1011
  484. package/src/serve/admin-routes.ts +0 -184
  485. package/src/serve/assets/curve-terrain.html +0 -105
  486. package/src/serve/assets/training-inference-map.html +0 -575
  487. package/src/serve/aux-routes.ts +0 -132
  488. package/src/serve/batch-scheduler.ts +0 -8
  489. package/src/serve/checkpoint-identity.ts +0 -64
  490. package/src/serve/generation-gateway.ts +0 -496
  491. package/src/serve/isolate.ts +0 -609
  492. package/src/serve/kv-budget.ts +0 -14
  493. package/src/serve/lab-routes.ts +0 -341
  494. package/src/serve/lane-registry.ts +0 -45
  495. package/src/serve/model-admin-routes.ts +0 -155
  496. package/src/serve/model-binding.ts +0 -43
  497. package/src/serve/model-host.ts +0 -511
  498. package/src/serve/parent-application.ts +0 -56
  499. package/src/serve/prompt-response-trace.ts +0 -147
  500. package/src/serve/response-lease.ts +0 -24
  501. package/src/serve/session-search.ts +0 -326
  502. package/src/serve/static-routes.ts +0 -101
  503. package/src/server.ts +0 -1314
  504. package/src/spec/assistant-rows.ts +0 -92
  505. package/src/spec/assistant-source.ts +0 -126
  506. package/src/spec/cache-identity.ts +0 -22
  507. package/src/spec/deepspec-rows.ts +0 -29
  508. package/src/spec/deepspec-source.ts +0 -145
  509. package/src/spec/dflash-source.ts +0 -149
  510. package/src/spec/drafter.ts +0 -304
  511. package/src/spec/dspark/ab-stats.ts +0 -136
  512. package/src/spec/dspark/calibration.ts +0 -112
  513. package/src/spec/dspark/data-dflash.ts +0 -156
  514. package/src/spec/dspark/data.ts +0 -201
  515. package/src/spec/dspark/deepspec-module.ts +0 -776
  516. package/src/spec/dspark/generate-dflash.ts +0 -245
  517. package/src/spec/dspark/generate.ts +0 -290
  518. package/src/spec/dspark/loader.ts +0 -23
  519. package/src/spec/dspark/loss.ts +0 -213
  520. package/src/spec/dspark/module-dflash.ts +0 -560
  521. package/src/spec/dspark/module.ts +0 -540
  522. package/src/spec/dspark/quantize-drafter.ts +0 -91
  523. package/src/spec/dspark/sample.ts +0 -112
  524. package/src/spec/generate.ts +0 -276
  525. package/src/spec/glm52-mtp-graph.ts +0 -29
  526. package/src/spec/glm52-mtp-rows.ts +0 -132
  527. package/src/spec/glm52-mtp-source.ts +0 -317
  528. package/src/spec/glm52-mtp-state.ts +0 -33
  529. package/src/spec/ngram-source.ts +0 -204
  530. package/src/spec/projected-draft-rows.ts +0 -73
  531. package/src/spec/qwen-mtp-module.ts +0 -171
  532. package/src/spec/qwen-mtp-rows.ts +0 -219
  533. package/src/spec/qwen-mtp-source.ts +0 -383
  534. package/src/spec/qwen-mtp-state.ts +0 -30
  535. package/src/spec/serve-loop.ts +0 -585
  536. package/src/spec/source.ts +0 -215
  537. package/src/spec/two-model-rows.ts +0 -61
  538. package/src/spec/two-model.ts +0 -113
  539. package/src/ssd-cache.ts +0 -372
  540. package/src/ssd-durability.ts +0 -211
  541. package/src/tokenizer.ts +0 -335
  542. package/src/tool-approvals.ts +0 -131
  543. package/src/tool-call.ts +0 -695
  544. package/src/train/dataset.ts +0 -484
  545. package/src/train/diffusion-lora.ts +0 -216
  546. package/src/train/export.ts +0 -32
  547. package/src/train/flash-cce.ts +0 -1234
  548. package/src/train/forward.ts +0 -266
  549. package/src/train/fuse.ts +0 -243
  550. package/src/train/index.ts +0 -46
  551. package/src/train/job.ts +0 -205
  552. package/src/train/lora-params.ts +0 -254
  553. package/src/train/loss.ts +0 -1591
  554. package/src/train/merge.ts +0 -195
  555. package/src/train/optimizer.ts +0 -183
  556. package/src/train/prefix-shared.ts +0 -490
  557. package/src/train/rank.ts +0 -137
  558. package/src/train/segmented.ts +0 -1828
  559. package/src/train/steel-qmm-header.ts +0 -1461
  560. package/src/train/trainer.ts +0 -1221
  561. package/src/train/watch.ts +0 -542
  562. package/src/vision/diffusion-vision.ts +0 -620
  563. package/src/vision/embedder.ts +0 -168
  564. package/src/vision/preprocess.ts +0 -247
  565. package/src/vision/prompt.ts +0 -373
  566. package/src/vision/qwen3vl-preprocess.ts +0 -409
  567. package/src/vision/qwen3vl-prompt.ts +0 -196
  568. package/src/vision/qwen3vl-tower.ts +0 -555
  569. package/src/vision/siglip.ts +0 -599
  570. package/src/vision/video-frames.ts +0 -148
  571. package/src/web/app.html +0 -2143
  572. package/src/web/app.js +0 -5703
  573. package/src/web/skills/memory/SKILL.md +0 -120
  574. package/src/web/skills/web-research/SKILL.md +0 -46
  575. package/src/web/skills.ts +0 -97
  576. package/src/web/src/adapters-panel.ts +0 -288
  577. package/src/web/src/assistant.ts +0 -451
  578. package/src/web/src/chat.ts +0 -1057
  579. package/src/web/src/composer.ts +0 -959
  580. package/src/web/src/dataset.ts +0 -132
  581. package/src/web/src/finetune.ts +0 -267
  582. package/src/web/src/hub.ts +0 -428
  583. package/src/web/src/main.ts +0 -98
  584. package/src/web/src/markdown.ts +0 -0
  585. package/src/web/src/memory-panel.ts +0 -572
  586. package/src/web/src/model-picker.ts +0 -159
  587. package/src/web/src/palette.ts +0 -346
  588. package/src/web/src/protocol.ts +0 -26
  589. package/src/web/src/quantize.ts +0 -167
  590. package/src/web/src/rag.ts +0 -274
  591. package/src/web/src/sessions.ts +0 -469
  592. package/src/web/src/shell.ts +0 -804
  593. package/src/web/src/ui-catalog.ts +0 -78
  594. package/src/web/vendor/README.md +0 -61
  595. package/src/web-assets.ts +0 -47
  596. package/src/web-tools.ts +0 -478
  597. package/src/weights.ts +0 -255
  598. /package/src/{serve → server}/completion-sink.ts +0 -0
  599. /package/src/web/{icon.svg → public/icon.svg} +0 -0
  600. /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
  601. /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
@@ -1,119 +0,0 @@
1
- # Research Topics
2
-
3
- Speculative, exploratory directions for mlx-bun — theses worth prototyping, not
4
- committed work. Each entry carries enough detail to pick up cold. PLAN.md is for
5
- work in flight; this is for ideas waiting their turn.
6
-
7
- ---
8
-
9
- ## 1. Tonal Grading for Token Distributions ("HDR Sampling")
10
-
11
- > Replace the global scalar sampling knobs (temperature, top-k, top-p) with a
12
- > region-aware **transfer function** applied to logits before softmax — the
13
- > color-grading move, ported to token distributions.
14
-
15
- **Framing — the Wes Anderson point.** A film's symmetrical pastel look isn't a
16
- colorist failing to neutralize; it's a *target*. Grade Marvel that way and it's
17
- "wrong" only against Marvel's acceptance function, not against any absolute.
18
- Different films, different targets — and you have a lot of films. The
19
- Lucien-synthesis agent and the test-writing agent want different *looks*, and
20
- "temperature + a system-prompt vibe word" is the crude contrast slider standing
21
- in for a real grade.
22
-
23
- **Core thesis.** Current LLM sampling is "SDR": the available controls
24
- (temperature, top-k, top-p) are crude *global* knobs — the equivalent of a single
25
- contrast slider. Color grading abandoned "just turn the contrast knob" long ago
26
- in favor of transfer functions with region-specific behavior. The same move is
27
- available for sampling: replace global scalar knobs with a region-aware transfer
28
- function applied to the logits before softmax.
29
-
30
- **The reframe that makes it work.** Signal vs. noise is defined by *intent*, not
31
- by magnitude — exactly as on a camera sensor, where the noise floor is "noise"
32
- because it doesn't represent what's wanted, not because it's small. The full
33
- logit vector is the model's signal, but it is not the signal *I* care about. My
34
- acceptance criterion defines which part is signal. The low-logit tail is
35
- therefore legitimately treatable as a noise floor to roll off.
36
-
37
- **The three regions** — one curve, three treatments. This is precisely what
38
- temperature *cannot* do, since it scales everywhere uniformly:
39
-
40
- - **Shoulder** (head / confident tokens): soft rolloff instead of hard
41
- truncation. Top-k/top-p slam into the ceiling and clip; a shoulder eases the
42
- top tokens toward co-equality while *preserving their ordering* — it tames
43
- single-token dominance without destroying the relationships among the spared
44
- tokens.
45
- - **Midtones** (the plausible-but-distinct band): steepen for local contrast.
46
- Push apart the tokens that matter so detail comes out sharp. This has no name
47
- in current sampling because sampling has no concept of distributional
48
- midtones — and it's the most novel piece.
49
- - **Toe** (tail / unwanted tokens): roll into the floor. Defines them as noise
50
- relative to intent.
51
-
52
- **Curve vocabulary, ported from grading:**
53
-
54
- - **Pivot/cut** placed *relative* to the distribution (by rank or percentile),
55
- recomputed every step — never an absolute logit value, because logits are only
56
- meaningful up to an additive constant (softmax shift-invariance). HLG's
57
- relative / scene-referred design is the right philosophical match; LogC3 is
58
- more absolute / exposure-locked.
59
- - **Slope-matched splices** between regions (C1 continuity — no kink in how
60
- adjacent-ranked tokens get treated).
61
- - **Curve family:** signed / `log1p`-style forms to stay finite on negative
62
- logits. An HLG-style architecture (gamma toe + log shoulder, slope-matched) is
63
- the leading candidate because its two-regime structure happens to match the
64
- two-regime structure of a real logit distribution — temperature-style shaping
65
- on the uncertain tail, log-style compression on the overconfident head.
66
-
67
- **Why it's not overclaiming.** I am *not* claiming buried capability that a curve
68
- "unclips" — the logits aren't a compressed encoding of something richer. The
69
- honest claim: there is an acceptable manifold the model can't articulate and the
70
- default transform doesn't reliably land on; the curve encodes my
71
- *observer-relative acceptance function* onto a distribution that has no opinion
72
- of its own. This is why sampling knobs exist at all — "friendly / neutral /
73
- professional" are crude gestures at exactly this, and a grade is the
74
- high-resolution version.
75
-
76
- **The per-agent-target insight (the payoff).** "Correctly transformed to display"
77
- is not universally acceptable — it's unacceptable for an Oscar-buzz feature and
78
- fine for a sports broadcast, because they have different acceptance functions.
79
- Grading Marvel like Wes Anderson isn't incompetence; it's the wrong *target*. My
80
- agents are different films:
81
-
82
- - A **conversation→article synthesis** agent wants range, texture, and
83
- surprising-but-apt word choices — "cinematic."
84
- - An **acceptance-criteria→tests** agent wants tight, predictable, low-variance
85
- determinism — "broadcast neutral."
86
-
87
- They want different *grades*, not different *temperatures*. Per-task tonal
88
- curves, not per-task scalar knobs.
89
-
90
- **Open engineering question — build this first.** The colorist works in a tight
91
- perceptual loop against a calibrated reference monitor; a sampler's curve is
92
- chosen *upstream* of seeing output, with a slower, noisier judgment loop. So the
93
- gating question isn't "is the curve good" — it's **"what is the monitor?"** What
94
- readout tells me the midtones got crisper and the highlights rolled off well, per
95
- target? Candidates: held-out preference, diversity-at-fixed-quality, task-specific
96
- pass rates (for the test agent) vs. human preference (for the synthesis agent).
97
- Define the per-target reference monitor first; the curve design follows from it
98
- the way a grade follows from a trustworthy display.
99
-
100
- **Implementation.** A pure elementwise function on the logits tensor inside
101
- mlx-bun's per-step logits-processor hook: sort once for the rank-relative pivot,
102
- apply the slope-matched toe/mid/shoulder curve, renormalize, sample. The hook
103
- already exists — logits processors run at
104
- [`generate.ts:236`](../../src/generate.ts:236)
105
- (`for (const p of processors) logits = disposing(logits, p(history, logits))`),
106
- built by `makeLogitsProcessors` in [`src/sampler.ts`](../../src/sampler.ts) as pure
107
- `(history, logits) => logits` functions applied before `toLogprobs` and the
108
- sampler — so the curve drops in as one more processor in that loop.
109
-
110
- Given dispatch dominates decode wall time (~90–96%), the curve's arithmetic cost
111
- rides inside work already dispatched — wall-time-negligible. Parameterize: pivot
112
- rank, toe exponent, midtone slope, shoulder compression. A/B against plain
113
- temperature **at matched effective entropy**, judged on the per-target monitor —
114
- looking for outputs that land in the target region *unreachably* by
115
- temperature-plus-top-p at any setting, not merely "different."
116
-
117
- *Relation to current code:* the `--temperature` / `--top-p` / `--top-k` server
118
- defaults (and `generation_config.json`) are the SDR knobs this topic proposes to
119
- supersede — useful as the A/B baseline, not the destination.
@@ -1,45 +0,0 @@
1
- # mlx-bun v0.4.0
2
-
3
- This release brings shared batched decode, generated-history cache reuse and
4
- resumable generation together through separate scheduling, inference, sampling
5
- and persistence interfaces.
6
-
7
- - Shared ordinary and speculative execution supports Qwen MTP, prompt lookup,
8
- standalone, assistant, DeepSpec and DSpark/DFlash providers on qualified
9
- model/request combinations. Single requests run at B=1 through the scheduler.
10
- - Full and rotating affine/TurboQuant cache layouts compose with delayed and
11
- per-layer precision, speculative rollback and generated target/draft state.
12
- - Completed decode populates the shared RAM/SSD cache so later turns can reuse
13
- generated history. SSD persistence is queued and runs during idle ownership.
14
- - Ordinary interrupted-generation resume now works through shared execution,
15
- including compatible adapters and quantized caches. Restored sampler history,
16
- pending tokens and usage accounting preserve the continuation contract.
17
- - Ordinary paged storage and adapter-qualified prompt lookup use the same state
18
- and execution interfaces. GLM native MTP gains shared cache transactions and
19
- row state; final real-artifact testing remains deferred.
20
- - Measured Trellis v13 is selected by default, and eligible Qwen KV4 speculation
21
- is enabled. Workload-dependent lookup and other experimental settings remain
22
- opt-in. Memory fit estimates are advisory unless users choose explicit limits.
23
- - Benchmark reporting retains request/source identities, paired comparisons,
24
- failures and configuration differences. CI and the release build use Bun 1.4.2.
25
-
26
- Serving keeps its existing `--batch 8` default. A lone eligible request starts
27
- immediately at B=1; the cap does not wait for eight requests. `--batch 1` retains
28
- the serial executor, and unsupported compositions can still use it. Removing
29
- serial and completing every feature combination are follow-up work.
30
-
31
- Checkpoint capture is eventually persistent: queued snapshots can remain in RAM
32
- during uninterrupted traffic. A successful explicit flush is the durability
33
- boundary. Media, fill/grammar-jump and direct paged-attention work remain tracked.
34
- No DSpark/DFlash checkpoint has been trained for this campaign; execution fixtures
35
- do not establish trained-drafter performance.
36
-
37
- Measured performance and its workload limits are in the
38
- [benchmark record](https://github.com/joshuarossi/mlx-bun/blob/v0.4.0/docs/reference/benchmarks.md).
39
- This release does not claim a matched full-task Kanban speedup or completion of
40
- the entire optimization program. Supported settings are documented in the
41
- [server configuration reference](https://github.com/joshuarossi/mlx-bun/blob/v0.4.0/docs/reference/server-config.md).
42
-
43
- Requires Apple Silicon and macOS 14 or later. npm installs require Bun 1.4.0 or
44
- later; Bun 1.4.2 is the tested version. The existing native runtime pack 0.4.0
45
- provides MLX 0.32.2 and its matching C API.
@@ -1,421 +0,0 @@
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
- ```