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,260 +0,0 @@
1
- # Memory — the personal wiki
2
-
3
- `mlx-bun memory` is a local, durable memory for your assistant: a wiki of
4
- Markdown articles at `~/.mlx-bun/wiki/` that the built-in pi agent reads to
5
- remember your projects, people, decisions, and history across sessions. It is
6
- yours — git-tracked, editable in any tool (Obsidian opens it as a vault), and it
7
- never leaves the machine.
8
-
9
- The one rule the whole feature is built around:
10
-
11
- > Chat-time agents **read** memory. `mlx-bun memory synthesize` is the only
12
- > thing that **writes** it.
13
-
14
- Articles are durable priors; conversations are evidence; synthesis is the
15
- deliberate, auditable step that turns evidence into updated articles. Normal
16
- chat never mutates an article. Nightly synthesis is called **the Dreaming**;
17
- its engineering design lives in
18
- [dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md) — this
19
- page is the user-facing reference.
20
-
21
- ## Quick start
22
-
23
- ```bash
24
- mlx-bun memory init # create the wiki; offers import + nightly job
25
- mlx-bun pi # the assistant now reads your memory automatically
26
- mlx-bun memory status # where it is, how many articles, schedule state
27
- mlx-bun memory search <query> # find something from the terminal
28
- mlx-bun memory open # browse it in Obsidian
29
- ```
30
-
31
- `init` is idempotent and safe to re-run. It never overwrites files you have
32
- edited: the README and `Meta/` pages are written only when missing. Once a
33
- wiki exists, every `mlx-bun pi` session and the web chat behind `mlx-bun serve`
34
- pick it up with no further configuration; if it does not exist, no memory
35
- tools or prompt hints are exposed at all.
36
-
37
- `mlx-bun setup` is a true alias for `mlx-bun memory` (same subcommands).
38
-
39
- ## What the wiki contains
40
-
41
- Everything lives under one portable folder (copy it and your memory moves
42
- with you):
43
-
44
- | Path | What it is |
45
- | --- | --- |
46
- | `~/.mlx-bun/wiki/` | The vault root. Override with `MLX_BUN_WIKI=/path/to/wiki`. |
47
- | `articles/*.md` | Your memory articles — one topic per file, `Topic_Name.md`. The only thing synthesis writes. |
48
- | `Reference/*.md` | Read-only symlinks to mlx-bun's own docs (README, server API/config, library API, embedding, distribution, training, ORPO quickstart, product roadmap), so the assistant can answer mlx-bun questions on day one. Synthesis never writes here. |
49
- | `Meta/*.md` | Operational pages the pipeline follows: editorial guidelines, article conventions, infobox schemas, category definitions, entities policy, summary style, bucketing/buckets, chunking, topics to ignore. Edit them to steer synthesis. |
50
- | `Talk/` | Per-article discussion and conflict notes. |
51
- | `README.md`, `.gitignore` | Orientation page; keeps `.DS_Store` and Obsidian workspace state out of git. |
52
-
53
- The vault is plain Markdown and a git repository (`init` runs `git init` and
54
- makes the initial commit). Every synthesis run commits its changes, so any
55
- article change is reviewable and revertible with ordinary git. You can edit
56
- any file directly; the next run respects your edits.
57
-
58
- Two things live **outside** the vault because they are derived or operational:
59
-
60
- - `~/.cache/mlx-bun/memory.sqlite` — the synthesis store (ingested
61
- conversations, chunks, buckets, watermarks, and a rebuildable index of the
62
- articles). The vault is truth; this DB is a cache plus pipeline ledger.
63
- - `~/.mlx-bun/logs/memory-synthesis.{out,err}.log` — output of the nightly job.
64
-
65
- Article names are **stems**: the filename without `.md`, underscores for
66
- spaces (`Archie_Project`). Every command and tool below takes a stem.
67
-
68
- ## CLI
69
-
70
- All subcommands are `mlx-bun memory <sub>`; with no subcommand, `status` runs.
71
- An unknown subcommand prints help and exits non-zero (so scripts and launchd
72
- jobs can detect typos).
73
-
74
- ### Set up and inspect
75
-
76
- ```bash
77
- mlx-bun memory init # create the wiki (alias: setup)
78
- mlx-bun memory status # path, article + reference counts, git, nightly state, recent articles
79
- mlx-bun memory open [article] # open the wiki or one article (alias: browse)
80
- ```
81
-
82
- `init` walks through setup in a terminal: creates the vault, then offers to
83
- seed it by importing `articles/*.md` from an existing wiki you point it at
84
- (existing files are never overwritten), then offers to install the nightly
85
- synthesis job. Both offers are TTY-only and default to no import / no
86
- schedule, so a non-interactive `init` just creates the vault.
87
-
88
- `open` prefers Obsidian (`open -a Obsidian` for the vault, the `obsidian://`
89
- URL handler for a single article) and falls back to Finder / the default
90
- Markdown app.
91
-
92
- ### Read from the terminal
93
-
94
- ```bash
95
- mlx-bun memory list # article stems + Reference/* docs
96
- mlx-bun memory search <query> # ranked article matches + sample lines
97
- mlx-bun memory toc <article> # headings with their #anchors
98
- mlx-bun memory section <article> <anchor> # one section's body
99
- mlx-bun memory links <article> # resolved outbound + inbound [[wikilinks]]
100
- mlx-bun memory read <article> # the full article
101
- ```
102
-
103
- These are the same filesystem helpers the agent tools use. `search` is a
104
- substring search over articles and reference docs, not a semantic one; results
105
- prefixed `Reference/` are mlx-bun docs, not your memory.
106
-
107
- ### Synthesize
108
-
109
- ```bash
110
- mlx-bun memory synthesize [--dry-run] # run the full pipeline now (aliases: pipeline, all)
111
- ```
112
-
113
- **This writes to your vault** (only `articles/`, committed to git). It runs
114
- the full local DAG — segment → extract → route → create/patch → link — then an
115
- editorial wikify sweep over every article. `--dry-run` is the safe mode: it
116
- lists the planned stages, makes no model calls, and writes nothing. The
117
- command also accepts `--since` and `--model`, but the current pipeline does
118
- not apply them — a run always covers the store's whole pending corpus with the
119
- default model.
120
-
121
- Synthesis runs on Gemma-4-e4b (the OptiQ 4-bit release) loaded from the
122
- Hugging Face hub cache; if it is not downloaded the command stops with the
123
- exact `hf download` line to run. If a trained `memory-chunk` adapter is present
124
- at `~/.cache/mlx-bun/adapters/memory-chunk` the segment stage mounts it; every
125
- other stage runs the base model with its policy prompt. Set
126
- `MLX_BUN_MEMORY_BATCH=<n>` to batch model calls (default 1).
127
-
128
- Synthesis operates on conversations already loaded into the synthesis store.
129
- The pipeline's ingest step reports "corpus already in the store" — it does not
130
- scan your pi sessions on its own today, so a fresh store yields an empty run.
131
-
132
- ### Run one stage
133
-
134
- The DAG is decomposed into independent, resumable workers. Each pulls its
135
- eligible work from the store by state, walks oldest-conversation-first,
136
- persists, and exits — so you can run them separately, or as separate concurrent
137
- processes on different conversation slices (GPU and memory allowing):
138
-
139
- ```bash
140
- mlx-bun memory segment [--limit N] [--convs a,b] # conversations → topic chunks
141
- mlx-bun memory extract [--limit N] [--convs a,b] # chunks → entities
142
- mlx-bun memory route [--convs a,b] # entities → create / capture decisions
143
- mlx-bun memory synthesize-stage [--limit N] [--convs a,b] # create + patch articles (alias: stage-synthesize)
144
- mlx-bun memory link [--limit N] # deterministic cross-linking, no model
145
- ```
146
-
147
- `--limit` bounds the batch (segment, extract, synthesize-stage, link);
148
- `--convs` restricts a run to specific conversation ids. `link` inline-links
149
- first mentions of other articles and rebuilds each `## See also` from mentions
150
- and co-occurrence; it is idempotent and needs no model.
151
-
152
- ### Schedule the Dreaming
153
-
154
- ```bash
155
- mlx-bun memory schedule [--at HH:MM] # install the nightly job (default 03:00)
156
- mlx-bun memory unschedule # remove it
157
- ```
158
-
159
- `schedule` writes a launchd agent (`~/Library/LaunchAgents/com.mlx-bun.memory.plist`,
160
- label `com.mlx-bun.memory`) that runs `mlx-bun memory synthesize` at the
161
- given local time and loads it. launchd survives reboots and runs a job missed
162
- while the machine was asleep on next wake. `status` shows whether the job is
163
- installed and loaded; if `launchctl load` fails the plist is still written and
164
- the command tells you to load it by hand.
165
-
166
- ## The Dreaming — what nightly synthesis does
167
-
168
- From your side, the Dreaming is a nightly editor that reads what you talked
169
- about and keeps a wiki current. Each run:
170
-
171
- 1. **Segments** each new conversation into single-topic chunks (pointer ranges
172
- into the transcript, not copies).
173
- 2. **Extracts** the subjects each chunk is about — people, projects, tools,
174
- decisions — and resolves aliases so "the Lumix" and "Lumix S5" are one thing.
175
- 3. **Routes** every subject: enough substance gets its own article; thin
176
- subjects are captured so they stay searchable until they warrant one. There
177
- is no notability filter — if you talk about it, it surfaces.
178
- 4. **Creates or patches** articles: new subjects get an outline, per-section
179
- drafts, and an infobox; existing articles get one section folded in at a
180
- time, the rest left byte-identical. Corrections arrive as ordinary chunks,
181
- and chronological processing means your latest position wins.
182
- 5. **Cross-links** the vault (first mentions → `[[wikilinks]]`, co-occurrence →
183
- See also) and commits.
184
- 6. **Wikifies** — an editorial sweep over every article: tighten each section
185
- without losing any citation or specific detail, refresh the infobox.
186
-
187
- Deterministic gates sit between every model step: citation survival, footnote
188
- integrity, word floors, wikilink resolution, article-structure checks. A weak
189
- model output is rejected and the article is left untouched — a bad night is a
190
- no-op, never a corrupted vault. Every article carries `conv:` citations back to
191
- the conversation that supported it.
192
-
193
- Everything runs locally on the same base model you chat with; no embeddings,
194
- no cloud. Architecture, stage contracts, and the gate definitions are in
195
- [dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md).
196
-
197
- ## Agent tools (pi and web chat)
198
-
199
- When a vault exists, `mlx-bun pi` and the web chat register these read-only
200
- tools plus a `memory` skill that teaches the workflow: **FIND** the article,
201
- **READ** it small, follow the graph, use reference docs for mlx-bun questions,
202
- and search only as a last resort. The system prompt gets one soft hint that
203
- memory is on; memory is for user-specific continuity, not a first step for
204
- weather, public facts, or ordinary coding tasks.
205
-
206
- **FIND** (deterministic lookup, never a vector search):
207
- - `memory_resolve` — name or alias → the article (stem, title, kind, lead); offers near candidates on a miss.
208
- - `memory_category` — one of category / type / series → member articles.
209
-
210
- **READ** (TOC → one section, not a whole-article dump):
211
- - `memory_read` — TOC + lead by default; `force=true` for the full article (large articles still degrade to TOC + lead).
212
- - `memory_section` — one section by heading anchor; the default read granularity.
213
-
214
- **Follow the graph**:
215
- - `memory_links` — outbound `[[links]]` grouped by origin (infobox / series / see also / prose) plus inbound backlinks.
216
- - `memory_infobox` — an article's infobox as key:value facts to read. There is no infobox *query* tool; to find articles use `memory_resolve` or `memory_category`.
217
-
218
- **Reference docs** (mlx-bun's own docs, mirrored read-only under `Reference/`):
219
- - `reference_search`, `reference_read`, `reference_list`.
220
-
221
- **Utility**:
222
- - `memory_list` — your article stems (an overview/fallback, not a first move).
223
- - `memory_status` — vault path, setup state, article count, git state, schedule state.
224
-
225
- **Last resort**:
226
- - `memory_search` — substring search across articles; use only after the deterministic finders failed.
227
-
228
- All of these are read-only and auto-allowed; none can modify an article. If
229
- the vault is missing, the tools are not registered at all, and the skill and
230
- prompt hint are omitted.
231
-
232
- ## Web chat: Memory panel and REST routes
233
-
234
- The web chat's Memory panel talks to a loopback-only HTTP surface that wraps
235
- the same vault helpers: `GET /api/memory/status`, `/list`, `/search`,
236
- `/article`, `/links`, `/history`, `/diff`, and `POST /api/memory/init` (the
237
- first-run consent card; the same `setupVault` the CLI uses, minus the
238
- interactive import and schedule prompts). A `GET /v1/memory/synthesize`
239
- route streams a synthesis run as server-sent events (`?dry=1` for a dry run).
240
- Wire details — parameters, response shapes, the no-vault response — are owned
241
- by [server-api.md](server-api.md#get-apimemory--post-apimemoryinit). These
242
- routes never touch the agent-tool surface above.
243
-
244
- ## Consent and safety
245
-
246
- - Creating the vault is explicit (`memory init` or the web consent card);
247
- scheduling is explicit (`memory schedule` or the `init` prompt).
248
- - Chat-time tools are read-only. Article mutation by the agent during chat is
249
- out of bounds by construction.
250
- - Opening Obsidian or Finder is you browsing and editing your own files; it is
251
- not agent mutation.
252
- - Imports copy articles in; the source wiki is never modified.
253
- - Nothing — articles, conversations, synthesis — leaves the machine.
254
-
255
- ## Related
256
-
257
- - [cli.md](cli.md#memory--the-personal-wiki) — the `memory` command in the full CLI reference.
258
- - [server-api.md](server-api.md#get-apimemory--post-apimemoryinit) — `/api/memory/*` wire format.
259
- - [dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md) — the canonical pipeline design.
260
- - [docs/design/dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md), [docs/design/dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md) — synthesis internals and the local inference path.
@@ -1,334 +0,0 @@
1
- # Models: supported roster + management (get / scan / ls / gc)
2
-
3
- The one supported-model list, plus how mlx-bun downloads, indexes, lists,
4
- and reclaims models. The store is the standard Hugging Face hub cache —
5
- nothing proprietary; `hf` and mlx-lm read/write the same tree.
6
-
7
- ## Supported models
8
-
9
- The source of truth is code, not this table: `src/model/profile.ts`
10
- (which `model_type` loads via which graph), `src/model/support.ts` (the
11
- support tier `mlx-bun ls` prints), `src/model/universal/archs.ts` (the
12
- Tier-0 descriptor table), `src/spec/source.ts` + `src/server.ts` (draft
13
- sources), and the `instanceof` gates in `src/server.ts` for image / video /
14
- audio. If this table and the code disagree, the code wins and this table
15
- is the bug.
16
-
17
- Scope is deliberate: a few families held to explicit oracle contracts
18
- (L1 = bit-exact vs mlx-lm, L2 = bit-exact vs mlx-optiq, L3 = measured, no
19
- oracle), plus a declared Tier-0 generic surface. There is no alias table —
20
- the "query" column is a substring that `resolve()` matches against
21
- already-downloaded repos (it must match exactly one repo; see
22
- [Query resolution rules](#query-resolution-rules-per-verb)).
23
-
24
- | `serve` query | Validated artifact (HF repo) | Family · load path · tier | Modalities | Draft sources | KV schemes | Notes |
25
- | --- | --- | --- | --- | --- | --- | --- |
26
- | `e4b` | `mlx-community/gemma-4-e4b-it-OptiQ-4bit` | Gemma 4 (`gemma4*`) · dedicated `gemma4` graph with a **generated** specialization keyed on the config fingerprint · L1 | text · **image** (SigLIP tower in the bf16 `optiq_vision.safetensors` sidecar) · **audio** (Conformer tower in the same sidecar) | two-model · Gemma `-assistant` (L2) · locally-trained DSpark (`dspark.json`) · ngram | bf16 · uniform 4/8 · `config` (kv_config.json, batches) · turbo · `--paged-kv` | **Default model** (`DEFAULT_REPO_ID`, src/fit.ts). The only audio-capable artifact. ~7.0 GB on disk (benchmarks.md legend, 2026-06-15). Trains (LoRA / ORPO / SFT). |
27
- | `12B` | `mlx-community/gemma-4-12B-it-OptiQ-4bit` | Gemma 4 · generated specialization · L1 | text · **image** (encoder-free `gemma4_unified_vision` declared in config.json — no sidecar needed). No audio: the snapshot's sidecar is an audio **stub** (`embed_audio` only, no `audio_tower.*`) | two-model · `-assistant` · DSpark local · **DeepSpec released** (`deepseek-ai/dspark_gemma4_12b_block7`) · ngram | bf16 · uniform · `config` · turbo · `--paged-kv` | ~8.4 GB (2026-06-15). `largestRecommendedRepoId` pick for ≥ 24 GB RAM (src/fit.ts). Trains. |
28
- | `26B` | `mlx-community/gemma-4-26B-A4B-it-OptiQ-4bit` | Gemma 4 MoE · generated specialization · L1 | text · image **only if** the snapshot ships the SigLIP sidecar (registry `has_vision_sidecar`; the tower is `gemma4_vision`). No `audio_config` → no audio | two-model · `-assistant` · ngram | bf16 · uniform · `config` · turbo · `--paged-kv` | ~18 GB (2026-06-15). `largestRecommendedRepoId` pick for ≥ 48 GB RAM. |
29
- | any other `gemma4*` config (1B, e2b, 31B, …) | — | Gemma 4 · the `Gemma4Model` monolith (no generated specialization) · L1 by family | per the registry's vision/audio flags | same as the family | same as the family | Loads by `model_type`; **no artifact is pinned in tests/support/goldens for these**, so treat as family-supported, artifact-unvalidated. |
30
- | `MiniCPM5` | `mlx-community/MiniCPM5-1B-OptiQ-4bit` | MiniCPM5 · `model_type: llama` matched by exact shape (`isMiniCPM5Config`) → dedicated `minicpm5` graph · L1 / L2 | text | two-model · ngram | bf16 · uniform · `config` (batches — Phase 3.1) · turbo (quality curve measured 2026-07-06, benchmarks.md §3) | Sub-GB starter (benchmarks.md legend). Trains (segmented backward). Tool calling (XML). |
31
- | `Qwen3.5-4B` | `mlx-community/Qwen3.5-4B-OptiQ-4bit` | Qwen3.5 (`qwen3_5` / `qwen3_5_text`, dense hybrid gated-DeltaNet) · dedicated `qwen3.5` graph · L1 | text (image/video only when the artifact ships vision weights — see Qwen3.8) | two-model · ngram · `mtp` if a `qwen3_5_mtp` companion exists | bf16 (L1) · `config` (KV-ON parity passed 2026-06-15, PLAN 14e) | Thinking + tool calling. Batches on the SSM path (`MLX_BUN_BATCH_SSM=0` reverts). The MoE variant `qwen3_5_moe` is **not** supported. |
32
- | `Qwen3.8` | `mlx-community/Qwen3.8-27B-OptiQ-4bit` @ `b04599de95d7a9bfbd7f208d347c0f10d9432a42` | Qwen3.5 family · **exact artifact profile** `qwen3.8-27b-optiq-4bit` (safetensors + `qwen3.5` graph) · L1 | text · **image** · **video** (`image_url` / `video_url` parts; Qwen3-VL tower + mRoPE; video decodes via the AVFoundation sidecar `mlx-bun-frame-extract`, 2 fps, ≤ 768 frames). Video never combines with audio; no audio | **native MTP head** (`mlx-community/Qwen3.8-27B-MTP-bf16`, auto-detected `qwen3_5_mtp`; `--draft-kind mtp` with no `--draft-model` uses a bundled `mtp/` subfolder) · two-model · ngram | bf16 (L1) · `config` is **Lab** — policy copied from the same-topology Qwen3.6 artifact, no model-specific oracle (benchmarks.md, 2026-08-22) | `reasoning_effort` (xhigh/medium/low) + `preserve_thinking` + tool calling. `/v1/models` advertises vision. Shipped in v0.2.0. |
33
- | `Qwen3-Embedding` | `mlx-community/Qwen3-Embedding-4B-4bit-DWQ` | plain `qwen3` · dedicated `qwen3` graph · L1 | text | — | — | **Embeddings only**: `/v1/embeddings` + `mlx-bun embed`. Auto-picked by `embed` when no query is given; never the chat default. |
34
- | `Qwen3-30B` | `mlx-community/Qwen3-30B-A3B-Thinking-2507-4bit` | Qwen3-MoE (`qwen3_moe`) · dedicated `qwen3-moe` graph · L1 (opt-in slow parity test, `MLX_BUN_TEST_QWEN3_MOE=1`) | text | two-model · ngram | bf16 (the artifact ships no kv_config.json) | Sparse top-k SwitchGLU experts. |
35
- | `diffusiongemma` | `mlx-community/diffusiongemma-26B-A4B-it-OptiQ-4bit` | DiffusionGemma (`diffusion_gemma`) · dedicated graph + **denoising loop** (non-autoregressive) · L2 (optiq) | text · **image** (single image; its own inline-quantized SigLIP tower). No video / audio | — (no AR verify loop) | — (canvas model; the `--kv-quant` axis does not apply) | Serial lane always. Diffusion-native LoRA trains. |
36
- | `GLM-5.2-colibri` | `mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp` @ `3cc8db99b1b13fc79325d987ba3c1c430766b3b8` | GLM-5.2 (`glm_moe_dsa`) · **Colibri container loader** + dedicated `glm5.2` graph (streamed experts) · **exact artifact profile**, L3 | text | **checkpoint-native MTP** (`--mtp on`, the default; mutually exclusive with `--draft-model`) | checkpoint-native compressed **MLA/DSA** cache (its own scheme; SSD tier v3 persists it) | Fixed-context admission: `--context-length` (4096) and `--max-tokens` (128) are reserved by the header-only resource equation before weights open; `--memory-budget` defaults to min(25 GiB, RAM). `--mtp off` enables ordinary batching. Embeddings, vision/audio, adapters, and training are unsupported. See [below](#direct-container-artifacts-glm-5x). |
37
- | Tier-0 generic | validated manifest (`tests/support/universal-manifest.ts`): `Llama-3.2-1B-Instruct-4bit`, `Qwen2.5-0.5B-Instruct-4bit`, `Qwen3-0.6B-4bit`, `quantized-gemma-2b-it`, `gemma-2-2b-it-4bit`, `Phi-3.5-mini-instruct-4bit`, `GLM-4-9B-0414-4bit`, `granite-3.3-2b-instruct-4bit`, `starcoder2-3b-4bit`, `SmolLM3-3B-4bit` (all `mlx-community/`) and `ekryski/OLMo-2-0425-1B-Instruct-4bit` | 11 `model_type`s: `llama`, `smollm3`, `qwen2`, `qwen3`, `gemma`, `gemma2`, `phi3`, `olmo2`, `glm4`, `granite`, `starcoder2` (+ mlx-lm remaps `mistral`, `iquestcoder` → `llama`) · `universal-dense` graph · L1 | text | two-model · ngram | bf16; unreleased Llama full-attention uniform KV4/KV8 | `ls` labels these `supported (generic)`. Shared full-attention execution is qualified on Llama-3.2-3B at B1/B4, including speculative KV4/KV8 and generated RAM/SSD state; gemma2-family / sliding-window archs run serial. No compiled specialization. A `model_type` absent from the table refuses to load. |
38
-
39
- Rules that apply across rows (all enforced in `src/server.ts`):
40
-
41
- - **Draft sources.** Two-model and ngram work on any autoregressive target
42
- (two-model requires the same tokenizer family — probe-checked at startup).
43
- The KV-borrowing drafters (`-assistant`, DSpark, DeepSpec) require a
44
- Gemma 4 target; `qwen3_5_mtp` heads require a Qwen3.5-family target; GLM's
45
- MTP is its own row. Qwen MTP companions may store dense or affine-quantized
46
- projections; the loader uses each module's quantization metadata. Target
47
- verification is unchanged, while draft acceptance and speed depend on the
48
- companion. In the unreleased shared executor, qualified plain, uniform,
49
- per-layer affine and TurboQuant layouts compose with drafting through the
50
- target/provider interfaces. Positive affine conversion thresholds are also
51
- supported by library requests. The loaded model and provider determine
52
- which combinations can execute.
53
- - **Qwen3.5-family checkpoint generations.** Both ship the same graph and both
54
- load: the mlx-lm-converted naming (`language_model.model.*`,
55
- `language_model.lm_head`, `vision_tower.*`) and the transformers-5.8 export
56
- (`model.language_model.*`, top-level `lm_head`, `model.visual.*`, in-repo
57
- `mtp.*`, HF-layout `conv1d.weight` `[C,1,K]`, RMSNorm gains stored as γ−1).
58
- The load seam (`src/model/qwen3_5-checkpoint.ts`) replicates mlx-lm's
59
- `sanitize()` exactly: in-repo `mtp.*` and the vision tensors are dropped from
60
- the text graph, and the +1.0 γ shift fires **only** when the artifact carries
61
- `mtp.*` tensors **or** an unsanitized `conv1d.weight` — never on the naming
62
- alone, so an old artifact can never be shifted.
63
- - **KV schemes.** `--kv-quant 4|8` (uniform, L1) and `config` (per-layer
64
- `kv_config.json`, L2) apply to the autoregressive families that ship the
65
- file; `turbo` additionally requires a full-attention `head_dim` in
66
- {64, 128, 256, 512} (refused at startup otherwise). Qualified TurboQuant
67
- targets support shared ordinary and speculative execution; sliding layers
68
- remain bf16;
69
- `--paged-kv` is Gemma 4 only, bf16, serial. Flag detail:
70
- [server-config.md](server-config.md).
71
- - **Modalities.** Image requests reach a Gemma 4 model only when
72
- `has_vision_sidecar` or a `*_unified_vision` config is present; audio only
73
- when `audio_config` AND the sidecar's `audio_tower.*` tensors are both
74
- present; video only on a Qwen3.5-family model. A request carrying media the
75
- model cannot take is an explicit 400, never a silent text-only degrade.
76
- Wire formats: [server-api.md](server-api.md).
77
- - **Memory.** Disk sizes above are the dated figures from
78
- [benchmarks.md](benchmarks.md); for RAM, ask `mlx-bun fit <query> --ctx
79
- <n>` rather than a table (src/fit.ts is the calculator).
80
-
81
- ### How a new model gets here
82
-
83
- A `model_type` earns a row by landing a descriptor (Tier-0) or a dedicated
84
- graph (targeted) **plus a green parity manifest entry** against the oracle
85
- that already ships it — the process, cost per arch, and the graduation path
86
- from generic to targeted are in
87
- [docs/design/generic-model-support.md](../design/generic-model-support.md)
88
- (§3.1 descriptor table, §3.5 the parity gate, §3.6 graduation). Exact
89
- artifacts additionally get a declared profile (see
90
- [Declared model profiles](#declared-model-profiles)).
91
-
92
- ## The cache layout (and why duplicates happen)
93
-
94
- Default root: `~/.cache/huggingface/hub` (override with `HF_HUB_CACHE`,
95
- or `HF_HOME` — the root becomes `$HF_HOME/hub`). Per repo:
96
-
97
- ```
98
- models--<org>--<name>/
99
- blobs/<digest> # verified content, one file per blob
100
- snapshots/<commit>/<file> → ../../blobs/<digest> # symlink farm
101
- refs/<revision> # e.g. refs/main = the commit sha
102
- ```
103
-
104
- **Snapshot-per-commit semantics:** every revision you download gets its
105
- own `snapshots/<commit>` directory, and nothing ever deletes old ones.
106
- When upstream pushes a new commit and you `get` again, you gain a new
107
- snapshot; the previous one — and any blobs only it references, i.e. the
108
- old weights — stays on disk forever. That is why one repo can appear
109
- several times in a raw snapshot listing, and how tens of GB of dead
110
- blobs accumulate. `refs/main` always names the current (canonical)
111
- snapshot; the registry and every query verb resolve through it.
112
-
113
- ## get — download (resumable, verified)
114
-
115
- ```
116
- mlx-bun get <org/repo> [--revision main]
117
- mlx-bun get <substring> # no "/" = registry query, re-gets the match
118
- ```
119
-
120
- - Plain HTTPS resolve/CDN (no Xet), sequential files, `Range`-resume of
121
- partial blobs (`<blob>.incomplete`). Auth: `HF_TOKEN` env, then the
122
- token `hf auth login` writes. 401/403 answers get a "gated repo" hint.
123
- - Before the first payload request, mlx-bun totals the bytes still absent,
124
- credits complete shared blobs and valid `.incomplete` prefixes, and checks
125
- the target volume for that remainder plus a fixed 1 GiB safety reserve. An
126
- impossible acquisition fails immediately with required/available GiB and a
127
- rerun/resume instruction rather than filling the disk halfway through.
128
- - A substring argument (no `/`) resolves against already-downloaded
129
- repos — `mlx-bun get 12B` refreshes the 12B to upstream's latest. An
130
- unknown substring errors with a pointer to `mlx-bun ls <q>`.
131
- - Concurrent-writer safety: an `O_EXCL` lockfile (`<blob>.lock`, pid +
132
- timestamp) serializes two processes downloading the same blob (e.g. a
133
- foreground `get` racing the server's background auto-download). Locks
134
- from dead pids, or older than ~1 h, are stolen; a live lock fails fast
135
- with "another download … is in progress".
136
- - If the download created a new snapshot (upstream pushed), `get` says
137
- so and estimates what `mlx-bun gc` would reclaim.
138
-
139
- ### Verification story
140
-
141
- Every blob is checksummed **while streaming** (a resume re-hashes the
142
- existing prefix in chunks — no whole-file allocation):
143
-
144
- - **LFS files** (weights): sha256 must equal the API's current `lfs.sha256`
145
- field (the older `lfs.oid` spelling is also accepted) — which is also the
146
- blob's filename.
147
- - **Small files** (configs, tokenizer): git blob identity,
148
- `sha1("blob <size>\0" + content)`, must equal the API's `blobId`.
149
-
150
- A mismatch deletes the partial (never resume corrupt bytes); a short
151
- read keeps the `.incomplete` for resume.
152
-
153
- ## Direct-container artifacts (GLM-5.x)
154
-
155
- Models that load through the Colibri container loader (`loader: "colibri"`
156
- in `src/model/profile.ts`) skip `Weights.open` entirely: a header-only
157
- resource equation runs before any resident tensor or expert slab opens, and
158
- an impossible plan fails without committing memory. One validated artifact
159
- today; a GLM-5.3+ artifact joins as a new row in the roster above plus a
160
- subsection here once it has a declared profile.
161
-
162
- ### GLM-5.2 on a 32 GB Mac
163
-
164
- The validated direct-container artifact is
165
- `mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp` at revision
166
- `3cc8db99b1b13fc79325d987ba3c1c430766b3b8`. It is approximately 384 GB
167
- decimal / 357 GiB on disk, so choose the Hugging Face cache volume before the
168
- download. Fast internal NVMe is strongly preferred; an external volume also
169
- needs to sustain the expert-streaming workload after acquisition.
170
-
171
- ```sh
172
- # Optional: choose a large fast volume before downloading.
173
- export HF_HUB_CACHE=/Volumes/FastSSD/huggingface/hub
174
-
175
- mlx-bun get mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp \
176
- --revision 3cc8db99b1b13fc79325d987ba3c1c430766b3b8
177
- mlx-bun scan
178
- mlx-bun serve GLM-5.2-colibri \
179
- --memory-budget 26.8435456 \
180
- --context-length 4096 \
181
- --max-tokens 128 \
182
- --mtp on
183
- ```
184
-
185
- `26.8435456` decimal GB is exactly 25 GiB. The validated plan reserves about
186
- 19.9 GiB for the process and leaves the rest of the 32 GiB machine to macOS.
187
- Startup runs the exact header-only resource equation before opening resident
188
- weights or expert slabs. The server reports the resulting plan at
189
- `GET /stats` under `glm52`.
190
-
191
- If acquisition is interrupted, rerun the identical `get` command: mlx-bun
192
- rehashes each existing prefix in bounded chunks, sends a Range request for the
193
- remainder, and verifies the complete blob before publishing it. If the disk
194
- preflight refuses, free space or point `HF_HUB_CACHE` at another volume and
195
- rerun. No Python environment and no converted copy inside the mlx-bun checkout
196
- are involved.
197
-
198
- The artifact is an external MIT-licensed derivative of
199
- `zai-org/GLM-5.2-FP8`, converted with Colibri and extended with int8 MTP
200
- weights. Model weights are not bundled with mlx-bun; review the artifact model
201
- card before redistribution.
202
-
203
- ## Declared model profiles
204
-
205
- Model loading resolves one immutable profile before weights are opened. A
206
- profile names four things: the external artifact fingerprint when one is
207
- known, its fidelity target, the engine capabilities it requires, and the
208
- composed loader/model-graph/generation-loop path.
209
-
210
- Exact artifact profiles outrank family profiles. The current exact declarations
211
- are:
212
-
213
- | profile | external artifact | fidelity | execution |
214
- | --- | --- | --- | --- |
215
- | `qwen3.8-27b-optiq-4bit` | `mlx-community/Qwen3.8-27B-OptiQ-4bit` revision `b04599de95d7a9bfbd7f208d347c0f10d9432a42` | L1: bit-exact mlx-lm | safetensors + dedicated Qwen3.5/3.8 graph + autoregressive loop |
216
- | `glm5.2-colibri-int4-int8-mtp` | `mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp` revision `3cc8db99b1b13fc79325d987ba3c1c430766b3b8` | L3: measured, no matching tier oracle | Colibri container + dedicated GLM-5.2 graph + autoregressive loop |
217
-
218
- The fingerprint is the Hugging Face repo plus immutable snapshot revision, so
219
- moving the cache does not change it. A mutable alias such as `snapshots/staged`
220
- or an arbitrary local directory is not treated as exact. Those artifacts use
221
- the dedicated model-family profile when one matches, then the universal dense
222
- profile when that architecture is supported. Unsupported architectures still
223
- refuse with the existing targeted/generic support list.
224
-
225
- Profiles select construction only. They do not enable, disable, or replace MTP,
226
- mixed-precision KV from `kv_config.json`, TurboQuant KV, adapters, grammar, or
227
- sampling. Those methods remain explicit flags/request fields or documented
228
- defaults. If an exact profile requires a capability the running engine does not
229
- have, loading refuses; it never downgrades to another model path.
230
-
231
- **Packed trellis artifacts.** A `quantization` entry with `mode: "trellis"`
232
- (TurboQuant Q2b, `mjriii/Qwen3.8-27B-q3-…-packed`) stores that module as a
233
- trellis-coded bit-stream + fp16 row scales and is served by the engine's own
234
- Metal kernels; stock mlx-lm cannot load it. Experimental k3/axis0 artifacts
235
- can store two-block interleaved codes as a 3D tensor; the loader identifies
236
- the layout from its shape and keeps one resident code copy. Format and kernels:
237
- `docs/design/turboquant.md` (Q campaign); fallback `MLX_BUN_TRELLIS=expand`:
238
- `server-config.md`.
239
-
240
- Fidelity labels mean L1 = bit-exact mlx-lm, L2 = bit-exact mlx-optiq, and L3 =
241
- measured evidence without a matching oracle. Model profiles do not imply that a
242
- quantized artifact retains the base model's benchmark score; quality evidence
243
- belongs to that exact artifact.
244
-
245
- ## scan + the registry
246
-
247
- `mlx-bun scan` walks `models--*/snapshots/*` reading only `config.json`
248
- + safetensors **headers** (never tensor bytes) into
249
- `~/.cache/mlx-bun/registry.sqlite`. The registry is a derived cache: on
250
- schema drift it rebuilds; rows whose snapshot dir vanished are reaped.
251
-
252
- Schema (table `models`, one row **per snapshot**, keyed on `path`):
253
-
254
- | column | meaning |
255
- | --- | --- |
256
- | `path` (PK) | `<hub>/models--…/snapshots/<commit>` |
257
- | `repo_id`, `model_type` | identity |
258
- | `param_count`, `num_layers`, `hidden_size`, `vocab_size` | shape |
259
- | `size_bytes` | language-model weights (sidecar excluded) |
260
- | `sidecar_bytes` | `optiq_vision.safetensors` (bf16 SigLIP sidecar) |
261
- | `experts_bytes` | `.experts.` tensor bytes (MoE fit math) |
262
- | `quant_bits`, `quant_group_size`, `quant_mode` | quantization |
263
- | `has_vision_sidecar` | sidecar file present |
264
- | `vision_config_type` | `config.json`'s `vision_config.model_type` when it names a vision tower (`*_vision`) |
265
- | `has_audio_config` | `config.json` declares an `audio_config` block |
266
- | `has_audio_tower` | sidecar header names `audio_tower.*` tensors |
267
- | `has_kv_config`, `has_tool_template`, `license` | capabilities/terms |
268
- | `scanned_at` | freshness (canonical tie-break) |
269
-
270
- **Vision capability** is `has_vision_sidecar OR vision_config_type =
271
- *unified_vision`: the SigLIP models (e2b/e4b/26B/31B,
272
- `gemma4_vision`) need the bf16 sidecar; the unified 12B
273
- (`gemma4_unified_vision`) declares its encoder-free tower in config.
274
- Presence of a `vision_config` key alone is **not** a signal — Qwen3.5
275
- nests a copy of its own text config there.
276
-
277
- **Audio capability** is `has_audio_config AND has_audio_tower`: both
278
- legs are required because the 12B OptiQ snapshot carries an
279
- `audio_config` but a stub sidecar whose only audio entry is
280
- `embed_audio.embedding_projection.weight` (no `audio_tower.*` Conformer
281
- tensors) — config presence alone would advertise audio that fails at
282
- request time. The check reads only the sidecar's safetensors header,
283
- never tensor bytes.
284
-
285
- ## Query resolution rules (per verb)
286
-
287
- Every verb resolves fuzzy queries the same way, with revision collapsing
288
- so a stale snapshot never makes a repo "ambiguous":
289
-
290
- - **`ls [query]`** — substring match on repo id / model type; shows **one
291
- row per repo** (the canonical revision). `--all-revisions` shows the
292
- per-snapshot truth with the canonical marked `*`. Capabilities column
293
- labels the support tier: `supported (targeted)` (dedicated forward,
294
- L2/opt-in paths) vs `supported (generic)` (Tier-0 universal module).
295
- - **`fit` / `serve` / `train` / … (single-model verbs)** — `resolve()`:
296
- the query must match exactly one **repo**; multiple cached revisions of
297
- that repo collapse to the canonical snapshot (refs/main, else most
298
- recently scanned). Drafter companions (`*_assistant`) never count.
299
- - **`get <substring>`** — same `resolve()`, then re-downloads that repo id.
300
-
301
- Canonical = the snapshot `refs/main` points at; if no `refs/main`, the
302
- most recently scanned snapshot (stable path tie-break).
303
-
304
- ## gc — reclaim superseded snapshots + dead blobs
305
-
306
- ```
307
- mlx-bun gc # plan + per-repo reclaim summary, deletes nothing
308
- mlx-bun gc --yes # actually delete (destructive)
309
- mlx-bun gc --dry-run # never delete, even with --yes
310
- mlx-bun gc --yes --force # also prune warned snapshots (see below)
311
- ```
312
-
313
- Per repo: keep every snapshot a `refs/*` file points at, delete the
314
- rest, then delete blobs no surviving snapshot symlinks to. Prints
315
- keep/prune/skip counts and reclaimable bytes per repo.
316
-
317
- Safety rails:
318
-
319
- - **Deletion requires `--yes`.** The default run is a report.
320
- - **File-loss tripwire:** a superseded snapshot containing files the
321
- kept snapshots *lack* is skipped with a warning naming those files —
322
- deleting it would delete the machine's only copy (live example: a
323
- stale gemma-4-12B snapshot holds an `optiq_vision.safetensors` that
324
- the canonical revision dropped). `--force` overrides, deliberately.
325
- - Repos with no usable refs (no `refs/`, or refs naming a missing
326
- snapshot) are left untouched.
327
- - `.incomplete` / `.lock` resume artifacts in `blobs/` are never touched.
328
-
329
- After a real deletion, gc re-scans so the registry drops the reaped
330
- rows immediately.
331
-
332
-
333
- Non-Qwen grouped TurboQuant drafting, including assistant donor attention, uses
334
- the shared cache interfaces. See [composition coverage](../design/batching.md#turboquant-donor-attention-and-grouped-draft-composition).