mlx-bun 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (640) hide show
  1. package/README.md +1449 -109
  2. package/THIRD_PARTY_NOTICES.md +882 -0
  3. package/bin/mlx-bun.convert.mjs +4 -0
  4. package/bin/mlx-bun.fuse.mjs +4 -0
  5. package/bin/mlx-bun.generate.mjs +4 -0
  6. package/bin/mlx-bun.lora.mjs +4 -0
  7. package/bin/mlx-bun.mjs +13 -21
  8. package/bin/mlx-bun.server.mjs +4 -0
  9. package/bin/mlx-bun.upload.mjs +4 -0
  10. package/dist/web/app.js +9584 -0
  11. package/package.json +50 -53
  12. package/src/cli/ane-install.ts +76 -0
  13. package/src/cli/args.ts +179 -0
  14. package/src/cli/engine-entry.ts +68 -0
  15. package/src/cli/inference.ts +214 -0
  16. package/src/cli/job-entry.ts +97 -0
  17. package/src/cli/library-host.ts +117 -0
  18. package/src/cli/main.ts +57 -0
  19. package/src/cli/memory-engine.ts +163 -0
  20. package/src/cli/memory.ts +36 -0
  21. package/src/cli/mlx-lm-aliases.ts +309 -0
  22. package/src/cli/model-choice.ts +33 -0
  23. package/src/cli/model-selection.ts +84 -0
  24. package/src/cli/module-host.ts +11 -0
  25. package/src/cli/module-verbs.ts +50 -0
  26. package/src/cli/numerical-policy.ts +12 -0
  27. package/src/cli/perplexity.ts +89 -0
  28. package/src/cli/serve-host.ts +423 -0
  29. package/src/cli/serve-isolated.ts +217 -0
  30. package/src/cli/serve-options.ts +106 -0
  31. package/src/cli/serve-state.ts +205 -0
  32. package/src/cli/serve.ts +500 -0
  33. package/src/cli/served-model-host.ts +102 -0
  34. package/src/cli/server-entry.ts +148 -0
  35. package/src/cli/serving-unit.ts +177 -0
  36. package/src/{tui.ts → cli/terminal.ts} +13 -8
  37. package/src/cli/worker-adapters.ts +34 -0
  38. package/src/cli/worker-entry.ts +272 -0
  39. package/src/cli/worker-unit.ts +179 -0
  40. package/src/engine/adapter-operation.ts +26 -0
  41. package/src/engine/cache-services.ts +114 -0
  42. package/src/engine/completion.ts +39 -0
  43. package/src/engine/generation-gateway.ts +358 -0
  44. package/src/engine/index.ts +59 -0
  45. package/src/engine/kv-budget.ts +120 -0
  46. package/src/engine/media-preparation.ts +232 -0
  47. package/src/engine/model-binding.ts +24 -0
  48. package/src/engine/model-host.ts +513 -0
  49. package/src/engine/model-serving.ts +89 -0
  50. package/src/{serve → engine}/preparation.ts +7 -5
  51. package/src/{serve → engine}/session-completion-engine.ts +6 -6
  52. package/src/engine/telemetry.ts +109 -0
  53. package/src/hub/downloads.ts +116 -0
  54. package/src/jobs/db.ts +16 -7
  55. package/src/jobs/events.ts +29 -0
  56. package/src/jobs/executable.ts +5 -0
  57. package/src/jobs/host.ts +51 -0
  58. package/src/jobs/in-process.ts +55 -0
  59. package/src/{contracts/jobs.ts → jobs/protocol.ts} +7 -9
  60. package/src/jobs/runner.ts +150 -231
  61. package/src/jobs/service.ts +75 -0
  62. package/src/jobs/sse.ts +59 -23
  63. package/src/jobs/worker-memory.ts +46 -0
  64. package/src/jobs/worker-process.ts +163 -0
  65. package/src/jobs/worker-supervisor.ts +258 -0
  66. package/src/modules.ts +58 -0
  67. package/src/publishing/catalog-hub.ts +18 -0
  68. package/src/publishing/credentials.ts +31 -0
  69. package/src/publishing/upload.ts +37 -0
  70. package/src/residency/leased-adapters.ts +21 -0
  71. package/src/residency/local-records.ts +16 -0
  72. package/src/residency/model-residency.ts +405 -0
  73. package/src/residency/record-index.ts +28 -0
  74. package/src/residency/resident-estimate.ts +50 -0
  75. package/src/{anthropic.ts → server/anthropic.ts} +3 -81
  76. package/src/server/cache-routes.ts +36 -0
  77. package/src/{serve → server}/chat-request.ts +10 -10
  78. package/src/{serve → server}/chat-stage.ts +14 -14
  79. package/src/{client.ts → server/client.ts} +28 -2
  80. package/src/{serve → server}/completion-executor.ts +33 -41
  81. package/src/server/decision-body.ts +55 -0
  82. package/src/server/decision-routes.ts +134 -0
  83. package/src/server/decision-wire.ts +228 -0
  84. package/src/{serve → server}/discovery-routes.ts +25 -82
  85. package/src/{serve → server}/http.ts +25 -13
  86. package/src/{serve → server}/inference-request.ts +5 -5
  87. package/src/server/job-routes.ts +20 -0
  88. package/src/server/media-prompt.ts +63 -0
  89. package/src/server/memory-completion-client.ts +46 -0
  90. package/src/server/model-routes.ts +192 -0
  91. package/src/{serve → server}/openai-wire.ts +3 -2
  92. package/src/{serve → server}/pipeline.ts +1 -1
  93. package/src/server/prompt-builder.ts +13 -0
  94. package/src/server/prompt-contracts.ts +17 -0
  95. package/src/server/proxy-routes.ts +187 -0
  96. package/src/server/publishing-routes.ts +41 -0
  97. package/src/{serve → server}/request-plan.ts +6 -8
  98. package/src/{serve → server}/request-prep.ts +47 -50
  99. package/src/{serve → server}/responses-client.ts +30 -13
  100. package/src/{responses.ts → server/responses.ts} +12 -93
  101. package/src/server/routes.ts +205 -0
  102. package/src/server/start.ts +72 -0
  103. package/src/server/status-routes.ts +108 -0
  104. package/src/{serve → server}/text-completion-stage.ts +25 -4
  105. package/src/server/text-prompt.ts +12 -0
  106. package/src/{serve → server}/token-streams.ts +36 -38
  107. package/src/server/worker-routes.ts +311 -0
  108. package/src/storage/paths.ts +61 -0
  109. package/src/web/assets.ts +37 -0
  110. package/src/web/{src → browser}/api.ts +5 -23
  111. package/src/web/browser/chat-host.ts +17 -0
  112. package/src/web/browser/installed-panels.ts +6 -0
  113. package/src/web/browser/main.ts +55 -0
  114. package/src/web/browser/markdown.ts +279 -0
  115. package/src/web/browser/memory-panel.ts +9 -0
  116. package/src/web/browser/palette.ts +64 -0
  117. package/src/web/browser/protocol.ts +13 -0
  118. package/src/web/browser/shell.ts +467 -0
  119. package/src/web/{src → browser}/status.ts +32 -36
  120. package/src/web/build.ts +51 -0
  121. package/src/web/public/app.html +1054 -0
  122. package/src/web/{sw.js → public/sw.js} +4 -3
  123. package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
  124. package/src/web/{vendor → public/vendor}/hljs.js +2 -2
  125. package/THIRD_PARTY_LICENSES.md +0 -51
  126. package/docs/README.md +0 -107
  127. package/docs/archive/hlg-sampling.md +0 -350
  128. package/docs/archive/investigations/audio-input-plan.md +0 -356
  129. package/docs/archive/investigations/benchmark-ledger-through-v0.4.0.md +0 -3617
  130. package/docs/archive/investigations/chunk-finetune-experiment.md +0 -84
  131. package/docs/archive/investigations/colibri-glm52-port.md +0 -1486
  132. package/docs/archive/investigations/colibri-oracle-pin.md +0 -1284
  133. package/docs/archive/investigations/curve-bisector-routing.md +0 -123
  134. package/docs/archive/investigations/decode-roofline-lookagain.md +0 -348
  135. package/docs/archive/investigations/diffusion-gemma-port.md +0 -602
  136. package/docs/archive/investigations/dspark-handoff.md +0 -224
  137. package/docs/archive/investigations/expert-offload-single-user-moe.md +0 -292
  138. package/docs/archive/investigations/faithful-l1-consolidation.md +0 -310
  139. package/docs/archive/investigations/hlg-sampling-investigation.md +0 -970
  140. package/docs/archive/investigations/indexshare-performance-spike.md +0 -357
  141. package/docs/archive/investigations/kernel-perf-review-2026-07.md +0 -171
  142. package/docs/archive/investigations/lab-build-journal.md +0 -157
  143. package/docs/archive/investigations/minicpm5-decode-megakernel.md +0 -489
  144. package/docs/archive/investigations/openjarvis-fit.md +0 -198
  145. package/docs/archive/investigations/openwiki-evaluation.md +0 -249
  146. package/docs/archive/investigations/optimization_plan.md +0 -346
  147. package/docs/archive/investigations/orpo-base-uf-experiment-and-directions.md +0 -120
  148. package/docs/archive/investigations/orpo-flash-cce-pin-leak.md +0 -167
  149. package/docs/archive/investigations/orpo-uf-testing-handoff.md +0 -126
  150. package/docs/archive/investigations/pareto-specialized-runtime-findings.md +0 -92
  151. package/docs/archive/investigations/pi-builtin-investigation.md +0 -308
  152. package/docs/archive/investigations/pre-colibri-stabilization.md +0 -329
  153. package/docs/archive/investigations/qwen38-27b-campaign-log.md +0 -1092
  154. package/docs/archive/investigations/segmented-backward-handoff.md +0 -148
  155. package/docs/archive/investigations/starter-model-port-handoff.md +0 -342
  156. package/docs/archive/investigations/steel-flash-cce-handoff.md +0 -489
  157. package/docs/archive/investigations/the-dreaming-handoff.md +0 -141
  158. package/docs/archive/investigations/trainer-validation-experiment.md +0 -173
  159. package/docs/archive/planning/chat-ui-vision-memory-first.md +0 -199
  160. package/docs/archive/planning/chat-ui-vision.md +0 -50
  161. package/docs/archive/planning/chunk-task-roadmap.md +0 -77
  162. package/docs/archive/planning/curve-sampler-research-plan.md +0 -331
  163. package/docs/archive/planning/journal.md +0 -316
  164. package/docs/archive/planning/memory-docs-and-dag-plan.md +0 -194
  165. package/docs/archive/planning/pi-integration-review.md +0 -178
  166. package/docs/archive/planning/release-notes-v0.0.10.md +0 -57
  167. package/docs/archive/planning/release-notes-v0.0.11.md +0 -239
  168. package/docs/archive/planning/release-notes-v0.0.12.md +0 -80
  169. package/docs/archive/planning/release-notes-v0.0.13.md +0 -77
  170. package/docs/archive/planning/release-notes-v0.0.9.md +0 -122
  171. package/docs/archive/planning/release-notes-v0.2.0.md +0 -49
  172. package/docs/archive/planning/release-notes-v0.3.0.md +0 -35
  173. package/docs/archive/planning/release-notes-v0.4.0.md +0 -45
  174. package/docs/archive/planning/release-notes-v0.5.0.md +0 -37
  175. package/docs/archive/planning/web-ui-pass-plan.md +0 -213
  176. package/docs/archive/planning/website-readme-pass-plan.md +0 -224
  177. package/docs/design/batching.md +0 -2054
  178. package/docs/design/decode-speed-program.md +0 -2404
  179. package/docs/design/dreaming-nightly-pipeline.md +0 -684
  180. package/docs/design/generic-model-support.md +0 -821
  181. package/docs/design/kv-cache.md +0 -993
  182. package/docs/design/orpo-training.md +0 -680
  183. package/docs/design/speculative-decoding.md +0 -2129
  184. package/docs/design/turboquant.md +0 -2225
  185. package/docs/design/unified-engine-frontier-plan.md +0 -1987
  186. package/docs/design/web-chat-redesign.md +0 -695
  187. package/docs/planning/PRODUCT_ROADMAP.md +0 -593
  188. package/docs/planning/ResearchTopics.md +0 -119
  189. package/docs/planning/public-readiness-handoff.md +0 -244
  190. package/docs/planning/public-readiness.md +0 -149
  191. package/docs/planning/video-series.md +0 -421
  192. package/docs/reference/benchmarks.md +0 -3587
  193. package/docs/reference/cli.md +0 -646
  194. package/docs/reference/distribution.md +0 -380
  195. package/docs/reference/environment.md +0 -494
  196. package/docs/reference/glossary.md +0 -39
  197. package/docs/reference/library-api.md +0 -688
  198. package/docs/reference/memory.md +0 -260
  199. package/docs/reference/models.md +0 -346
  200. package/docs/reference/server-api.md +0 -1945
  201. package/docs/reference/server-config.md +0 -973
  202. package/docs/reference/training.md +0 -462
  203. package/docs/reference/troubleshooting.md +0 -158
  204. package/src/admission-plan.ts +0 -18
  205. package/src/audio/audiotoolbox.ts +0 -112
  206. package/src/audio/conformer.ts +0 -655
  207. package/src/audio/decode.ts +0 -133
  208. package/src/audio/features.ts +0 -202
  209. package/src/audio/mic-capture.ts +0 -98
  210. package/src/audio/silero-vad.ts +0 -379
  211. package/src/audio/transcode.ts +0 -67
  212. package/src/audio/whisper-decode.ts +0 -774
  213. package/src/audio/whisper-fast.ts +0 -732
  214. package/src/audio/whisper-format.ts +0 -73
  215. package/src/audio/whisper-mel.ts +0 -185
  216. package/src/audio/whisper-timing.ts +0 -274
  217. package/src/audio/whisper-tokenizer.ts +0 -239
  218. package/src/audio/whisper-transcribe.ts +0 -410
  219. package/src/backends/mlx/assistant-target.ts +0 -46
  220. package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
  221. package/src/backends/mlx/autoregressive.ts +0 -129
  222. package/src/backends/mlx/batch-group.ts +0 -1874
  223. package/src/backends/mlx/cache-attachment.ts +0 -67
  224. package/src/backends/mlx/cache-layout.ts +0 -31
  225. package/src/backends/mlx/checkpoint-state.ts +0 -53
  226. package/src/backends/mlx/continuation-persistence.ts +0 -107
  227. package/src/backends/mlx/continuation-request.ts +0 -43
  228. package/src/backends/mlx/continuation.ts +0 -77
  229. package/src/backends/mlx/diffusion.ts +0 -39
  230. package/src/backends/mlx/draft-target.ts +0 -32
  231. package/src/backends/mlx/encoder-cache.ts +0 -25
  232. package/src/backends/mlx/evaluation.ts +0 -105
  233. package/src/backends/mlx/fill-append.ts +0 -58
  234. package/src/backends/mlx/fill-group.ts +0 -497
  235. package/src/backends/mlx/full-kv-row-append.ts +0 -32
  236. package/src/backends/mlx/full-kv-row-donor.ts +0 -54
  237. package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
  238. package/src/backends/mlx/gateway-binding.ts +0 -174
  239. package/src/backends/mlx/graph.ts +0 -38
  240. package/src/backends/mlx/kv-codec.ts +0 -9
  241. package/src/backends/mlx/kv-maintenance.ts +0 -161
  242. package/src/backends/mlx/kv-tensor-rows.ts +0 -212
  243. package/src/backends/mlx/memory-client.ts +0 -189
  244. package/src/backends/mlx/methods.ts +0 -90
  245. package/src/backends/mlx/mixed-iteration.ts +0 -62
  246. package/src/backends/mlx/model-prompt.ts +0 -178
  247. package/src/backends/mlx/model-serving.ts +0 -80
  248. package/src/backends/mlx/paged-cache-codec.ts +0 -27
  249. package/src/backends/mlx/prefill-cohort.ts +0 -100
  250. package/src/backends/mlx/prefill-policy.ts +0 -26
  251. package/src/backends/mlx/prefill-rows.ts +0 -244
  252. package/src/backends/mlx/prefill.ts +0 -33
  253. package/src/backends/mlx/projected-context-rows.ts +0 -72
  254. package/src/backends/mlx/prompt-input.ts +0 -29
  255. package/src/backends/mlx/qwen-prompt-input.ts +0 -40
  256. package/src/backends/mlx/request-policy.ts +0 -20
  257. package/src/backends/mlx/request-state-policy.ts +0 -54
  258. package/src/backends/mlx/rollback.ts +0 -92
  259. package/src/backends/mlx/row-sampling.ts +0 -49
  260. package/src/backends/mlx/serial-executor.ts +0 -251
  261. package/src/backends/mlx/speculative-group.ts +0 -438
  262. package/src/backends/mlx/speculative-round.ts +0 -161
  263. package/src/backends/mlx/speculative.ts +0 -131
  264. package/src/backends/mlx/state-rows.ts +0 -104
  265. package/src/backends/mlx/state-views.ts +0 -46
  266. package/src/backends/mlx/target-layout-capability.ts +0 -35
  267. package/src/backends/mlx/text-engine.ts +0 -73
  268. package/src/backends/mlx/transitioning-kv-rows.ts +0 -173
  269. package/src/chat-template.ts +0 -382
  270. package/src/cli.ts +0 -3490
  271. package/src/config.ts +0 -399
  272. package/src/contracts/completion.ts +0 -16
  273. package/src/contracts/execution.ts +0 -70
  274. package/src/contracts/generation.ts +0 -103
  275. package/src/contracts/host.ts +0 -7
  276. package/src/contracts/object-cache.ts +0 -8
  277. package/src/contracts/pi-provider.ts +0 -30
  278. package/src/contracts/pi.ts +0 -261
  279. package/src/contracts/prefix-cache.ts +0 -33
  280. package/src/contracts/resources.ts +0 -25
  281. package/src/contracts/sampling.ts +0 -23
  282. package/src/contracts/scheduling.ts +0 -54
  283. package/src/contracts/tsconfig.json +0 -14
  284. package/src/dataset/generators.ts +0 -1087
  285. package/src/dataset/index.ts +0 -12
  286. package/src/dataset/job.ts +0 -81
  287. package/src/dataset/llm.ts +0 -71
  288. package/src/dataset/registry.ts +0 -528
  289. package/src/diffusion/diffusion-generate.ts +0 -507
  290. package/src/download.ts +0 -505
  291. package/src/embed.ts +0 -77
  292. package/src/engine/admission.ts +0 -59
  293. package/src/engine/cancellation.ts +0 -38
  294. package/src/engine/engine.ts +0 -56
  295. package/src/engine/execution-coordinator.ts +0 -70
  296. package/src/engine/execution-plan.ts +0 -64
  297. package/src/engine/execution-tasks.ts +0 -44
  298. package/src/engine/namespaced-cache.ts +0 -13
  299. package/src/engine/resources.ts +0 -53
  300. package/src/engine/scheduler.ts +0 -92
  301. package/src/engine/session.ts +0 -247
  302. package/src/eval/README.md +0 -130
  303. package/src/eval/ifeval.ts +0 -81
  304. package/src/eval/kl-prompts.ts +0 -29
  305. package/src/eval/kl.ts +0 -590
  306. package/src/eval/perplexity.ts +0 -164
  307. package/src/eval/quality-db.ts +0 -92
  308. package/src/eval/reference-logits.ts +0 -207
  309. package/src/eval/runner.ts +0 -124
  310. package/src/eval/score.ts +0 -49
  311. package/src/eval/tasks/bfcl.ts +0 -535
  312. package/src/eval/tasks/gsm8k.ts +0 -98
  313. package/src/eval/tasks/hashhop.ts +0 -139
  314. package/src/eval/tasks/humaneval.ts +0 -275
  315. package/src/eval/tasks/ifeval.ts +0 -525
  316. package/src/eval/tasks/mmlu.ts +0 -157
  317. package/src/eval/ultrafeedback.ts +0 -60
  318. package/src/evaldb.ts +0 -199
  319. package/src/expert-io.ts +0 -393
  320. package/src/expert-offload-build.ts +0 -77
  321. package/src/expert-offload.ts +0 -76
  322. package/src/expert-residency.ts +0 -1134
  323. package/src/expert-usage.ts +0 -415
  324. package/src/fill/echo-index.ts +0 -188
  325. package/src/fill/fill-session.ts +0 -463
  326. package/src/fill/proposal.ts +0 -68
  327. package/src/fill/schema-rows.ts +0 -506
  328. package/src/fill/tool-boundary.ts +0 -103
  329. package/src/fit.ts +0 -249
  330. package/src/generate.ts +0 -1352
  331. package/src/grammar.ts +0 -604
  332. package/src/harness-pi.ts +0 -184
  333. package/src/hf-push.ts +0 -628
  334. package/src/hub-rest.ts +0 -242
  335. package/src/index.ts +0 -63
  336. package/src/inference/denoising.ts +0 -17
  337. package/src/inference/draft-acceptance.ts +0 -41
  338. package/src/inference/draft-output.ts +0 -49
  339. package/src/inference/graph.ts +0 -33
  340. package/src/inference/prefill.ts +0 -45
  341. package/src/inference/rollback.ts +0 -7
  342. package/src/jobs/index.ts +0 -31
  343. package/src/jobs/job-entry.ts +0 -107
  344. package/src/jobs/task-client.ts +0 -19
  345. package/src/jobs/types.ts +0 -2
  346. package/src/kv-scheme.ts +0 -279
  347. package/src/kv-store.ts +0 -1135
  348. package/src/lab/README.md +0 -22
  349. package/src/lab/curve/curve-designer.html +0 -303
  350. package/src/lab/curve/curve-sampler.ts +0 -122
  351. package/src/lab/expert-trace/expert-trace.ts +0 -69
  352. package/src/lab/paged-kv/paged-attention.ts +0 -117
  353. package/src/lab/paged-kv/paged-kv-rows.ts +0 -111
  354. package/src/lab/paged-kv/paged-kv.ts +0 -336
  355. package/src/library.ts +0 -40
  356. package/src/lora.ts +0 -408
  357. package/src/md-modules.d.ts +0 -54
  358. package/src/media-fetch.ts +0 -442
  359. package/src/memory/article.ts +0 -558
  360. package/src/memory/chunk-validation.ts +0 -150
  361. package/src/memory/chunk.ts +0 -318
  362. package/src/memory/cluster.ts +0 -351
  363. package/src/memory/coverage.ts +0 -134
  364. package/src/memory/crosslink.ts +0 -0
  365. package/src/memory/db.ts +0 -253
  366. package/src/memory/entity.ts +0 -203
  367. package/src/memory/gate.ts +0 -187
  368. package/src/memory/history.ts +0 -152
  369. package/src/memory/ingest.ts +0 -335
  370. package/src/memory/model.ts +0 -183
  371. package/src/memory/normalize.ts +0 -671
  372. package/src/memory/parse.ts +0 -22
  373. package/src/memory/pipeline.ts +0 -275
  374. package/src/memory/prompts.ts +0 -65
  375. package/src/memory/query.ts +0 -334
  376. package/src/memory/reconcile.ts +0 -734
  377. package/src/memory/redirect.ts +0 -108
  378. package/src/memory/reindex.ts +0 -325
  379. package/src/memory/resolve.ts +0 -307
  380. package/src/memory/rest.ts +0 -245
  381. package/src/memory/route.ts +0 -272
  382. package/src/memory/schedule.ts +0 -165
  383. package/src/memory/stages.ts +0 -777
  384. package/src/memory/synthesize.ts +0 -1638
  385. package/src/memory/tools.ts +0 -749
  386. package/src/memory/vault.ts +0 -1194
  387. package/src/memory/wikify.ts +0 -1064
  388. package/src/mlx/array.ts +0 -425
  389. package/src/mlx/autograd.ts +0 -304
  390. package/src/mlx/checkpoint.ts +0 -149
  391. package/src/mlx/compile.ts +0 -168
  392. package/src/mlx/custom-vjp.ts +0 -188
  393. package/src/mlx/ffi.ts +0 -531
  394. package/src/mlx/materialize.ts +0 -23
  395. package/src/mlx/metal-kernel.ts +0 -159
  396. package/src/mlx/normalized-argmax.ts +0 -116
  397. package/src/mlx/ops.ts +0 -1108
  398. package/src/mlx/quantized-rows.ts +0 -36
  399. package/src/mlx/token-bitmask.ts +0 -52
  400. package/src/mlx/turboquant-kv-decode.ts +0 -82
  401. package/src/mlx/turboquant-kv-inverse.ts +0 -122
  402. package/src/mlx/turboquant-ops.ts +0 -861
  403. package/src/mlx/turboquant-tables.ts +0 -237
  404. package/src/mmap.ts +0 -90
  405. package/src/model/artifact-identity.ts +0 -73
  406. package/src/model/batched-kv.ts +0 -235
  407. package/src/model/batched-mask.ts +0 -279
  408. package/src/model/batched-quant.ts +0 -212
  409. package/src/model/batched-quantized-kv.ts +0 -144
  410. package/src/model/batched-rotating-quant.ts +0 -353
  411. package/src/model/batched-rotating-state.ts +0 -149
  412. package/src/model/batched-rotating.ts +0 -338
  413. package/src/model/batched-row-storage.ts +0 -179
  414. package/src/model/batched-ssm.ts +0 -52
  415. package/src/model/batched-turboquant-kv.ts +0 -94
  416. package/src/model/compiled-decode.ts +0 -712
  417. package/src/model/decoded-kv-donor.ts +0 -12
  418. package/src/model/delayed-quantized-kv.ts +0 -72
  419. package/src/model/delayed-rotating-quantized-kv.ts +0 -93
  420. package/src/model/delayed-turboquant-kv.ts +0 -57
  421. package/src/model/diffusion-gemma.ts +0 -1026
  422. package/src/model/factory.ts +0 -215
  423. package/src/model/fingerprint.ts +0 -45
  424. package/src/model/flash-attention.ts +0 -694
  425. package/src/model/full-prefill-padding.ts +0 -56
  426. package/src/model/full-prefill-row.ts +0 -105
  427. package/src/model/gemma4-base.ts +0 -2370
  428. package/src/model/gemma4.ts +0 -1395
  429. package/src/model/generated/gemma4-12b.ts +0 -429
  430. package/src/model/generated/gemma4-26b.ts +0 -448
  431. package/src/model/generated/gemma4-e4b.ts +0 -717
  432. package/src/model/generated/index.ts +0 -18
  433. package/src/model/glm52-atlas.ts +0 -511
  434. package/src/model/glm52-cache.ts +0 -792
  435. package/src/model/glm52-config.ts +0 -262
  436. package/src/model/glm52-container.ts +0 -305
  437. package/src/model/glm52-coupling.ts +0 -388
  438. package/src/model/glm52-dsa.ts +0 -606
  439. package/src/model/glm52-expert-layout.ts +0 -253
  440. package/src/model/glm52-layout.ts +0 -152
  441. package/src/model/glm52-memory.ts +0 -500
  442. package/src/model/glm52-mla.ts +0 -792
  443. package/src/model/glm52-moe.ts +0 -223
  444. package/src/model/glm52-pilot.ts +0 -537
  445. package/src/model/glm52-reference.ts +0 -445
  446. package/src/model/glm52-residency.ts +0 -557
  447. package/src/model/glm52-resident-weights.ts +0 -135
  448. package/src/model/glm52-streamed-experts.ts +0 -453
  449. package/src/model/glm52-streamed-metal.ts +0 -610
  450. package/src/model/glm52-weights.ts +0 -503
  451. package/src/model/glm52.ts +0 -1132
  452. package/src/model/implementation.ts +0 -69
  453. package/src/model/kv-attention-view.ts +0 -70
  454. package/src/model/minicpm5.ts +0 -376
  455. package/src/model/profile.ts +0 -468
  456. package/src/model/quantized-append-attention.ts +0 -31
  457. package/src/model/qwen-append.ts +0 -12
  458. package/src/model/qwen-conv.ts +0 -52
  459. package/src/model/qwen3-delta-state.ts +0 -74
  460. package/src/model/qwen3-delta.ts +0 -451
  461. package/src/model/qwen3-moe.ts +0 -404
  462. package/src/model/qwen3-mrope.ts +0 -250
  463. package/src/model/qwen3.ts +0 -277
  464. package/src/model/qwen3_5-checkpoint.ts +0 -164
  465. package/src/model/qwen3_5.ts +0 -881
  466. package/src/model/rotating-kv-donor.ts +0 -35
  467. package/src/model/rotating-kv-layout.ts +0 -262
  468. package/src/model/rotating-row-transaction.ts +0 -35
  469. package/src/model/speculative-rotating-kv.ts +0 -101
  470. package/src/model/ssm-prefill-padding.ts +0 -39
  471. package/src/model/support.ts +0 -110
  472. package/src/model/token-groups.ts +0 -66
  473. package/src/model/trellis-balanced-scatter.ts +0 -51
  474. package/src/model/trellis-linear.ts +0 -672
  475. package/src/model/trellis-shared-m.ts +0 -151
  476. package/src/model/trellis-shared-scatter.ts +0 -144
  477. package/src/model/trellis-splitk-prefill.ts +0 -158
  478. package/src/model/trellis-tiled-prefill.ts +0 -136
  479. package/src/model/trellis-vector-expand.ts +0 -62
  480. package/src/model/trellis-wide-prefill.ts +0 -94
  481. package/src/model/turboquant-codec.ts +0 -89
  482. package/src/model/universal/archs.ts +0 -332
  483. package/src/model/universal/dense.ts +0 -612
  484. package/src/model/universal/modules.ts +0 -170
  485. package/src/model/universal/rope.ts +0 -381
  486. package/src/model/whisper.ts +0 -435
  487. package/src/native/expert_io.c +0 -523
  488. package/src/native/frame_extract.swift +0 -140
  489. package/src/native/mic_capture.swift +0 -92
  490. package/src/native-pack.ts +0 -163
  491. package/src/pi-provider.ts +0 -53
  492. package/src/pi-session.ts +0 -81
  493. package/src/pi-terminal.ts +0 -274
  494. package/src/pi-web.ts +0 -1940
  495. package/src/preflight.ts +0 -158
  496. package/src/prompt-cache.ts +0 -682
  497. package/src/quantize/allocator.ts +0 -627
  498. package/src/quantize/atomic-output.ts +0 -38
  499. package/src/quantize/calibration.ts +0 -181
  500. package/src/quantize/config-writer.ts +0 -145
  501. package/src/quantize/index.ts +0 -84
  502. package/src/quantize/job.ts +0 -162
  503. package/src/quantize/quantizer.ts +0 -666
  504. package/src/quantize/rotate.ts +0 -603
  505. package/src/quantize/safetensors-writer.ts +0 -249
  506. package/src/quantize/sensitivity.ts +0 -216
  507. package/src/quantize/trellis.ts +0 -586
  508. package/src/quantize/weight-transform.ts +0 -292
  509. package/src/registry.ts +0 -602
  510. package/src/runtime-config.ts +0 -77
  511. package/src/safetensors.ts +0 -165
  512. package/src/sampler.ts +0 -1012
  513. package/src/serve/admin-routes.ts +0 -184
  514. package/src/serve/assets/curve-terrain.html +0 -105
  515. package/src/serve/assets/training-inference-map.html +0 -575
  516. package/src/serve/audio-routes.ts +0 -323
  517. package/src/serve/aux-routes.ts +0 -132
  518. package/src/serve/batch-scheduler.ts +0 -8
  519. package/src/serve/checkpoint-identity.ts +0 -64
  520. package/src/serve/generation-gateway.ts +0 -537
  521. package/src/serve/isolate.ts +0 -609
  522. package/src/serve/kv-budget.ts +0 -14
  523. package/src/serve/lab-routes.ts +0 -341
  524. package/src/serve/lane-registry.ts +0 -45
  525. package/src/serve/model-admin-routes.ts +0 -155
  526. package/src/serve/model-binding.ts +0 -49
  527. package/src/serve/model-host.ts +0 -511
  528. package/src/serve/parent-application.ts +0 -56
  529. package/src/serve/prompt-response-trace.ts +0 -161
  530. package/src/serve/response-lease.ts +0 -24
  531. package/src/serve/session-search.ts +0 -326
  532. package/src/serve/static-routes.ts +0 -101
  533. package/src/serve/transcription-server.ts +0 -64
  534. package/src/serve/transcription-service.ts +0 -502
  535. package/src/server.ts +0 -1282
  536. package/src/spec/assistant-rows.ts +0 -93
  537. package/src/spec/assistant-source.ts +0 -126
  538. package/src/spec/cache-identity.ts +0 -22
  539. package/src/spec/deepspec-rows.ts +0 -29
  540. package/src/spec/deepspec-source.ts +0 -145
  541. package/src/spec/dflash-source.ts +0 -149
  542. package/src/spec/drafter.ts +0 -304
  543. package/src/spec/dspark/ab-stats.ts +0 -136
  544. package/src/spec/dspark/calibration.ts +0 -112
  545. package/src/spec/dspark/data-dflash.ts +0 -156
  546. package/src/spec/dspark/data.ts +0 -201
  547. package/src/spec/dspark/deepspec-module.ts +0 -776
  548. package/src/spec/dspark/generate-dflash.ts +0 -245
  549. package/src/spec/dspark/generate.ts +0 -290
  550. package/src/spec/dspark/loader.ts +0 -23
  551. package/src/spec/dspark/loss.ts +0 -213
  552. package/src/spec/dspark/module-dflash.ts +0 -560
  553. package/src/spec/dspark/module.ts +0 -540
  554. package/src/spec/dspark/quantize-drafter.ts +0 -91
  555. package/src/spec/dspark/sample.ts +0 -112
  556. package/src/spec/generate.ts +0 -276
  557. package/src/spec/glm52-mtp-graph.ts +0 -29
  558. package/src/spec/glm52-mtp-rows.ts +0 -132
  559. package/src/spec/glm52-mtp-source.ts +0 -318
  560. package/src/spec/glm52-mtp-state.ts +0 -33
  561. package/src/spec/ngram-source.ts +0 -226
  562. package/src/spec/projected-draft-rows.ts +0 -73
  563. package/src/spec/qwen-mtp-module.ts +0 -171
  564. package/src/spec/qwen-mtp-rows.ts +0 -230
  565. package/src/spec/qwen-mtp-source.ts +0 -386
  566. package/src/spec/qwen-mtp-state.ts +0 -30
  567. package/src/spec/serve-loop.ts +0 -587
  568. package/src/spec/source.ts +0 -228
  569. package/src/spec/two-model-rows.ts +0 -62
  570. package/src/spec/two-model.ts +0 -113
  571. package/src/ssd-cache.ts +0 -431
  572. package/src/ssd-durability.ts +0 -209
  573. package/src/storage/host-buffer.ts +0 -24
  574. package/src/storage/kv-writer.ts +0 -83
  575. package/src/storage/kv-writer.worker.js +0 -264
  576. package/src/storage/retention-policy.ts +0 -37
  577. package/src/tiered-prompt-cache.ts +0 -45
  578. package/src/tokenizer.ts +0 -335
  579. package/src/tool-approvals.ts +0 -131
  580. package/src/tool-call.ts +0 -695
  581. package/src/train/dataset.ts +0 -484
  582. package/src/train/diffusion-lora.ts +0 -216
  583. package/src/train/export.ts +0 -32
  584. package/src/train/flash-cce.ts +0 -1234
  585. package/src/train/forward.ts +0 -266
  586. package/src/train/fuse.ts +0 -243
  587. package/src/train/index.ts +0 -46
  588. package/src/train/job.ts +0 -205
  589. package/src/train/lora-params.ts +0 -254
  590. package/src/train/loss.ts +0 -1591
  591. package/src/train/merge.ts +0 -195
  592. package/src/train/optimizer.ts +0 -183
  593. package/src/train/prefix-shared.ts +0 -490
  594. package/src/train/rank.ts +0 -137
  595. package/src/train/segmented.ts +0 -1828
  596. package/src/train/steel-qmm-header.ts +0 -1461
  597. package/src/train/trainer.ts +0 -1221
  598. package/src/train/watch.ts +0 -542
  599. package/src/vision/diffusion-vision.ts +0 -620
  600. package/src/vision/embedder.ts +0 -176
  601. package/src/vision/preprocess.ts +0 -247
  602. package/src/vision/prompt.ts +0 -409
  603. package/src/vision/qwen3vl-preprocess.ts +0 -409
  604. package/src/vision/qwen3vl-prompt.ts +0 -233
  605. package/src/vision/qwen3vl-tower.ts +0 -566
  606. package/src/vision/siglip.ts +0 -607
  607. package/src/vision/video-frames.ts +0 -148
  608. package/src/web/app.html +0 -2155
  609. package/src/web/app.js +0 -5863
  610. package/src/web/skills/memory/SKILL.md +0 -120
  611. package/src/web/skills/web-research/SKILL.md +0 -46
  612. package/src/web/skills.ts +0 -97
  613. package/src/web/src/adapters-panel.ts +0 -288
  614. package/src/web/src/assistant.ts +0 -451
  615. package/src/web/src/chat.ts +0 -1060
  616. package/src/web/src/composer.ts +0 -962
  617. package/src/web/src/dataset.ts +0 -132
  618. package/src/web/src/finetune.ts +0 -267
  619. package/src/web/src/hub.ts +0 -428
  620. package/src/web/src/main.ts +0 -98
  621. package/src/web/src/markdown.ts +0 -0
  622. package/src/web/src/memory-panel.ts +0 -572
  623. package/src/web/src/model-picker.ts +0 -159
  624. package/src/web/src/palette.ts +0 -346
  625. package/src/web/src/protocol.ts +0 -26
  626. package/src/web/src/quantize.ts +0 -167
  627. package/src/web/src/rag.ts +0 -274
  628. package/src/web/src/sessions.ts +0 -469
  629. package/src/web/src/shell.ts +0 -804
  630. package/src/web/src/ui-catalog.ts +0 -78
  631. package/src/web/src/voice.ts +0 -141
  632. package/src/web/vendor/README.md +0 -61
  633. package/src/web-assets.ts +0 -47
  634. package/src/web-tools.ts +0 -478
  635. package/src/weights.ts +0 -255
  636. /package/src/{serve → server}/completion-sink.ts +0 -0
  637. /package/src/{serve → server}/generated-token-history.ts +0 -0
  638. /package/src/web/{icon.svg → public/icon.svg} +0 -0
  639. /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
  640. /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
