mlx-bun 0.0.4

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 (210) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +362 -0
  3. package/THIRD_PARTY_LICENSES.md +41 -0
  4. package/bin/mlx-bun.mjs +32 -0
  5. package/docs/curve-designer.html +303 -0
  6. package/docs/design/adapters-end-to-end.md +201 -0
  7. package/docs/design/compat-cli-surface-design.md +227 -0
  8. package/docs/design/docs-reorg-plan.md +152 -0
  9. package/docs/design/hlg-sampling.md +340 -0
  10. package/docs/design/memory-system.md +339 -0
  11. package/docs/design/optimization_plan.md +344 -0
  12. package/docs/design/parallel-slots.md +515 -0
  13. package/docs/design/runtime-isolation.md +247 -0
  14. package/docs/design/segmented-backward-training.md +508 -0
  15. package/docs/investigations/chunk-finetune-experiment.md +84 -0
  16. package/docs/investigations/curve-bisector-routing.md +123 -0
  17. package/docs/investigations/curve-runs/bisector-route.json +98 -0
  18. package/docs/investigations/curve-runs/bisector-trace.json +1393 -0
  19. package/docs/investigations/curve-runs/curve-terrain.json +1179 -0
  20. package/docs/investigations/curve-runs/curve-terrain.svg +42 -0
  21. package/docs/investigations/curve-terrain.html +105 -0
  22. package/docs/investigations/expert-offload-single-user-moe.md +292 -0
  23. package/docs/investigations/hlg-ab.html +34 -0
  24. package/docs/investigations/hlg-explorer.html +238 -0
  25. package/docs/investigations/hlg-figs/cliff.svg +1 -0
  26. package/docs/investigations/hlg-figs/cross.svg +1 -0
  27. package/docs/investigations/hlg-figs/edges.svg +1 -0
  28. package/docs/investigations/hlg-figs/k20-grids.svg +1 -0
  29. package/docs/investigations/hlg-figs/k20-peaks.svg +1 -0
  30. package/docs/investigations/hlg-figs/lw-curve.svg +1 -0
  31. package/docs/investigations/hlg-figs/terrain.svg +1 -0
  32. package/docs/investigations/hlg-report.html +262 -0
  33. package/docs/investigations/hlg-runs/hlg-ab.json +149 -0
  34. package/docs/investigations/hlg-runs/hlg-blind-prompts.md +87 -0
  35. package/docs/investigations/hlg-runs/hlg-blind.json +107 -0
  36. package/docs/investigations/hlg-runs/hlg-cliff.json +197 -0
  37. package/docs/investigations/hlg-runs/hlg-cross.json +505 -0
  38. package/docs/investigations/hlg-runs/hlg-edge.json +388 -0
  39. package/docs/investigations/hlg-runs/hlg-eval1.json +25 -0
  40. package/docs/investigations/hlg-runs/hlg-frontier.json +86 -0
  41. package/docs/investigations/hlg-runs/hlg-grid.json +242 -0
  42. package/docs/investigations/hlg-runs/hlg-grid2.json +343 -0
  43. package/docs/investigations/hlg-runs/hlg-lw-coarse.json +110 -0
  44. package/docs/investigations/hlg-runs/hlg-map.json +383 -0
  45. package/docs/investigations/hlg-runs/run0-original.log +159 -0
  46. package/docs/investigations/hlg-runs/runA-recommended.log +131 -0
  47. package/docs/investigations/hlg-runs/runAA-cliff-cpm5.log +26 -0
  48. package/docs/investigations/hlg-runs/runAB-grid2-e4b.log +18 -0
  49. package/docs/investigations/hlg-runs/runAC-peak-e4b-partial.log +25 -0
  50. package/docs/investigations/hlg-runs/runAD-ab-samples.log +8 -0
  51. package/docs/investigations/hlg-runs/runAE-edge-e4b.log +51 -0
  52. package/docs/investigations/hlg-runs/runAF-logit-calibration.log +10 -0
  53. package/docs/investigations/hlg-runs/runAG-eval-config2.log +16 -0
  54. package/docs/investigations/hlg-runs/runB-gain-variants.log +192 -0
  55. package/docs/investigations/hlg-runs/runC-pivots.log +162 -0
  56. package/docs/investigations/hlg-runs/runD-oetf.log +132 -0
  57. package/docs/investigations/hlg-runs/runE-eotf.log +162 -0
  58. package/docs/investigations/hlg-runs/runF-shaper-working.log +86 -0
  59. package/docs/investigations/hlg-runs/runG-shaper-sweep.log +101 -0
  60. package/docs/investigations/hlg-runs/runH-wsweep.log +176 -0
  61. package/docs/investigations/hlg-runs/runI-asweep.log +176 -0
  62. package/docs/investigations/hlg-runs/runJ-knobmap.log +49 -0
  63. package/docs/investigations/hlg-runs/runK-frontier.log +19 -0
  64. package/docs/investigations/hlg-runs/runL-widemap.log +65 -0
  65. package/docs/investigations/hlg-runs/runM-frontier-emb.log +15 -0
  66. package/docs/investigations/hlg-runs/runN-verify.log +116 -0
  67. package/docs/investigations/hlg-runs/runO-frontier-seed5000.log +15 -0
  68. package/docs/investigations/hlg-runs/runP-grid-AxSm.log +15 -0
  69. package/docs/investigations/hlg-runs/runQ-grid-tgW.log +15 -0
  70. package/docs/investigations/hlg-runs/runR-blind-transcript.log +79 -0
  71. package/docs/investigations/hlg-runs/runS-cross-coherence.log +33 -0
  72. package/docs/investigations/hlg-runs/runT-cross-cpm5.log +33 -0
  73. package/docs/investigations/hlg-runs/runU-cross-12b.log +33 -0
  74. package/docs/investigations/hlg-runs/runV-lw-e4b.log +22 -0
  75. package/docs/investigations/hlg-runs/runW-lw-12b.log +22 -0
  76. package/docs/investigations/hlg-runs/runX-lw-cpm5.log +22 -0
  77. package/docs/investigations/hlg-runs/runY-cliff-e4b.log +26 -0
  78. package/docs/investigations/hlg-runs/runZ-cliff-12b.log +26 -0
  79. package/docs/investigations/hlg-sampling-investigation.md +970 -0
  80. package/docs/investigations/lab-build-journal.md +157 -0
  81. package/docs/investigations/pi-builtin-investigation.md +308 -0
  82. package/docs/investigations/starter-model-port-handoff.md +323 -0
  83. package/docs/planning/IDEAS.md +26 -0
  84. package/docs/planning/PRODUCT_ROADMAP.md +426 -0
  85. package/docs/planning/ResearchTopics.md +119 -0
  86. package/docs/planning/chunk-task-roadmap.md +77 -0
  87. package/docs/planning/journal.md +155 -0
  88. package/docs/reference/distribution.md +121 -0
  89. package/docs/reference/embedding.md +168 -0
  90. package/docs/reference/library-api.md +153 -0
  91. package/docs/reference/server-api.md +224 -0
  92. package/docs/reference/server-config.md +243 -0
  93. package/docs/segmented-backward-handoff.md +148 -0
  94. package/package.json +68 -0
  95. package/src/anthropic.ts +491 -0
  96. package/src/chat-template.ts +186 -0
  97. package/src/cli.ts +1075 -0
  98. package/src/config.ts +229 -0
  99. package/src/curve-sampler.ts +122 -0
  100. package/src/dataset/generators.ts +1087 -0
  101. package/src/dataset/index.ts +12 -0
  102. package/src/dataset/job.ts +81 -0
  103. package/src/dataset/llm.ts +71 -0
  104. package/src/dataset/registry.ts +528 -0
  105. package/src/download.ts +283 -0
  106. package/src/eval/README.md +86 -0
  107. package/src/eval/kl-prompts.ts +29 -0
  108. package/src/eval/kl.ts +294 -0
  109. package/src/eval/quality-db.ts +92 -0
  110. package/src/eval/runner.ts +102 -0
  111. package/src/eval/score.ts +49 -0
  112. package/src/eval/tasks/bfcl.ts +500 -0
  113. package/src/eval/tasks/gsm8k.ts +85 -0
  114. package/src/eval/tasks/hashhop.ts +109 -0
  115. package/src/eval/tasks/humaneval.ts +252 -0
  116. package/src/eval/tasks/ifeval.ts +354 -0
  117. package/src/eval/tasks/mmlu.ts +145 -0
  118. package/src/evaldb.ts +199 -0
  119. package/src/expert-offload-build.ts +77 -0
  120. package/src/expert-offload.ts +61 -0
  121. package/src/expert-trace.ts +67 -0
  122. package/src/fit.ts +254 -0
  123. package/src/generate.ts +451 -0
  124. package/src/harness-pi.ts +177 -0
  125. package/src/hf-push.ts +628 -0
  126. package/src/index.ts +22 -0
  127. package/src/jobs/db.ts +139 -0
  128. package/src/jobs/index.ts +29 -0
  129. package/src/jobs/job-entry.ts +106 -0
  130. package/src/jobs/runner.ts +304 -0
  131. package/src/jobs/sse.ts +114 -0
  132. package/src/jobs/types.ts +58 -0
  133. package/src/kv-store.ts +185 -0
  134. package/src/lora.ts +314 -0
  135. package/src/md-modules.d.ts +7 -0
  136. package/src/mlx/array.ts +237 -0
  137. package/src/mlx/autograd.ts +267 -0
  138. package/src/mlx/checkpoint.ts +116 -0
  139. package/src/mlx/compile.ts +158 -0
  140. package/src/mlx/custom-vjp.ts +140 -0
  141. package/src/mlx/ffi.ts +433 -0
  142. package/src/mlx/metal-kernel.ts +130 -0
  143. package/src/mlx/ops.ts +707 -0
  144. package/src/mmap.ts +90 -0
  145. package/src/model/batched-mask.ts +204 -0
  146. package/src/model/batched-rotating.ts +300 -0
  147. package/src/model/compiled-decode.ts +681 -0
  148. package/src/model/factory.ts +27 -0
  149. package/src/model/fingerprint.ts +33 -0
  150. package/src/model/flash-attention.ts +674 -0
  151. package/src/model/fused-decode-kernel.ts +305 -0
  152. package/src/model/fused-geglu-kernel.ts +87 -0
  153. package/src/model/gemma4-base.ts +1616 -0
  154. package/src/model/gemma4.ts +1012 -0
  155. package/src/model/generated/gemma4-12b.ts +526 -0
  156. package/src/model/generated/gemma4-26b.ts +500 -0
  157. package/src/model/generated/gemma4-e4b.ts +757 -0
  158. package/src/model/generated/index.ts +18 -0
  159. package/src/model/minicpm5.ts +278 -0
  160. package/src/model/qwen3-delta.ts +224 -0
  161. package/src/model/qwen3_5.ts +429 -0
  162. package/src/model/support.ts +46 -0
  163. package/src/native-pack.ts +152 -0
  164. package/src/pi-provider.ts +95 -0
  165. package/src/pi-terminal.ts +264 -0
  166. package/src/pi-web.ts +924 -0
  167. package/src/preflight.ts +123 -0
  168. package/src/prompt-cache.ts +113 -0
  169. package/src/quantize/allocator.ts +627 -0
  170. package/src/quantize/calibration.ts +180 -0
  171. package/src/quantize/config-writer.ts +132 -0
  172. package/src/quantize/index.ts +57 -0
  173. package/src/quantize/job.ts +136 -0
  174. package/src/quantize/quantizer.ts +462 -0
  175. package/src/quantize/safetensors-writer.ts +171 -0
  176. package/src/quantize/sensitivity.ts +234 -0
  177. package/src/registry.ts +336 -0
  178. package/src/responses.ts +774 -0
  179. package/src/safetensors.ts +158 -0
  180. package/src/sampler.ts +517 -0
  181. package/src/serve/batch-scheduler.ts +362 -0
  182. package/src/serve/generation-gateway.ts +160 -0
  183. package/src/server.ts +1891 -0
  184. package/src/spec/drafter.ts +261 -0
  185. package/src/spec/generate.ts +221 -0
  186. package/src/status-page.html +497 -0
  187. package/src/tokenizer.ts +38 -0
  188. package/src/tool-call.ts +242 -0
  189. package/src/train/dataset.ts +461 -0
  190. package/src/train/export.ts +32 -0
  191. package/src/train/forward.ts +229 -0
  192. package/src/train/index.ts +43 -0
  193. package/src/train/job.ts +148 -0
  194. package/src/train/lora-params.ts +194 -0
  195. package/src/train/loss.ts +342 -0
  196. package/src/train/merge.ts +195 -0
  197. package/src/train/optimizer.ts +176 -0
  198. package/src/train/rank.ts +101 -0
  199. package/src/train/segmented.ts +520 -0
  200. package/src/train/trainer.ts +600 -0
  201. package/src/tui.ts +161 -0
  202. package/src/vision/embedder.ts +168 -0
  203. package/src/vision/preprocess.ts +247 -0
  204. package/src/vision/prompt.ts +158 -0
  205. package/src/vision/siglip.ts +599 -0
  206. package/src/web/app.html +2471 -0
  207. package/src/web/skills/web-research/SKILL.md +44 -0
  208. package/src/web/skills.ts +59 -0
  209. package/src/web-tools.ts +426 -0
  210. package/src/weights.ts +91 -0
