mlx-bun 0.0.13 → 0.3.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 (427) hide show
  1. package/README.md +71 -578
  2. package/bin/mlx-bun.mjs +1 -1
  3. package/docs/README.md +91 -0
  4. package/docs/{design → archive}/hlg-sampling.md +3 -3
  5. package/docs/{design → archive/investigations}/audio-input-plan.md +4 -4
  6. package/docs/{design → archive/investigations}/colibri-glm52-port.md +1 -1
  7. package/docs/{design → archive/investigations}/diffusion-gemma-port.md +3 -3
  8. package/docs/{design → archive/investigations}/faithful-l1-consolidation.md +4 -4
  9. package/docs/{investigations → archive/investigations}/hlg-sampling-investigation.md +1 -1
  10. package/docs/{design → archive/investigations}/minicpm5-decode-megakernel.md +11 -11
  11. package/docs/{design → archive/investigations}/optimization_plan.md +1 -1
  12. package/docs/archive/investigations/pareto-specialized-runtime-findings.md +92 -0
  13. package/docs/{design → archive/investigations}/pre-colibri-stabilization.md +5 -5
  14. package/docs/{design → archive/investigations}/the-dreaming-handoff.md +2 -2
  15. package/docs/{planning → archive/planning}/chat-ui-vision.md +1 -1
  16. package/docs/{planning → archive/planning}/chunk-task-roadmap.md +1 -1
  17. package/docs/{planning → archive/planning}/curve-sampler-research-plan.md +4 -4
  18. package/docs/{planning → archive/planning}/memory-docs-and-dag-plan.md +1 -1
  19. package/docs/{planning → archive/planning}/release-notes-v0.0.9.md +1 -1
  20. package/docs/archive/planning/release-notes-v0.2.0.md +49 -0
  21. package/docs/{planning → archive/planning}/website-readme-pass-plan.md +1 -1
  22. package/docs/design/batching.md +569 -0
  23. package/docs/design/decode-speed-program.md +3178 -169
  24. package/docs/design/dreaming-nightly-pipeline.md +675 -282
  25. package/docs/design/generic-model-support.md +579 -334
  26. package/docs/design/kv-cache.md +680 -0
  27. package/docs/design/orpo-training.md +673 -1239
  28. package/docs/design/speculative-decoding.md +1627 -0
  29. package/docs/design/turboquant.md +2102 -0
  30. package/docs/design/unified-engine-frontier-plan.md +1831 -727
  31. package/docs/design/web-chat-redesign.md +666 -1083
  32. package/docs/planning/PRODUCT_ROADMAP.md +34 -1
  33. package/docs/planning/release-notes-v0.3.0.md +35 -0
  34. package/docs/planning/video-series.md +421 -0
  35. package/docs/reference/benchmarks.md +1162 -0
  36. package/docs/reference/cli.md +395 -149
  37. package/docs/reference/distribution.md +321 -181
  38. package/docs/reference/environment.md +348 -0
  39. package/docs/reference/glossary.md +39 -0
  40. package/docs/reference/library-api.md +580 -142
  41. package/docs/reference/memory.md +227 -64
  42. package/docs/reference/models.md +137 -6
  43. package/docs/reference/server-api.md +938 -422
  44. package/docs/reference/server-config.md +652 -320
  45. package/docs/reference/training.md +393 -254
  46. package/docs/reference/troubleshooting.md +166 -0
  47. package/package.json +10 -5
  48. package/src/admission-plan.ts +18 -0
  49. package/src/anthropic.ts +92 -3
  50. package/src/audio/decode.ts +2 -2
  51. package/src/audio/features.ts +2 -2
  52. package/src/backends/mlx/autoregressive.ts +108 -0
  53. package/src/backends/mlx/batch-group.ts +1646 -0
  54. package/src/backends/mlx/diffusion.ts +39 -0
  55. package/src/backends/mlx/draft-target.ts +47 -0
  56. package/src/backends/mlx/evaluation.ts +105 -0
  57. package/src/backends/mlx/fill-append.ts +45 -0
  58. package/src/backends/mlx/gateway-binding.ts +71 -0
  59. package/src/backends/mlx/graph.ts +38 -0
  60. package/src/backends/mlx/memory-client.ts +189 -0
  61. package/src/backends/mlx/memory-guard.ts +40 -0
  62. package/src/backends/mlx/methods.ts +90 -0
  63. package/src/backends/mlx/model-prompt.ts +164 -0
  64. package/src/backends/mlx/model-serving.ts +79 -0
  65. package/src/backends/mlx/prefill.ts +33 -0
  66. package/src/backends/mlx/request-policy.ts +20 -0
  67. package/src/backends/mlx/rollback.ts +51 -0
  68. package/src/backends/mlx/serial-executor.ts +273 -0
  69. package/src/backends/mlx/speculative.ts +114 -0
  70. package/src/backends/mlx/state-views.ts +26 -0
  71. package/src/backends/mlx/text-engine.ts +73 -0
  72. package/src/cli.ts +189 -61
  73. package/src/client.ts +66 -0
  74. package/src/config.ts +21 -4
  75. package/src/contracts/completion.ts +16 -0
  76. package/src/contracts/execution.ts +49 -0
  77. package/src/contracts/generation.ts +103 -0
  78. package/src/contracts/host.ts +7 -0
  79. package/src/contracts/jobs.ts +66 -0
  80. package/src/contracts/pi-provider.ts +30 -0
  81. package/src/contracts/pi.ts +259 -0
  82. package/src/contracts/resources.ts +18 -0
  83. package/src/contracts/scheduling.ts +27 -0
  84. package/src/contracts/tsconfig.json +14 -0
  85. package/src/diffusion/diffusion-generate.ts +218 -153
  86. package/src/embed.ts +1 -1
  87. package/src/engine/admission.ts +59 -0
  88. package/src/engine/cancellation.ts +38 -0
  89. package/src/engine/engine.ts +56 -0
  90. package/src/engine/execution-coordinator.ts +70 -0
  91. package/src/engine/execution-plan.ts +51 -0
  92. package/src/engine/resources.ts +42 -0
  93. package/src/engine/scheduler.ts +67 -0
  94. package/src/engine/session.ts +247 -0
  95. package/src/eval/README.md +44 -1
  96. package/src/eval/kl.ts +263 -23
  97. package/src/eval/reference-logits.ts +207 -0
  98. package/src/eval/runner.ts +10 -79
  99. package/src/eval/tasks/bfcl.ts +2 -1
  100. package/src/eval/tasks/gsm8k.ts +2 -1
  101. package/src/eval/tasks/hashhop.ts +2 -1
  102. package/src/eval/tasks/humaneval.ts +5 -4
  103. package/src/eval/tasks/ifeval.ts +2 -1
  104. package/src/eval/tasks/mmlu.ts +2 -1
  105. package/src/expert-io.ts +3 -1
  106. package/src/expert-offload.ts +3 -1
  107. package/src/fill/echo-index.ts +188 -0
  108. package/src/fill/fill-session.ts +452 -0
  109. package/src/fill/proposal.ts +68 -0
  110. package/src/fill/schema-rows.ts +506 -0
  111. package/src/fill/tool-boundary.ts +103 -0
  112. package/src/fit.ts +24 -43
  113. package/src/generate.ts +740 -337
  114. package/src/grammar.ts +14 -8
  115. package/src/harness-pi.ts +15 -34
  116. package/src/hub-rest.ts +4 -4
  117. package/src/index.ts +27 -0
  118. package/src/inference/denoising.ts +17 -0
  119. package/src/inference/graph.ts +33 -0
  120. package/src/inference/prefill.ts +39 -0
  121. package/src/inference/rollback.ts +7 -0
  122. package/src/jobs/db.ts +4 -0
  123. package/src/jobs/index.ts +2 -0
  124. package/src/jobs/job-entry.ts +15 -14
  125. package/src/jobs/runner.ts +98 -13
  126. package/src/jobs/task-client.ts +19 -0
  127. package/src/jobs/types.ts +2 -58
  128. package/src/kv-scheme.ts +199 -0
  129. package/src/kv-store.ts +459 -234
  130. package/src/lab/README.md +18 -0
  131. package/src/{assets → lab/curve}/curve-designer.html +2 -2
  132. package/src/{curve-sampler.ts → lab/curve/curve-sampler.ts} +2 -2
  133. package/src/{expert-trace.ts → lab/expert-trace/expert-trace.ts} +7 -5
  134. package/src/{model → lab/paged-kv}/paged-kv.ts +9 -6
  135. package/src/library.ts +40 -0
  136. package/src/lora.ts +18 -0
  137. package/src/media-fetch.ts +20 -4
  138. package/src/memory/article.ts +1 -1
  139. package/src/memory/chunk.ts +1 -1
  140. package/src/memory/model.ts +32 -170
  141. package/src/memory/prompts.ts +1 -1
  142. package/src/memory/rest.ts +1 -1
  143. package/src/memory/schedule.ts +1 -1
  144. package/src/memory/stages.ts +4 -1
  145. package/src/memory/vault.ts +3 -4
  146. package/src/mlx/array.ts +9 -10
  147. package/src/mlx/compile.ts +12 -2
  148. package/src/mlx/ffi.ts +66 -22
  149. package/src/mlx/materialize.ts +23 -0
  150. package/src/mlx/metal-kernel.ts +10 -11
  151. package/src/mlx/ops.ts +64 -19
  152. package/src/mlx/quantized-rows.ts +36 -0
  153. package/src/mlx/token-bitmask.ts +52 -0
  154. package/src/mlx/turboquant-kv-decode.ts +82 -0
  155. package/src/mlx/turboquant-kv-inverse.ts +122 -0
  156. package/src/mlx/turboquant-ops.ts +33 -3
  157. package/src/mlx/turboquant-tables.ts +2 -2
  158. package/src/model/batched-mask.ts +9 -3
  159. package/src/model/batched-quant.ts +2 -2
  160. package/src/model/batched-rotating-quant.ts +45 -99
  161. package/src/model/batched-rotating-state.ts +73 -0
  162. package/src/model/batched-rotating.ts +57 -106
  163. package/src/model/batched-row-storage.ts +127 -0
  164. package/src/model/compiled-decode.ts +4 -3
  165. package/src/model/diffusion-gemma.ts +8 -8
  166. package/src/model/factory.ts +87 -49
  167. package/src/model/fingerprint.ts +1 -1
  168. package/src/model/flash-attention.ts +3 -3
  169. package/src/model/gemma4-base.ts +187 -17
  170. package/src/model/gemma4.ts +6 -6
  171. package/src/model/generated/gemma4-12b.ts +52 -148
  172. package/src/model/generated/gemma4-26b.ts +34 -94
  173. package/src/model/generated/gemma4-e4b.ts +28 -76
  174. package/src/model/glm52-cache.ts +19 -9
  175. package/src/model/glm52-dsa.ts +13 -9
  176. package/src/model/glm52-memory.ts +28 -1
  177. package/src/model/implementation.ts +69 -0
  178. package/src/model/minicpm5.ts +7 -8
  179. package/src/model/profile.ts +443 -0
  180. package/src/model/qwen-append.ts +12 -0
  181. package/src/model/qwen-conv.ts +52 -0
  182. package/src/model/qwen3-delta.ts +98 -2
  183. package/src/model/qwen3-mrope.ts +252 -0
  184. package/src/model/qwen3_5-checkpoint.ts +164 -0
  185. package/src/model/qwen3_5.ts +336 -60
  186. package/src/model/support.ts +1 -1
  187. package/src/model/trellis-balanced-scatter.ts +51 -0
  188. package/src/model/trellis-linear.ts +672 -0
  189. package/src/model/trellis-shared-m.ts +151 -0
  190. package/src/model/trellis-shared-scatter.ts +144 -0
  191. package/src/model/trellis-splitk-prefill.ts +158 -0
  192. package/src/model/trellis-tiled-prefill.ts +136 -0
  193. package/src/model/trellis-vector-expand.ts +62 -0
  194. package/src/model/trellis-wide-prefill.ts +94 -0
  195. package/src/model/universal/dense.ts +1 -1
  196. package/src/model/universal/modules.ts +8 -1
  197. package/src/native/frame_extract.swift +140 -0
  198. package/src/native-pack.ts +15 -7
  199. package/src/pi-provider.ts +6 -64
  200. package/src/pi-web.ts +14 -320
  201. package/src/prompt-cache.ts +97 -54
  202. package/src/quantize/allocator.ts +1 -1
  203. package/src/quantize/atomic-output.ts +38 -0
  204. package/src/quantize/calibration.ts +2 -1
  205. package/src/quantize/config-writer.ts +16 -3
  206. package/src/quantize/index.ts +28 -1
  207. package/src/quantize/job.ts +11 -0
  208. package/src/quantize/quantizer.ts +265 -100
  209. package/src/quantize/rotate.ts +603 -0
  210. package/src/quantize/safetensors-writer.ts +79 -1
  211. package/src/quantize/sensitivity.ts +41 -59
  212. package/src/quantize/trellis.ts +586 -0
  213. package/src/quantize/weight-transform.ts +292 -0
  214. package/src/responses.ts +130 -3
  215. package/src/runtime-config.ts +81 -0
  216. package/src/sampler.ts +276 -4
  217. package/src/serve/admin-routes.ts +184 -0
  218. package/src/serve/aux-routes.ts +132 -0
  219. package/src/serve/batch-scheduler.ts +8 -1558
  220. package/src/serve/chat-request.ts +391 -0
  221. package/src/serve/chat-stage.ts +195 -0
  222. package/src/serve/checkpoint-identity.ts +64 -0
  223. package/src/serve/completion-executor.ts +354 -0
  224. package/src/serve/completion-sink.ts +157 -0
  225. package/src/serve/discovery-routes.ts +204 -0
  226. package/src/serve/generation-gateway.ts +211 -243
  227. package/src/serve/http.ts +159 -0
  228. package/src/serve/inference-request.ts +79 -0
  229. package/src/serve/isolate.ts +297 -105
  230. package/src/serve/kv-budget.ts +14 -0
  231. package/src/serve/lab-routes.ts +341 -0
  232. package/src/serve/lane-registry.ts +2 -1
  233. package/src/serve/model-admin-routes.ts +155 -0
  234. package/src/serve/model-binding.ts +43 -0
  235. package/src/serve/model-host.ts +512 -0
  236. package/src/serve/openai-wire.ts +103 -0
  237. package/src/serve/parent-application.ts +56 -0
  238. package/src/serve/pipeline.ts +33 -0
  239. package/src/serve/preparation.ts +33 -0
  240. package/src/serve/prompt-response-trace.ts +147 -0
  241. package/src/serve/request-plan.ts +162 -0
  242. package/src/serve/request-prep.ts +346 -0
  243. package/src/serve/response-lease.ts +24 -0
  244. package/src/serve/responses-client.ts +69 -0
  245. package/src/serve/session-completion-engine.ts +110 -0
  246. package/src/serve/session-search.ts +1 -1
  247. package/src/serve/static-routes.ts +101 -0
  248. package/src/serve/text-completion-stage.ts +104 -0
  249. package/src/serve/token-streams.ts +519 -0
  250. package/src/server.ts +523 -3551
  251. package/src/spec/assistant-source.ts +10 -44
  252. package/src/spec/deepspec-source.ts +6 -6
  253. package/src/spec/dflash-source.ts +9 -8
  254. package/src/spec/dspark/ab-stats.ts +3 -3
  255. package/src/spec/dspark/calibration.ts +2 -2
  256. package/src/spec/dspark/deepspec-module.ts +2 -2
  257. package/src/spec/dspark/generate-dflash.ts +2 -2
  258. package/src/spec/dspark/generate.ts +2 -2
  259. package/src/spec/dspark/loader.ts +1 -1
  260. package/src/spec/dspark/module-dflash.ts +5 -4
  261. package/src/spec/dspark/module.ts +3 -3
  262. package/src/spec/dspark/quantize-drafter.ts +1 -1
  263. package/src/spec/generate.ts +1 -1
  264. package/src/spec/glm52-mtp-source.ts +9 -1
  265. package/src/spec/ngram-source.ts +1 -1
  266. package/src/spec/prefix-state.ts +45 -0
  267. package/src/spec/qwen-mtp-source.ts +528 -0
  268. package/src/spec/serve-loop.ts +179 -213
  269. package/src/spec/source.ts +42 -10
  270. package/src/spec/two-model.ts +1 -1
  271. package/src/ssd-cache.ts +95 -24
  272. package/src/ssd-durability.ts +207 -0
  273. package/src/tool-call.ts +51 -14
  274. package/src/train/flash-cce.ts +14 -13
  275. package/src/train/forward.ts +38 -1
  276. package/src/train/loss.ts +3 -2
  277. package/src/train/prefix-shared.ts +5 -1
  278. package/src/train/segmented.ts +9 -6
  279. package/src/train/trainer.ts +9 -8
  280. package/src/vision/preprocess.ts +1 -1
  281. package/src/vision/prompt.ts +48 -2
  282. package/src/vision/qwen3vl-preprocess.ts +409 -0
  283. package/src/vision/qwen3vl-prompt.ts +196 -0
  284. package/src/vision/qwen3vl-tower.ts +555 -0
  285. package/src/vision/video-frames.ts +148 -0
  286. package/src/web/app.html +1 -1
  287. package/src/web/app.js +15 -6
  288. package/src/web/src/adapters-panel.ts +3 -3
  289. package/src/web/src/assistant.ts +2 -36
  290. package/src/web/src/chat.ts +16 -9
  291. package/src/web/src/composer.ts +4 -4
  292. package/src/web/src/hub.ts +1 -1
  293. package/src/web/src/markdown.ts +0 -0
  294. package/src/web/src/memory-panel.ts +1 -1
  295. package/src/web/src/model-picker.ts +1 -1
  296. package/src/web/src/palette.ts +1 -1
  297. package/src/web/src/protocol.ts +3 -39
  298. package/src/web/src/sessions.ts +1 -1
  299. package/src/web/src/ui-catalog.ts +4 -18
  300. package/src/web-assets.ts +47 -0
  301. package/src/weights.ts +134 -33
  302. package/docs/archive/mlx-bun-lab-report.html +0 -275
  303. package/docs/archive/wwdc-mlx-bun.html +0 -848
  304. package/docs/design/adapters-end-to-end.md +0 -205
  305. package/docs/design/batching-perf-path.md +0 -255
  306. package/docs/design/batching-v2-plan.md +0 -529
  307. package/docs/design/bucketing-stage.md +0 -197
  308. package/docs/design/compat-cli-surface-design.md +0 -230
  309. package/docs/design/docs-reorg-plan.md +0 -165
  310. package/docs/design/dspark-serving-program.md +0 -371
  311. package/docs/design/dspark-speculative-decoding.md +0 -268
  312. package/docs/design/grammar-spec-batching-integration.md +0 -301
  313. package/docs/design/memory-inference-path.md +0 -422
  314. package/docs/design/memory-synthesis.md +0 -287
  315. package/docs/design/memory-system.md +0 -237
  316. package/docs/design/mlx-lm-tool-parity-plan.md +0 -545
  317. package/docs/design/omlx-adoption-map.md +0 -98
  318. package/docs/design/orpo-dynamic-lambda.md +0 -220
  319. package/docs/design/orpo-future-enhancements.md +0 -340
  320. package/docs/design/paged-kv-cache.md +0 -214
  321. package/docs/design/parallel-slots.md +0 -567
  322. package/docs/design/parity-tier-dag.md +0 -161
  323. package/docs/design/repo-cleanup-plan.md +0 -189
  324. package/docs/design/runtime-isolation.md +0 -263
  325. package/docs/design/segmented-backward-training.md +0 -543
  326. package/docs/design/spec-decode-larger-targets.md +0 -229
  327. package/docs/design/ssd-kv-cold-tier.md +0 -288
  328. package/docs/design/structured-output.md +0 -484
  329. package/docs/design/tauri-desktop-app.md +0 -127
  330. package/docs/design/the-dreaming-master-plan.md +0 -445
  331. package/docs/design/turboquant-kv.md +0 -235
  332. package/docs/design/w4a16-compute-precision-spike.md +0 -232
  333. package/docs/design/web-chat-beat-matrix.md +0 -315
  334. package/docs/design/write-pipeline-entity.md +0 -468
  335. package/docs/investigations/curve-runs/bisector-route.json +0 -98
  336. package/docs/investigations/curve-runs/bisector-trace.json +0 -1393
  337. package/docs/investigations/curve-runs/curve-terrain.json +0 -1179
  338. package/docs/investigations/curve-runs/curve-terrain.svg +0 -42
  339. package/docs/investigations/hlg-ab.html +0 -34
  340. package/docs/investigations/hlg-explorer.html +0 -238
  341. package/docs/investigations/hlg-figs/cliff.svg +0 -1
  342. package/docs/investigations/hlg-figs/cross.svg +0 -1
  343. package/docs/investigations/hlg-figs/edges.svg +0 -1
  344. package/docs/investigations/hlg-figs/k20-grids.svg +0 -1
  345. package/docs/investigations/hlg-figs/k20-peaks.svg +0 -1
  346. package/docs/investigations/hlg-figs/lw-curve.svg +0 -1
  347. package/docs/investigations/hlg-figs/terrain.svg +0 -1
  348. package/docs/investigations/hlg-report.html +0 -262
  349. package/docs/investigations/hlg-runs/hlg-ab.json +0 -149
  350. package/docs/investigations/hlg-runs/hlg-blind-prompts.md +0 -87
  351. package/docs/investigations/hlg-runs/hlg-blind.json +0 -107
  352. package/docs/investigations/hlg-runs/hlg-cliff.json +0 -197
  353. package/docs/investigations/hlg-runs/hlg-cross.json +0 -505
  354. package/docs/investigations/hlg-runs/hlg-edge.json +0 -388
  355. package/docs/investigations/hlg-runs/hlg-eval1.json +0 -25
  356. package/docs/investigations/hlg-runs/hlg-frontier.json +0 -86
  357. package/docs/investigations/hlg-runs/hlg-grid.json +0 -242
  358. package/docs/investigations/hlg-runs/hlg-grid2.json +0 -343
  359. package/docs/investigations/hlg-runs/hlg-lw-coarse.json +0 -110
  360. package/docs/investigations/hlg-runs/hlg-map.json +0 -383
  361. package/docs/investigations/hlg-runs/run0-original.log +0 -159
  362. package/docs/investigations/hlg-runs/runA-recommended.log +0 -131
  363. package/docs/investigations/hlg-runs/runAA-cliff-cpm5.log +0 -26
  364. package/docs/investigations/hlg-runs/runAB-grid2-e4b.log +0 -18
  365. package/docs/investigations/hlg-runs/runAC-peak-e4b-partial.log +0 -25
  366. package/docs/investigations/hlg-runs/runAD-ab-samples.log +0 -8
  367. package/docs/investigations/hlg-runs/runAE-edge-e4b.log +0 -51
  368. package/docs/investigations/hlg-runs/runAF-logit-calibration.log +0 -10
  369. package/docs/investigations/hlg-runs/runAG-eval-config2.log +0 -16
  370. package/docs/investigations/hlg-runs/runB-gain-variants.log +0 -192
  371. package/docs/investigations/hlg-runs/runC-pivots.log +0 -162
  372. package/docs/investigations/hlg-runs/runD-oetf.log +0 -132
  373. package/docs/investigations/hlg-runs/runE-eotf.log +0 -162
  374. package/docs/investigations/hlg-runs/runF-shaper-working.log +0 -86
  375. package/docs/investigations/hlg-runs/runG-shaper-sweep.log +0 -101
  376. package/docs/investigations/hlg-runs/runH-wsweep.log +0 -176
  377. package/docs/investigations/hlg-runs/runI-asweep.log +0 -176
  378. package/docs/investigations/hlg-runs/runJ-knobmap.log +0 -49
  379. package/docs/investigations/hlg-runs/runK-frontier.log +0 -19
  380. package/docs/investigations/hlg-runs/runL-widemap.log +0 -65
  381. package/docs/investigations/hlg-runs/runM-frontier-emb.log +0 -15
  382. package/docs/investigations/hlg-runs/runN-verify.log +0 -116
  383. package/docs/investigations/hlg-runs/runO-frontier-seed5000.log +0 -15
  384. package/docs/investigations/hlg-runs/runP-grid-AxSm.log +0 -15
  385. package/docs/investigations/hlg-runs/runQ-grid-tgW.log +0 -15
  386. package/docs/investigations/hlg-runs/runR-blind-transcript.log +0 -79
  387. package/docs/investigations/hlg-runs/runS-cross-coherence.log +0 -33
  388. package/docs/investigations/hlg-runs/runT-cross-cpm5.log +0 -33
  389. package/docs/investigations/hlg-runs/runU-cross-12b.log +0 -33
  390. package/docs/investigations/hlg-runs/runV-lw-e4b.log +0 -22
  391. package/docs/investigations/hlg-runs/runW-lw-12b.log +0 -22
  392. package/docs/investigations/hlg-runs/runX-lw-cpm5.log +0 -22
  393. package/docs/investigations/hlg-runs/runY-cliff-e4b.log +0 -26
  394. package/docs/investigations/hlg-runs/runZ-cliff-12b.log +0 -26
  395. package/docs/planning/IDEAS.md +0 -69
  396. package/docs/reference/embedding.md +0 -197
  397. package/docs/reference/features-matrix.md +0 -100
  398. package/docs/reference/orpo-quickstart.md +0 -135
  399. package/src/flags.ts +0 -13
  400. /package/docs/{investigations → archive/investigations}/chunk-finetune-experiment.md +0 -0
  401. /package/docs/{investigations → archive/investigations}/colibri-oracle-pin.md +0 -0
  402. /package/docs/{investigations → archive/investigations}/curve-bisector-routing.md +0 -0
  403. /package/docs/{investigations → archive/investigations}/decode-roofline-lookagain.md +0 -0
  404. /package/docs/{investigations → archive/investigations}/dspark-handoff.md +0 -0
  405. /package/docs/{investigations → archive/investigations}/expert-offload-single-user-moe.md +0 -0
  406. /package/docs/{investigations → archive/investigations}/indexshare-performance-spike.md +0 -0
  407. /package/docs/{investigations → archive/investigations}/kernel-perf-review-2026-07.md +0 -0
  408. /package/docs/{investigations → archive/investigations}/lab-build-journal.md +0 -0
  409. /package/docs/{investigations → archive/investigations}/openwiki-evaluation.md +0 -0
  410. /package/docs/{investigations → archive/investigations}/orpo-base-uf-experiment-and-directions.md +0 -0
  411. /package/docs/{investigations → archive/investigations}/orpo-flash-cce-pin-leak.md +0 -0
  412. /package/docs/{investigations → archive/investigations}/orpo-uf-testing-handoff.md +0 -0
  413. /package/docs/{investigations → archive/investigations}/pi-builtin-investigation.md +0 -0
  414. /package/docs/{investigations → archive/investigations}/segmented-backward-handoff.md +0 -0
  415. /package/docs/{investigations → archive/investigations}/starter-model-port-handoff.md +0 -0
  416. /package/docs/{investigations → archive/investigations}/steel-flash-cce-handoff.md +0 -0
  417. /package/docs/{investigations → archive/investigations}/trainer-validation-experiment.md +0 -0
  418. /package/docs/{planning → archive/planning}/chat-ui-vision-memory-first.md +0 -0
  419. /package/docs/{planning → archive/planning}/journal.md +0 -0
  420. /package/docs/{planning → archive/planning}/pi-integration-review.md +0 -0
  421. /package/docs/{planning → archive/planning}/release-notes-v0.0.10.md +0 -0
  422. /package/docs/{planning → archive/planning}/release-notes-v0.0.11.md +0 -0
  423. /package/docs/{planning → archive/planning}/release-notes-v0.0.12.md +0 -0
  424. /package/docs/{planning → archive/planning}/release-notes-v0.0.13.md +0 -0
  425. /package/docs/{planning → archive/planning}/web-ui-pass-plan.md +0 -0
  426. /package/{docs/investigations → src/serve/assets}/curve-terrain.html +0 -0
  427. /package/{docs/dag → src/serve/assets}/training-inference-map.html +0 -0