@@ -1,173 +0,0 @@
1
- # Trainer validation experiment
2
-
3
- **Status:** in progress (started 2026-06-20). **Goal:** prove the from-scratch
4
- SFT/DPO/ORPO trainer actually works before trusting any downstream result — general
5
- capability (Goal 1) or task-specific (Goal 2).
6
-
7
- ## Why this exists — the smoking gun
8
-
9
- The margin/accuracy is recorded in `metrics.json` (`valTrajectory[].margin`,
10
- `bestMargin`), not the stdout log. The prior `cpm5-uf` ORPO run (λ=0.1) shows:
11
-
12
- | step | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 |
13
- |---|---|---|---|---|---|---|---|---|
14
- | accuracy | .507 | .514 | .534 | .541 | .534 | .520 | .547 | .547 |
15
- | margin | .132 | .124 | .110 | .120 | .136 | .128 | .118 | .123 |
16
-
17
- **Preference accuracy is ~0.52 (near the 0.50 coin-flip) and the margin is flat.**
18
- ORPO's defining job is to push accuracy up and widen the margin. This is *not* a clean
19
- "it works" signal. Caveats: 800 steps ≈ 0.05 epoch (undertrained), provenance
20
- (from-base vs warm-start) unconfirmed. But it's enough to make validation mandatory:
21
- **we cannot currently claim our ORPO learns the preference at all.**
22
-
23
- ## Method-decomposition (the validation key)
24
-
25
- `ORPO_loss = NLL(chosen) + λ·L_OR`. NLL is exactly the SFT objective; L_OR is the
26
- reference-free odds-ratio preference term. So we validate the building blocks, and ORPO
27
- is covered by its parts plus a small ORPO-specific surface (the OR term + λ).
28
-
29
- mlx-lm has **no DPO/ORPO** — so the oracle strategy is:
30
- - **SFT/NLL** → numeric parity vs **mlx-lm tuner** (oracle env exists).
31
- - **DPO + OR loss** → **numeric unit test vs the paper's equations** on a fixed tiny
32
- input (hand-computed expected loss + grad). No external dep. Optional stronger
33
- cross-check: **TRL** `DPOTrainer`/`ORPOTrainer` loss (PyTorch; multi-GB env →
34
- approve-first, not default).
35
-
36
- Every positive control is designed so "weak data / weak lever" is **not** an available
37
- excuse — success must be unambiguous.
38
-
39
- ## PILLAR 1 — Prove the trainer (gate for everything)
40
-
41
- - **1a · SFT positive control** *(infra GREEN, behavioral check WEAK)*. Train
42
- `fixtures/adapters/data-upper` from scratch on MiniCPM5; assert generations are
43
- actually uppercased (oracle: the repo's pre-trained `upper` adapter). Existing
44
- `train-e2e.test.ts` only checks loss↓ — add the behavioral assert. *(seconds)*
45
- - **1b · DPO positive control** *(MISSING)*. Trivial preference (chosen uppercase,
46
- rejected lowercase). Assert **margin increases** and **preference accuracy → ~1.0**.
47
- - **1c · ORPO positive control + the real question.** (i) Same trivial preference →
48
- accuracy → ~1.0. (ii) **From-BASE ORPO on UF**, multiple epochs, watch margin widen
49
- and accuracy climb well above chance — directly resolves the near-chance finding
50
- (undertraining vs warm-start vs bug).
51
- - **1d · Loss-formula parity.** SFT NLL vs mlx-lm; DPO/ORPO loss + grad vs hand-computed
52
- paper equations (unit test). The training-side analogue of the inference logit-parity
53
- oracle — currently MISSING.
54
- - **1e · vs the paper.** Internal proxy first: preference accuracy robustly > chance on
55
- UF. Then (approve-first, LLM-judge) AlpacaEval/MT-Bench **direction** vs base (not
56
- absolute — paper used 7B). optiq suite (incl. IFEval) is an already-local downstream.
57
-
58
- > **Gate:** until 1a–1c are green, Pillars 2 & 3 sit on an unverified trainer.
59
-
60
- ## PILLAR 2 — Measure general-capability impact (optiq suite)
61
-
62
- All 6 datasets are present locally (`~/.cache/mlx-bun/eval-data/`: mmlu, gsm8k, ifeval,
63
- bfcl, humaneval, hashhop); harness = `scripts/eval.ts capability`.
64
- - **2a · Eval parity:** run on base CPM5, reproduce optiq's **30.28** within tolerance
65
- (validates the *measurement* before trusting deltas; confirm the README's open BFCL
66
- "no-calls" / MMLU "at-chance" flags aren't broken on our side).
67
- - **2b · Delta:** trained checkpoint vs base, on the 6-task mean.
68
- - **2c · Targeting:** mean is floored by **BFCL 0.0 / GSM8K 2.7 / HashHop 4.0**; UF hits
69
- the already-strong IFEval, so expect small mean movement. Highest-leverage Goal-1 lever
70
- is **BFCL** (0.0 is format-trainable; 0→30 = +5 on the mean).
71
-
72
- ## PILLAR 3 — Task-specific (separate; gated on Pillar 1)
73
-
74
- Chunk segmenter via `scripts/chunk-eval.ts` (boundary/label accuracy), using the
75
- hard-negative ORPO data (remove-a-cut / add-a-cut, balanced to kill the length
76
- shortcut). Measured by chunk accuracy, not val loss / capability. Credibility depends on
77
- Pillar 1.
78
-
79
- ## Sequencing & gates
80
-
81
- 1. Pillar 1 positive controls (1a→1b→1c-trivial) — fast, "does the machinery work."
82
- 2. Pillar 1 real replication (1c from-base UF) + 1d loss-formula parity.
83
- 3. Pillar 2a eval-parity (reproduce 30.28) → 2b deltas.
84
- 4. Pillar 3 — once the trainer is trusted.
85
-
86
- ## Execution log
87
-
88
- ### 2026-06-20 — Pillar 1 quick validations: PASS
89
-
90
- **Machinery + gradient correctness — GREEN.** `MLX_BUN_TEST_TRAIN=1 bun test
91
- train-autograd train-e2e train-orpo-e2e` → 8 pass / 0 fail, real training on
92
- MiniCPM5 (11.3s). `train-autograd` confirms the backward matches autograd.
93
-
94
- **ORPO positive control (prefer-uppercase, 12 train / 4 val, 120 iters, lr 1e-3) — PASS.**
95
- Held-out preference accuracy **1.000 by step 10**, margin **5.5 → 4.0** (noisy at lr=1e-3
96
- but accuracy solid). Logged: `runs/orpo-pc.{json,csv}`.
97
-
98
- **DPO positive control (same data) — PASS, cleaner.** Accuracy **1.000 from step 10**,
99
- margin **monotonic 6.46 → 9.67**. Logged: `runs/dpo-pc.{json,csv}`.
100
-
101
- **Conclusion: the preference machinery is validated.** On a learnable preference both
102
- DPO and ORPO drive accuracy to 1.0 and the margin wide open (vs UF's flat ~0.12). A
103
- broken trainer could not. ⇒ **The UF near-chance result is the DATA, not a bug** — UF
104
- pairs are genuinely subtle for a 1B (both responses plausible); "prefer uppercase" is
105
- trivially separable. The smoking gun is explained: implementation sound, lever weak.
106
-
107
- **Gotcha found (recorded so we don't repeat it):** `AdapterManager.mount` (the *serving*
108
- hot-swap path) does **not** reflect into `branchLogpMean` (the *training* forward) — an
109
- external base-vs-adapter `orpoMetrics` measurement via mount returns bit-identical
110
- numbers (measured: 0.500/0.1463 both). Measure training-side metrics via the
111
- `trainLora` emit / loraState path (`scripts/experiments/pref-control.ts`), not mount.
112
-
113
- **Logging for plotting:** `runs/<stem>.{json,csv}` — per-step train `{loss, accuracy,
114
- margin}` + per-eval val `{loss, accuracy, margin}`. CSV columns: `phase,step,loss,
115
- accuracy,margin`. Tools: `scripts/experiments/pref-control.ts` (train+log),
116
- `scripts/experiments/measure-pref.ts` (standalone adapter eval — superseded by the
117
- emit path for training metrics; see gotcha).
118
-
119
- ### 2026-06-20 — Pillar 2a: capability-harness parity. Two bugs found + fixed.
120
-
121
- **The first-measure step caught two harness bugs** (exactly its purpose — never trust a
122
- delta until the harness reproduces the published baseline):
123
-
124
- 1. **Thinking mode.** The eval rendered the chat template's *default* (thinking-on for
125
- MiniCPM5); optiq's numbers are **non-thinking** (HF card: IFEval 64.7 is non-thinking).
126
- Symptom: IFEval **36.7%** vs 64.7. **Fix:** `src/eval/runner.ts` `generateText` now
127
- renders `enableThinking: false` by default (env `MLX_BUN_EVAL_THINK=1` to re-enable).
128
- → IFEval **73.3%** (n=30), optiq ballpark.
129
- 2. **HumanEval oracle-python path.** `src/eval/tasks/humaneval.ts` hardcoded
130
- `/Users/joshrossi/Code/mlx-lm/.venv/bin/python` — wrong on this machine (it's
131
- `mlx-lm-example`), so every code-exec spawned a missing interpreter → **0%**. **Fix:**
132
- env-overridable `MLX_BUN_ORACLE_PYTHON` (committed default = reference box; never
133
- re-commit the path). → HumanEval **53.3%** (n=15), optiq 57.9.
134
-
135
- **Post-fix parity (base CPM5, non-thinking, n=20 — all ballpark):**
136
-
137
- | | MMLU | GSM8K | IFEval | BFCL | HumanEval | HashHop |
138
- |---|---|---|---|---|---|---|
139
- | ours | 55.0 | 10.0 | 75.0 | 0.0 | ~53 | 0.0 |
140
- | optiq | 52.4 | 2.7 | 64.7 | 0.0 | 57.9 | 4.0 |
141
-
142
- ⇒ **harness reproduces optiq.** Small-n inflation on GSM8K/IFEval will settle toward
143
- optiq on the full set. **Exp-1 baseline harness VALIDATED.**
144
-
145
- ### Ready-to-fire sequence (everything staged; only GPU time remains)
146
-
147
- All measurement tools validated. `scripts/eval.ts` now takes `--adapter <dir>` (mounts the
148
- trained LoRA → x2). `ORC=/Users/joshrossi/Code/mlx-lm-example/.venv/bin/python` below.
149
-
150
- 1. **x1** (running): `MLX_BUN_ORACLE_PYTHON=$ORC bun scripts/eval.ts capability --candidate MiniCPM5`
151
- 2. **Train** (user): from-base ORPO/UF → `./adapters/cpm5-uf-frombase` (command in chat).
152
- 3. **x2 (Exp 1 after):** `MLX_BUN_ORACLE_PYTHON=$ORC bun scripts/eval.ts capability --candidate MiniCPM5 --adapter ./adapters/cpm5-uf-frombase` → compare to x1.
153
- 4. **Exp 2 gen (GPU):** `bun scripts/experiments/prefbench.ts gen mtbench ./adapters/cpm5-uf-frombase mtbench-uf` (and `gen alpaca … alpaca-uf 200` for a subset).
154
- 5. **Exp 2 judge (codex, anytime):** `bun scripts/experiments/prefbench.ts judge mtbench-uf` → TRAINED win-rate vs BASE.
155
-
156
- ### Next
157
- - **Full baseline:** see step 1 (running). **(long → user-launched)**
158
- - **Train (the "do"):** from-base ORPO on UF (`pref-control.ts`, command in chat). **(long → user-launched)**
159
- - **Re-measure → x2**, compare to x1. Exp 1 done.
160
- - **Exp 2 judge — VALIDATED (keyless).** No OpenAI key needed: the judge shells out to
161
- `codex exec -m gpt-5.4-mini` (codex's own auth), forcing structured `{"winner":...}` via
162
- `--output-schema` and reading the clean verdict from `-o`. `scripts/experiments/llm-judge.ts`
163
- — `judgeOnce` + `judgePair` (judges BOTH orders to cancel small-judge position bias).
164
- Positive control: **3/3 obvious good-vs-bad pairs, good won both orders, zero flips.**
165
- 1bx vs 1bx1; consistency (same judge both sides), not absolute comparability to the paper's GPT-4.
166
- - **Exp 2 harness — STAGED.** Prompts downloaded: `~/.cache/mlx-bun/eval-data/{mt_bench.jsonl
167
- (80), alpaca_eval.json (805)}`. Two-phase runner `scripts/experiments/prefbench.ts`:
168
- `gen <mtbench|alpaca> <adapterDir> <stem> [limit]` (GPU — base then trained, non-thinking)
169
- → `runs/<stem>.responses.jsonl`; `judge <stem> [limit]` (codex) → TRAINED win-rate vs BASE,
170
- judging trained-vs-base **directly** (head-to-head, not vs a fixed reference). Only the `gen`
171
- phase needs GPU; everything else is validated. Fire after the from-base training produces
172
- `./adapters/cpm5-uf-frombase`.
173
- - **1c real / 1d parity** — still open (lower priority now the positive controls + harness parity are green).
@@ -1,199 +0,0 @@
1
- # Chat UI Vision: The Model That Knows You
2
-
3
- **Stance: memory/personalization-first.** Every other axis in this
4
- doc — speed, tools, LoRA routing, privacy — is real, but it is in
5
- service of one idea: mlx-bun is the only local chat surface where the
6
- model visibly, auditably gets better at being *yours* over time. If we
7
- build a fast, private, tool-capable chat app that doesn't make that
8
- tangible on screen, we've built LM Studio with worse artifacts. That is
9
- not the plan.
10
-
11
- ## The feeling
12
-
13
- Open the app. It's not a hero screen with generic suggestion chips —
14
- it's a hero screen that already knows something. Not in a creepy way:
15
- in the way a good assistant who's worked with you for months starts a
16
- Monday with "want me to pick up the Lisbon itinerary thing from
17
- Thursday?" instead of "How can I help you today?" It should feel like
18
- walking into a room where someone has been quietly paying attention,
19
- not opening a fresh terminal.
20
-
21
- The tell, mechanically: a chat with mlx-bun after a month of use is a
22
- *different product* from day one — not because we shipped a new model,
23
- but because the sidebar, the hero, and the answers themselves carry
24
- accumulated context the user can see, correct, and trust. Cloud
25
- chatbots fake a version of this behind a black box on someone else's
26
- server. Local competitors (LM Studio, Ollama, macMLX) don't attempt
27
- it — stateless between chats by design. Open WebUI and AnythingLLM
28
- attempt it as prompt-stuffing into a flat fact list. Odysseus gets
29
- closest (memory + skills) but on vLLM/llama.cpp infra with no adapter
30
- concept at all. **Nobody combines memory-as-training-artifact with
31
- weight-level LoRA routing and native MLX speed. That combination is the
32
- whole pitch, and today it's invisible in our own UI** — the vault, the
33
- memory tools, and the adapter runtime already exist server-side; none
34
- of it shows on screen.
35
-
36
- ## The five things that make this unmistakable
37
-
38
- **1. Memory is a visible citizen of the chat, not a silent tool call.**
39
- Today `memory_search`/`memory_read` fire invisibly inside a generic
40
- tool-call card indistinguishable from a bash command. The redesign
41
- gives memory its own visual language: when the model consults the
42
- vault mid-answer, a small soft-colored chip appears inline — not a
43
- context dump, not an approval gate (it's read-only, never needs
44
- permission), just a quiet citation: **"grounded in: Photography,
45
- Lisbon-2026"**. Click it, it expands to the exact section read. This
46
- is the single highest-leverage UI change in the whole plan: it turns
47
- an architectural property ("the model is grounded in your vault") into
48
- a *felt* one, every single turn, for free, using tool-call
49
- infrastructure that already exists.
50
-
51
- **2. A real Memory surface — not a settings toggle, a workspace.** New
52
- 8th tab (or better: reachable via one click from the sidebar, since
53
- memory is chat-adjacent, not admin-adjacent): a vault browser. Articles
54
- + categories on the left, a reading pane on the right, a wikilink graph
55
- view (the backend already resolves `memory_links` — nobody has drawn
56
- it). Critically: a **git-history scrubber** on every article, because
57
- self-healing-through-correction (the wiki updates itself when you
58
- contradict a prior claim) is our best differentiator-in-the-flesh and
59
- today it happens with zero visible seam. Correct the model about your
60
- camera body in a chat on Tuesday; open the Photography article on
61
- Wednesday and see the diff, dated, with the source conversation linked.
62
- This is the "watch it happen" answer to ChatGPT/Claude's opaque
63
- "Manage Memories" list — we don't just show *what* is remembered, we
64
- show *how it changed and why*, because the whole pipeline runs on the
65
- user's own disk.
66
-
67
- **3. LoRA adapters are a routing story, not a filename dropdown.** The
68
- current `<select>` lists raw ids (`minicpm5-chunk-final · r16`). The
69
- redesign gives every adapter a name, a one-line specialty, and a
70
- *kind*: **memory adapters** (trained nightly from the vault — these are
71
- the "gets to know you" adapters) versus **task adapters** (coding,
72
- writing-voice, whatever a user trains deliberately). The composer shows
73
- a small persistent chip: **"grounded in your Writing adapter"** with a
74
- one-click swap, and — since the backend already supports it — a
75
- **stacking** affordance (memory adapter + task adapter together,
76
- visibly, not just via a hidden `a+b` string). This is where LoRA
77
- routing and memory literally become the same feature in the UI: a
78
- memory-LoRA *is* accumulated personalization made concrete in weights,
79
- and that's a claim no competitor's "persona" or "preset" system
80
- (LM Studio Presets, Msty Personas, Ollama Modelfiles) can make, because
81
- none of them adapt weights per user.
82
-
83
- **4. Speed is shown, not hidden, because it's the substrate memory runs
84
- on.** A live perf strip near the composer — tok/s, TTFT, prompt-cache
85
- hit (already computed server-side, never surfaced), a plain-English
86
- serving-lane badge ("batched ×3" / "spec-decode active"). This isn't a
87
- generic benchmarking flex: it's what makes "the model reads your whole
88
- vault before answering, every time, and it's still instant" credible
89
- instead of hopeful. Fast local retrieval is worthless if it feels slow.
90
-
91
- **5. Tool-call and approval UI as a trust surface for an agent with
92
- real disk access.** The approval gate is fully built (per-call
93
- allow/deny, diff preview) but dead in web chat today — the browser
94
- tool allowlist excludes bash/edit/write entirely. Ship a "Power" mode
95
- that widens the toolset with the approval cards already built, styled
96
- as inline code-review hunks (LM Studio's argument-editable pattern,
97
- Jan's non-blocking inline cards). This matters to the memory thesis
98
- specifically: a vault the model can *write* to, not just read, is the
99
- next step after this redesign, and users need to already trust
100
- approval before we get there.
101
-
102
- ## Making it tangible in the surface
103
-
104
- **Layout.** Keep the two-pane shape (sidebar + thread) — it's not
105
- broken, and Msty/Claude/ChatGPT converge on it. Change what the sidebar
106
- *contains*: above the flat session list, a compact **Memory status
107
- strip** — vault article count, "last synthesis: 6h ago, 3 articles
108
- updated," a dot that goes amber if synthesis is overdue. This is
109
- `vaultStatus()` (already returns exactly this data) surfaced for the
110
- first time. One click opens the Memory workspace as a slide-over, not a
111
- full tab switch — memory should feel adjacent to chat, not a separate
112
- destination.
113
-
114
- **Composer.** Left of Send: the adapter chip (kind-colored — memory
115
- adapters warm, task adapters cool), click to open a compact router
116
- panel (available/loaded/selected, RAM cost per loaded adapter, stack
117
- toggle). Right of the textarea: the perf strip. Above the composer:
118
- typing `#` surfaces both attached-file context AND vault articles in
119
- one unified picker, because "attach a file" and "recall something I
120
- told you" are the same retrieval gesture from the user's point of view.
121
- Don't teach two mental models for "give the model context."
122
-
123
- **Messages.** Each assistant bubble gets, for the first time, a real
124
- action row (copy — currently missing outside code blocks, regenerate,
125
- edit-and-branch with the ChatGPT/Claude convention of a lightweight
126
- `< 1/2 >` sibling toggle rather than a full tree). The memory-citation
127
- chip attaches only when memory tools actually fired that turn — never
128
- fabricated, because false positives here destroy the trust the feature
129
- depends on.
130
-
131
- **Model & adapter switching.** The nav model label goes from a static
132
- span to a real switcher (currently zero affordance, a stark gap for a
133
- product built on per-model specialization). The adapter panel sits next
134
- to it, not buried in a settings modal.
135
-
136
- **Tool-call display.** Three visual tiers, not one generic card: (a)
137
- read-only tools (file read, web fetch) render minimally, collapsed,
138
- auto-allowed; (b) memory tools render as the soft citation chip from
139
- differentiator #1 — deliberately *not* styled like a tool call; (c)
140
- mutating tools (bash/edit/write, once Power mode exists) render as the
141
- inline approve/deny code-review-hunk card with visible diff. Same
142
- underlying `tool_call` event stream, three renderers — conflating "read
143
- your camera preferences" with "wants to delete a file" in one visual
144
- language is exactly what makes today's UI feel generic.
145
-
146
- **Onboarding.** The <1-minute install-to-chat promise gets a second
147
- clause: install-to-chat-*that-remembers*-under-two-minutes. First-run
148
- hero adds one honest, skippable memory-consent step ("Let mlx-bun keep
149
- a personal notes vault on your Mac? Read, edit, or delete it anytime —
150
- it's just Markdown files") in the same breath as the first message, not
151
- buried in a CLI-only `mlx-bun memory init`. Consent has to happen
152
- *before* the flywheel can start proving itself.
153
-
154
- ## What we deliberately don't build
155
-
156
- - **No enterprise/multi-user layer** — no RBAC, no Open-WebUI-style
157
- Channels, no admin console. mlx-bun is single-user by identity.
158
- - **No general-purpose agent-flow builder** (AnythingLLM's Agent Flows,
159
- Msty's Turnstiles). Automation, if any, is scoped narrowly to what
160
- the synthesis pipeline needs, not a drag-and-drop canvas.
161
- - **No cloud tier, no hosted anything** — no Ollama-style `:cloud`
162
- hybrid. "Escalate to a bigger model" means local spec-decode against
163
- a larger local target, never a paid API.
164
- - **No email/calendar/documents workspace clone** (Odysseus's scope
165
- creep). Personal-context connectors, if they ever happen, are
166
- read-only memory *feeders*, not a productivity suite to maintain.
167
- - **No full conversation-tree graph view.** The lightweight
168
- sibling-toggle branch UI (ChatGPT/Claude's convention) is the right
169
- amount of investment; neither incumbent ships a real tree either.
170
- - **No page-level PDF citation rendering as v1.** Filename + snippet
171
- citation gets most of the trust benefit for a fraction of the
172
- engineering; save PDF-aware rendering for later.
173
- - **No speech-to-speech voice mode as a v1 commitment** — a bolt-on
174
- STT→LLM→TTS pipeline reads as worse than what users now expect;
175
- scope as future work, not parity-by-next-release.
176
- - **No unsandboxed shell tool shipped quietly.** If Power mode widens
177
- the toolset to bash/edit/write, the approval-gate trust surface
178
- ships *with* it, not after — Odysseus's unsandboxed bash tool and
179
- its 48-hour-patched CVEs are the cautionary tale.
180
- - **No competing on raw model-catalog breadth** (Ollama's library,
181
- LM Studio's HF browser). MLX-only by identity; a focused, well-labeled
182
- local model/adapter list beats a sprawling catalog we'd have to
183
- maintain against a moving target.
184
-
185
- ## Why this ordering, not another
186
-
187
- Speed, tool UX, and multi-adapter composition are all worth building —
188
- the research surfaces excellent, copyable patterns for each (Jan's
189
- inline approval cards, LM Studio's hardware-fit indicator, Msty's
190
- split-pane compare). But every one of those patterns is *matchable* by
191
- a well-resourced competitor within a release cycle. The memory flywheel
192
- is not: it requires a vault architecture, a synthesis pipeline, an
193
- adapter-namespaced KV runtime, and a product culture willing to treat
194
- "gets better at being yours" as the headline rather than a checkbox —
195
- all of which mlx-bun already has built and simply hasn't surfaced. The
196
- redesign's job is not to invent new backend capability. It's to stop
197
- hiding the one capability nothing else in this market has, and frame
198
- every other improvement (speed HUD, tool cards, adapter switching) as
199
- infrastructure *for* that capability, not a parallel feature track.
@@ -1,50 +0,0 @@
1
- # The mlx-bun chat surface: a vision
2
-
3
- *Draft vision, product/design lead pass — 2026-07-06. Bold stance: reimagine the chat surface from scratch. Companion to the market research and current-state audit that produced it; see `docs/archive/planning/web-ui-pass-plan.md` for the tactical bug list and `docs/design/adapters-end-to-end.md` / `docs/design/memory-system.md` for the backend contracts this vision assumes.*
4
-
5
- ## The feeling
6
-
7
- Open mlx-bun and it should feel like sitting down with someone who already knows you — not a search box you interrogate, not a terminal you configure, not a dashboard you administer. Every other local-AI chat UI (Open WebUI, LM Studio, Jan, Ollama's app) is, underneath the polish, the **same product**: a stateless request/response window in front of a model file. They compete on how many knobs they expose. We are not building a better knob panel. We are building the only chat surface where "it remembers what I told it three weeks ago, and it's faster than the thing it's replacing" is literally, verifiably true — and where the UI's job is to make that trust legible turn by turn, not assert it in marketing copy.
8
-
9
- `src/web/app.html` has already solved the hard infrastructure problem (streaming, tool-calls, sessions, steering) and completely missed the product problem: memory is invisible, LoRA routing is a bare `<select>`, and the first thing a new user sees is marketing copy about privacy with zero proof of personalization on screen. The redesign's job is not "add more tabs." It's: collapse the surface to what a person actually touches every day (chat), and make the three things nobody else can build — memory that becomes weights, routed adapters, an engine fast enough to show its work — into things you can *see happen*.
10
-
11
- ## Five things that make this unmistakably not-Open-WebUI
12
-
13
- **1. Memory has a face, and it's a citation, not a settings toggle.**
14
- Every competitor's "memory" (ChatGPT, AnythingLLM, Odysseus) is a flat fact-list re-injected into a system prompt — legible after the fact, invisible during the conversation. We already run `memory_search`/`memory_read` silently on every turn (`src/memory/tools.ts`, wired into `webChatToolAllowlist`) and render them with the same generic wrench icon as `bash`. Instead: when a memory tool fires, render a distinct, quieter card — a small "📖 Photography" chip inline with the response — that expands on click to show the exact vault section that grounded that sentence. No context dump, no "as an AI with access to your notes" narration, just a footnote that proves the flywheel is real. This costs almost nothing: the event stream already distinguishes memory calls; we just have to stop rendering them like `bash`.
15
-
16
- **2. Adapters are personas you route to, not files you pick.**
17
- Nobody else has hot-swappable LoRA adapters with adapter-namespaced KV — not LM Studio, not Ollama, not Msty (whose "Persona Studio" is prompt-only). We already have `/v1/adapters`, three-tier state, and per-request injection; the UI throws it away on a `<select>` full of raw filenames. Instead: a **persona rail** above the composer, one pill per named persona (adapter + system prompt + tool allowlist + memory scope bundled, a richer Ollama Modelfile), each with a one-line specialty, a resident/cold dot, and RAM cost on hover. Switching shows a "new context segment" micro-transition (genuine, not cosmetic — that's what adapter-namespaced KV means), and a Msty-style split-compare fires one prompt at two personas side by side to *prove* the adapter earns its keep.
18
-
19
- **3. Speed is a HUD, not a footnote.**
20
- Today tok/s is a dim gray number after the message finishes. Every other local tool either hides serving mechanics (Open WebUI) or shows only tok/s (Ollama `ps`, LM Studio). We control the whole stack down to spec-decode and batch slots. A persistent strip near the composer: live tok/s *during* the stream, TTFT, a context-fullness ring, and a lane badge — "draft+verify (dspark)" vs "batched ×3" vs "serial" — since mlx-lm's own architecture treats these as mutually exclusive lanes and users should see which one they're in. An internal engineering decision becomes a felt, screenshot-able proof point.
21
-
22
- **4. Tool-calls are a code-review hunk, not a permission dialog.**
23
- We already have per-call approve/deny in `pi-web.ts` with a diff-style card; Jan and LM Studio validate the pattern (inline, non-blocking, argument-editable), nobody's pushed it further. Ours should feel like reviewing a PR: syntax-highlighted args, a blast-radius line ("will write 40 lines to `src/foo.ts`"), three-state approval (once / always-this-session / deny) persisted to disk so it survives restarts (Claude Desktop and Cowork visibly get this wrong), and read-only tools pre-approved by default so fatigue only hits tools that deserve scrutiny.
24
-
25
- **5. The whole thing installs to a felt "it knows me" moment in under a minute.**
26
- Every competitor's onboarding ends at "chat works." Ours ends at "chat works, and it already asked, gently, whether it can start learning from you." First run: pick a hardware-fit-scored starter model, land in chat, and the hero screen's first chip isn't "what is mlx-bun?" — it's a dismissible memory-consent card ("Let mlx-bun remember what matters across chats? Nightly, local, git-tracked, editable any time.") where a philosophy statement used to be. Say yes and the vault seeds; say no and it never mentions it again — the one screen where "local-to-you" becomes an action instead of a claim.
27
-
28
- ## Making the differentiators tangible, in one line each
29
-
30
- **Privacy** = a one-click "Temporary chat" pill, honestly stronger than ChatGPT/Claude's (theirs retains 30 days server-side; ours touches no third party, ever) — stated once in a tooltip, otherwise proven by the UI's total silence about accounts or "sync." **Memory** = the citation chips plus a **Memory panel** (slide-over, not a 6th tab): vault search, per-article git-diff so a user can *watch* an article self-correct, and a nightly synthesis changelog — the mechanism shown, not asserted. **LoRA routing** = the persona rail plus a routing table in settings (which surface defaults to which persona) with the three-tier lifecycle (available/loaded/selected) shown honestly, RAM cost visible before it's spent. **Speed** = the always-on HUD plus a Benchmark strip in Status (live prefill/decode tok/s, TTFT, peak RSS, spec-decode acceptance rate, cold-start — macMLX's pattern, extended with what only dspark can show). **Local tools** = the code-review-hunk approval cards plus a curated first-run toolset (file read, web fetch, our own `memory_search`) so day one isn't a JSON config exercise.
31
-
32
- ## Concrete screens
33
-
34
- **Layout.** Kill the 7-tab flat nav. One primary surface (Chat), with Quantize / Fine-tune / Build Dataset / Curves / Routes / Status collapsed behind a single **Developer** toggle (LM Studio's User/Power-User/Developer pattern, flattened to two states). A new user's day-one mental model: sidebar, thread, composer, persona rail, speed HUD — not seven tabs including a fine-tuning dashboard before they've sent one message.
35
-
36
- **Sidebar.** Full-text session search (not just title — unlike Claude's well-known gap), and a real mobile treatment: a slide-over drawer behind a hamburger, not today's "delete the sidebar at 760px with no replacement."
37
-
38
- **Thread.** Actions that don't exist today: copy on any assistant message, edit-and-resend that forks non-destructively with an inline `< 1/2 >` branch switcher (a linear toggle, not a tree — both cloud incumbents prove that's the right ceiling), regenerate, and "regenerate with a different persona." Streaming gets fixed architecturally: block-level memoization (only the live tail re-parses) instead of today's `innerHTML = mdToHtml(fullText)` on every token — O(n²) over a response, and the thing most likely to make a spec-decode-accelerated model *feel* slow because the frontend can't keep up with its own backend. Code fences get real syntax highlighting; math gets KaTeX — both zero today.
39
-
40
- **Composer.** Autosize textarea, file/image attach (existing), a persona pill, live steering (existing — keep it), and the sampling popover expanded from three sliders to the full server-supported set (min_p, XTC, penalties, logit_bias) behind an "Advanced" disclosure — closing a plain parity gap against the mlx-lm oracle.
41
-
42
- **Memory & model switching.** A slide-over Memory panel (vault search, git-diff per article, synthesis changelog) plus a vault-status chip in the composer, and a real model switcher — today's `#nav-model` is a read-only label with no click handler, an odd miss given the pitch is fast tier-switching between e4b/12B/26B.
43
-
44
- **Tool-call display.** Inline, non-blocking approval cards (Jan's pattern) with argument diffs, blast-radius text, three-tier persistence, and pre-approved read-only defaults.
45
-
46
- ## What we deliberately do not build
47
-
48
- No Channels or multi-user/Slack-style shared spaces (Open WebUI's most enterprise-flavored feature) — mlx-bun is single-user by identity. No RBAC, org admin, or plugin marketplace — there is no "org" to administer. No general-purpose no-code agent-flow canvas (AnythingLLM's Agent Flows, Msty's Turnstiles) — if one ever justifies itself, scope it to the memory/synthesis pipeline, not general automation. No speech-to-speech voice mode as a v1 commitment — it would visibly disappoint next to Advanced Voice Mode if half-built; an honest stretch goal, not table stakes. No paid cloud escalation tier (Ollama Cloud) — any "bigger model" story stays local (dspark spec-decode against a larger local target). No email/calendar/document-suite bloat (Odysseus), even reframed as "memory feeders," until the core loop is airtight. And no sandbox-theater for a shell tool we can't actually sandbox — if we ship tool execution, we say plainly it runs on your machine with your permissions.
49
-
50
- The through-line: every screen either makes local-to-you *provable* or it doesn't ship. Speed you can see. Memory you can read and correct. Adapters you can name, compare, and trust. Everything else is Open WebUI's problem to solve, not ours.
@@ -1,77 +0,0 @@
1
- # Chunk-task quality roadmap (2026-06-17)
2
-
3
- Where the MiniCPM5 chunking adapter stands and what raises real segmentation
4
- quality. Companion to the chunk-eval metric vs. accuracy finding (score = well-formedness, not gold accuracy) and
5
- [`docs/archive/investigations/chunk-finetune-experiment.md`](../investigations/chunk-finetune-experiment.md).
6
-
7
- ## Where we are
8
-
9
- - Adapter **solved the output contract**: 0/25 invalid JSON (base model: 22/25
10
- invalid — unusable). That's the entire 95.10 well-formedness score.
11
- - Adapter is **mediocre at the actual task**: vs-gold boundary ~35.6, label ~52.0,
12
- all 25 cases in disagreement (`reports/chunk-eval-cpm-2026-06-17.html`).
13
- - Dominant failures: `under_split` 17/25, TAIL GAP / `missed_content` 9,
14
- hallucinated anchors 4 — explained by the training-data bias below.
15
-
16
- ## Step 1 (the lever): fix the training data
17
-
18
- The data (`chunk-data-le4000`) is **86% single-chunk** (626/730 examples = 1 chunk,
19
- mean 1.16, max 4). The model learned a strong "one short chunk" prior → it
20
- under-splits and truncates coverage. A 1B model on this diet isn't at its capacity
21
- ceiling, it's mimicking its data.
22
-
23
- - Rebuild the dataset so the **chunk-count distribution matches real operational
24
- segmentation**, not a single-topic majority.
25
- - Teach **full-transcript coverage** (spans that reach the end — kill the tail gaps).
26
- - This is the #1 lever. Do it before touching capacity or iters.
27
-
28
- ## Eval methodology: do NOT judge against codex's gold
29
-
30
- **Codex over-segments — it splits articles ~2× what we actually do in operations.**
31
- So the current gold is inflated: judging the adapter as `under_split` is partly an
32
- artifact of a gold that over-splits. The under-split signal is real but smaller than
33
- the verdict count suggests.
34
-
35
- - Recalibrate the gold to **operational granularity** (use real-ops segmentations as
36
- the reference, or down-weight codex's extra splits) before trusting `bs`/`ls`.
37
- - Until the gold matches ops, the report **understates** the adapter.
38
- - Going forward, optimize against operational gold, not codex, and not the saturated
39
- well-formedness score.
40
-
41
- ## rank / scale: tune for a single narrow task
42
-
43
- We are telling CPM to do exactly **one** thing: take a sequence of messages and find
44
- the topic seams. That narrowness should drive the LoRA capacity knobs deliberately —
45
- revisit the inherited rank 16 / scale 1 rather than carrying old defaults. Folds into
46
- the "configurable training params with mlx-lm defaults" task (rank / scale / num_layers
47
- / LR / dropout selectable at run start). The question to answer empirically: how little
48
- rank does this one transformation need, and what scale/LR pairs with it.
49
-
50
- ## Streaming / windowed segmentation mode
51
-
52
- Whole-transcript-at-once is one framing; it likely isn't the operational one. Explore:
53
-
54
- - A **sliding message window** — segment incrementally as messages arrive, over a
55
- bounded window, rather than ingesting the entire conversation.
56
- - "Lots of different ways to segment these conversations" — try multiple task
57
- formulations (whole-transcript vs windowed vs streaming/online) and measure which
58
- matches operations and trains best on a small model.
59
- - Implications for training data shape (windowed targets) and for serving (a streaming
60
- endpoint / incremental decode).
61
-
62
- ## Evaluate other base models
63
-
64
- CPM5-1B is tiny and was a memory-driven pick. Run a **bake-off**: score other base
65
- models on the chunk task (same gold, same harness) to find the best base for the
66
- chunking adapter. Capacity is the second lever after data — and the e4b +
67
- segmented-backward work exists precisely to train bigger models at long context. See
68
- [[e4b-lora-training-seqlen-ceiling]], [[segmented-backward-landed]].
69
-
70
- ## Ordered plan
71
-
72
- 1. **Fix the training data** (multi-chunk + full coverage, operational granularity).
73
- 2. **Recalibrate the eval gold** off codex toward operational segmentation.
74
- 3. **Tune rank/scale** for the single narrow task (with configurable params).
75
- 4. **Prototype streaming/windowed** segmentation; pick the framing that fits ops.
76
- 5. **Model bake-off**; move up in capacity (e4b via segmented backward) if data alone
77
- plateaus.