@@ -0,0 +1,123 @@
1
+ # Curve sampler: bisectors, routing, and the falsification
2
+
3
+ **Question.** The v2 log-prob transfer-curve sampler (`src/curve-sampler.ts`, the
4
+ `/curves` designer) replaces temperature+softmax with a drawn monotone curve. It
5
+ *feels* like it reaches outputs temperature can't. Three experiments ask: is that
6
+ real, where does it come from, and is the mechanism "routing through forks"?
7
+
8
+ All runs: `mlx-community/gemma-4-e4b-it-OptiQ-4bit` (e4b), greedy reference paths,
9
+ the local server / direct model load. Scripts are reusable (swap the `PROMPTS`).
10
+
11
+ ---
12
+
13
+ ## 1. Can pure temperature reproduce a curve's output? — No.
14
+
15
+ `scripts/curve-temp-match.ts`, `curve-temp-seedsearch.ts`, `curve-temp-grid.ts`,
16
+ `curve-temp-weights.ts`. Take a curve-generated sample; sweep **pure** temperature
17
+ (top-p/top-k off) across T and across seeds (the seed is a free variable), looking
18
+ for an exact match.
19
+
20
+ - **Lighthouse (creative):** 924 pure-temperature samples across T = 0.4–2.0 and
21
+ ~340 seeds → **0 exact matches, 0 crossings of the curve's fork.** The only seed
22
+ that reproduced the curve's *opening* was the curve's own seed (102), which then
23
+ forked away. Temperature shares ≤14 words then diverges into different content.
24
+ - **Weights-advice (constrained):** also 0 exact, but the miss is **cosmetic** —
25
+ temperature forks at word 6 (`when`→`with`) yet converges on the same advice.
26
+ Same meaning, different surface form.
27
+
28
+ So "couldn't temp do that anyway?" → no, but the curve's distinctiveness is
29
+ **prompt-dependent**: real divergence on open prompts, phrasing-only on constrained
30
+ ones. Different *shape* → different reachable samples. (Mechanism TBD — see §3.)
31
+
32
+ ---
33
+
34
+ ## 2. The bisector map — where do prompts route into separate timelines?
35
+
36
+ `scripts/bisector-trace.ts`. Rank-2 probe: walk the greedy reference; at each
37
+ position force the rank-2 token and greedy-continue; classify the branch as
38
+ **reconverged** (re-merges with the reference content, alignment-free longest common
39
+ token-substring) or **diverged**. A diverging branch whose rank-2 had real
40
+ probability (≥0.05) is a **genuine fork / bisector**; rank-2 with ~0 probability is
41
+ **forced** noise. Output: `docs/investigations/curve-runs/bisector-trace.json`.
42
+
43
+ Among **genuine alternatives** (rank-2 prob ≥ 5%):
44
+
45
+ | prompt | genuine alts | fork % | genuine-fork depths | deepest | path |
46
+ |-----------|--------------|--------|--------------------------------|---------|------|
47
+ | creative | 21 | **48%**| 1,3,10,12,18,19,20,22,**27,28**| 28 | 41 |
48
+ | advice | 26 | **27%**| 1,13,14,16,17,**39,40** | 40 | 80 |
49
+ | factual | 18 | **17%**| 14,15,18 | 18 | 62 |
50
+
51
+ - **Creative:** forks spread continuously, deep, no flat region.
52
+ - **Factual:** hard **funnel** (0–13 locked on "…is Paris"), thin choice band
53
+ (14–18, population phrasing), then **flat** (19–61). 83% of genuine alternatives
54
+ re-merge — the "constrained → rank-2 reconverges" prediction.
55
+ - **Advice:** two-basin — opening stance, long re-merge body, second fork cluster
56
+ at 39–40 (new list item).
57
+
58
+ The bisector field is real, and its shape explains the §1 asymmetry.
59
+
60
+ ---
61
+
62
+ ## 3. Does the curve ACTUALLY route at the bisectors? — Falsified.
63
+
64
+ `scripts/bisector-route.ts`. Ground truth = §2 labels. Under **matched seeds**,
65
+ generate samples with each policy, align to the greedy reference, find the **first
66
+ departure**, and compute the departure **hazard** at FORK vs RE-MERGE nodes (both
67
+ high-entropy, so the ratio isolates fork-*selectivity* from raw entropy). Policies:
68
+ `default` (T=1+top-p+top-k), `temp0.8` (pure), `curve-id` (identity curve — control,
69
+ same machinery, no shaping), `curve-router` (gate tail, open head — the shape that
70
+ *should* route). Step-5 coherence: fork-departures must stay within ~1 nat/token of
71
+ the reference (not garbage). Output: `curve-runs/bisector-route.json`.
72
+
73
+ **Creative**
74
+
75
+ | policy | FORK | REMERGE | **FORK/REMERGE** | coherent |
76
+ |--------------|------|---------|------------------|----------|
77
+ | default | 26% | 34% | 0.75 | 9/9 |
78
+ | temp 0.8 | 7% | 23% | 0.30 | 3/3 |
79
+ | curve-id | 26% | 34% | **0.77** | 9/9 |
80
+ | curve-router | 43% | 55% | **0.79** | 13/13 |
81
+
82
+ `curve-router`'s fork-selectivity (0.79) **equals the no-op identity curve (0.77)**
83
+ and default (0.75). The router shape raised departure *volume* (43%/55% vs 26%/34%)
84
+ **proportionally** — targeting unchanged. Every ratio is below 1: all policies depart
85
+ *more* at re-merge than at forks.
86
+
87
+ **Factual:** `curve-router` 12.98 vs default 19.89 / temp 15.0 — *below* temperature.
88
+ (High ratios just reflect the 3 forks being the only high-entropy nodes amid 38
89
+ locked-elaboration positions.)
90
+
91
+ ### Conclusion
92
+
93
+ **The "routes through forks" claim is false** for this curve — its fork-selectivity
94
+ matches a no-op control. The curve changes the **volume** of diversification, not its
95
+ **targeting**. The trap: `curve-router` has the highest *absolute* fork-rate (43%),
96
+ which naively reads as "forks most"; that's only more diversification overall.
97
+
98
+ This reconciles §1 honestly: the curve still reaches outputs temperature can't
99
+ (different *shape* → different reachable samples), but **not by targeting forks** —
100
+ it's a different reshuffle, not a smarter one. All fork-departures stayed coherent,
101
+ so this is a *coherent* reshuffle, not a garbage artifact.
102
+
103
+ **Likely structural reason:** fork-ness (does the rank-2 branch reconverge?) is a
104
+ property of the downstream trajectory — invisible in the local next-token
105
+ distribution. A local transfer curve can only see current logits, so it can't
106
+ preferentially depart at forks vs locally-identical re-merges. A local sampler
107
+ probably *can't* be a fork-router by construction; only an entropy reshuffle.
108
+
109
+ ### Caveats / next steps
110
+
111
+ - `curve-router` is the natural router shape, **not a user-drawn curve** — drop a
112
+ real curve JSON in as a 5th policy to confirm.
113
+ - 20 seeds × 1 prompt/pole — scale to ~5 prompts/pole × more seeds for error bars.
114
+ - Loophole: test whether fork nodes carry a distinct *local* logit shape (e.g.
115
+ bimodality) that a cleverer curve could exploit.
116
+
117
+ ## Reproduce
118
+
119
+ ```bash
120
+ bun run scripts/bisector-trace.ts # the map → curve-runs/bisector-trace.json
121
+ bun run scripts/bisector-route.ts # the test → curve-runs/bisector-route.json
122
+ bun run scripts/curve-temp-grid.ts # temp-can't-reproduce (server on :8090)
123
+ ```
@@ -0,0 +1,98 @@
1
+ [
2
+ {
3
+ "tag": "creative",
4
+ "pol": "default",
5
+ "departedPct": 1,
6
+ "fr": 0.2571428571428571,
7
+ "rr": 0.34375,
8
+ "lr": 0,
9
+ "ratio": 0.748051948051948,
10
+ "cohMean": -1.0010227537330092,
11
+ "cohN": 9,
12
+ "cohOk": 9
13
+ },
14
+ {
15
+ "tag": "creative",
16
+ "pol": "temp0.8",
17
+ "departedPct": 1,
18
+ "fr": 0.06976744186046512,
19
+ "rr": 0.2318840579710145,
20
+ "lr": 0.022727272727272728,
21
+ "ratio": 0.3008720930232558,
22
+ "cohMean": -0.8618866522327556,
23
+ "cohN": 3,
24
+ "cohOk": 3
25
+ },
26
+ {
27
+ "tag": "creative",
28
+ "pol": "curve-id",
29
+ "departedPct": 1,
30
+ "fr": 0.2647058823529412,
31
+ "rr": 0.34375,
32
+ "lr": 0,
33
+ "ratio": 0.7700534759358288,
34
+ "cohMean": -1.079108765834491,
35
+ "cohN": 9,
36
+ "cohOk": 9
37
+ },
38
+ {
39
+ "tag": "creative",
40
+ "pol": "curve-router",
41
+ "departedPct": 1,
42
+ "fr": 0.43333333333333335,
43
+ "rr": 0.5454545454545454,
44
+ "lr": 0.03225806451612903,
45
+ "ratio": 0.7944444444444445,
46
+ "cohMean": -1.3585284007349332,
47
+ "cohN": 13,
48
+ "cohOk": 13
49
+ },
50
+ {
51
+ "tag": "factual",
52
+ "pol": "default",
53
+ "departedPct": 1,
54
+ "fr": 0.42105263157894735,
55
+ "rr": 0.021164021164021163,
56
+ "lr": 0,
57
+ "ratio": 19.894736842105264,
58
+ "cohMean": -0.5009498243893914,
59
+ "cohN": 16,
60
+ "cohOk": 16
61
+ },
62
+ {
63
+ "tag": "factual",
64
+ "pol": "temp0.8",
65
+ "departedPct": 1,
66
+ "fr": 0.38461538461538464,
67
+ "rr": 0.02564102564102564,
68
+ "lr": 0,
69
+ "ratio": 15.000000000000002,
70
+ "cohMean": -0.42202286759264085,
71
+ "cohN": 15,
72
+ "cohOk": 15
73
+ },
74
+ {
75
+ "tag": "factual",
76
+ "pol": "curve-id",
77
+ "departedPct": 1,
78
+ "fr": 0.40540540540540543,
79
+ "rr": 0.026881720430107527,
80
+ "lr": 0,
81
+ "ratio": 15.081081081081082,
82
+ "cohMean": -0.5881801143434967,
83
+ "cohN": 15,
84
+ "cohOk": 15
85
+ },
86
+ {
87
+ "tag": "factual",
88
+ "pol": "curve-router",
89
+ "departedPct": 1,
90
+ "fr": 0.5714285714285714,
91
+ "rr": 0.0440251572327044,
92
+ "lr": 0.04950495049504951,
93
+ "ratio": 12.979591836734693,
94
+ "cohMean": -0.770856366133446,
95
+ "cohN": 8,
96
+ "cohOk": 8
97
+ }
98
+ ]