@@ -0,0 +1,33 @@
1
+ // Shared contracts of the request pipeline. Each stage is one configured
2
+ // program — `run(input) → output` — and the server composes them in order,
3
+ // like a shell pipe:
4
+ //
5
+ // new ChatRequest(body) → ChatStage.run → InferenceRequest
6
+ // → InferenceStage.run → InferenceResult → wire JSON/SSE
7
+ //
8
+ // A stage knows only the interface it reads and the one it writes.
9
+ import type { CompletionEvent } from "./completion-sink";
10
+ import type { CompletionUsage } from "./completion-executor";
11
+ import type { PromptResponseTrace } from "./prompt-response-trace";
12
+
13
+ /** A request a stage refuses. `status` is the HTTP status the wire adapter
14
+ * answers with; `body` the protocol-neutral error object (adapters reshape
15
+ * it: OpenAI `{error}`, Anthropic `{type:"error"}`, Responses `{error}`). */
16
+ export class RequestError extends Error {
17
+ constructor(
18
+ readonly status: number,
19
+ message: string,
20
+ readonly body: Record<string, unknown> = { message },
21
+ ) {
22
+ super(message);
23
+ }
24
+ }
25
+
26
+ /** What flows back to the caller while a request is in flight: cancellation,
27
+ * tracing, and (for streaming surfaces) events + live usage. */
28
+ export interface RunControl {
29
+ signal?: AbortSignal;
30
+ trace?: PromptResponseTrace;
31
+ onEvents?(events: readonly CompletionEvent[]): void | false | Promise<void | false>;
32
+ onUsageProgress?(usage: Readonly<CompletionUsage>): void;
33
+ }
@@ -0,0 +1,33 @@
1
+ /** Host-side admission before grammar/media preparation can allocate native
2
+ * resources. The implementation shares the generation execution domain. */
3
+ export interface PreparationExecutor {
4
+ reserve?(kind: "media" | "constraint", signal?: AbortSignal): Promise<import("../contracts/resources").DisposableResource>;
5
+ run<T>(prepare: () => Promise<T>, signal?: AbortSignal): Promise<T>;
6
+ }
7
+
8
+ import { AdmissionPool } from "../engine/admission";
9
+ import { CancellationSource } from "../engine/cancellation";
10
+
11
+ export async function acquireReservation(pool: Pick<AdmissionPool, "acquire">, signal?: AbortSignal) {
12
+ signal?.throwIfAborted();
13
+ const cancellation = new CancellationSource();
14
+ const abort = () => cancellation.cancel("requested");
15
+ signal?.addEventListener("abort", abort, { once: true });
16
+ try { return await pool.acquire(cancellation); }
17
+ finally { signal?.removeEventListener("abort", abort); }
18
+ }
19
+
20
+ /** One retained media preparation at a time; grammar rows may form a batch. */
21
+ export function createPreparationExecutor(
22
+ run: PreparationExecutor["run"], grammarCapacity: number,
23
+ ): PreparationExecutor & { close(): void } {
24
+ const media = new AdmissionPool(1);
25
+ const constraints = new AdmissionPool(Math.max(1, grammarCapacity));
26
+ return {
27
+ run,
28
+ async reserve(kind, signal) {
29
+ return acquireReservation(kind === "media" ? media : constraints, signal);
30
+ },
31
+ close() { media.close(); constraints.close(); },
32
+ };
33
+ }
@@ -0,0 +1,147 @@
1
+ import { runtimeValue } from "../runtime-config";
2
+
3
+ export const P2R_TRACE_PREFIX = "[p2r] ";
4
+ export const P2R_TRACE_VERSION = 1;
5
+
6
+ export type P2RTraceOutcome = "success" | "error" | "abort";
7
+
8
+ export type P2RTracePhase =
9
+ | "request.body_parse"
10
+ | "request.prompt_prepare"
11
+ | "completion.total"
12
+ | "completion.placement"
13
+ | "engine.admission_wait"
14
+ | "cache.lookup_restore"
15
+ | "prefill.total"
16
+ | "prefill.batch_setup"
17
+ | "prefill.chunk"
18
+ | "prefill.kv_maintenance"
19
+ | "token_zero.total"
20
+ | "token_zero.forward"
21
+ | "token_zero.head"
22
+ | "token_zero.sample"
23
+ | "response.first_write"
24
+ | "response.final_write";
25
+
26
+ export type P2RTraceAttributes = Readonly<Record<
27
+ string,
28
+ string | number | boolean | null
29
+ >>;
30
+
31
+ export interface P2RTraceEvent {
32
+ phase: P2RTracePhase;
33
+ startMs: number;
34
+ durationMs: number;
35
+ attributes?: P2RTraceAttributes;
36
+ }
37
+
38
+ export interface P2RTraceRecord {
39
+ version: typeof P2R_TRACE_VERSION;
40
+ traceId: string;
41
+ requestId: string;
42
+ route: string;
43
+ clock: "monotonic-ms";
44
+ outcome: P2RTraceOutcome;
45
+ totalMs: number;
46
+ events: P2RTraceEvent[];
47
+ attributes?: P2RTraceAttributes;
48
+ }
49
+
50
+ type Clock = () => number;
51
+ type Emit = (record: P2RTraceRecord) => void;
52
+
53
+ export interface PromptResponseTraceOptions {
54
+ traceId: string;
55
+ requestId: string;
56
+ route: string;
57
+ clock?: Clock;
58
+ emit?: Emit;
59
+ }
60
+
61
+ /** Request-local diagnostic trace. Callers pass it explicitly because the
62
+ * continuous scheduler interleaves rows and cannot safely use ambient async
63
+ * context. No instance is created unless MLX_BUN_P2R_TRACE=1. */
64
+ export class PromptResponseTrace {
65
+ readonly #startedAt: number;
66
+ readonly #events: P2RTraceEvent[] = [];
67
+ readonly #clock: Clock;
68
+ readonly #emit: Emit;
69
+ #finished = false;
70
+
71
+ readonly traceId: string;
72
+ readonly requestId: string;
73
+ readonly route: string;
74
+
75
+ constructor(options: PromptResponseTraceOptions) {
76
+ this.traceId = options.traceId;
77
+ this.requestId = options.requestId;
78
+ this.route = options.route;
79
+ this.#clock = options.clock ?? performance.now.bind(performance);
80
+ this.#emit = options.emit ?? ((record) => {
81
+ console.error(`${P2R_TRACE_PREFIX}${JSON.stringify(record)}`);
82
+ });
83
+ this.#startedAt = this.#clock();
84
+ }
85
+
86
+ get finished(): boolean {
87
+ return this.#finished;
88
+ }
89
+
90
+ /** Start one span. The returned closer is idempotent so finally blocks and
91
+ * early exits cannot double-record a phase. */
92
+ begin(phase: P2RTracePhase, attributes?: P2RTraceAttributes): () => void {
93
+ const startedAt = this.#clock();
94
+ let closed = false;
95
+ return () => {
96
+ if (closed || this.#finished) return;
97
+ closed = true;
98
+ const endedAt = this.#clock();
99
+ this.#events.push({
100
+ phase,
101
+ startMs: startedAt - this.#startedAt,
102
+ durationMs: endedAt - startedAt,
103
+ ...(attributes ? { attributes } : {}),
104
+ });
105
+ };
106
+ }
107
+
108
+ mark(phase: P2RTracePhase, attributes?: P2RTraceAttributes): void {
109
+ if (this.#finished) return;
110
+ this.#events.push({
111
+ phase,
112
+ startMs: this.#clock() - this.#startedAt,
113
+ durationMs: 0,
114
+ ...(attributes ? { attributes } : {}),
115
+ });
116
+ }
117
+
118
+ finish(
119
+ outcome: P2RTraceOutcome,
120
+ attributes?: P2RTraceAttributes,
121
+ ): P2RTraceRecord | null {
122
+ if (this.#finished) return null;
123
+ this.#finished = true;
124
+ const totalMs = this.#clock() - this.#startedAt;
125
+ const record: P2RTraceRecord = {
126
+ version: P2R_TRACE_VERSION,
127
+ traceId: this.traceId,
128
+ requestId: this.requestId,
129
+ route: this.route,
130
+ clock: "monotonic-ms",
131
+ outcome,
132
+ totalMs,
133
+ events: [...this.#events].sort((a, b) => a.startMs - b.startMs),
134
+ ...(attributes ? { attributes } : {}),
135
+ };
136
+ this.#emit(record);
137
+ return record;
138
+ }
139
+ }
140
+
141
+ export function createPromptResponseTrace(
142
+ options: PromptResponseTraceOptions,
143
+ ): PromptResponseTrace | undefined {
144
+ return runtimeValue("MLX_BUN_P2R_TRACE") === "1"
145
+ ? new PromptResponseTrace(options)
146
+ : undefined;
147
+ }
@@ -0,0 +1,162 @@
1
+ import { snapshotGenerationPolicy } from "../backends/mlx/request-policy";
2
+ import type { GenerateOptions } from "../generate";
3
+ import type { RequestShape } from "./generation-gateway";
4
+ import type { DisposableResource } from "../contracts/resources";
5
+ import { disposeResources, ownResource } from "../engine/resources";
6
+ export type { DisposableResource } from "../contracts/resources";
7
+
8
+ export class RequestOwnership {
9
+ #owner = ownResource(new Set<DisposableResource>(), disposeResources);
10
+ #reservations = ownResource(new Set<DisposableResource>(), disposeResources);
11
+
12
+ /** Reservations live until completion, including after native ownership transfers. */
13
+ retain<T extends DisposableResource>(reservation: T): T {
14
+ this.#reservations.borrow().add(reservation);
15
+ return reservation;
16
+ }
17
+
18
+ own<T extends DisposableResource | null | undefined>(resource: T): T {
19
+ if (resource) this.#owner.borrow().add(resource);
20
+ return resource;
21
+ }
22
+
23
+ transfer(): void {
24
+ this.#owner.transfer();
25
+ }
26
+
27
+ dispose(): void {
28
+ disposeResources([{ dispose: () => this.#owner.close() }, { dispose: () => this.#reservations.close() }]);
29
+ }
30
+ }
31
+
32
+ export interface RequestPlanInput {
33
+ promptIds: number[];
34
+ options: GenerateOptions & { stopSequences: string[] };
35
+ requestedMaxTokens: number;
36
+ maxSafeContext: number;
37
+ stream: boolean;
38
+ wantLogprobs: boolean;
39
+ topLogprobs: number;
40
+ adapterIds: string[];
41
+ hasVision: boolean;
42
+ userSeed: boolean;
43
+ hasGrammar: boolean;
44
+ hasDraft: boolean;
45
+ ownership: RequestOwnership;
46
+ }
47
+
48
+ export class RequestRejection {
49
+ readonly ok = false;
50
+ readonly status = 400;
51
+ readonly error: {
52
+ message: string;
53
+ type: "memory_admission";
54
+ code: "context_over_budget";
55
+ };
56
+
57
+ readonly #ownership: RequestOwnership;
58
+
59
+ constructor(message: string, ownership: RequestOwnership) {
60
+ this.error = {
61
+ message,
62
+ type: "memory_admission",
63
+ code: "context_over_budget",
64
+ };
65
+ this.#ownership = ownership;
66
+ }
67
+
68
+ dispose(): void {
69
+ this.#ownership.dispose();
70
+ }
71
+ }
72
+
73
+ export class RequestPlan {
74
+ readonly ok = true;
75
+ readonly promptIds: number[];
76
+ readonly options: GenerateOptions & { stopSequences: string[] };
77
+ readonly shape: RequestShape;
78
+ readonly captureLogprobs: boolean;
79
+ readonly wantLogprobs: boolean;
80
+ readonly topLogprobs: number;
81
+ readonly #ownership: RequestOwnership;
82
+
83
+ constructor(input: {
84
+ promptIds: number[];
85
+ options: GenerateOptions & { stopSequences: string[] };
86
+ shape: RequestShape;
87
+ captureLogprobs: boolean;
88
+ wantLogprobs: boolean;
89
+ topLogprobs: number;
90
+ ownership: RequestOwnership;
91
+ }) {
92
+ this.promptIds = input.promptIds;
93
+ this.options = input.options;
94
+ this.shape = input.shape;
95
+ this.captureLogprobs = input.captureLogprobs;
96
+ this.wantLogprobs = input.wantLogprobs;
97
+ this.topLogprobs = input.topLogprobs;
98
+ this.#ownership = input.ownership;
99
+ }
100
+
101
+ transferOwnership(): void {
102
+ this.#ownership.transfer();
103
+ }
104
+
105
+ dispose(): void {
106
+ this.#ownership.dispose();
107
+ }
108
+ }
109
+
110
+ export type PlanRequestResult = RequestPlan | RequestRejection;
111
+
112
+ /** Compile the model-independent part of request execution into one value.
113
+ * Prompt/media construction happens before this boundary; admission, capture
114
+ * options, adapter selection, and lane shape are derived here once for chat
115
+ * and raw completions. */
116
+ export function planRequest(input: RequestPlanInput): PlanRequestResult {
117
+ const available = input.maxSafeContext - input.promptIds.length;
118
+ if (available < 1) {
119
+ return new RequestRejection(
120
+ `prompt is ${input.promptIds.length} tokens but the memory budget caps ` +
121
+ `safe context at ${input.maxSafeContext} — no room to generate; ` +
122
+ "shorten the prompt or raise --memory-budget",
123
+ input.ownership,
124
+ );
125
+ }
126
+
127
+ const options = { ...input.options };
128
+ options.maxTokens = Math.min(input.requestedMaxTokens, available);
129
+ options.seedWasExplicit = input.userSeed;
130
+ if (input.adapterIds.length) options.adapters = [...input.adapterIds];
131
+ const captureLogprobs = !input.stream && (input.wantLogprobs || input.topLogprobs > 0);
132
+ if (captureLogprobs) {
133
+ options.logprobs = input.wantLogprobs;
134
+ options.topLogprobs = input.topLogprobs;
135
+ }
136
+
137
+ const shape: RequestShape = {
138
+ hasVision: input.hasVision,
139
+ hasAdapters: !!options.adapters?.length,
140
+ hasRepetitionPenalty: !!options.repetitionPenalty,
141
+ hasLogitsExtras: !!(
142
+ options.minP || options.xtcProbability || options.logitBias ||
143
+ options.presencePenalty || options.frequencyPenalty
144
+ ),
145
+ wantsLogprobs: captureLogprobs,
146
+ userSeed: input.userSeed,
147
+ kvQuant: !!(options.kvConfig?.length || options.kvBits),
148
+ turboQuant: !!options.turboQuant,
149
+ hasGrammar: input.hasGrammar,
150
+ hasDraft: input.hasDraft,
151
+ };
152
+
153
+ return new RequestPlan({
154
+ promptIds: Object.freeze([...input.promptIds]) as number[],
155
+ options: snapshotGenerationPolicy(options),
156
+ shape: Object.freeze(shape),
157
+ captureLogprobs,
158
+ wantLogprobs: input.wantLogprobs,
159
+ topLogprobs: input.topLogprobs,
160
+ ownership: input.ownership,
161
+ });
162
+ }