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,398 +0,0 @@
1
- # Reference environment and platform facts
2
-
3
- The canonical home for the oracle setup and the hard-won platform facts that
4
- agents and contributors need. CLAUDE.md points here; do not duplicate these
5
- facts elsewhere. Each fact is one paragraph with the evidence path that proves
6
- it — when you change the code, update the paragraph.
7
-
8
- User-facing symptoms live in [troubleshooting.md](./troubleshooting.md).
9
-
10
- ## Machines
11
-
12
- There are TWO development machines and neither is canonical. One is a MacBook
13
- Pro M1 Max with 32 GB (`hw.model MacBookPro18,2`); the other is a MacBook Pro
14
- M4 Pro with 24 GB, the machine PLAN.md's "Reference environment" section
15
- describes (unified memory, ~273 GB/s). Every measured number is labeled with
16
- host / chip / RAM — `docs/reference/benchmarks.md` carries "M1 Max 32 GB"
17
- section headings for exactly this reason, and its TurboQuant section carries an
18
- explicit "measured on an M1 Max 32 GB, not this file's M4 Pro reference" note.
19
- Before asserting anything about RAM, OOM, or bandwidth, run
20
- `sysctl hw.memsize hw.model` — never assume which laptop you are on. The
21
- reference `serve.sh` (below) hard-codes a 28 GB wired limit "of 32 GB", so it
22
- is written for the M1 Max.
23
-
24
- For the current M4 Pro optimization campaign, Josh specifies internal SSD
25
- storage for active models. The external SSD stores artifacts to copy when
26
- needed; external-drive loading performance is outside normal acceptance for
27
- the 12–17 GB models. Stage each needed artifact under `~/models/`, verify
28
- every file against its archive, and record that path in both benchmark arms.
29
- Preserve earlier external-drive measurements as a separate cohort. The local
30
- active-model manifests live under `reports/qwen38-rd/`.
31
-
32
- Perf claims get a number on the machine they were measured on, recorded in the
33
- user-local eval DB (`~/.cache/mlx-bun/evals.sqlite`) and promoted to
34
- `docs/reference/benchmarks.md` deliberately. `bun scripts/bench-serve.ts all`
35
- is the benchmark harness; it writes Markdown and raw JSON under `reports/`
36
- as gitignored outputs. Numbers on a loaded machine are
37
- garbage — run-to-run spread is the stability signal, and the harness retries
38
- unstable cells (`scripts/bench-serve.ts`; `benchmarks.md`, "Running the
39
- benchmark").
40
-
41
- ## External storage loading
42
-
43
- On the M4 Pro with MLX 0.32.2, two RTN4 first-request warmups from
44
- `/Volumes/MLX-Models`, an external USB SSD using APFS, hit Metal GPU timeouts
45
- before any committed-token append. One occurred with fill disabled. The
46
- system log confirms the first timeout; neither establishes an allocation
47
- leak or an append-kernel failure. Three attention tests, a fresh four-response
48
- external HTTP control, and a separate four-response internal-SSD control pass.
49
- The internal copy contains the same 25 files and 15,849,971,577 bytes, each
50
- SHA-256 verified. Its responses and final active allocation match the external
51
- control. Copying and hashing may warm the OS file cache, so this comparison
52
- alone does not prove that the drive caused the failures.
53
-
54
- [MLX issue #3803](https://github.com/ml-explore/mlx/issues/3803) reports the
55
- same failure with external storage on a different machine and much larger
56
- models. A [maintainer recommends evaluating weights before GPU inference](https://github.com/ml-explore/mlx/issues/3803#issuecomment-4898914127)
57
- so disk-loading tasks finish first. Our loader already assigns safetensors
58
- loads to the CPU stream, but leaves them lazy. A research preload evaluates
59
- each requested canonical weight once during construction. Two balanced
60
- external-drive pairs complete all sixteen responses exactly, with identical
61
- final active allocation. Both eager arms take longer from process start to
62
- first complete response; moving work before readiness is not a startup-speed
63
- win. Both ordinary arms also pass, so reliability remains unproven. This
64
- loading change is not integrated, and further external-drive tuning is
65
- deferred under the active-storage policy above. Evidence under `reports/qwen38-rd/`:
66
- `fill-append-http-final-partial-review.json`, `rtn4-storage-control-manifest.json`,
67
- `fill-append-storage-control-review.json` and `weights-loading-http.json`.
68
-
69
- ## The Python oracle
70
-
71
- Logit parity with mlx-lm is the correctness oracle; mixed-precision KV and the
72
- vision sidecar verify against mlx-optiq. The current working tree requires
73
- MLX and MLX-Metal 0.32.2. On the M4 Pro, the default reference is
74
- `/Users/joshrossi/Code/mlx-lm/.venv-mlx-0.32.2-macos14`; invoke its
75
- `bin/python` for reference scripts. MLX-LM remains 0.31.3. The shared resolver
76
- checks installed MLX/Metal versions and rejects an incompatible explicit
77
- `MLX_BUN_ORACLE_VENV` instead of silently selecting another environment.
78
-
79
- The earlier reference at `/Users/joshrossi/Code/mlx-lm/.venv` remains an
80
- old-runtime control. Its historical pins were verified
81
- from the installed `dist-info` directories in
82
- `.venv/lib/python3.14/site-packages/`: mlx 0.31.2 (with mlx-metal 0.31.2),
83
- mlx-lm 0.31.3, mlx-optiq 0.2.15, pillow 12.2.0. PLAN.md records that optiq was
84
- bumped from 0.2.4 to 0.2.15 on 2026-07-06 and the mixed-KV goldens stayed
85
- byte-identical across the bump. The venv directory holds no project source —
86
- just the venv and `serve.sh`.
87
-
88
- The Qwen MTP compatibility test accepts explicit local artifact paths through
89
- `MLX_BUN_TEST_MTP_TARGET` and `MLX_BUN_TEST_MTP_DRAFT`, alongside
90
- `MLX_BUN_TEST_QWEN38_MTP=1`. It compares speculative and ordinary greedy
91
- generation on that same target and prints both paths. This does not substitute
92
- one quant for another in the pinned logit-oracle tests.
93
-
94
- **M4 Pro installation checked 2026-09-04:** the same venv path on
95
- `Joshs-MBP-2025.local` currently uses `lib/python3.13/site-packages`, with
96
- mlx/metal 0.31.2, mlx-lm 0.31.3 and mlx-optiq **0.2.7** from installed
97
- dist-info metadata. The older python3.14/OptiQ 0.2.15 record above is not the
98
- installed stack on this Mac. Record actual interpreter/package/native-library
99
- versions for every comparison; preserve this oracle as the 0.31.2 control.
100
- Qwen artifacts are also present under
101
- `/Volumes/MLX-Models/models/{Qwen,mjriii}/`; header-only inventories under
102
- `reports/qwen38-rd/` are machine-local and do not load the GPU.
103
-
104
- **Authorized M4 Pro runtime update, staged 2026-09-07:** MLX 0.32.2 with
105
- MLX-C `c74db5307cc8ce122f48d97ef951b30578674e7f` is built under
106
- `reports/qwen38-rd/mlx-upgrade-0.32.2/install/lib/`. Explicit
107
- `MLX_BUN_LIBMLXC=<that-directory>/libmlxc.dylib` selects it per process.
108
- The original Homebrew MLX 0.31.2 and MLX-C 0.6.0 revision 2 remain installed.
109
- The staged core uses the official macOS 26 arm64 MLX-Metal wheel, with verified
110
- archive hashes and relocatable library dependencies. This local artifact does
111
- not change the published native pack or its minimum supported macOS version.
112
- The source-build attempt failed because the offline Metal toolchain is absent;
113
- building the C wrapper against the official native libraries succeeded.
114
-
115
- The matching reference is `/Users/joshrossi/Code/mlx-lm/.venv-mlx-0.32.2`,
116
- selected through `MLX_BUN_ORACLE_VENV`. Its Python remains 3.13.5; MLX and
117
- MLX-Metal change to 0.32.2 while all other 62 package pins match the old venv,
118
- including MLX-LM 0.31.3 and OptiQ 0.2.7. Installation and dependency checks pass.
119
- Keep runtime and reference overrides paired. The macOS 26 build remains an
120
- explicit comparison build. The working tree now selects the macOS 14 package
121
- candidate described below. Build manifests, package freezes and gate results
122
- live under the upgrade report directory.
123
-
124
- The package candidate also has an official macOS 14 build of MLX-Metal 0.32.2,
125
- with MLX-C compiled for 14.0 under `install-macos14/lib/`. Its matching Python
126
- reference is `/Users/joshrossi/Code/mlx-lm/.venv-mlx-0.32.2-macos14`, with the
127
- same 64 package versions as the macOS 26 reference and a passing dependency
128
- check. Both builds pass the twelve-cell RTN4 same-version logit/state oracle
129
- comparison. The macOS 14 candidate additionally passes the actual 4K prompt
130
- and 8K extension, with complete logits and live cache state checked against
131
- its matching reference. After the Trellis arithmetic port, the model-free
132
- suite passes 1,882 tests with ten skips on the new core and 1,881 tests with
133
- eleven skips on the old core. The local native-pack
134
- candidate under `native-pack-candidate/` extracts into `native-pack-extracted/`;
135
- all five Mach-O files target 14.0, have valid ad-hoc signatures and load their
136
- non-system dependencies from siblings. These checks ran on macOS 27, not an
137
- actual macOS 14 host. This build is published as native pack 0.4.0 and the
138
- verified local cache is
139
- `/Users/joshrossi/Library/Caches/mlx-bun/native-v0.4.0-arm64`. Publication
140
- details are in distribution.md. The consolidated source passes 52 complete Qwen
141
- forward/state/continuation cases and six Trellis generations, with fixed
142
- source/runtime/reference hashes and clean worker exits. The consolidated
143
- model-free suite passes 1,875 tests with ten skips; all typechecks pass.
144
- Integrated inverse-KV serving response gates also pass. The broader
145
- same-version reference gate passes all eighteen MiniCPM5, Llama 1B and Gemma
146
- e4b cases after matching MLX-LM's compiled MiniCPM5 prefill activation.
147
- Run `MLX_BUN_TEST_RUNTIME_ORACLE=1 bun test tests/parity/runtime-oracle.test.ts`
148
- to repeat these logit, live-cache and continuation comparisons against the
149
- matching reference. It skips unavailable artifacts, runs the Bun and Python
150
- children sequentially and does not rewrite goldens. Combined/pressure
151
- acceptance remains.
152
- The frozen old source lives outside Bun's
153
- test discovery at
154
- `/Users/joshrossi/.cache/mlx-bun/runtime-controls/mlx-0.31.2-before-0.32.2/`.
155
- Preserve its `snapshot.json` and source for old-runtime comparisons when
156
- simplifying production bindings. The build directories are under the upgrade
157
- report directory, whose `control-location.json` records the verified move.
158
- The accepted new-core source before binding consolidation is also frozen at
159
- `/Users/joshrossi/.cache/mlx-bun/runtime-controls/mlx-0.32.2-before-consolidation/`.
160
- Its 932 files and the six locally installed native files were hash-verified;
161
- `consolidation-preparation.json` records the copy and local installation.
162
-
163
- The small DeltaNet fixture also depends on the oracle/runtime. On the M4 Pro
164
- with the pins above, both Bun and Python differ from the June fixture at one
165
- prefill output; their gate values, outputs and complete recurrent states agree
166
- exactly. The fixture was explicitly replayed on 2026-09-05 with unchanged
167
- inputs. It now records package/device/source provenance and exact state hashes.
168
- No numerical tolerance changed. `scripts/oracle/gen-qwen-delta-golden.py
169
- --replay tests/fixtures/qwen-delta-golden.json --output <review-file>` reproduces
170
- the comparison under the pinned Python. Without `--output`, the M4 Pro writes
171
- the reference fixture; other chips write a `goldens/<chip>/` override, which
172
- the test resolves before the reference. Earlier oracle comparisons and the
173
- single-value diff are in `reports/qwen38-rd/delta-*.json`.
174
-
175
- CI explicitly replays those unchanged inputs through MLX-LM 0.31.3 on
176
- MLX/MLX-Metal 0.32.2 before testing, saving a runner-chip override and its
177
- provenance as a workflow artifact. This avoids comparing the macOS 14 runner
178
- against an M4 Pro output fixture. The test still requires exact output and
179
- state hashes; Python runs only the external reference. Trellis variant
180
- matrix tests allow 30 seconds for first-use kernel compilation on CI.
181
-
182
- The M1 Max override was replayed on 2026-09-08 with the same inputs using
183
- `/Users/joshrossi/Code/mlx-lm/.venv-mlx-0.32.2-macos14` (MLX/MLX-Metal
184
- 0.32.2, MLX-LM 0.31.3). Bun matches its outputs and recurrent-state hashes
185
- exactly. The review file is
186
- `reports/qwen38-closeout/qwen-delta-m1-review.json`.
187
-
188
- Qwen3-Embedding tests also resolve `goldenPath("qwen3-embed")`, including
189
- machine overrides, and skip when their required binary blobs are absent.
190
- Regenerate with the matching Python and
191
- `scripts/oracle/gen-qwen3-embed-golden.py <artifact> --replay goldens/qwen3-embed/meta.json`;
192
- `--output-dir` selects a review directory. Replay preserves the text and token
193
- IDs and checks the tokenizer against them. Metadata records the device,
194
- runtime, artifact config, original metadata and output hashes. The M1 Max
195
- replay matches hidden states and pooled embeddings exactly. Cosine uses both
196
- vector norms: bf16 normalization does not guarantee a unit norm when the
197
- result is subsequently read as float32.
198
-
199
- The same M1 validation found June MiniCPM logit blobs without runtime
200
- provenance. Explicit `bun scripts/regen.ts minicpm5` with the matching venv
201
- preserves the artifact, prompt IDs and greedy trajectory; the regenerated
202
- logits match Bun exactly. The generator now records runtime/device/config
203
- provenance and all blob hashes. The old files and reviewed differences remain
204
- under `reports/qwen38-closeout/minicpm5-golden-before/` and
205
- `minicpm5-golden-review.json`.
206
-
207
- The Gemma bf16 and mixed-KV M1 replays also pass with unchanged prompt IDs
208
- on MLX 0.32.2. This current M1 venv contains **mlx-optiq 0.2.7** by installed
209
- distribution metadata, matching the documented M4 installation; it is not
210
- the historical 0.2.15 environment. OptiQ's module `__version__` incorrectly
211
- reports 0.2.5 there, so regeneration records distribution metadata. Old
212
- fixtures remain under `reports/qwen38-closeout/{parity,mixed-kv}-golden-before/`.
213
- These are current-stack parity checks, not a runtime-only A/B against the
214
- older mixed-KV fixture's 0.31.2/0.2.15 combination.
215
-
216
- Readable oracle source, in that `site-packages/`: `mlx_lm/models/gemma3.py`
217
- and `mlx_lm/server.py` for the port targets; `mlx_lm/models/cache.py` for the
218
- cache classes; `mlx_lm/tokenizer_utils.py` for prompt rendering;
219
- `optiq/runtime/fused_quant_sdpa.py` and `optiq/runtime/streaming_kv_quant.py`
220
- for quantized-KV attention; `optiq/vlm/` for the vision sidecar wiring;
221
- `optiq/auth.py` for the server's API-key rule.
222
-
223
- The reference server is `/Users/joshrossi/Code/mlx-lm/serve.sh`. It runs
224
- `optiq serve` on `mlx-community/Qwen3.6-27B-OptiQ-4bit` with `--mtp`, the
225
- snapshot's `kv_config.json`, `--max-tokens 32768`, and
226
- `--prompt-cache-bytes` = 5 GiB, inside a restart loop (mlx-lm still aborts the
227
- process on an uncatchable Metal OOM, ml-explore/mlx-lm#854). It first raises
228
- `iogpu.wired_limit_mb` to 28672 via `sudo sysctl` (resets on reboot). optiq's
229
- default port is 8080 (`optiq/cli.py`). Never start it, or any long-running
230
- server or multi-GB download, from an agent session — Josh runs servers
231
- himself; testing against an already-running server with curl is fine.
232
-
233
- Oracle weights for the Gemma parity work: `gemma-4-12B-it-OptiQ-4bit` at
234
- `~/.cache/huggingface/hub/models--mlx-community--gemma-4-12B-it-OptiQ-4bit/snapshots/5b1101065d2094c8f12aa87fee80e0afa5b292b7/`
235
- — two safetensors shards, `model.safetensors.index.json`, `kv_config.json`,
236
- `optiq_metadata.json`, `optiq_vision.safetensors`, `chat_template.jinja`,
237
- `config.json`, `generation_config.json` (listing verified on disk; PLAN.md
238
- records 8.3 GB). Measured baselines for it are in PLAN.md's "Reference
239
- environment" section and `benchmarks.md`; compare direct-vs-direct only — the
240
- early 14.1 tok/s figure was server-inflated (PLAN.md, Phase 3 finding).
241
-
242
- ## Oracle-side hazards
243
-
244
- **Xet stalls.** Hugging Face's Xet transfer path stalls on this network. Set
245
- `HF_HUB_DISABLE_XET=1` before any Python-side `hf download`; our own
246
- downloader speaks plain HTTPS and never touches Xet (`src/download.ts`
247
- header comment; `src/memory/model.ts` prints the `HF_HUB_DISABLE_XET=1` form
248
- in its fetch hint; `scripts/oracle/export-datasets.py`,
249
- `scripts/turboquant/farm-setup.sh`, and `scripts/memory/eval-northstar.ts`
250
- all set it). HF auth is configured (`hf auth login`); `src/download.ts`
251
- `hfToken()` reads `HF_TOKEN`, else `~/.cache/huggingface/token`.
252
-
253
- **optiq wants paths, not repo ids.** optiq tooling treats `--model` as a
254
- filesystem path in places, so pass the local snapshot directory (the path
255
- above), not `mlx-community/...` (PLAN.md "Reference environment"; serve.sh
256
- passes the snapshot path for `--kv-config`).
257
-
258
- **The vision sidecar.** `optiq_vision.safetensors` (bf16, ~105 MB per PLAN
259
- and CLAUDE history) auto-enables in `optiq serve` when present beside the
260
- weights and needs pillow in Python land (installed in the venv). Our registry
261
- records the sidecar's size and notes that the shipped file actually carries
262
- `audio_tower.*` tensors too (`src/registry.ts`, `optiq_vision` comments).
263
-
264
- **mlx-lm's prompt cache is byte-capped.** In the pinned mlx-lm 0.31.3,
265
- `LRUPromptCache` (`mlx_lm/models/cache.py`) takes `max_size` (default 10) AND
266
- `max_bytes`, evicting through a typed `CacheOrder` LRU; `server.py` exposes
267
- `--prompt-cache-bytes`. The older count-capped cache was the OOM footgun that
268
- `serve.sh`'s 5 GiB cap works around. Ours is byte-capped too: `--prompt-cache`
269
- (GB, default 8) is a byte-capped LRU (`server-config.md`).
270
-
271
- **TokenizerWrapper injects `enable_thinking=True`.** mlx-lm's
272
- `apply_chat_template` sets `kwargs["enable_thinking"] = self.has_thinking`
273
- whenever the caller did not pass it (`mlx_lm/tokenizer_utils.py`, around
274
- line 336). Any cross-stack parity or bench prompt must pin `enable_thinking`
275
- explicitly or the rendered prompts drift — `scripts/bench-serve.ts` pins it
276
- on every arm via `chat_template_kwargs`.
277
-
278
- **pi client config.** `~/.pi/agent/models.json` currently defines an
279
- `mlx-bun` provider at `http://localhost:8080/v1` with
280
- `apiKey: "sk-mlx-bun-local"` (mlx-bun does not validate the key). optiq
281
- servers DO validate: the Bearer token must start with `sk-optiq-`
282
- (`optiq/auth.py`, `_REQUIRED_PREFIX`), so a pi provider pointed at
283
- `serve.sh` needs such a key.
284
-
285
- ## Bun and FFI facts
286
-
287
- **Development and CI: Bun 1.4.2.** Build the committed frontend bundle with
288
- that version so its byte-for-byte freshness check uses the same compiler.
289
- Performance comparisons record the runtime and use the same version in both
290
- arms; historical results retain their original version.
291
-
292
- Non-login SSH on the M4 Pro can omit `/Users/joshrossi/.bun/bin` from `PATH`.
293
- Put that directory on the remote command's PATH when running the test suite:
294
- launching the parent Bun by absolute path alone does not let subprocess tests
295
- find `bun`. The quantized-row validation's initial seven command-entry/job
296
- failures disappear with that invocation corrected; no product code change was
297
- needed for those failures.
298
-
299
- **Runtime minimum: Bun ≥ 1.4.0.** `package.json` `engines.bun` is `>=1.4.0`. `Bun.Image`
300
- (native OS codecs via ImageIO, EXIF auto-orient, off-thread) is the vision
301
- decode path (`src/vision/preprocess.ts`); `Bun.Image.resize` is deliberately
302
- not used. The FFI ABI fix below is the other reason for the pin.
303
-
304
- **bun:ffi stack-argument ABI (fixed in 1.4).** Through Bun 1.3.14, `bun:ffi`
305
- wrote one 8-byte stack slot per argument, but Apple's arm64 ABI packs stack
306
- args at natural size, so a binding whose 9th+ int-class args put an `i32`
307
- before more args handed the callee shifted garbage (mlx_conv2d's segfault at
308
- 0x1: the bogus value landed in the stream arg). Filed as oven-sh/bun#33672;
309
- repro in `lab/repro/bun-ffi-stack-args/` (`repro.c` + `repro.ts`,
310
- `ISSUE.md`). Bun 1.4.0 returns the expected values, so bindings now use
311
- their natural mlx-c signatures — `ops.conv2d` in `src/mlx/ops.ts` passes all
312
- eleven args plainly and the packed-u64 workaround is gone. `ISSUE.md` keeps
313
- the original report as the regression record.
314
-
315
- **bun:ffi symbol `.ptr` is fixed in 1.4.** Direct function addresses match
316
- `dlsym` on both 1.4.0 and the isolated 1.4.2 runtime. `src/mlx/array.ts` now
317
- uses the numeric `free.ptr`, with a validity guard and a process-lifetime
318
- library handle. Native destructor ownership remains unchanged.
319
-
320
- **FFI typed-array readback still needs `read.*`.** The standalone
321
- `lab/repro/bun-ffi-f64/` hot-loop repro still produces stale indexed reads on
322
- 1.4.0 and 1.4.2, despite the upstream issue being closed. Keep the native
323
- out-param read helpers. The stack-argument repro passes on both versions.
324
- Raw runtime binaries, hashes and outcomes are recorded in
325
- `reports/qwen38-rd/bun-runtime-audit/`; the installed runtime and pinned Python
326
- oracle were not upgraded. Bun's [1.4 release notes](https://bun.com/blog/bun-v1.4)
327
- describe its new FFI implementation, while [1.4.2](https://bun.com/blog/bun-v1.4.2)
328
- fixes the intervening AsyncLocalStorage regression. Release claims do not
329
- replace these local regression checks.
330
-
331
- **`Bun.mmap` SIGTRAPs above 4 GB.** JSC ArrayBuffers cap at 2^32 bytes, so
332
- `Bun.mmap` panics on weight shards larger than that (observed on Bun 1.3.3,
333
- still true at 1.3.14). `src/mmap.ts` binds libc `mmap`/`munmap`/`madvise`
334
- from `/usr/lib/libSystem.B.dylib` and hands mlx raw base+offset pointers;
335
- only small ranges (headers) are ever viewed from JS.
336
-
337
- **Never give mlx a JS-callback destructor.** mlx releases the last
338
- `array::Data` reference from the Metal completion thread (`gpu::eval`
339
- retains buffers until the command buffer completes, past `dispose()`). A
340
- `JSCallback` dtor on that thread deadlocks when the JS thread is inside a
341
- blocking FFI eval and SIGTRAPs mid-GC (the 2026-07-06 restart-restore hang).
342
- `src/mlx/array.ts` therefore gives every zero-copy array (`fromPointer` and
343
- `fromView`) the native no-op dtor — libc `free` with payload 0 — and makes
344
- host-buffer lifetime the caller's contract: weight mmaps live for the
345
- process, restored KV is copied at load (`src/kv-store.ts` `loadKvCache`,
346
- since 2026-07-07), and `unpinHostBuffer` runs only on the JS thread.
347
-
348
- ## Metal and mlx-c facts
349
-
350
- **`mlx_copy` shares storage.** In pinned MLX 0.31.2, `Copy::eval` calls
351
- `copy_shared_buffer`. Neither `ops.copyOf` nor `contiguous` guarantees a
352
- small independent allocation for a contiguous view. Explicit disposal drops
353
- handles but a surviving view can retain its entire source allocation.
354
- `src/mlx/materialize.ts` uses the stock dynamic-slice kernel, which allocates
355
- the output's logical size and supports gradients. The Qwen convolution state
356
- uses it to release large prefill buffers. Byte, pointer, retained-memory,
357
- compiled execution and gradient gates live in `tests/unit/materialize.test.ts`;
358
- the direct storage probe is `reports/qwen38-rd/copy-alias-probe.json`.
359
-
360
- **Non-page-aligned host pointers read garbage on the GPU.** Metal cannot
361
- no-copy-wrap a host pointer that is not page-aligned: GPU ops silently read
362
- garbage while CPU-stream ops are fine (PLAN.md Phase 1 finding, restated in
363
- the `src/weights.ts` header). Safetensors tensor offsets are arbitrary, so
364
- weights load through mlx's own `mlx_load_safetensors` on the CPU stream
365
- (`src/weights.ts`, `src/lora.ts`; Load has no GPU kernel) into mlx-owned,
366
- page-aligned buffers. Everything we DO wrap ourselves is page-aligned by
367
- construction: the KV store file layout (`src/kv-store.ts`) and the
368
- expert-offload file (`src/expert-offload.ts`, `src/expert-offload-build.ts`).
369
-
370
- **Read the full mlx-c signature before binding.** A missed trailing optional
371
- parameter shifts the stream argument and produces "There is no Stream(...)"
372
- errors at eval time. `src/mlx/ffi.ts` is the single binding table and cites
373
- the header each group comes from (`io.h`, `map.h`, `transforms.h`); the
374
- `mlx_load_safetensors` row shows the shape — `(out, meta_out, path, stream)`.
375
-
376
- **libmlxc resolution order.** `MLX_BUN_LIBMLXC` env → beside the executable
377
- (sidecar layout, `docs/reference/distribution.md`) → `~/Library/Caches/mlx-bun/native-v<ver>-<arch>/`
378
- (downloaded on first run, sha256-verified) → `/opt/homebrew/lib` →
379
- `/usr/local/lib`. Dev trees and embedders never download anything. The order
380
- is defined twice and must stay in sync: `resolveLibmlxc()` in
381
- `src/mlx/ffi.ts` and `nativeRuntimeDir()` in `src/native-pack.ts`. Publishing
382
- a new native pack means pasting the tarball's sha256/size into
383
- `src/native-pack.ts` before tagging (comment block "RELEASE-TIME BAKE").
384
-
385
- ## Repo hygiene that follows from the above
386
-
387
- `scripts/` holds production tooling only (bench-*, regen-*, parity-*, gen-*,
388
- build/release, eval/serve) plus `scripts/{oracle,memory,turboquant}/` for
389
- venv-side oracles, the Dreaming suite, and live TurboQuant research; research
390
- one-offs are deleted once their finding is written into a doc. `lab/repro/`
391
- holds self-contained reproductions for upstream bug reports (the two Bun
392
- issues above, plus `optiq-mixed-kv-inert` and `vllm-metal-turboquant`); they
393
- are not part of the build. Committed absolute paths (the venv, the weights
394
- snapshot, `serve.sh`) are machine-specific on purpose — do not "correct" them.
395
-
396
- The quantized-KV golden producer (`bun scripts/regen.ts kvq`) passes an absolute output directory to Python, since the child runs from `scripts/`. This preserves the selected machine directory and existing prompt IDs. Missing M4 blobs were regenerated from the pinned oracle into the isolated `delayed-affine-m4-oracle` override; numerical expectations were not produced by the inference implementation. Evidence: `reports/qwen38-closeout/composition-baseline/oracle-generator-path/`.
397
-
398
- The M1 rotating-KV reference still identified MLX 0.31.2 and disagreed with both unchanged control and candidate on the KV8 greedy prefix. Regeneration with pinned MLX 0.32.2 retains the prompt IDs and passes exact logits plus both continuation checks. The matching M1 override and M4 reference caches are refreshed; previous manifests/blobs and provenance are retained with the generator-path evidence.
@@ -1,39 +0,0 @@
1
- # mlx-bun serving
2
-
3
- mlx-bun serving runs local model completions and reports how each request uses the inference runtime.
4
-
5
- ## Language
6
-
7
- **Completion execution**:
8
- A single model completion attempt, including its generated output, resource lifetime, usage accounting, and observed scheduling placement.
9
- _Avoid_: Generation request, serve transaction
10
-
11
- **Execution composition**:
12
- The exact combination of model runtime, numeric scheme, acceleration methods, and request features used for a workload. Explicit choices and resolved defaults are authoritative.
13
- _Avoid_: Configuration bundle, inferred mode
14
-
15
- **Model profile**:
16
- A declaration that identifies an external model artifact, the engine capabilities required to run it, and the measured execution composition recommended for a device or workload. The profile does not bundle or own the model weights.
17
- It selects model construction; request methods such as MTP, KV schemes, adapters, grammar, and sampling remain independent explicit or default-resolved choices.
18
- _Avoid_: Generic model preset
19
-
20
- **Fidelity contract**:
21
- The oracle and verification claim attached to an execution composition, such as bit-exact parity with an external implementation or measured evidence when no matching oracle exists.
22
- L1 means bit-exact mlx-lm parity, L2 means bit-exact mlx-optiq parity, and L3 means measured evidence without a matching oracle.
23
- _Avoid_: Execution mode, optimization tier
24
-
25
- **Artifact fingerprint**:
26
- An immutable external revision identity used to bind evidence and a model profile to exact weights and metadata. A mutable alias or local directory name is not an artifact fingerprint.
27
- _Avoid_: Model path, model family
28
-
29
- **Scheduling mechanism**:
30
- The executor that receives an already-resolved execution composition. `serial` is the preserved strict or dedicated executor. `continuous` admits the request to the scheduler, which chooses a B=1 fast path or B=N step from its active row count. Placement never changes the composition.
31
- _Avoid_: Inferred lane, inferred mode
32
-
33
- **Concurrency cap**:
34
- The maximum rows admitted to the continuous scheduler. `--batch` declares this cap; `1` pins the serial mechanism. It does not select MTP, a KV scheme, TurboQuant, grammar, adapters, or sampling.
35
- _Avoid_: Batch method, quality mode
36
-
37
- **B=1 fast path**:
38
- The continuous scheduler's one-active-row specialization. It adopts serial-class caches and uses the parity- and latency-gated single-row graph. It is not the strict serial mechanism selected by `--batch 1` or required by a dedicated composition.
39
- _Avoid_: Serial fallback, batch prediction