@simulatte/doppler 0.1.9 → 0.2.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 (1359) hide show
  1. package/README.md +3 -116
  2. package/package.json +5 -162
  3. package/BRANDING.md +0 -14
  4. package/CHANGELOG.md +0 -158
  5. package/LICENSE +0 -201
  6. package/NOTICE +0 -5
  7. package/SECURITY.md +0 -19
  8. package/src/adapters/adapter-manager.d.ts +0 -200
  9. package/src/adapters/adapter-manager.js +0 -509
  10. package/src/adapters/adapter-manifest.d.ts +0 -290
  11. package/src/adapters/adapter-manifest.js +0 -320
  12. package/src/adapters/adapter-registry.d.ts +0 -192
  13. package/src/adapters/adapter-registry.js +0 -477
  14. package/src/adapters/index.d.ts +0 -89
  15. package/src/adapters/index.js +0 -42
  16. package/src/adapters/lora-loader.d.ts +0 -105
  17. package/src/adapters/lora-loader.js +0 -414
  18. package/src/bootstrap.d.ts +0 -1
  19. package/src/bootstrap.js +0 -30
  20. package/src/bridge/extension/background.d.ts +0 -14
  21. package/src/bridge/extension/background.js +0 -168
  22. package/src/bridge/extension/manifest.json +0 -34
  23. package/src/bridge/extension-client.d.ts +0 -114
  24. package/src/bridge/extension-client.js +0 -409
  25. package/src/bridge/index.d.ts +0 -69
  26. package/src/bridge/index.js +0 -53
  27. package/src/bridge/protocol.d.ts +0 -96
  28. package/src/bridge/protocol.js +0 -130
  29. package/src/browser/browser-converter.d.ts +0 -71
  30. package/src/browser/browser-converter.js +0 -977
  31. package/src/browser/file-picker.d.ts +0 -63
  32. package/src/browser/file-picker.js +0 -281
  33. package/src/browser/gguf-importer.d.ts +0 -136
  34. package/src/browser/gguf-importer.js +0 -532
  35. package/src/browser/gguf-parser-browser.d.ts +0 -14
  36. package/src/browser/gguf-parser-browser.js +0 -17
  37. package/src/browser/quantization.d.ts +0 -69
  38. package/src/browser/quantization.js +0 -328
  39. package/src/browser/safetensors-parser-browser.d.ts +0 -193
  40. package/src/browser/safetensors-parser-browser.js +0 -347
  41. package/src/browser/shard-io-browser.d.ts +0 -57
  42. package/src/browser/shard-io-browser.js +0 -89
  43. package/src/browser/tensor-source-download.d.ts +0 -27
  44. package/src/browser/tensor-source-download.js +0 -245
  45. package/src/browser/tensor-source-file.d.ts +0 -26
  46. package/src/browser/tensor-source-file.js +0 -53
  47. package/src/browser/tensor-source-http.d.ts +0 -29
  48. package/src/browser/tensor-source-http.js +0 -130
  49. package/src/client/doppler-api.browser.d.ts +0 -1
  50. package/src/client/doppler-api.browser.js +0 -310
  51. package/src/client/doppler-api.d.ts +0 -83
  52. package/src/client/doppler-api.js +0 -323
  53. package/src/client/doppler-provider/generation.d.ts +0 -25
  54. package/src/client/doppler-provider/generation.js +0 -126
  55. package/src/client/doppler-provider/index.d.ts +0 -2
  56. package/src/client/doppler-provider/index.js +0 -3
  57. package/src/client/doppler-provider/model-manager.d.ts +0 -71
  58. package/src/client/doppler-provider/model-manager.js +0 -739
  59. package/src/client/doppler-provider/provider.d.ts +0 -5
  60. package/src/client/doppler-provider/provider.js +0 -102
  61. package/src/client/doppler-provider/source-runtime.d.ts +0 -23
  62. package/src/client/doppler-provider/source-runtime.js +0 -641
  63. package/src/client/doppler-provider/types.d.ts +0 -127
  64. package/src/client/doppler-provider/types.js +0 -17
  65. package/src/client/doppler-provider.d.ts +0 -46
  66. package/src/client/doppler-provider.js +0 -36
  67. package/src/client/doppler-registry.d.ts +0 -23
  68. package/src/client/doppler-registry.js +0 -86
  69. package/src/client/doppler-registry.json +0 -40
  70. package/src/config/README.md +0 -69
  71. package/src/config/backward-registry-loader.d.ts +0 -3
  72. package/src/config/backward-registry-loader.js +0 -23
  73. package/src/config/execution-contract-check.d.ts +0 -82
  74. package/src/config/execution-contract-check.js +0 -317
  75. package/src/config/execution-v0-contract-check.d.ts +0 -94
  76. package/src/config/execution-v0-contract-check.js +0 -349
  77. package/src/config/execution-v0-graph-contract-check.d.ts +0 -20
  78. package/src/config/execution-v0-graph-contract-check.js +0 -64
  79. package/src/config/index.d.ts +0 -63
  80. package/src/config/index.js +0 -31
  81. package/src/config/kernel-path-contract-check.d.ts +0 -76
  82. package/src/config/kernel-path-contract-check.js +0 -507
  83. package/src/config/kernel-path-loader.d.ts +0 -170
  84. package/src/config/kernel-path-loader.js +0 -570
  85. package/src/config/kernels/backward-registry.json +0 -99
  86. package/src/config/kernels/kernel-ref-digests.d.ts +0 -1
  87. package/src/config/kernels/kernel-ref-digests.js +0 -228
  88. package/src/config/kernels/kernel-ref.d.ts +0 -17
  89. package/src/config/kernels/kernel-ref.js +0 -75
  90. package/src/config/kernels/moe/gpt-oss.paths.json +0 -49
  91. package/src/config/kernels/moe/mixtral.paths.json +0 -46
  92. package/src/config/kernels/registry.d.ts +0 -86
  93. package/src/config/kernels/registry.js +0 -116
  94. package/src/config/kernels/registry.json +0 -7443
  95. package/src/config/loader.d.ts +0 -57
  96. package/src/config/loader.js +0 -584
  97. package/src/config/merge-contract-check.d.ts +0 -16
  98. package/src/config/merge-contract-check.js +0 -383
  99. package/src/config/merge-helpers.d.ts +0 -58
  100. package/src/config/merge-helpers.js +0 -175
  101. package/src/config/merge.d.ts +0 -143
  102. package/src/config/merge.js +0 -414
  103. package/src/config/param-categories.d.ts +0 -17
  104. package/src/config/param-categories.js +0 -72
  105. package/src/config/param-validator.d.ts +0 -26
  106. package/src/config/param-validator.js +0 -280
  107. package/src/config/platforms/amd-rdna3.json +0 -16
  108. package/src/config/platforms/apple-m1.json +0 -16
  109. package/src/config/platforms/apple-m2.json +0 -16
  110. package/src/config/platforms/apple-m3.json +0 -16
  111. package/src/config/platforms/generic.json +0 -14
  112. package/src/config/platforms/loader.d.ts +0 -65
  113. package/src/config/platforms/loader.js +0 -155
  114. package/src/config/platforms/nvidia-rtx30.json +0 -16
  115. package/src/config/platforms/nvidia-rtx40.json +0 -16
  116. package/src/config/presets/kernel-paths/embeddinggemma-f16-f32a.json +0 -60
  117. package/src/config/presets/kernel-paths/embeddinggemma-f32-f32a.json +0 -60
  118. package/src/config/presets/kernel-paths/embeddinggemma-q4k-dequant-f32a.json +0 -60
  119. package/src/config/presets/kernel-paths/gemma2-f16-f16a.json +0 -61
  120. package/src/config/presets/kernel-paths/gemma2-f16-f32a.json +0 -60
  121. package/src/config/presets/kernel-paths/gemma2-q4k-dequant-f16a.json +0 -61
  122. package/src/config/presets/kernel-paths/gemma2-q4k-dequant-f32a-nosubgroups.json +0 -60
  123. package/src/config/presets/kernel-paths/gemma2-q4k-fused-f32a.json +0 -57
  124. package/src/config/presets/kernel-paths/gemma3-f16-fused-f16a-online.json +0 -200
  125. package/src/config/presets/kernel-paths/gemma3-f16-fused-f32a-online-streamingprefill.json +0 -223
  126. package/src/config/presets/kernel-paths/gemma3-f16-fused-f32a-online.json +0 -223
  127. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f16a-online.json +0 -60
  128. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32a-nosubgroups.json +0 -61
  129. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32a-online.json +0 -61
  130. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32a-small-attn.json +0 -61
  131. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32w-f32a-online.json +0 -56
  132. package/src/config/presets/kernel-paths/lfm2-q4k-dequant-f32a-nosubgroups.json +0 -61
  133. package/src/config/presets/kernel-paths/lfm2-q4k-dequant-f32a-online.json +0 -61
  134. package/src/config/presets/kernel-paths/registry.json +0 -145
  135. package/src/config/presets/models/deepseek.json +0 -20
  136. package/src/config/presets/models/diffusion.json +0 -10
  137. package/src/config/presets/models/embeddinggemma.json +0 -74
  138. package/src/config/presets/models/functiongemma.json +0 -31
  139. package/src/config/presets/models/gemma2.json +0 -60
  140. package/src/config/presets/models/gemma3.json +0 -78
  141. package/src/config/presets/models/gemma4.json +0 -61
  142. package/src/config/presets/models/gpt-oss.json +0 -68
  143. package/src/config/presets/models/granite-docling.json +0 -70
  144. package/src/config/presets/models/janus-text.json +0 -27
  145. package/src/config/presets/models/kimi-k2.json +0 -25
  146. package/src/config/presets/models/lfm2.json +0 -88
  147. package/src/config/presets/models/llama3.json +0 -40
  148. package/src/config/presets/models/mamba.json +0 -34
  149. package/src/config/presets/models/mixtral.json +0 -37
  150. package/src/config/presets/models/modernbert.json +0 -32
  151. package/src/config/presets/models/qwen3.json +0 -49
  152. package/src/config/presets/models/qwen3_5.json +0 -16
  153. package/src/config/presets/models/qwen3_vl.json +0 -40
  154. package/src/config/presets/models/transformer.json +0 -78
  155. package/src/config/presets/models/translategemma.json +0 -30
  156. package/src/config/presets/platforms/nvidia-gb200-8gpu.json +0 -45
  157. package/src/config/presets/platforms/nvidia-gb200-nvl72.json +0 -45
  158. package/src/config/presets/platforms/nvidia-gh200-nvl2.json +0 -44
  159. package/src/config/presets/platforms/nvidia-gh200.json +0 -44
  160. package/src/config/presets/runtime/compute/f16-activations.json +0 -30
  161. package/src/config/presets/runtime/compute/f16-batched.json +0 -32
  162. package/src/config/presets/runtime/default.json +0 -101
  163. package/src/config/presets/runtime/diagnostics/debug-logits.json +0 -53
  164. package/src/config/presets/runtime/experiments/bench/gemma3-bench-q4k.json +0 -54
  165. package/src/config/presets/runtime/experiments/debug/gemma3-debug-q4k.json +0 -210
  166. package/src/config/presets/runtime/experiments/verify/gemma3-verify.json +0 -39
  167. package/src/config/presets/runtime/experiments/verify/lfm2-verify.json +0 -46
  168. package/src/config/presets/runtime/experiments/verify/translategemma-verify.json +0 -39
  169. package/src/config/presets/runtime/kernels/dequant-f16-q4k.json +0 -13
  170. package/src/config/presets/runtime/kernels/dequant-f32-q4k.json +0 -13
  171. package/src/config/presets/runtime/kernels/embeddinggemma-q4k-dequant-f32a.json +0 -37
  172. package/src/config/presets/runtime/kernels/fused-q4k.json +0 -13
  173. package/src/config/presets/runtime/kernels/gemma2-q4k-dequant-f16a.json +0 -33
  174. package/src/config/presets/runtime/kernels/gemma2-q4k-dequant-f32a-nosubgroups.json +0 -33
  175. package/src/config/presets/runtime/kernels/gemma2-q4k-fused-f32a.json +0 -33
  176. package/src/config/presets/runtime/kernels/safe-q4k.json +0 -13
  177. package/src/config/presets/runtime/model/gemma2-debug.json +0 -77
  178. package/src/config/presets/runtime/model/gemma2-pipeline-debug.json +0 -66
  179. package/src/config/presets/runtime/model/gemma2-pipeline.json +0 -75
  180. package/src/config/presets/runtime/model/gemma3-layer-probe.json +0 -85
  181. package/src/config/presets/runtime/model/qwen3-5-layer-probe.json +0 -52
  182. package/src/config/presets/runtime/model/qwen3-5-linear-attn-debug.json +0 -90
  183. package/src/config/presets/runtime/modes/bench.json +0 -37
  184. package/src/config/presets/runtime/modes/debug.json +0 -39
  185. package/src/config/presets/runtime/modes/default.json +0 -10
  186. package/src/config/presets/runtime/modes/embedding-bench.json +0 -28
  187. package/src/config/presets/runtime/modes/embedding.json +0 -54
  188. package/src/config/presets/runtime/modes/low-memory.json +0 -40
  189. package/src/config/presets/runtime/modes/production.json +0 -48
  190. package/src/config/presets/runtime/modes/simulation.json +0 -30
  191. package/src/config/presets/runtime/modes/trace-layers.json +0 -127
  192. package/src/config/presets/runtime/platform/metal-apple-q4k.json +0 -11
  193. package/src/config/presets/runtime/tiers/gemma4-16gb.json +0 -69
  194. package/src/config/presets/runtime/tiers/gemma4-24gb.json +0 -66
  195. package/src/config/presets/runtime/tiers/gemma4-32gb.json +0 -66
  196. package/src/config/quantization-contract-check.d.ts +0 -12
  197. package/src/config/quantization-contract-check.js +0 -91
  198. package/src/config/required-inference-fields-contract-check.d.ts +0 -24
  199. package/src/config/required-inference-fields-contract-check.js +0 -237
  200. package/src/config/runtime-merge.d.ts +0 -5
  201. package/src/config/runtime-merge.js +0 -21
  202. package/src/config/runtime.d.ts +0 -28
  203. package/src/config/runtime.js +0 -64
  204. package/src/config/schema/adapter.schema.d.ts +0 -53
  205. package/src/config/schema/adapter.schema.js +0 -60
  206. package/src/config/schema/backward-registry.schema.d.ts +0 -14
  207. package/src/config/schema/backward-registry.schema.js +0 -46
  208. package/src/config/schema/benchmark.schema.d.ts +0 -54
  209. package/src/config/schema/benchmark.schema.js +0 -74
  210. package/src/config/schema/bridge.schema.d.ts +0 -25
  211. package/src/config/schema/bridge.schema.js +0 -22
  212. package/src/config/schema/browser-suite-metrics.schema.d.ts +0 -17
  213. package/src/config/schema/browser-suite-metrics.schema.js +0 -46
  214. package/src/config/schema/buffer-pool.schema.d.ts +0 -92
  215. package/src/config/schema/buffer-pool.schema.js +0 -50
  216. package/src/config/schema/conversion-report.schema.d.ts +0 -40
  217. package/src/config/schema/conversion-report.schema.js +0 -108
  218. package/src/config/schema/conversion.schema.d.ts +0 -184
  219. package/src/config/schema/conversion.schema.js +0 -13
  220. package/src/config/schema/converter.schema.d.ts +0 -123
  221. package/src/config/schema/converter.schema.js +0 -136
  222. package/src/config/schema/debug.schema.d.ts +0 -290
  223. package/src/config/schema/debug.schema.js +0 -134
  224. package/src/config/schema/diffusion.schema.d.ts +0 -88
  225. package/src/config/schema/diffusion.schema.js +0 -62
  226. package/src/config/schema/distill-training.schema.d.ts +0 -48
  227. package/src/config/schema/distill-training.schema.js +0 -139
  228. package/src/config/schema/distribution.schema.d.ts +0 -155
  229. package/src/config/schema/distribution.schema.js +0 -81
  230. package/src/config/schema/doppler.schema.d.ts +0 -75
  231. package/src/config/schema/doppler.schema.js +0 -341
  232. package/src/config/schema/ecosystem.schema.d.ts +0 -255
  233. package/src/config/schema/ecosystem.schema.js +0 -534
  234. package/src/config/schema/emulation.schema.d.ts +0 -351
  235. package/src/config/schema/emulation.schema.js +0 -299
  236. package/src/config/schema/energy.schema.d.ts +0 -102
  237. package/src/config/schema/energy.schema.js +0 -72
  238. package/src/config/schema/execution-v0.schema.d.ts +0 -187
  239. package/src/config/schema/execution-v0.schema.js +0 -55
  240. package/src/config/schema/gpu-cache.schema.d.ts +0 -26
  241. package/src/config/schema/gpu-cache.schema.js +0 -8
  242. package/src/config/schema/harness.schema.d.ts +0 -32
  243. package/src/config/schema/harness.schema.js +0 -20
  244. package/src/config/schema/hotswap.schema.d.ts +0 -55
  245. package/src/config/schema/hotswap.schema.js +0 -18
  246. package/src/config/schema/index.d.ts +0 -885
  247. package/src/config/schema/index.js +0 -491
  248. package/src/config/schema/inference-defaults.schema.d.ts +0 -276
  249. package/src/config/schema/inference-defaults.schema.js +0 -188
  250. package/src/config/schema/inference.schema.d.ts +0 -298
  251. package/src/config/schema/inference.schema.js +0 -39
  252. package/src/config/schema/intent-bundle.schema.d.ts +0 -28
  253. package/src/config/schema/intent-bundle.schema.js +0 -12
  254. package/src/config/schema/kernel-path.schema.d.ts +0 -184
  255. package/src/config/schema/kernel-path.schema.js +0 -9
  256. package/src/config/schema/kernel-registry.schema.d.ts +0 -199
  257. package/src/config/schema/kernel-registry.schema.js +0 -46
  258. package/src/config/schema/kernel-thresholds.schema.d.ts +0 -302
  259. package/src/config/schema/kernel-thresholds.schema.js +0 -195
  260. package/src/config/schema/kernel-warmup.schema.d.ts +0 -19
  261. package/src/config/schema/kernel-warmup.schema.js +0 -5
  262. package/src/config/schema/kvcache.schema.d.ts +0 -131
  263. package/src/config/schema/kvcache.schema.js +0 -31
  264. package/src/config/schema/loading.schema.d.ts +0 -153
  265. package/src/config/schema/loading.schema.js +0 -84
  266. package/src/config/schema/lora.schema.d.ts +0 -12
  267. package/src/config/schema/lora.schema.js +0 -12
  268. package/src/config/schema/manifest.schema.d.ts +0 -507
  269. package/src/config/schema/manifest.schema.js +0 -146
  270. package/src/config/schema/memory-limits.schema.d.ts +0 -107
  271. package/src/config/schema/memory-limits.schema.js +0 -57
  272. package/src/config/schema/moe.schema.d.ts +0 -78
  273. package/src/config/schema/moe.schema.js +0 -31
  274. package/src/config/schema/platform.schema.d.ts +0 -121
  275. package/src/config/schema/platform.schema.js +0 -1
  276. package/src/config/schema/preset.schema.d.ts +0 -124
  277. package/src/config/schema/preset.schema.js +0 -1
  278. package/src/config/schema/quantization-defaults.schema.d.ts +0 -34
  279. package/src/config/schema/quantization-defaults.schema.js +0 -5
  280. package/src/config/schema/quantization.schema.d.ts +0 -10
  281. package/src/config/schema/quantization.schema.js +0 -33
  282. package/src/config/schema/shared-runtime.schema.d.ts +0 -75
  283. package/src/config/schema/shared-runtime.schema.js +0 -45
  284. package/src/config/schema/speculative.schema.d.ts +0 -21
  285. package/src/config/schema/speculative.schema.js +0 -11
  286. package/src/config/schema/storage.schema.d.ts +0 -123
  287. package/src/config/schema/storage.schema.js +0 -66
  288. package/src/config/schema/tooling.schema.d.ts +0 -29
  289. package/src/config/schema/tooling.schema.js +0 -12
  290. package/src/config/schema/training-metrics.schema.d.ts +0 -89
  291. package/src/config/schema/training-metrics.schema.js +0 -374
  292. package/src/config/schema/training.schema.d.ts +0 -88
  293. package/src/config/schema/training.schema.js +0 -106
  294. package/src/config/schema/tuner.schema.d.ts +0 -39
  295. package/src/config/schema/tuner.schema.js +0 -13
  296. package/src/config/schema/ul-training.schema.d.ts +0 -61
  297. package/src/config/schema/ul-training.schema.js +0 -140
  298. package/src/config/schema/units.schema.d.ts +0 -27
  299. package/src/config/schema/units.schema.js +0 -26
  300. package/src/config/training-defaults.d.ts +0 -24
  301. package/src/config/training-defaults.js +0 -99
  302. package/src/converter/conversion-plan.d.ts +0 -64
  303. package/src/converter/conversion-plan.js +0 -565
  304. package/src/converter/core.d.ts +0 -264
  305. package/src/converter/core.js +0 -1383
  306. package/src/converter/execution-v0-manifest.d.ts +0 -15
  307. package/src/converter/execution-v0-manifest.js +0 -149
  308. package/src/converter/index.d.ts +0 -99
  309. package/src/converter/index.js +0 -60
  310. package/src/converter/manifest-inference.d.ts +0 -20
  311. package/src/converter/manifest-inference.js +0 -513
  312. package/src/converter/parsers/diffusion.d.ts +0 -50
  313. package/src/converter/parsers/diffusion.js +0 -327
  314. package/src/converter/parsers/gguf.d.ts +0 -22
  315. package/src/converter/parsers/gguf.js +0 -46
  316. package/src/converter/parsers/index.d.ts +0 -21
  317. package/src/converter/parsers/index.js +0 -12
  318. package/src/converter/parsers/transformer.d.ts +0 -16
  319. package/src/converter/parsers/transformer.js +0 -29
  320. package/src/converter/quantization-info.d.ts +0 -37
  321. package/src/converter/quantization-info.js +0 -422
  322. package/src/converter/quantizer.d.ts +0 -101
  323. package/src/converter/quantizer.js +0 -444
  324. package/src/converter/rope-config.d.ts +0 -15
  325. package/src/converter/rope-config.js +0 -262
  326. package/src/converter/shard-packer.d.ts +0 -138
  327. package/src/converter/shard-packer.js +0 -425
  328. package/src/converter/tokenizer-utils.d.ts +0 -12
  329. package/src/converter/tokenizer-utils.js +0 -104
  330. package/src/debug/config.d.ts +0 -78
  331. package/src/debug/config.js +0 -347
  332. package/src/debug/history.d.ts +0 -65
  333. package/src/debug/history.js +0 -71
  334. package/src/debug/index.d.ts +0 -268
  335. package/src/debug/index.js +0 -192
  336. package/src/debug/log.d.ts +0 -46
  337. package/src/debug/log.js +0 -132
  338. package/src/debug/perf.d.ts +0 -33
  339. package/src/debug/perf.js +0 -51
  340. package/src/debug/reference/README.md +0 -114
  341. package/src/debug/reference/hf_attn_debug.py +0 -114
  342. package/src/debug/reference/hf_embed_check.py +0 -89
  343. package/src/debug/reference/hf_layer_out.py +0 -100
  344. package/src/debug/reference/hf_qwen35_linear_attn_debug.py +0 -268
  345. package/src/debug/reference/hf_rope_check.py +0 -116
  346. package/src/debug/reference/hf_weights.py +0 -75
  347. package/src/debug/signals.d.ts +0 -63
  348. package/src/debug/signals.js +0 -39
  349. package/src/debug/stats.d.ts +0 -47
  350. package/src/debug/stats.js +0 -160
  351. package/src/debug/tensor.d.ts +0 -125
  352. package/src/debug/tensor.js +0 -268
  353. package/src/debug/trace.d.ts +0 -17
  354. package/src/debug/trace.js +0 -167
  355. package/src/diffusion/image-regression.d.ts +0 -31
  356. package/src/diffusion/image-regression.js +0 -107
  357. package/src/diffusion/index.d.ts +0 -8
  358. package/src/diffusion/index.js +0 -8
  359. package/src/distribution/p2p-control-plane.d.ts +0 -52
  360. package/src/distribution/p2p-control-plane.js +0 -272
  361. package/src/distribution/p2p-observability.d.ts +0 -116
  362. package/src/distribution/p2p-observability.js +0 -303
  363. package/src/distribution/p2p-transport-contract.d.ts +0 -57
  364. package/src/distribution/p2p-transport-contract.js +0 -310
  365. package/src/distribution/p2p-webrtc-browser.d.ts +0 -37
  366. package/src/distribution/p2p-webrtc-browser.js +0 -454
  367. package/src/distribution/shard-delivery.d.ts +0 -251
  368. package/src/distribution/shard-delivery.js +0 -2186
  369. package/src/energy/index.d.ts +0 -2
  370. package/src/energy/index.js +0 -2
  371. package/src/errors/doppler-error.d.ts +0 -21
  372. package/src/errors/doppler-error.js +0 -25
  373. package/src/errors/index.d.ts +0 -1
  374. package/src/errors/index.js +0 -1
  375. package/src/formats/gguf/index.d.ts +0 -8
  376. package/src/formats/gguf/index.js +0 -4
  377. package/src/formats/gguf/types.d.ts +0 -137
  378. package/src/formats/gguf/types.js +0 -460
  379. package/src/formats/index.d.ts +0 -51
  380. package/src/formats/index.js +0 -13
  381. package/src/formats/rdrr/classification.d.ts +0 -39
  382. package/src/formats/rdrr/classification.js +0 -307
  383. package/src/formats/rdrr/groups.d.ts +0 -35
  384. package/src/formats/rdrr/groups.js +0 -73
  385. package/src/formats/rdrr/index.d.ts +0 -25
  386. package/src/formats/rdrr/index.js +0 -19
  387. package/src/formats/rdrr/manifest.d.ts +0 -32
  388. package/src/formats/rdrr/manifest.js +0 -108
  389. package/src/formats/rdrr/parsing.d.ts +0 -27
  390. package/src/formats/rdrr/parsing.js +0 -151
  391. package/src/formats/rdrr/tensor-config-validator.d.ts +0 -42
  392. package/src/formats/rdrr/tensor-config-validator.js +0 -156
  393. package/src/formats/rdrr/types.d.ts +0 -201
  394. package/src/formats/rdrr/types.js +0 -16
  395. package/src/formats/rdrr/validation.d.ts +0 -9
  396. package/src/formats/rdrr/validation.js +0 -213
  397. package/src/formats/safetensors/index.d.ts +0 -8
  398. package/src/formats/safetensors/index.js +0 -4
  399. package/src/formats/safetensors/types.d.ts +0 -67
  400. package/src/formats/safetensors/types.js +0 -102
  401. package/src/formats/tokenizer/index.d.ts +0 -5
  402. package/src/formats/tokenizer/index.js +0 -3
  403. package/src/formats/tokenizer/types.d.ts +0 -9
  404. package/src/formats/tokenizer/types.js +0 -22
  405. package/src/generation/index.d.ts +0 -18
  406. package/src/generation/index.js +0 -12
  407. package/src/gpu/command-recorder.d.ts +0 -175
  408. package/src/gpu/command-recorder.js +0 -498
  409. package/src/gpu/device.d.ts +0 -142
  410. package/src/gpu/device.js +0 -462
  411. package/src/gpu/kernel-runtime.d.ts +0 -20
  412. package/src/gpu/kernel-runtime.js +0 -39
  413. package/src/gpu/kernel-selection-cache.d.ts +0 -13
  414. package/src/gpu/kernel-selection-cache.js +0 -13
  415. package/src/gpu/kernel-selection-log.d.ts +0 -12
  416. package/src/gpu/kernel-selection-log.js +0 -28
  417. package/src/gpu/kernel-selector.d.ts +0 -11
  418. package/src/gpu/kernel-selector.js +0 -10
  419. package/src/gpu/kernel-tuner/benchmarks.d.ts +0 -144
  420. package/src/gpu/kernel-tuner/benchmarks.js +0 -902
  421. package/src/gpu/kernel-tuner/cache.d.ts +0 -55
  422. package/src/gpu/kernel-tuner/cache.js +0 -133
  423. package/src/gpu/kernel-tuner/index.d.ts +0 -59
  424. package/src/gpu/kernel-tuner/index.js +0 -38
  425. package/src/gpu/kernel-tuner/tuner.d.ts +0 -82
  426. package/src/gpu/kernel-tuner/tuner.js +0 -247
  427. package/src/gpu/kernel-tuner/types.d.ts +0 -101
  428. package/src/gpu/kernel-tuner/types.js +0 -4
  429. package/src/gpu/kernel-tuner.d.ts +0 -33
  430. package/src/gpu/kernel-tuner.js +0 -12
  431. package/src/gpu/kernels/README.md +0 -127
  432. package/src/gpu/kernels/attention.d.ts +0 -236
  433. package/src/gpu/kernels/attention.js +0 -1439
  434. package/src/gpu/kernels/attention.wgsl +0 -249
  435. package/src/gpu/kernels/attention_bdpa_decode_f16.wgsl +0 -246
  436. package/src/gpu/kernels/attention_decode.wgsl +0 -233
  437. package/src/gpu/kernels/attention_decode_chunked_f16.wgsl +0 -183
  438. package/src/gpu/kernels/attention_decode_chunked_f16kv.wgsl +0 -208
  439. package/src/gpu/kernels/attention_decode_f16.wgsl +0 -202
  440. package/src/gpu/kernels/attention_decode_f16kv.wgsl +0 -224
  441. package/src/gpu/kernels/attention_decode_online_f16.wgsl +0 -223
  442. package/src/gpu/kernels/attention_decode_online_f16kv.wgsl +0 -225
  443. package/src/gpu/kernels/attention_decode_optimized.wgsl +0 -445
  444. package/src/gpu/kernels/attention_decode_paged_f16.wgsl +0 -172
  445. package/src/gpu/kernels/attention_decode_paged_f16kv.wgsl +0 -174
  446. package/src/gpu/kernels/attention_decode_subgroup.wgsl +0 -233
  447. package/src/gpu/kernels/attention_decode_tiered_f16.wgsl +0 -218
  448. package/src/gpu/kernels/attention_decode_tiered_f16kv.wgsl +0 -220
  449. package/src/gpu/kernels/attention_decode_tiered_int4_f16kv.wgsl +0 -242
  450. package/src/gpu/kernels/attention_decode_tiered_int8_f16kv.wgsl +0 -242
  451. package/src/gpu/kernels/attention_f16.wgsl +0 -214
  452. package/src/gpu/kernels/attention_f16kv.wgsl +0 -242
  453. package/src/gpu/kernels/attention_small.wgsl +0 -260
  454. package/src/gpu/kernels/attention_small_f16.wgsl +0 -240
  455. package/src/gpu/kernels/attention_small_f16kv.wgsl +0 -266
  456. package/src/gpu/kernels/attention_streaming.wgsl +0 -149
  457. package/src/gpu/kernels/attention_streaming_f16.wgsl +0 -147
  458. package/src/gpu/kernels/attention_streaming_f16kv.wgsl +0 -151
  459. package/src/gpu/kernels/backward/adam.d.ts +0 -28
  460. package/src/gpu/kernels/backward/adam.js +0 -203
  461. package/src/gpu/kernels/backward/adam.wgsl +0 -50
  462. package/src/gpu/kernels/backward/attention_backward.d.ts +0 -22
  463. package/src/gpu/kernels/backward/attention_backward.js +0 -364
  464. package/src/gpu/kernels/backward/attention_backward.wgsl +0 -49
  465. package/src/gpu/kernels/backward/bias_add_backward.d.ts +0 -17
  466. package/src/gpu/kernels/backward/bias_add_backward.js +0 -24
  467. package/src/gpu/kernels/backward/bias_add_backward.wgsl +0 -33
  468. package/src/gpu/kernels/backward/conv2d_backward.d.ts +0 -31
  469. package/src/gpu/kernels/backward/conv2d_backward.js +0 -148
  470. package/src/gpu/kernels/backward/conv2d_backward_input.wgsl +0 -83
  471. package/src/gpu/kernels/backward/conv2d_backward_weight.wgsl +0 -70
  472. package/src/gpu/kernels/backward/cross_entropy_backward.d.ts +0 -23
  473. package/src/gpu/kernels/backward/cross_entropy_backward.js +0 -29
  474. package/src/gpu/kernels/backward/cross_entropy_backward.wgsl +0 -39
  475. package/src/gpu/kernels/backward/embed_backward.d.ts +0 -29
  476. package/src/gpu/kernels/backward/embed_backward.js +0 -118
  477. package/src/gpu/kernels/backward/embed_backward.wgsl +0 -73
  478. package/src/gpu/kernels/backward/gelu_backward.d.ts +0 -16
  479. package/src/gpu/kernels/backward/gelu_backward.js +0 -39
  480. package/src/gpu/kernels/backward/gelu_backward.wgsl +0 -38
  481. package/src/gpu/kernels/backward/groupnorm_backward.d.ts +0 -24
  482. package/src/gpu/kernels/backward/groupnorm_backward.js +0 -29
  483. package/src/gpu/kernels/backward/groupnorm_backward.wgsl +0 -143
  484. package/src/gpu/kernels/backward/index.d.ts +0 -17
  485. package/src/gpu/kernels/backward/index.js +0 -23
  486. package/src/gpu/kernels/backward/layernorm_backward.d.ts +0 -22
  487. package/src/gpu/kernels/backward/layernorm_backward.js +0 -135
  488. package/src/gpu/kernels/backward/layernorm_backward.wgsl +0 -194
  489. package/src/gpu/kernels/backward/matmul_backward.d.ts +0 -32
  490. package/src/gpu/kernels/backward/matmul_backward.js +0 -124
  491. package/src/gpu/kernels/backward/matmul_backward.wgsl +0 -90
  492. package/src/gpu/kernels/backward/matmul_transpose_a.wgsl +0 -84
  493. package/src/gpu/kernels/backward/pixel_shuffle_backward.d.ts +0 -22
  494. package/src/gpu/kernels/backward/pixel_shuffle_backward.js +0 -30
  495. package/src/gpu/kernels/backward/pixel_shuffle_backward.wgsl +0 -54
  496. package/src/gpu/kernels/backward/rmsnorm_backward.d.ts +0 -24
  497. package/src/gpu/kernels/backward/rmsnorm_backward.js +0 -101
  498. package/src/gpu/kernels/backward/rmsnorm_backward.wgsl +0 -78
  499. package/src/gpu/kernels/backward/rope_backward.d.ts +0 -25
  500. package/src/gpu/kernels/backward/rope_backward.js +0 -109
  501. package/src/gpu/kernels/backward/rope_backward.wgsl +0 -59
  502. package/src/gpu/kernels/backward/scale_backward.d.ts +0 -16
  503. package/src/gpu/kernels/backward/scale_backward.js +0 -84
  504. package/src/gpu/kernels/backward/scale_backward.wgsl +0 -27
  505. package/src/gpu/kernels/backward/silu_backward.d.ts +0 -16
  506. package/src/gpu/kernels/backward/silu_backward.js +0 -39
  507. package/src/gpu/kernels/backward/silu_backward.wgsl +0 -31
  508. package/src/gpu/kernels/backward/softmax_backward.d.ts +0 -16
  509. package/src/gpu/kernels/backward/softmax_backward.js +0 -43
  510. package/src/gpu/kernels/backward/softmax_backward.wgsl +0 -44
  511. package/src/gpu/kernels/backward/upsample2d_backward.d.ts +0 -21
  512. package/src/gpu/kernels/backward/upsample2d_backward.js +0 -30
  513. package/src/gpu/kernels/backward/upsample2d_backward.wgsl +0 -59
  514. package/src/gpu/kernels/backward/utils.d.ts +0 -45
  515. package/src/gpu/kernels/backward/utils.js +0 -371
  516. package/src/gpu/kernels/bf16_to_f16.wgsl +0 -54
  517. package/src/gpu/kernels/bf16_to_f32.wgsl +0 -70
  518. package/src/gpu/kernels/bias_add.wgsl +0 -42
  519. package/src/gpu/kernels/bias_add_f16.wgsl +0 -47
  520. package/src/gpu/kernels/cast.d.ts +0 -67
  521. package/src/gpu/kernels/cast.js +0 -464
  522. package/src/gpu/kernels/cast_f16_to_f32.wgsl +0 -31
  523. package/src/gpu/kernels/cast_f32_to_f16.wgsl +0 -36
  524. package/src/gpu/kernels/check-finiteness.d.ts +0 -15
  525. package/src/gpu/kernels/check-finiteness.js +0 -149
  526. package/src/gpu/kernels/check-stop.d.ts +0 -31
  527. package/src/gpu/kernels/check-stop.js +0 -170
  528. package/src/gpu/kernels/clamp.d.ts +0 -22
  529. package/src/gpu/kernels/clamp.js +0 -42
  530. package/src/gpu/kernels/clamp.wgsl +0 -24
  531. package/src/gpu/kernels/constants.d.ts +0 -168
  532. package/src/gpu/kernels/constants.js +0 -129
  533. package/src/gpu/kernels/conv2d.d.ts +0 -34
  534. package/src/gpu/kernels/conv2d.js +0 -91
  535. package/src/gpu/kernels/conv2d.wgsl +0 -70
  536. package/src/gpu/kernels/conv2d_f16.wgsl +0 -72
  537. package/src/gpu/kernels/cross_entropy_loss.d.ts +0 -21
  538. package/src/gpu/kernels/cross_entropy_loss.js +0 -60
  539. package/src/gpu/kernels/cross_entropy_loss.wgsl +0 -39
  540. package/src/gpu/kernels/depthwise_conv2d.d.ts +0 -29
  541. package/src/gpu/kernels/depthwise_conv2d.js +0 -109
  542. package/src/gpu/kernels/depthwise_conv2d.wgsl +0 -55
  543. package/src/gpu/kernels/depthwise_conv2d_f16.wgsl +0 -59
  544. package/src/gpu/kernels/dequant.d.ts +0 -108
  545. package/src/gpu/kernels/dequant.js +0 -576
  546. package/src/gpu/kernels/dequant_f16_out.wgsl +0 -153
  547. package/src/gpu/kernels/dequant_f16_out_vec4.wgsl +0 -152
  548. package/src/gpu/kernels/dequant_f16_rowwise.wgsl +0 -139
  549. package/src/gpu/kernels/dequant_f32_rowwise.wgsl +0 -133
  550. package/src/gpu/kernels/dequant_mxfp4.wgsl +0 -120
  551. package/src/gpu/kernels/dequant_mxfp4_expert.wgsl +0 -129
  552. package/src/gpu/kernels/dequant_mxfp4_expert_f16.wgsl +0 -105
  553. package/src/gpu/kernels/dequant_mxfp4_vec4.wgsl +0 -116
  554. package/src/gpu/kernels/dequant_q6k.wgsl +0 -140
  555. package/src/gpu/kernels/dequant_q8_0.wgsl +0 -98
  556. package/src/gpu/kernels/dequant_shared.wgsl +0 -204
  557. package/src/gpu/kernels/dequant_shared_vec4.wgsl +0 -155
  558. package/src/gpu/kernels/dequant_subgroup.wgsl +0 -206
  559. package/src/gpu/kernels/dispatch.d.ts +0 -157
  560. package/src/gpu/kernels/dispatch.js +0 -235
  561. package/src/gpu/kernels/energy.d.ts +0 -113
  562. package/src/gpu/kernels/energy.js +0 -448
  563. package/src/gpu/kernels/energy_eval.wgsl +0 -26
  564. package/src/gpu/kernels/energy_eval_f16.wgsl +0 -30
  565. package/src/gpu/kernels/energy_quintel_grad.wgsl +0 -92
  566. package/src/gpu/kernels/energy_quintel_grad_f16.wgsl +0 -96
  567. package/src/gpu/kernels/energy_quintel_reduce.wgsl +0 -112
  568. package/src/gpu/kernels/energy_quintel_reduce_f16.wgsl +0 -116
  569. package/src/gpu/kernels/energy_quintel_update.wgsl +0 -92
  570. package/src/gpu/kernels/energy_quintel_update_f16.wgsl +0 -96
  571. package/src/gpu/kernels/energy_update.wgsl +0 -25
  572. package/src/gpu/kernels/energy_update_f16.wgsl +0 -30
  573. package/src/gpu/kernels/feature-check.d.ts +0 -42
  574. package/src/gpu/kernels/feature-check.js +0 -70
  575. package/src/gpu/kernels/fused_ffn.d.ts +0 -65
  576. package/src/gpu/kernels/fused_ffn.js +0 -337
  577. package/src/gpu/kernels/fused_ffn.wgsl +0 -420
  578. package/src/gpu/kernels/fused_ffn_f16.wgsl +0 -213
  579. package/src/gpu/kernels/fused_ffn_q4k.wgsl +0 -375
  580. package/src/gpu/kernels/fused_matmul_q4.wgsl +0 -404
  581. package/src/gpu/kernels/fused_matmul_q4_batched.wgsl +0 -194
  582. package/src/gpu/kernels/fused_matmul_q4_batched_f16.wgsl +0 -170
  583. package/src/gpu/kernels/fused_matmul_q4_batched_f16a.wgsl +0 -154
  584. package/src/gpu/kernels/fused_matmul_q4_f16a.wgsl +0 -219
  585. package/src/gpu/kernels/fused_matmul_q4_multicol_f16.wgsl +0 -216
  586. package/src/gpu/kernels/fused_matmul_q4_multicol_f16a.wgsl +0 -204
  587. package/src/gpu/kernels/fused_matmul_residual.d.ts +0 -46
  588. package/src/gpu/kernels/fused_matmul_residual.js +0 -175
  589. package/src/gpu/kernels/fused_matmul_rmsnorm.d.ts +0 -64
  590. package/src/gpu/kernels/fused_matmul_rmsnorm.js +0 -290
  591. package/src/gpu/kernels/fused_matmul_rmsnorm.wgsl +0 -324
  592. package/src/gpu/kernels/fused_matmul_rmsnorm_f16.wgsl +0 -303
  593. package/src/gpu/kernels/fused_swiglu.wgsl +0 -63
  594. package/src/gpu/kernels/fused_swiglu_f16.wgsl +0 -57
  595. package/src/gpu/kernels/gated-short-conv.d.ts +0 -63
  596. package/src/gpu/kernels/gated-short-conv.js +0 -284
  597. package/src/gpu/kernels/gather.d.ts +0 -64
  598. package/src/gpu/kernels/gather.js +0 -137
  599. package/src/gpu/kernels/gather.wgsl +0 -61
  600. package/src/gpu/kernels/gather_f16.wgsl +0 -65
  601. package/src/gpu/kernels/gather_f16_f16_out.wgsl +0 -55
  602. package/src/gpu/kernels/gather_f16_out.wgsl +0 -55
  603. package/src/gpu/kernels/gather_f16_vec4.wgsl +0 -76
  604. package/src/gpu/kernels/gather_f16_vec4_f16_out.wgsl +0 -68
  605. package/src/gpu/kernels/gather_vec4.wgsl +0 -74
  606. package/src/gpu/kernels/gather_vec4_f16_out.wgsl +0 -68
  607. package/src/gpu/kernels/gelu.d.ts +0 -33
  608. package/src/gpu/kernels/gelu.js +0 -55
  609. package/src/gpu/kernels/gelu.wgsl +0 -64
  610. package/src/gpu/kernels/gelu_f16.wgsl +0 -66
  611. package/src/gpu/kernels/gptoss_mxfp4_expert_fused.wgsl +0 -127
  612. package/src/gpu/kernels/gptoss_router_topk.wgsl +0 -119
  613. package/src/gpu/kernels/grouped_pointwise_conv2d.d.ts +0 -27
  614. package/src/gpu/kernels/grouped_pointwise_conv2d.js +0 -103
  615. package/src/gpu/kernels/grouped_pointwise_conv2d.wgsl +0 -44
  616. package/src/gpu/kernels/grouped_pointwise_conv2d_f16.wgsl +0 -48
  617. package/src/gpu/kernels/groupnorm.d.ts +0 -31
  618. package/src/gpu/kernels/groupnorm.js +0 -102
  619. package/src/gpu/kernels/groupnorm_apply.wgsl +0 -41
  620. package/src/gpu/kernels/groupnorm_apply_f16.wgsl +0 -46
  621. package/src/gpu/kernels/groupnorm_stats.wgsl +0 -76
  622. package/src/gpu/kernels/groupnorm_stats_f16.wgsl +0 -79
  623. package/src/gpu/kernels/index.d.ts +0 -374
  624. package/src/gpu/kernels/index.js +0 -315
  625. package/src/gpu/kernels/kernel-base.d.ts +0 -33
  626. package/src/gpu/kernels/kernel-base.js +0 -46
  627. package/src/gpu/kernels/kernel-configs.d.ts +0 -65
  628. package/src/gpu/kernels/kernel-configs.js +0 -50
  629. package/src/gpu/kernels/kernel-tuning.d.ts +0 -42
  630. package/src/gpu/kernels/kernel-tuning.js +0 -149
  631. package/src/gpu/kernels/kv-quantize.d.ts +0 -37
  632. package/src/gpu/kernels/kv-quantize.js +0 -141
  633. package/src/gpu/kernels/kv_quantize_int4.wgsl +0 -119
  634. package/src/gpu/kernels/kv_quantize_int8.wgsl +0 -119
  635. package/src/gpu/kernels/layernorm.d.ts +0 -37
  636. package/src/gpu/kernels/layernorm.js +0 -96
  637. package/src/gpu/kernels/layernorm.wgsl +0 -121
  638. package/src/gpu/kernels/layernorm_f16.wgsl +0 -103
  639. package/src/gpu/kernels/linear-attention-core.d.ts +0 -39
  640. package/src/gpu/kernels/linear-attention-core.js +0 -555
  641. package/src/gpu/kernels/logit-merge.d.ts +0 -110
  642. package/src/gpu/kernels/logit-merge.js +0 -394
  643. package/src/gpu/kernels/matmul-dispatch.d.ts +0 -38
  644. package/src/gpu/kernels/matmul-dispatch.js +0 -155
  645. package/src/gpu/kernels/matmul-selection.d.ts +0 -87
  646. package/src/gpu/kernels/matmul-selection.js +0 -518
  647. package/src/gpu/kernels/matmul.d.ts +0 -114
  648. package/src/gpu/kernels/matmul.js +0 -384
  649. package/src/gpu/kernels/matmul_f16.wgsl +0 -170
  650. package/src/gpu/kernels/matmul_f16_tiled.wgsl +0 -165
  651. package/src/gpu/kernels/matmul_f16w_f32a.wgsl +0 -89
  652. package/src/gpu/kernels/matmul_f16w_f32a_tiled.wgsl +0 -154
  653. package/src/gpu/kernels/matmul_f32.wgsl +0 -100
  654. package/src/gpu/kernels/matmul_gemv.wgsl +0 -80
  655. package/src/gpu/kernels/matmul_gemv_f16a.wgsl +0 -81
  656. package/src/gpu/kernels/matmul_gemv_residual.wgsl +0 -119
  657. package/src/gpu/kernels/matmul_gemv_residual_f16.wgsl +0 -78
  658. package/src/gpu/kernels/matmul_gemv_subgroup.wgsl +0 -343
  659. package/src/gpu/kernels/matmul_gemv_subgroup_f16a.wgsl +0 -514
  660. package/src/gpu/kernels/modulate.d.ts +0 -29
  661. package/src/gpu/kernels/modulate.js +0 -57
  662. package/src/gpu/kernels/modulate.wgsl +0 -40
  663. package/src/gpu/kernels/modulate_f16.wgsl +0 -43
  664. package/src/gpu/kernels/moe.d.ts +0 -164
  665. package/src/gpu/kernels/moe.js +0 -542
  666. package/src/gpu/kernels/moe_gather.wgsl +0 -170
  667. package/src/gpu/kernels/moe_gather_f16.wgsl +0 -82
  668. package/src/gpu/kernels/moe_gather_vec4.wgsl +0 -74
  669. package/src/gpu/kernels/moe_offsets.wgsl +0 -48
  670. package/src/gpu/kernels/pipeline-cache.d.ts +0 -88
  671. package/src/gpu/kernels/pipeline-cache.js +0 -305
  672. package/src/gpu/kernels/pixel_shuffle.d.ts +0 -27
  673. package/src/gpu/kernels/pixel_shuffle.js +0 -57
  674. package/src/gpu/kernels/pixel_shuffle.wgsl +0 -43
  675. package/src/gpu/kernels/pixel_shuffle_f16.wgsl +0 -46
  676. package/src/gpu/kernels/relu.d.ts +0 -18
  677. package/src/gpu/kernels/relu.js +0 -66
  678. package/src/gpu/kernels/relu.wgsl +0 -22
  679. package/src/gpu/kernels/relu_f16.wgsl +0 -24
  680. package/src/gpu/kernels/repeat_channels.d.ts +0 -21
  681. package/src/gpu/kernels/repeat_channels.js +0 -68
  682. package/src/gpu/kernels/repeat_channels.wgsl +0 -28
  683. package/src/gpu/kernels/repeat_channels_f16.wgsl +0 -30
  684. package/src/gpu/kernels/residual.d.ts +0 -74
  685. package/src/gpu/kernels/residual.js +0 -173
  686. package/src/gpu/kernels/residual.wgsl +0 -56
  687. package/src/gpu/kernels/residual_f16.wgsl +0 -36
  688. package/src/gpu/kernels/residual_f16_vec4.wgsl +0 -48
  689. package/src/gpu/kernels/residual_vec4.wgsl +0 -47
  690. package/src/gpu/kernels/rmsnorm.d.ts +0 -53
  691. package/src/gpu/kernels/rmsnorm.js +0 -215
  692. package/src/gpu/kernels/rmsnorm.wgsl +0 -425
  693. package/src/gpu/kernels/rmsnorm_f16.wgsl +0 -172
  694. package/src/gpu/kernels/rope.d.ts +0 -50
  695. package/src/gpu/kernels/rope.js +0 -66
  696. package/src/gpu/kernels/rope.wgsl +0 -344
  697. package/src/gpu/kernels/rope_f16.wgsl +0 -271
  698. package/src/gpu/kernels/rule-matcher.d.ts +0 -30
  699. package/src/gpu/kernels/rule-matcher.js +0 -42
  700. package/src/gpu/kernels/rule-registry.d.ts +0 -7
  701. package/src/gpu/kernels/rule-registry.js +0 -41
  702. package/src/gpu/kernels/sample.d.ts +0 -75
  703. package/src/gpu/kernels/sample.js +0 -565
  704. package/src/gpu/kernels/sample.wgsl +0 -407
  705. package/src/gpu/kernels/sample_f16.wgsl +0 -361
  706. package/src/gpu/kernels/sana_linear_attention.d.ts +0 -27
  707. package/src/gpu/kernels/sana_linear_attention.js +0 -129
  708. package/src/gpu/kernels/sana_linear_attention_apply.wgsl +0 -43
  709. package/src/gpu/kernels/sana_linear_attention_apply_f16.wgsl +0 -46
  710. package/src/gpu/kernels/sana_linear_attention_summary.wgsl +0 -51
  711. package/src/gpu/kernels/sana_linear_attention_summary_f16.wgsl +0 -53
  712. package/src/gpu/kernels/scale.d.ts +0 -35
  713. package/src/gpu/kernels/scale.js +0 -44
  714. package/src/gpu/kernels/scale.wgsl +0 -38
  715. package/src/gpu/kernels/scatter_add.wgsl +0 -88
  716. package/src/gpu/kernels/scatter_add_dynamic.wgsl +0 -59
  717. package/src/gpu/kernels/scatter_add_dynamic_f16.wgsl +0 -52
  718. package/src/gpu/kernels/scatter_add_dynamic_f16_weights.wgsl +0 -50
  719. package/src/gpu/kernels/scatter_add_vec4.wgsl +0 -70
  720. package/src/gpu/kernels/shader-cache.d.ts +0 -56
  721. package/src/gpu/kernels/shader-cache.js +0 -213
  722. package/src/gpu/kernels/silu.d.ts +0 -76
  723. package/src/gpu/kernels/silu.js +0 -406
  724. package/src/gpu/kernels/silu.wgsl +0 -109
  725. package/src/gpu/kernels/silu_f16.wgsl +0 -108
  726. package/src/gpu/kernels/softmax.d.ts +0 -57
  727. package/src/gpu/kernels/softmax.js +0 -125
  728. package/src/gpu/kernels/softmax.wgsl +0 -388
  729. package/src/gpu/kernels/softmax_subgroup.wgsl +0 -175
  730. package/src/gpu/kernels/split_qg.d.ts +0 -50
  731. package/src/gpu/kernels/split_qg.js +0 -46
  732. package/src/gpu/kernels/split_qg.wgsl +0 -58
  733. package/src/gpu/kernels/split_qg_f16.wgsl +0 -62
  734. package/src/gpu/kernels/split_qkv.d.ts +0 -51
  735. package/src/gpu/kernels/split_qkv.js +0 -51
  736. package/src/gpu/kernels/split_qkv.wgsl +0 -71
  737. package/src/gpu/kernels/split_qkv_f16.wgsl +0 -75
  738. package/src/gpu/kernels/topk.wgsl +0 -243
  739. package/src/gpu/kernels/topk_f16.wgsl +0 -108
  740. package/src/gpu/kernels/topk_f16_weights.wgsl +0 -101
  741. package/src/gpu/kernels/transpose.d.ts +0 -21
  742. package/src/gpu/kernels/transpose.js +0 -51
  743. package/src/gpu/kernels/transpose.wgsl +0 -33
  744. package/src/gpu/kernels/types.d.ts +0 -21
  745. package/src/gpu/kernels/types.js +0 -4
  746. package/src/gpu/kernels/uniform-utils.d.ts +0 -48
  747. package/src/gpu/kernels/uniform-utils.js +0 -94
  748. package/src/gpu/kernels/upsample2d.d.ts +0 -25
  749. package/src/gpu/kernels/upsample2d.js +0 -67
  750. package/src/gpu/kernels/upsample2d.wgsl +0 -34
  751. package/src/gpu/kernels/upsample2d_f16.wgsl +0 -38
  752. package/src/gpu/kernels/utils.d.ts +0 -106
  753. package/src/gpu/kernels/utils.js +0 -246
  754. package/src/gpu/multi-model-recorder.d.ts +0 -21
  755. package/src/gpu/multi-model-recorder.js +0 -31
  756. package/src/gpu/partitioned-buffer-pool.d.ts +0 -28
  757. package/src/gpu/partitioned-buffer-pool.js +0 -57
  758. package/src/gpu/perf-guards.d.ts +0 -25
  759. package/src/gpu/perf-guards.js +0 -133
  760. package/src/gpu/profiler.d.ts +0 -114
  761. package/src/gpu/profiler.js +0 -396
  762. package/src/gpu/readback-utils.d.ts +0 -16
  763. package/src/gpu/readback-utils.js +0 -41
  764. package/src/gpu/submit-tracker.d.ts +0 -111
  765. package/src/gpu/submit-tracker.js +0 -242
  766. package/src/gpu/tensor.d.ts +0 -69
  767. package/src/gpu/tensor.js +0 -75
  768. package/src/gpu/uniform-cache.d.ts +0 -109
  769. package/src/gpu/uniform-cache.js +0 -263
  770. package/src/gpu/weight-buffer.d.ts +0 -115
  771. package/src/gpu/weight-buffer.js +0 -118
  772. package/src/hotswap/intent-bundle.d.ts +0 -37
  773. package/src/hotswap/intent-bundle.js +0 -129
  774. package/src/hotswap/manifest.d.ts +0 -42
  775. package/src/hotswap/manifest.js +0 -124
  776. package/src/hotswap/runtime.d.ts +0 -31
  777. package/src/hotswap/runtime.js +0 -150
  778. package/src/index-browser.d.ts +0 -92
  779. package/src/index-browser.js +0 -68
  780. package/src/index-internal.d.ts +0 -2
  781. package/src/index-internal.js +0 -2
  782. package/src/index.d.ts +0 -103
  783. package/src/index.js +0 -76
  784. package/src/inference/README.md +0 -593
  785. package/src/inference/browser-harness-contract-helpers.d.ts +0 -5
  786. package/src/inference/browser-harness-contract-helpers.js +0 -28
  787. package/src/inference/browser-harness-diffusion-energy-suites.d.ts +0 -2
  788. package/src/inference/browser-harness-diffusion-energy-suites.js +0 -269
  789. package/src/inference/browser-harness-model-helpers.d.ts +0 -16
  790. package/src/inference/browser-harness-model-helpers.js +0 -217
  791. package/src/inference/browser-harness-report-helpers.d.ts +0 -7
  792. package/src/inference/browser-harness-report-helpers.js +0 -42
  793. package/src/inference/browser-harness-runtime-helpers.d.ts +0 -61
  794. package/src/inference/browser-harness-runtime-helpers.js +0 -415
  795. package/src/inference/browser-harness-suite-helpers.d.ts +0 -28
  796. package/src/inference/browser-harness-suite-helpers.js +0 -268
  797. package/src/inference/browser-harness-text-helpers.d.ts +0 -27
  798. package/src/inference/browser-harness-text-helpers.js +0 -788
  799. package/src/inference/browser-harness.d.ts +0 -242
  800. package/src/inference/browser-harness.js +0 -990
  801. package/src/inference/decode-buffers.d.ts +0 -108
  802. package/src/inference/decode-buffers.js +0 -181
  803. package/src/inference/decode-ring.d.ts +0 -52
  804. package/src/inference/decode-ring.js +0 -273
  805. package/src/inference/expert-router.d.ts +0 -27
  806. package/src/inference/expert-router.js +0 -55
  807. package/src/inference/functiongemma.d.ts +0 -15
  808. package/src/inference/functiongemma.js +0 -1
  809. package/src/inference/kv-cache/base.d.ts +0 -150
  810. package/src/inference/kv-cache/base.js +0 -1076
  811. package/src/inference/kv-cache/basis-decomposed-paged.d.ts +0 -50
  812. package/src/inference/kv-cache/basis-decomposed-paged.js +0 -276
  813. package/src/inference/kv-cache/index.d.ts +0 -35
  814. package/src/inference/kv-cache/index.js +0 -20
  815. package/src/inference/kv-cache/sliding-window.d.ts +0 -72
  816. package/src/inference/kv-cache/sliding-window.js +0 -243
  817. package/src/inference/kv-cache/tiered.d.ts +0 -89
  818. package/src/inference/kv-cache/tiered.js +0 -576
  819. package/src/inference/kv-cache/types.d.ts +0 -188
  820. package/src/inference/kv-cache/types.js +0 -80
  821. package/src/inference/kv-cache.d.ts +0 -36
  822. package/src/inference/kv-cache.js +0 -18
  823. package/src/inference/moe-router.d.ts +0 -212
  824. package/src/inference/moe-router.js +0 -585
  825. package/src/inference/multi-model-network.d.ts +0 -139
  826. package/src/inference/multi-model-network.js +0 -771
  827. package/src/inference/multi-pipeline-pool.d.ts +0 -62
  828. package/src/inference/multi-pipeline-pool.js +0 -161
  829. package/src/inference/network-evolution.d.ts +0 -55
  830. package/src/inference/network-evolution.js +0 -79
  831. package/src/inference/pipelines/context.d.ts +0 -21
  832. package/src/inference/pipelines/context.js +0 -184
  833. package/src/inference/pipelines/diffusion/helpers.d.ts +0 -29
  834. package/src/inference/pipelines/diffusion/helpers.js +0 -120
  835. package/src/inference/pipelines/diffusion/index.d.ts +0 -3
  836. package/src/inference/pipelines/diffusion/index.js +0 -3
  837. package/src/inference/pipelines/diffusion/init.d.ts +0 -24
  838. package/src/inference/pipelines/diffusion/init.js +0 -138
  839. package/src/inference/pipelines/diffusion/pipeline.d.ts +0 -38
  840. package/src/inference/pipelines/diffusion/pipeline.js +0 -772
  841. package/src/inference/pipelines/diffusion/sana-transformer.d.ts +0 -53
  842. package/src/inference/pipelines/diffusion/sana-transformer.js +0 -738
  843. package/src/inference/pipelines/diffusion/scheduler.d.ts +0 -35
  844. package/src/inference/pipelines/diffusion/scheduler.js +0 -153
  845. package/src/inference/pipelines/diffusion/sd3-transformer.d.ts +0 -20
  846. package/src/inference/pipelines/diffusion/sd3-transformer.js +0 -1194
  847. package/src/inference/pipelines/diffusion/sd3-weights.d.ts +0 -21
  848. package/src/inference/pipelines/diffusion/sd3-weights.js +0 -287
  849. package/src/inference/pipelines/diffusion/text-encoder-gpu.d.ts +0 -87
  850. package/src/inference/pipelines/diffusion/text-encoder-gpu.js +0 -1224
  851. package/src/inference/pipelines/diffusion/text-encoder.d.ts +0 -29
  852. package/src/inference/pipelines/diffusion/text-encoder.js +0 -195
  853. package/src/inference/pipelines/diffusion/types.d.ts +0 -116
  854. package/src/inference/pipelines/diffusion/types.js +0 -1
  855. package/src/inference/pipelines/diffusion/vae.d.ts +0 -20
  856. package/src/inference/pipelines/diffusion/vae.js +0 -1375
  857. package/src/inference/pipelines/diffusion/weights.d.ts +0 -40
  858. package/src/inference/pipelines/diffusion/weights.js +0 -150
  859. package/src/inference/pipelines/dream/energy-head-pipeline.d.ts +0 -29
  860. package/src/inference/pipelines/dream/energy-head-pipeline.js +0 -6
  861. package/src/inference/pipelines/dream/pipeline.d.ts +0 -17
  862. package/src/inference/pipelines/dream/pipeline.js +0 -8
  863. package/src/inference/pipelines/energy/index.d.ts +0 -1
  864. package/src/inference/pipelines/energy/index.js +0 -1
  865. package/src/inference/pipelines/energy/pipeline.d.ts +0 -27
  866. package/src/inference/pipelines/energy/pipeline.js +0 -686
  867. package/src/inference/pipelines/energy/quintel.d.ts +0 -92
  868. package/src/inference/pipelines/energy/quintel.js +0 -218
  869. package/src/inference/pipelines/energy/types.d.ts +0 -63
  870. package/src/inference/pipelines/energy/types.js +0 -1
  871. package/src/inference/pipelines/energy-head/index.d.ts +0 -6
  872. package/src/inference/pipelines/energy-head/index.js +0 -6
  873. package/src/inference/pipelines/energy-head/row-head-pipeline.d.ts +0 -103
  874. package/src/inference/pipelines/energy-head/row-head-pipeline.js +0 -491
  875. package/src/inference/pipelines/factory.d.ts +0 -10
  876. package/src/inference/pipelines/factory.js +0 -6
  877. package/src/inference/pipelines/index.d.ts +0 -22
  878. package/src/inference/pipelines/index.js +0 -19
  879. package/src/inference/pipelines/registry.d.ts +0 -15
  880. package/src/inference/pipelines/registry.js +0 -23
  881. package/src/inference/pipelines/rng.d.ts +0 -2
  882. package/src/inference/pipelines/rng.js +0 -17
  883. package/src/inference/pipelines/structured/index.d.ts +0 -8
  884. package/src/inference/pipelines/structured/index.js +0 -8
  885. package/src/inference/pipelines/structured/json-head-pipeline.d.ts +0 -58
  886. package/src/inference/pipelines/structured/json-head-pipeline.js +0 -196
  887. package/src/inference/pipelines/text/attention/index.d.ts +0 -24
  888. package/src/inference/pipelines/text/attention/index.js +0 -17
  889. package/src/inference/pipelines/text/attention/output-projection.d.ts +0 -12
  890. package/src/inference/pipelines/text/attention/output-projection.js +0 -8
  891. package/src/inference/pipelines/text/attention/projections.d.ts +0 -113
  892. package/src/inference/pipelines/text/attention/projections.js +0 -526
  893. package/src/inference/pipelines/text/attention/record.d.ts +0 -36
  894. package/src/inference/pipelines/text/attention/record.js +0 -686
  895. package/src/inference/pipelines/text/attention/run.d.ts +0 -38
  896. package/src/inference/pipelines/text/attention/run.js +0 -942
  897. package/src/inference/pipelines/text/attention/types.d.ts +0 -98
  898. package/src/inference/pipelines/text/attention/types.js +0 -67
  899. package/src/inference/pipelines/text/attention.d.ts +0 -23
  900. package/src/inference/pipelines/text/attention.js +0 -12
  901. package/src/inference/pipelines/text/bdpa-steamroller.d.ts +0 -22
  902. package/src/inference/pipelines/text/bdpa-steamroller.js +0 -158
  903. package/src/inference/pipelines/text/buffer-types.d.ts +0 -7
  904. package/src/inference/pipelines/text/buffer-types.js +0 -4
  905. package/src/inference/pipelines/text/chat-format.d.ts +0 -46
  906. package/src/inference/pipelines/text/chat-format.js +0 -390
  907. package/src/inference/pipelines/text/config.d.ts +0 -245
  908. package/src/inference/pipelines/text/config.js +0 -731
  909. package/src/inference/pipelines/text/debug-utils/config.d.ts +0 -144
  910. package/src/inference/pipelines/text/debug-utils/config.js +0 -156
  911. package/src/inference/pipelines/text/debug-utils/index.d.ts +0 -53
  912. package/src/inference/pipelines/text/debug-utils/index.js +0 -44
  913. package/src/inference/pipelines/text/debug-utils/logging.d.ts +0 -106
  914. package/src/inference/pipelines/text/debug-utils/logging.js +0 -152
  915. package/src/inference/pipelines/text/debug-utils/tensor.d.ts +0 -119
  916. package/src/inference/pipelines/text/debug-utils/tensor.js +0 -268
  917. package/src/inference/pipelines/text/debug-utils/utils.d.ts +0 -77
  918. package/src/inference/pipelines/text/debug-utils/utils.js +0 -139
  919. package/src/inference/pipelines/text/debug-utils.d.ts +0 -42
  920. package/src/inference/pipelines/text/debug-utils.js +0 -34
  921. package/src/inference/pipelines/text/embed.d.ts +0 -67
  922. package/src/inference/pipelines/text/embed.js +0 -474
  923. package/src/inference/pipelines/text/execution-plan.d.ts +0 -116
  924. package/src/inference/pipelines/text/execution-plan.js +0 -329
  925. package/src/inference/pipelines/text/execution-v0-contract-helpers.d.ts +0 -59
  926. package/src/inference/pipelines/text/execution-v0-contract-helpers.js +0 -937
  927. package/src/inference/pipelines/text/execution-v0-runtime-builders.d.ts +0 -15
  928. package/src/inference/pipelines/text/execution-v0-runtime-builders.js +0 -286
  929. package/src/inference/pipelines/text/execution-v0.d.ts +0 -66
  930. package/src/inference/pipelines/text/execution-v0.js +0 -266
  931. package/src/inference/pipelines/text/ffn/dense.d.ts +0 -40
  932. package/src/inference/pipelines/text/ffn/dense.js +0 -759
  933. package/src/inference/pipelines/text/ffn/index.d.ts +0 -23
  934. package/src/inference/pipelines/text/ffn/index.js +0 -16
  935. package/src/inference/pipelines/text/ffn/moe.d.ts +0 -21
  936. package/src/inference/pipelines/text/ffn/moe.js +0 -49
  937. package/src/inference/pipelines/text/ffn/sandwich.d.ts +0 -25
  938. package/src/inference/pipelines/text/ffn/sandwich.js +0 -196
  939. package/src/inference/pipelines/text/ffn/standard.d.ts +0 -23
  940. package/src/inference/pipelines/text/ffn/standard.js +0 -87
  941. package/src/inference/pipelines/text/ffn/types.d.ts +0 -30
  942. package/src/inference/pipelines/text/ffn/types.js +0 -25
  943. package/src/inference/pipelines/text/ffn.d.ts +0 -31
  944. package/src/inference/pipelines/text/ffn.js +0 -18
  945. package/src/inference/pipelines/text/finiteness-guard-status.d.ts +0 -11
  946. package/src/inference/pipelines/text/finiteness-guard-status.js +0 -21
  947. package/src/inference/pipelines/text/finiteness-policy.d.ts +0 -35
  948. package/src/inference/pipelines/text/finiteness-policy.js +0 -45
  949. package/src/inference/pipelines/text/generator-helpers.d.ts +0 -34
  950. package/src/inference/pipelines/text/generator-helpers.js +0 -176
  951. package/src/inference/pipelines/text/generator-runtime.d.ts +0 -93
  952. package/src/inference/pipelines/text/generator-runtime.js +0 -392
  953. package/src/inference/pipelines/text/generator-steps.d.ts +0 -136
  954. package/src/inference/pipelines/text/generator-steps.js +0 -1214
  955. package/src/inference/pipelines/text/generator.d.ts +0 -46
  956. package/src/inference/pipelines/text/generator.js +0 -1515
  957. package/src/inference/pipelines/text/index.d.ts +0 -5
  958. package/src/inference/pipelines/text/index.js +0 -6
  959. package/src/inference/pipelines/text/init.d.ts +0 -314
  960. package/src/inference/pipelines/text/init.js +0 -1126
  961. package/src/inference/pipelines/text/kernel-path-auto-select.d.ts +0 -12
  962. package/src/inference/pipelines/text/kernel-path-auto-select.js +0 -92
  963. package/src/inference/pipelines/text/kernel-trace.d.ts +0 -152
  964. package/src/inference/pipelines/text/kernel-trace.js +0 -330
  965. package/src/inference/pipelines/text/layer-plan.d.ts +0 -65
  966. package/src/inference/pipelines/text/layer-plan.js +0 -249
  967. package/src/inference/pipelines/text/layer.d.ts +0 -56
  968. package/src/inference/pipelines/text/layer.js +0 -951
  969. package/src/inference/pipelines/text/linear-attention.d.ts +0 -109
  970. package/src/inference/pipelines/text/linear-attention.js +0 -907
  971. package/src/inference/pipelines/text/logits/cpu.d.ts +0 -81
  972. package/src/inference/pipelines/text/logits/cpu.js +0 -91
  973. package/src/inference/pipelines/text/logits/gpu.d.ts +0 -113
  974. package/src/inference/pipelines/text/logits/gpu.js +0 -411
  975. package/src/inference/pipelines/text/logits/index.d.ts +0 -62
  976. package/src/inference/pipelines/text/logits/index.js +0 -306
  977. package/src/inference/pipelines/text/logits/types.d.ts +0 -46
  978. package/src/inference/pipelines/text/logits/types.js +0 -4
  979. package/src/inference/pipelines/text/logits/utils.d.ts +0 -56
  980. package/src/inference/pipelines/text/logits/utils.js +0 -68
  981. package/src/inference/pipelines/text/logits.d.ts +0 -27
  982. package/src/inference/pipelines/text/logits.js +0 -16
  983. package/src/inference/pipelines/text/lora-apply.d.ts +0 -28
  984. package/src/inference/pipelines/text/lora-apply.js +0 -76
  985. package/src/inference/pipelines/text/lora-types.d.ts +0 -39
  986. package/src/inference/pipelines/text/lora-types.js +0 -18
  987. package/src/inference/pipelines/text/lora.d.ts +0 -18
  988. package/src/inference/pipelines/text/lora.js +0 -12
  989. package/src/inference/pipelines/text/model-load.d.ts +0 -58
  990. package/src/inference/pipelines/text/model-load.js +0 -739
  991. package/src/inference/pipelines/text/moe-cache.d.ts +0 -32
  992. package/src/inference/pipelines/text/moe-cache.js +0 -108
  993. package/src/inference/pipelines/text/moe-cpu-gptoss.d.ts +0 -9
  994. package/src/inference/pipelines/text/moe-cpu-gptoss.js +0 -115
  995. package/src/inference/pipelines/text/moe-cpu.d.ts +0 -13
  996. package/src/inference/pipelines/text/moe-cpu.js +0 -120
  997. package/src/inference/pipelines/text/moe-gpu.d.ts +0 -13
  998. package/src/inference/pipelines/text/moe-gpu.js +0 -653
  999. package/src/inference/pipelines/text/moe-helpers.d.ts +0 -12
  1000. package/src/inference/pipelines/text/moe-helpers.js +0 -21
  1001. package/src/inference/pipelines/text/moe-impl.d.ts +0 -117
  1002. package/src/inference/pipelines/text/moe-impl.js +0 -9
  1003. package/src/inference/pipelines/text/moe-shape-validator.d.ts +0 -40
  1004. package/src/inference/pipelines/text/moe-shape-validator.js +0 -98
  1005. package/src/inference/pipelines/text/ops.d.ts +0 -167
  1006. package/src/inference/pipelines/text/ops.js +0 -437
  1007. package/src/inference/pipelines/text/probes.d.ts +0 -31
  1008. package/src/inference/pipelines/text/probes.js +0 -171
  1009. package/src/inference/pipelines/text/sampling.d.ts +0 -54
  1010. package/src/inference/pipelines/text/sampling.js +0 -249
  1011. package/src/inference/pipelines/text/state.d.ts +0 -112
  1012. package/src/inference/pipelines/text/state.js +0 -154
  1013. package/src/inference/pipelines/text/types.d.ts +0 -627
  1014. package/src/inference/pipelines/text/types.js +0 -4
  1015. package/src/inference/pipelines/text/weights.d.ts +0 -110
  1016. package/src/inference/pipelines/text/weights.js +0 -173
  1017. package/src/inference/pipelines/text.d.ts +0 -162
  1018. package/src/inference/pipelines/text.js +0 -666
  1019. package/src/inference/pipelines/vision/encoder.js +0 -386
  1020. package/src/inference/pipelines/vision/image-preprocess.js +0 -151
  1021. package/src/inference/pipelines/vision/index.js +0 -173
  1022. package/src/inference/pipelines/vision/ops.js +0 -78
  1023. package/src/inference/pipelines/vision/patch-embed.js +0 -151
  1024. package/src/inference/speculative.d.ts +0 -239
  1025. package/src/inference/speculative.js +0 -402
  1026. package/src/inference/test-harness.d.ts +0 -178
  1027. package/src/inference/test-harness.js +0 -361
  1028. package/src/inference/tokenizer.d.ts +0 -72
  1029. package/src/inference/tokenizer.js +0 -239
  1030. package/src/inference/tokenizers/base.d.ts +0 -39
  1031. package/src/inference/tokenizers/base.js +0 -69
  1032. package/src/inference/tokenizers/bpe.d.ts +0 -27
  1033. package/src/inference/tokenizers/bpe.js +0 -180
  1034. package/src/inference/tokenizers/bundled.d.ts +0 -63
  1035. package/src/inference/tokenizers/bundled.js +0 -1009
  1036. package/src/inference/tokenizers/sentencepiece.d.ts +0 -28
  1037. package/src/inference/tokenizers/sentencepiece.js +0 -401
  1038. package/src/inference/tokenizers/types.d.ts +0 -166
  1039. package/src/inference/tokenizers/types.js +0 -7
  1040. package/src/loader/doppler-loader.d.ts +0 -137
  1041. package/src/loader/doppler-loader.js +0 -1069
  1042. package/src/loader/dtype-utils.d.ts +0 -40
  1043. package/src/loader/dtype-utils.js +0 -61
  1044. package/src/loader/embedding-loader.d.ts +0 -56
  1045. package/src/loader/embedding-loader.js +0 -211
  1046. package/src/loader/experts/expert-cache.d.ts +0 -156
  1047. package/src/loader/experts/expert-cache.js +0 -386
  1048. package/src/loader/experts/expert-loader.d.ts +0 -108
  1049. package/src/loader/experts/expert-loader.js +0 -392
  1050. package/src/loader/final-weights-loader.d.ts +0 -68
  1051. package/src/loader/final-weights-loader.js +0 -268
  1052. package/src/loader/index.d.ts +0 -150
  1053. package/src/loader/index.js +0 -124
  1054. package/src/loader/layer-loader.d.ts +0 -63
  1055. package/src/loader/layer-loader.js +0 -457
  1056. package/src/loader/loader-state.d.ts +0 -51
  1057. package/src/loader/loader-state.js +0 -142
  1058. package/src/loader/loader-types.d.ts +0 -236
  1059. package/src/loader/loader-types.js +0 -4
  1060. package/src/loader/manifest-config.d.ts +0 -97
  1061. package/src/loader/manifest-config.js +0 -134
  1062. package/src/loader/memory-monitor.d.ts +0 -112
  1063. package/src/loader/memory-monitor.js +0 -284
  1064. package/src/loader/multi-model-loader.d.ts +0 -51
  1065. package/src/loader/multi-model-loader.js +0 -133
  1066. package/src/loader/quantization-constants.d.ts +0 -23
  1067. package/src/loader/quantization-constants.js +0 -14
  1068. package/src/loader/shard-cache.d.ts +0 -60
  1069. package/src/loader/shard-cache.js +0 -638
  1070. package/src/loader/shard-resolver.d.ts +0 -12
  1071. package/src/loader/shard-resolver.js +0 -105
  1072. package/src/loader/tensors/tensor-loader.d.ts +0 -157
  1073. package/src/loader/tensors/tensor-loader.js +0 -618
  1074. package/src/loader/tensors/tensor-reader.d.ts +0 -22
  1075. package/src/loader/tensors/tensor-reader.js +0 -113
  1076. package/src/loader/tensors/tensor-role.d.ts +0 -7
  1077. package/src/loader/tensors/tensor-role.js +0 -12
  1078. package/src/loader/weight-downcast.d.ts +0 -62
  1079. package/src/loader/weight-downcast.js +0 -213
  1080. package/src/loader/weights.d.ts +0 -22
  1081. package/src/loader/weights.js +0 -4
  1082. package/src/memory/address-table.d.ts +0 -104
  1083. package/src/memory/address-table.js +0 -114
  1084. package/src/memory/buffer-pool.d.ts +0 -204
  1085. package/src/memory/buffer-pool.js +0 -821
  1086. package/src/memory/capability.d.ts +0 -49
  1087. package/src/memory/capability.js +0 -95
  1088. package/src/memory/heap-manager.d.ts +0 -104
  1089. package/src/memory/heap-manager.js +0 -264
  1090. package/src/memory/unified-detect.d.ts +0 -59
  1091. package/src/memory/unified-detect.js +0 -192
  1092. package/src/rules/converter/execution.rules.json +0 -20
  1093. package/src/rules/converter/tensor-roles.rules.json +0 -13
  1094. package/src/rules/converter/tokenizer.rules.json +0 -7
  1095. package/src/rules/execution-rules-contract-check.d.ts +0 -17
  1096. package/src/rules/execution-rules-contract-check.js +0 -245
  1097. package/src/rules/inference/attention.rules.json +0 -54
  1098. package/src/rules/inference/config.rules.json +0 -58
  1099. package/src/rules/inference/dtype.rules.json +0 -99
  1100. package/src/rules/inference/execution.rules.json +0 -45
  1101. package/src/rules/inference/ffn.rules.json +0 -35
  1102. package/src/rules/inference/kernel-path.rules.json +0 -92
  1103. package/src/rules/inference/layer-pattern.rules.json +0 -16
  1104. package/src/rules/inference/layer.rules.json +0 -7
  1105. package/src/rules/inference/moe.rules.json +0 -48
  1106. package/src/rules/kernels/attention.rules.json +0 -61
  1107. package/src/rules/kernels/conv2d.rules.json +0 -6
  1108. package/src/rules/kernels/depthwise-conv2d.rules.json +0 -6
  1109. package/src/rules/kernels/dequant.rules.json +0 -58
  1110. package/src/rules/kernels/energy.rules.json +0 -22
  1111. package/src/rules/kernels/fused-ffn.rules.json +0 -13
  1112. package/src/rules/kernels/fused-matmul-residual.rules.json +0 -6
  1113. package/src/rules/kernels/fused-matmul-rmsnorm.rules.json +0 -8
  1114. package/src/rules/kernels/gather.rules.json +0 -12
  1115. package/src/rules/kernels/gelu.rules.json +0 -11
  1116. package/src/rules/kernels/grouped-pointwise-conv2d.rules.json +0 -6
  1117. package/src/rules/kernels/groupnorm.rules.json +0 -10
  1118. package/src/rules/kernels/kernel-validator.d.ts +0 -24
  1119. package/src/rules/kernels/kernel-validator.js +0 -160
  1120. package/src/rules/kernels/kv_quantize.rules.json +0 -7
  1121. package/src/rules/kernels/layernorm.rules.json +0 -6
  1122. package/src/rules/kernels/matmul.rules.json +0 -60
  1123. package/src/rules/kernels/modulate.rules.json +0 -6
  1124. package/src/rules/kernels/moe.rules.gptoss.json +0 -105
  1125. package/src/rules/kernels/moe.rules.json +0 -11
  1126. package/src/rules/kernels/moe.rules.mixtral.json +0 -75
  1127. package/src/rules/kernels/pixel_shuffle.rules.json +0 -6
  1128. package/src/rules/kernels/relu.rules.json +0 -6
  1129. package/src/rules/kernels/repeat-channels.rules.json +0 -6
  1130. package/src/rules/kernels/residual.rules.json +0 -12
  1131. package/src/rules/kernels/rmsnorm.rules.json +0 -11
  1132. package/src/rules/kernels/rope.rules.json +0 -6
  1133. package/src/rules/kernels/sample.rules.json +0 -6
  1134. package/src/rules/kernels/sana-linear-attention.rules.json +0 -6
  1135. package/src/rules/kernels/scale.rules.json +0 -6
  1136. package/src/rules/kernels/silu.rules.json +0 -21
  1137. package/src/rules/kernels/softmax.rules.json +0 -25
  1138. package/src/rules/kernels/split-qg.rules.json +0 -6
  1139. package/src/rules/kernels/split-qkv.rules.json +0 -6
  1140. package/src/rules/kernels/upsample2d.rules.json +0 -6
  1141. package/src/rules/layer-pattern-contract-check.d.ts +0 -17
  1142. package/src/rules/layer-pattern-contract-check.js +0 -231
  1143. package/src/rules/loader/tensor-loader.rules.json +0 -15
  1144. package/src/rules/loader/weights.rules.json +0 -41
  1145. package/src/rules/rule-registry.d.ts +0 -77
  1146. package/src/rules/rule-registry.js +0 -243
  1147. package/src/rules/tooling/command-runtime.rules.json +0 -56
  1148. package/src/storage/backends/idb-store.d.ts +0 -52
  1149. package/src/storage/backends/idb-store.js +0 -590
  1150. package/src/storage/backends/memory-store.d.ts +0 -36
  1151. package/src/storage/backends/memory-store.js +0 -242
  1152. package/src/storage/backends/opfs-store.d.ts +0 -41
  1153. package/src/storage/backends/opfs-store.js +0 -473
  1154. package/src/storage/blake3.d.ts +0 -17
  1155. package/src/storage/blake3.js +0 -269
  1156. package/src/storage/download-types.d.ts +0 -157
  1157. package/src/storage/download-types.js +0 -48
  1158. package/src/storage/downloader.d.ts +0 -103
  1159. package/src/storage/downloader.js +0 -1121
  1160. package/src/storage/emulated-vram.d.ts +0 -264
  1161. package/src/storage/emulated-vram.js +0 -576
  1162. package/src/storage/export.d.ts +0 -20
  1163. package/src/storage/export.js +0 -159
  1164. package/src/storage/index.d.ts +0 -256
  1165. package/src/storage/index.js +0 -188
  1166. package/src/storage/inventory.d.ts +0 -26
  1167. package/src/storage/inventory.js +0 -218
  1168. package/src/storage/preflight.d.ts +0 -144
  1169. package/src/storage/preflight.js +0 -316
  1170. package/src/storage/quickstart-downloader.d.ts +0 -157
  1171. package/src/storage/quickstart-downloader.js +0 -268
  1172. package/src/storage/quota.d.ts +0 -150
  1173. package/src/storage/quota.js +0 -304
  1174. package/src/storage/registry.d.ts +0 -28
  1175. package/src/storage/registry.js +0 -131
  1176. package/src/storage/reports.d.ts +0 -20
  1177. package/src/storage/reports.js +0 -94
  1178. package/src/storage/shard-manager.d.ts +0 -151
  1179. package/src/storage/shard-manager.js +0 -850
  1180. package/src/storage/source-artifact-store.d.ts +0 -52
  1181. package/src/storage/source-artifact-store.js +0 -234
  1182. package/src/sw.d.ts +0 -1
  1183. package/src/sw.js +0 -187
  1184. package/src/tooling/browser-command-runner.d.ts +0 -28
  1185. package/src/tooling/browser-command-runner.js +0 -82
  1186. package/src/tooling/command-api-constants.d.ts +0 -9
  1187. package/src/tooling/command-api-constants.js +0 -9
  1188. package/src/tooling/command-api-family-normalizers.d.ts +0 -9
  1189. package/src/tooling/command-api-family-normalizers.js +0 -343
  1190. package/src/tooling/command-api-helpers.d.ts +0 -25
  1191. package/src/tooling/command-api-helpers.js +0 -262
  1192. package/src/tooling/command-api.d.ts +0 -173
  1193. package/src/tooling/command-api.js +0 -76
  1194. package/src/tooling/command-envelope.d.ts +0 -81
  1195. package/src/tooling/command-envelope.js +0 -198
  1196. package/src/tooling/command-runner-shared.d.ts +0 -73
  1197. package/src/tooling/command-runner-shared.js +0 -180
  1198. package/src/tooling/command-runner.html +0 -45
  1199. package/src/tooling/conversion-config-materializer.d.ts +0 -24
  1200. package/src/tooling/conversion-config-materializer.js +0 -97
  1201. package/src/tooling/lean-execution-contract-runner.d.ts +0 -43
  1202. package/src/tooling/lean-execution-contract-runner.js +0 -158
  1203. package/src/tooling/lean-execution-contract.d.ts +0 -16
  1204. package/src/tooling/lean-execution-contract.js +0 -228
  1205. package/src/tooling/node-browser-command-runner.d.ts +0 -34
  1206. package/src/tooling/node-browser-command-runner.js +0 -813
  1207. package/src/tooling/node-command-runner.d.ts +0 -36
  1208. package/src/tooling/node-command-runner.js +0 -168
  1209. package/src/tooling/node-convert-worker-pool.d.ts +0 -16
  1210. package/src/tooling/node-convert-worker-pool.js +0 -186
  1211. package/src/tooling/node-convert-worker.d.ts +0 -1
  1212. package/src/tooling/node-convert-worker.js +0 -60
  1213. package/src/tooling/node-converter.d.ts +0 -1
  1214. package/src/tooling/node-converter.js +0 -1333
  1215. package/src/tooling/node-file-fetch.d.ts +0 -1
  1216. package/src/tooling/node-file-fetch.js +0 -38
  1217. package/src/tooling/node-source-runtime.d.ts +0 -19
  1218. package/src/tooling/node-source-runtime.js +0 -610
  1219. package/src/tooling/node-webgpu.d.ts +0 -6
  1220. package/src/tooling/node-webgpu.js +0 -284
  1221. package/src/tooling/opfs-cache.d.ts +0 -11
  1222. package/src/tooling/opfs-cache.js +0 -191
  1223. package/src/tooling/runtime-input-composition.d.ts +0 -38
  1224. package/src/tooling/runtime-input-composition.js +0 -86
  1225. package/src/tooling/source-runtime-bundle.d.ts +0 -137
  1226. package/src/tooling/source-runtime-bundle.js +0 -711
  1227. package/src/tooling/source-runtime-materializer.d.ts +0 -6
  1228. package/src/tooling/source-runtime-materializer.js +0 -93
  1229. package/src/tooling-exports.browser.d.ts +0 -7
  1230. package/src/tooling-exports.browser.js +0 -2
  1231. package/src/tooling-exports.d.ts +0 -22
  1232. package/src/tooling-exports.js +0 -7
  1233. package/src/tooling-exports.shared.d.ts +0 -105
  1234. package/src/tooling-exports.shared.js +0 -92
  1235. package/src/training/README.md +0 -153
  1236. package/src/training/artifacts.d.ts +0 -160
  1237. package/src/training/artifacts.js +0 -896
  1238. package/src/training/attention-backward.d.ts +0 -30
  1239. package/src/training/attention-backward.js +0 -232
  1240. package/src/training/attention-forward.d.ts +0 -22
  1241. package/src/training/attention-forward.js +0 -82
  1242. package/src/training/autograd.d.ts +0 -51
  1243. package/src/training/autograd.js +0 -408
  1244. package/src/training/checkpoint-watch.d.ts +0 -8
  1245. package/src/training/checkpoint-watch.js +0 -139
  1246. package/src/training/checkpoint.d.ts +0 -36
  1247. package/src/training/checkpoint.js +0 -277
  1248. package/src/training/clip.d.ts +0 -9
  1249. package/src/training/clip.js +0 -55
  1250. package/src/training/dataloader.d.ts +0 -8
  1251. package/src/training/dataloader.js +0 -44
  1252. package/src/training/datasets/index.d.ts +0 -12
  1253. package/src/training/datasets/index.js +0 -6
  1254. package/src/training/datasets/jsonl.d.ts +0 -11
  1255. package/src/training/datasets/jsonl.js +0 -50
  1256. package/src/training/datasets/reploid.d.ts +0 -3
  1257. package/src/training/datasets/reploid.js +0 -36
  1258. package/src/training/datasets/text-pairs.d.ts +0 -21
  1259. package/src/training/datasets/text-pairs.js +0 -42
  1260. package/src/training/datasets/token-batch.d.ts +0 -21
  1261. package/src/training/datasets/token-batch.js +0 -52
  1262. package/src/training/datasets/translation-pairs.d.ts +0 -34
  1263. package/src/training/datasets/translation-pairs.js +0 -49
  1264. package/src/training/distillation/artifacts.d.ts +0 -71
  1265. package/src/training/distillation/artifacts.js +0 -132
  1266. package/src/training/distillation/checkpoint-watch.d.ts +0 -10
  1267. package/src/training/distillation/checkpoint-watch.js +0 -58
  1268. package/src/training/distillation/dataset.d.ts +0 -59
  1269. package/src/training/distillation/dataset.js +0 -337
  1270. package/src/training/distillation/eval.d.ts +0 -34
  1271. package/src/training/distillation/eval.js +0 -310
  1272. package/src/training/distillation/index.d.ts +0 -29
  1273. package/src/training/distillation/index.js +0 -29
  1274. package/src/training/distillation/runtime.d.ts +0 -20
  1275. package/src/training/distillation/runtime.js +0 -121
  1276. package/src/training/distillation/scoreboard.d.ts +0 -6
  1277. package/src/training/distillation/scoreboard.js +0 -8
  1278. package/src/training/distillation/stage-a.d.ts +0 -45
  1279. package/src/training/distillation/stage-a.js +0 -338
  1280. package/src/training/distillation/stage-b.d.ts +0 -24
  1281. package/src/training/distillation/stage-b.js +0 -20
  1282. package/src/training/distillation/student-fixture.d.ts +0 -22
  1283. package/src/training/distillation/student-fixture.js +0 -846
  1284. package/src/training/distillation/suite-data.d.ts +0 -45
  1285. package/src/training/distillation/suite-data.js +0 -189
  1286. package/src/training/export.d.ts +0 -32
  1287. package/src/training/export.js +0 -112
  1288. package/src/training/index.d.ts +0 -62
  1289. package/src/training/index.js +0 -51
  1290. package/src/training/lora-pipeline.d.ts +0 -40
  1291. package/src/training/lora-pipeline.js +0 -793
  1292. package/src/training/lora.d.ts +0 -19
  1293. package/src/training/lora.js +0 -71
  1294. package/src/training/loss-scaling.d.ts +0 -21
  1295. package/src/training/loss-scaling.js +0 -80
  1296. package/src/training/loss.d.ts +0 -10
  1297. package/src/training/loss.js +0 -40
  1298. package/src/training/objectives/base.d.ts +0 -58
  1299. package/src/training/objectives/base.js +0 -38
  1300. package/src/training/objectives/cross_entropy.d.ts +0 -18
  1301. package/src/training/objectives/cross_entropy.js +0 -34
  1302. package/src/training/objectives/distill_kd.d.ts +0 -16
  1303. package/src/training/objectives/distill_kd.js +0 -365
  1304. package/src/training/objectives/distill_triplet.d.ts +0 -16
  1305. package/src/training/objectives/distill_triplet.js +0 -408
  1306. package/src/training/objectives/index.d.ts +0 -12
  1307. package/src/training/objectives/index.js +0 -6
  1308. package/src/training/objectives/ul_stage1_joint.d.ts +0 -16
  1309. package/src/training/objectives/ul_stage1_joint.js +0 -188
  1310. package/src/training/objectives/ul_stage2_base.d.ts +0 -16
  1311. package/src/training/objectives/ul_stage2_base.js +0 -218
  1312. package/src/training/operator-artifacts.d.ts +0 -62
  1313. package/src/training/operator-artifacts.js +0 -140
  1314. package/src/training/operator-command.d.ts +0 -5
  1315. package/src/training/operator-command.js +0 -455
  1316. package/src/training/operator-eval.d.ts +0 -48
  1317. package/src/training/operator-eval.js +0 -230
  1318. package/src/training/operator-scoreboard.d.ts +0 -5
  1319. package/src/training/operator-scoreboard.js +0 -44
  1320. package/src/training/optimizer.d.ts +0 -22
  1321. package/src/training/optimizer.js +0 -127
  1322. package/src/training/runner.d.ts +0 -248
  1323. package/src/training/runner.js +0 -1220
  1324. package/src/training/suite.d.ts +0 -299
  1325. package/src/training/suite.js +0 -2196
  1326. package/src/training/tensor-factory.d.ts +0 -9
  1327. package/src/training/tensor-factory.js +0 -13
  1328. package/src/training/trainer.d.ts +0 -89
  1329. package/src/training/trainer.js +0 -299
  1330. package/src/training/ul_dataset.d.ts +0 -47
  1331. package/src/training/ul_dataset.js +0 -151
  1332. package/src/training/ul_schedule.d.ts +0 -6
  1333. package/src/training/ul_schedule.js +0 -29
  1334. package/src/training/workloads.d.ts +0 -164
  1335. package/src/training/workloads.js +0 -530
  1336. package/src/types/chrome.d.ts +0 -36
  1337. package/src/types/chrome.js +0 -1
  1338. package/src/types/gpu.d.ts +0 -185
  1339. package/src/types/gpu.js +0 -5
  1340. package/src/types/index.d.ts +0 -3
  1341. package/src/types/index.js +0 -3
  1342. package/src/types/inference.d.ts +0 -197
  1343. package/src/types/inference.js +0 -5
  1344. package/src/types/model.d.ts +0 -130
  1345. package/src/types/model.js +0 -5
  1346. package/src/utils/hf-resolve-url.d.ts +0 -16
  1347. package/src/utils/hf-resolve-url.js +0 -17
  1348. package/src/utils/index.d.ts +0 -7
  1349. package/src/utils/index.js +0 -7
  1350. package/src/utils/load-json.d.ts +0 -5
  1351. package/src/utils/load-json.js +0 -23
  1352. package/src/utils/plain-object.d.ts +0 -1
  1353. package/src/utils/plain-object.js +0 -3
  1354. package/src/utils/sha256.d.ts +0 -4
  1355. package/src/utils/sha256.js +0 -135
  1356. package/src/version.d.ts +0 -2
  1357. package/src/version.js +0 -2
  1358. package/tools/convert-safetensors-node.js +0 -233
  1359. package/tools/doppler-cli.js +0 -1452
@@ -1,2196 +0,0 @@
1
- import { initDevice, getKernelCapabilities, getDevice } from '../gpu/device.js';
2
- import { setPlatformsBaseUrl } from '../config/platforms/loader.js';
3
- import { setRegistryUrl } from '../config/kernels/registry.js';
4
- import { createTrainingConfig } from '../config/training-defaults.js';
5
- import {
6
- runMatmul,
7
- runResidualAdd,
8
- } from '../gpu/kernels/index.js';
9
- import { createTensor } from '../gpu/tensor.js';
10
- import { acquireBuffer, uploadData, releaseBuffer } from '../memory/buffer-pool.js';
11
- import { OpType } from './autograd.js';
12
- import { AdamOptimizer } from './optimizer.js';
13
- import { TrainingRunner } from './runner.js';
14
- import { trainStep } from './trainer.js';
15
- import { crossEntropyLoss } from './loss.js';
16
- import { clipGradients } from './clip.js';
17
- import { exportLoRAAdapter } from './export.js';
18
- import { sha256Hex } from '../utils/sha256.js';
19
- import { computeSampleStats } from '../debug/stats.js';
20
- import { parseJsonl } from './datasets/jsonl.js';
21
- import {
22
- buildDistillCandidatePrompt,
23
- buildDistillPrompt,
24
- encodeDistillRow,
25
- normalizeDistillDatasetPath,
26
- normalizeOptionalString,
27
- resolveDistillDataScope,
28
- summarizeDirectionCounts,
29
- } from './distillation/suite-data.js';
30
- import { createDistillStudentRuntimeModelFixture } from './distillation/student-fixture.js';
31
- import { initializeInference } from '../inference/test-harness.js';
32
- import { createPipeline } from '../inference/pipelines/text.js';
33
- import { parseManifest } from '../formats/rdrr/index.js';
34
- import { openModelStore, loadManifestFromStore } from '../storage/shard-manager.js';
35
-
36
- const LEGACY_BROWSER_TESTS = Object.freeze([
37
- 'loss-forward',
38
- 'softmax-backward',
39
- 'cross-entropy-backward',
40
- 'rmsnorm-backward',
41
- 'layernorm-backward',
42
- 'conv2d-backward',
43
- 'matmul-backward',
44
- 'embed-backward',
45
- 'ebm-state-optimize',
46
- 'ebm-recorded-bench',
47
- 'parity-fixture',
48
- 'training-leak-perf',
49
- 'autograd-branching',
50
- ]);
51
- const TRAINING_COMMAND_SCHEMA_VERSION = 1;
52
- const DISTILL_ADAPTER_TOP_K = 64;
53
- const DISTILL_LOGIT_FALLBACK = -80;
54
- const DISTILL_STUDENT_GRAPH_PROJECTION = 'projection_head';
55
- const DISTILL_STUDENT_GRAPH_FULL = 'transformer_full';
56
-
57
- function buildSuiteSummary(suiteName, results, startTimeMs) {
58
- let passed = 0;
59
- let failed = 0;
60
- let skipped = 0;
61
- for (const result of results) {
62
- if (result.skipped) {
63
- skipped++;
64
- } else if (result.passed) {
65
- passed++;
66
- } else {
67
- failed++;
68
- }
69
- }
70
- return {
71
- suite: suiteName,
72
- passed,
73
- failed,
74
- skipped,
75
- duration: Math.max(0, performance.now() - startTimeMs),
76
- results,
77
- };
78
- }
79
-
80
- function normalizeTrainingTestNames(names) {
81
- if (!Array.isArray(names)) return null;
82
- const normalized = names
83
- .map((name) => String(name || '').trim())
84
- .filter(Boolean);
85
- return normalized.length > 0 ? normalized : null;
86
- }
87
-
88
- function assertTrainingSchemaVersion(value) {
89
- if (value === undefined || value === null) {
90
- return TRAINING_COMMAND_SCHEMA_VERSION;
91
- }
92
- const parsed = Number(value);
93
- if (!Number.isInteger(parsed) || parsed !== TRAINING_COMMAND_SCHEMA_VERSION) {
94
- throw new Error(`trainingSchemaVersion must be ${TRAINING_COMMAND_SCHEMA_VERSION}.`);
95
- }
96
- return parsed;
97
- }
98
-
99
- function makeTensorFromFloat32(values, shape, label) {
100
- const data = values instanceof Float32Array ? values : new Float32Array(values);
101
- const buffer = acquireBuffer(data.byteLength, undefined, label || 'train_tensor');
102
- uploadData(buffer, data);
103
- return createTensor(buffer, 'f32', shape, label || 'train_tensor');
104
- }
105
-
106
- function makeTensorFromF16Bits(values, shape, label) {
107
- const data = values instanceof Uint16Array ? values : new Uint16Array(values);
108
- const buffer = acquireBuffer(data.byteLength, undefined, label || 'train_tensor_f16');
109
- uploadData(buffer, data);
110
- return createTensor(buffer, 'f16', shape, label || 'train_tensor_f16');
111
- }
112
-
113
- function makeTensorFromUint32(values, shape, label) {
114
- const data = values instanceof Uint32Array ? values : new Uint32Array(values);
115
- const buffer = acquireBuffer(data.byteLength, undefined, label || 'train_tokens');
116
- uploadData(buffer, data);
117
- // Token tensors are wrapped as f32 by contract; kernels read the underlying u32 bytes.
118
- return createTensor(buffer, 'f32', shape, label || 'train_tokens');
119
- }
120
-
121
- function releaseTensor(tensor) {
122
- if (!tensor?.buffer) return;
123
- releaseBuffer(tensor.buffer);
124
- }
125
-
126
- function isFiniteNumber(value) {
127
- return typeof value === 'number' && Number.isFinite(value);
128
- }
129
-
130
- function isNodeRuntime() {
131
- return typeof process !== 'undefined' && !!process.versions?.node;
132
- }
133
-
134
- export { buildDistillPrompt, resolveDistillDataScope };
135
-
136
- function toFiniteNumber(value, fallback) {
137
- const parsed = Number(value);
138
- return Number.isFinite(parsed) ? parsed : fallback;
139
- }
140
-
141
- function clampDistillTopK(value) {
142
- const parsed = Math.floor(toFiniteNumber(value, DISTILL_ADAPTER_TOP_K));
143
- return Math.max(2, Math.min(256, parsed));
144
- }
145
-
146
- export function normalizeDistillStudentGraphMode(value) {
147
- const normalized = normalizeOptionalString(value);
148
- if (!normalized) return DISTILL_STUDENT_GRAPH_FULL;
149
- const compact = normalized.toLowerCase().replace(/[-\s]/g, '_');
150
- if (compact === 'projection_head' || compact === 'projection') {
151
- return DISTILL_STUDENT_GRAPH_PROJECTION;
152
- }
153
- return DISTILL_STUDENT_GRAPH_FULL;
154
- }
155
-
156
- function toFloat32Array(values, label = 'values') {
157
- if (values instanceof Float32Array) return values;
158
- if (ArrayBuffer.isView(values)) {
159
- return new Float32Array(values.buffer.slice(values.byteOffset, values.byteOffset + values.byteLength));
160
- }
161
- if (Array.isArray(values)) {
162
- return new Float32Array(values);
163
- }
164
- throw new Error(`Distill ${label} must be an array-like float buffer.`);
165
- }
166
-
167
- function selectTopKIndices(logits, topK) {
168
- const k = Math.max(1, Math.floor(topK));
169
- const indices = new Int32Array(k);
170
- const values = new Float32Array(k);
171
- indices.fill(-1);
172
- values.fill(-Infinity);
173
-
174
- for (let i = 0; i < logits.length; i += 1) {
175
- const value = Number.isFinite(logits[i]) ? logits[i] : DISTILL_LOGIT_FALLBACK;
176
- if (value <= values[k - 1]) continue;
177
- let insert = k - 1;
178
- while (insert > 0 && value > values[insert - 1]) {
179
- values[insert] = values[insert - 1];
180
- indices[insert] = indices[insert - 1];
181
- insert -= 1;
182
- }
183
- values[insert] = value;
184
- indices[insert] = i;
185
- }
186
-
187
- for (let i = 0; i < k; i += 1) {
188
- if (indices[i] >= 0) continue;
189
- indices[i] = i < logits.length ? i : -1;
190
- }
191
- return indices;
192
- }
193
-
194
- function gatherLogitsByIndices(logits, indices, fallback = DISTILL_LOGIT_FALLBACK) {
195
- const gathered = new Float32Array(indices.length);
196
- for (let i = 0; i < indices.length; i += 1) {
197
- const tokenIndex = indices[i];
198
- if (tokenIndex >= 0 && tokenIndex < logits.length) {
199
- const value = logits[tokenIndex];
200
- gathered[i] = Number.isFinite(value) ? value : fallback;
201
- continue;
202
- }
203
- gathered[i] = fallback;
204
- }
205
- return gathered;
206
- }
207
-
208
- function argmax(values) {
209
- let bestIndex = 0;
210
- let bestValue = Number.NEGATIVE_INFINITY;
211
- for (let i = 0; i < values.length; i += 1) {
212
- const value = Number.isFinite(values[i]) ? values[i] : Number.NEGATIVE_INFINITY;
213
- if (value > bestValue) {
214
- bestValue = value;
215
- bestIndex = i;
216
- }
217
- }
218
- return bestIndex;
219
- }
220
-
221
- function softmax(values, temperature = 1) {
222
- const t = Math.max(1e-4, toFiniteNumber(temperature, 1));
223
- let max = Number.NEGATIVE_INFINITY;
224
- for (let i = 0; i < values.length; i += 1) {
225
- const candidate = values[i] / t;
226
- if (candidate > max) max = candidate;
227
- }
228
- const exps = new Float32Array(values.length);
229
- let sum = 0;
230
- for (let i = 0; i < values.length; i += 1) {
231
- const value = Math.exp((values[i] / t) - max);
232
- exps[i] = value;
233
- sum += value;
234
- }
235
- if (!Number.isFinite(sum) || sum <= 0) {
236
- const uniform = 1 / Math.max(1, values.length);
237
- exps.fill(uniform);
238
- return exps;
239
- }
240
- for (let i = 0; i < exps.length; i += 1) {
241
- exps[i] /= sum;
242
- }
243
- return exps;
244
- }
245
-
246
- function disposePrefillSnapshot(result) {
247
- const cache = result?.cache;
248
- if (cache && typeof cache.clear === 'function') {
249
- cache.clear();
250
- }
251
- }
252
-
253
- function buildShuffledIndices(length, seed = 1337) {
254
- const indices = Array.from({ length }, (_, idx) => idx);
255
- let state = (Number(seed) >>> 0) || 0x6d2b79f5;
256
- for (let i = indices.length - 1; i > 0; i -= 1) {
257
- state = ((state * 1664525) + 1013904223) >>> 0;
258
- const j = state % (i + 1);
259
- const tmp = indices[i];
260
- indices[i] = indices[j];
261
- indices[j] = tmp;
262
- }
263
- return indices;
264
- }
265
-
266
- function normalizeDistillStage(value) {
267
- const stage = String(value || '').trim();
268
- return stage === 'stage_b' ? 'stage_b' : 'stage_a';
269
- }
270
-
271
- async function computeTeacherPromptDistillFeatures(sample, prompt, runtime) {
272
- const teacherResult = await runtime.teacherPipeline.prefillWithLogits(prompt, {
273
- useChatTemplate: false,
274
- });
275
- try {
276
- const teacherLogits = toFloat32Array(teacherResult?.logits, 'teacher logits');
277
- const topTokenIndices = selectTopKIndices(teacherLogits, runtime.topK);
278
- const teacherTopLogits = gatherLogitsByIndices(teacherLogits, topTokenIndices, DISTILL_LOGIT_FALLBACK);
279
- const teacherTopProbs = softmax(teacherTopLogits, runtime.temperature);
280
- const targetClass = argmax(teacherTopLogits);
281
- return {
282
- source: sample.source,
283
- direction: sample.direction,
284
- targetClass,
285
- topTokenIndices: Array.from(topTokenIndices),
286
- teacherTopLogits,
287
- teacherTopProbs,
288
- };
289
- } finally {
290
- disposePrefillSnapshot(teacherResult);
291
- runtime.teacherPipeline.reset();
292
- }
293
- }
294
-
295
- function createDistillTensorDataset(samples, options = {}) {
296
- if (!Array.isArray(samples) || samples.length === 0) {
297
- throw new Error('Distill dataset has no usable rows.');
298
- }
299
- const distillRuntime = options.distillRuntime && typeof options.distillRuntime === 'object'
300
- ? options.distillRuntime
301
- : null;
302
- if (!distillRuntime?.teacherPipeline) {
303
- throw new Error('Distill dataset requires teacherPipeline.');
304
- }
305
- const batchSize = Math.max(1, Math.floor(Number(options.batchSize) || 1));
306
- const shuffle = options.shuffle === true;
307
- const seed = Number.isInteger(options.seed) ? options.seed : 1337;
308
- const stage = normalizeDistillStage(distillRuntime.stage);
309
- const topK = clampDistillTopK(distillRuntime.topK);
310
-
311
- return {
312
- async *batches() {
313
- const order = shuffle
314
- ? buildShuffledIndices(samples.length, seed)
315
- : Array.from({ length: samples.length }, (_, idx) => idx);
316
- let inputTensor = null;
317
- let targetTensor = null;
318
- let tensorBatchSize = 0;
319
- try {
320
- for (let offset = 0; offset < order.length; offset += batchSize) {
321
- const batchIndices = order.slice(offset, offset + batchSize);
322
- const features = new Float32Array(batchIndices.length * topK);
323
- const targets = new Uint32Array(batchIndices.length);
324
- const teacherTopProbs = [];
325
- const teacherTopTokenIndices = [];
326
- const teacherTopLogits = [];
327
- const teacherTargetIndices = [];
328
- const teacherTargetTokenIds = [];
329
- const prompts = [];
330
- const tripletPositivePrompts = [];
331
- const tripletNegativePrompts = [];
332
- const tripletMask = [];
333
- const directionCounts = {};
334
-
335
- for (let i = 0; i < batchIndices.length; i += 1) {
336
- const sample = samples[batchIndices[i]];
337
- const prompt = buildDistillPrompt(sample);
338
- const baseDistill = await computeTeacherPromptDistillFeatures(sample, prompt, {
339
- ...distillRuntime,
340
- topK,
341
- });
342
-
343
- const baseOffset = i * topK;
344
- features.set(baseDistill.teacherTopLogits, baseOffset);
345
- const targetClass = baseDistill.targetClass;
346
- const targetToken = Number.isInteger(baseDistill.topTokenIndices?.[targetClass])
347
- ? baseDistill.topTokenIndices[targetClass]
348
- : targetClass;
349
- const targetTokenMode = distillRuntime.targetTokenMode === 'teacher_top_token';
350
- targets[i] = targetTokenMode ? targetToken : targetClass;
351
- teacherTargetIndices.push(targetClass);
352
- teacherTargetTokenIds.push(targetToken);
353
- teacherTopProbs.push(baseDistill.teacherTopProbs);
354
- teacherTopTokenIndices.push(baseDistill.topTokenIndices);
355
- teacherTopLogits.push(baseDistill.teacherTopLogits);
356
- prompts.push(prompt);
357
-
358
- if (stage === 'stage_b') {
359
- const posPrompt = buildDistillCandidatePrompt(sample, sample.targetPos);
360
- const negPrompt = sample.targetNeg
361
- ? buildDistillCandidatePrompt(sample, sample.targetNeg)
362
- : null;
363
- tripletPositivePrompts.push(posPrompt);
364
- tripletNegativePrompts.push(negPrompt || posPrompt);
365
- tripletMask.push(Boolean(negPrompt));
366
- }
367
-
368
- directionCounts[sample.direction] = (directionCounts[sample.direction] || 0) + 1;
369
- }
370
-
371
- if (!inputTensor || !targetTensor || tensorBatchSize !== batchIndices.length) {
372
- releaseTensor(inputTensor);
373
- releaseTensor(targetTensor);
374
- inputTensor = makeTensorFromFloat32(
375
- features,
376
- [batchIndices.length, topK],
377
- 'distill_jsonl_input'
378
- );
379
- targetTensor = makeTensorFromUint32(
380
- targets,
381
- [batchIndices.length],
382
- 'distill_jsonl_targets'
383
- );
384
- tensorBatchSize = batchIndices.length;
385
- } else {
386
- uploadData(inputTensor.buffer, features);
387
- uploadData(targetTensor.buffer, targets);
388
- }
389
- yield {
390
- input: inputTensor,
391
- targets: targetTensor,
392
- distill: {
393
- prompts,
394
- tripletPositivePrompts,
395
- tripletNegativePrompts,
396
- tripletMask,
397
- teacherTopProbs,
398
- teacherTopTokenIndices,
399
- teacherTopLogits,
400
- teacherTargetIndices,
401
- teacherTargetTokenIds,
402
- targetTokenMode: distillRuntime.targetTokenMode || 'topk_class',
403
- batchSampleCount: batchIndices.length,
404
- directionCounts,
405
- distillStage: stage,
406
- temperature: toFiniteNumber(distillRuntime.temperature, 1),
407
- alphaKd: toFiniteNumber(distillRuntime.alphaKd, 1),
408
- alphaCe: toFiniteNumber(distillRuntime.alphaCe, 0),
409
- tripletMargin: Math.max(0, toFiniteNumber(distillRuntime.tripletMargin, 0.2)),
410
- teacherModelId: distillRuntime.teacherModelId || null,
411
- studentModelId: distillRuntime.studentModelId || null,
412
- },
413
- };
414
- }
415
- } finally {
416
- releaseTensor(inputTensor);
417
- releaseTensor(targetTensor);
418
- }
419
- },
420
- };
421
- }
422
-
423
- export async function loadDistillDatasetFromJsonl(datasetPath, scopeOptions = null) {
424
- const normalizedPath = normalizeDistillDatasetPath(datasetPath);
425
- if (!normalizedPath) return null;
426
- if (!isNodeRuntime()) {
427
- throw new Error('distillDatasetPath currently requires Node runtime.');
428
- }
429
- const normalizedScope = (
430
- scopeOptions && typeof scopeOptions === 'object'
431
- ? scopeOptions
432
- : resolveDistillDataScope()
433
- );
434
-
435
- const [{ readFile }, { resolve, dirname, isAbsolute, join, sep }] = await Promise.all([
436
- import('node:fs/promises'),
437
- import('node:path'),
438
- ]);
439
-
440
- const isShardManifest = (candidate) => {
441
- if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) return false;
442
- if (!Array.isArray(candidate.shards) || candidate.shards.length === 0) return false;
443
- return candidate.shards.every((entry) => {
444
- if (typeof entry === 'string' && entry.trim()) return true;
445
- if (entry && typeof entry === 'object' && typeof entry.path === 'string' && entry.path.trim()) return true;
446
- return false;
447
- });
448
- };
449
- const resolveShardPath = (entry, manifestDir) => {
450
- const rawPath = typeof entry === 'string' ? entry : entry.path;
451
- const normalized = String(rawPath || '').trim();
452
- if (!normalized) return null;
453
- if (isAbsolute(normalized)) return normalized;
454
- if (normalized.startsWith(`.${sep}`) || normalized.startsWith(`..${sep}`)) {
455
- return resolve(manifestDir, normalized);
456
- }
457
- const projectsPrefix = `projects${sep}`;
458
- if (normalized.startsWith(projectsPrefix)) {
459
- const marker = `${sep}projects${sep}`;
460
- const markerIndex = manifestDir.lastIndexOf(marker);
461
- if (markerIndex >= 0) {
462
- const workspaceRoot = manifestDir.slice(0, markerIndex);
463
- return join(workspaceRoot, normalized);
464
- }
465
- }
466
- return join(manifestDir, normalized);
467
- };
468
- const loadEncodedRows = (rawRows, contextLabel) => {
469
- const encodedRows = [];
470
- for (let i = 0; i < rawRows.length; i += 1) {
471
- let encoded = null;
472
- try {
473
- encoded = encodeDistillRow(rawRows[i], i, normalizedScope);
474
- } catch (error) {
475
- const message = error?.message ? String(error.message) : String(error);
476
- throw new Error(`${contextLabel}: row ${i + 1}: ${message}`);
477
- }
478
- if (encoded) encodedRows.push(encoded);
479
- }
480
- return encodedRows;
481
- };
482
-
483
- const absolutePath = resolve(normalizedPath);
484
- let raw;
485
- try {
486
- raw = await readFile(absolutePath, 'utf8');
487
- } catch (error) {
488
- const message = error?.message ? String(error.message) : String(error);
489
- throw new Error(`Failed to read distillDatasetPath "${absolutePath}": ${message}`);
490
- }
491
-
492
- let parsedJson = null;
493
- try {
494
- parsedJson = JSON.parse(raw);
495
- } catch {
496
- parsedJson = null;
497
- }
498
- if (isShardManifest(parsedJson)) {
499
- const manifestDir = dirname(absolutePath);
500
- const shardPaths = parsedJson.shards
501
- .map((entry) => resolveShardPath(entry, manifestDir))
502
- .filter(Boolean);
503
- if (shardPaths.length === 0) {
504
- throw new Error(`Distill shard manifest "${absolutePath}" has no valid shard paths.`);
505
- }
506
- let rowCount = 0;
507
- let sampleCount = 0;
508
- const directionCounts = {};
509
- for (const shardPath of shardPaths) {
510
- const shardRaw = await readFile(shardPath, 'utf8');
511
- const shardRows = parseJsonl(shardRaw);
512
- const encodedRows = loadEncodedRows(shardRows, `distill shard "${shardPath}"`);
513
- rowCount += shardRows.length;
514
- sampleCount += encodedRows.length;
515
- const shardDirections = summarizeDirectionCounts(encodedRows);
516
- for (const [direction, count] of Object.entries(shardDirections)) {
517
- directionCounts[direction] = (directionCounts[direction] || 0) + count;
518
- }
519
- }
520
- if (sampleCount <= 0) {
521
- throw new Error(`Distill shard manifest "${absolutePath}" has no usable rows across shards.`);
522
- }
523
- return {
524
- absolutePath,
525
- rowCount,
526
- sampleCount,
527
- directionCounts,
528
- dataScope: {
529
- sourceLangs: normalizedScope.sourceLangs || null,
530
- targetLangs: normalizedScope.targetLangs || null,
531
- pairAllowlist: normalizedScope.pairAllowlist || null,
532
- strictPairContract: normalizedScope.strictPairContract === true,
533
- },
534
- shardCount: shardPaths.length,
535
- shardPaths,
536
- createDataset(runOptions = {}) {
537
- const shardSeedBase = Number.isInteger(runOptions.seed) ? runOptions.seed : 1337;
538
- return {
539
- async *batches() {
540
- for (let shardIndex = 0; shardIndex < shardPaths.length; shardIndex += 1) {
541
- const shardPath = shardPaths[shardIndex];
542
- const shardRaw = await readFile(shardPath, 'utf8');
543
- const shardRows = parseJsonl(shardRaw);
544
- const encodedRows = loadEncodedRows(shardRows, `distill shard "${shardPath}"`);
545
- if (encodedRows.length === 0) continue;
546
- const shardDataset = createDistillTensorDataset(encodedRows, {
547
- ...runOptions,
548
- seed: shardSeedBase + shardIndex,
549
- });
550
- for await (const batch of shardDataset.batches()) {
551
- if (batch?.distill && typeof batch.distill === 'object') {
552
- batch.distill.datasetShardIndex = shardIndex + 1;
553
- batch.distill.datasetShardCount = shardPaths.length;
554
- batch.distill.datasetShardPath = shardPath;
555
- }
556
- yield batch;
557
- }
558
- }
559
- },
560
- };
561
- },
562
- };
563
- }
564
-
565
- const rows = parseJsonl(raw);
566
- const encodedRows = loadEncodedRows(rows, `distill dataset "${absolutePath}"`);
567
- if (encodedRows.length === 0) {
568
- throw new Error(`Distill dataset "${absolutePath}" has no usable rows.`);
569
- }
570
-
571
- return {
572
- absolutePath,
573
- rowCount: rows.length,
574
- sampleCount: encodedRows.length,
575
- directionCounts: summarizeDirectionCounts(encodedRows),
576
- dataScope: {
577
- sourceLangs: normalizedScope.sourceLangs || null,
578
- targetLangs: normalizedScope.targetLangs || null,
579
- pairAllowlist: normalizedScope.pairAllowlist || null,
580
- strictPairContract: normalizedScope.strictPairContract === true,
581
- },
582
- createDataset(runOptions = {}) {
583
- return createDistillTensorDataset(encodedRows, runOptions);
584
- },
585
- };
586
- }
587
-
588
- function looksLikeUrl(value) {
589
- return /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(String(value || '').trim());
590
- }
591
-
592
- function looksLikeFilesystemPath(value) {
593
- const normalized = String(value || '').trim();
594
- return normalized.startsWith('/') || normalized.startsWith('./') || normalized.startsWith('../');
595
- }
596
-
597
- async function resolveNodeModelUrlFromRef(modelRef) {
598
- if (!isNodeRuntime()) return null;
599
- const [{ access, constants }, { resolve, join }, { pathToFileURL }] = await Promise.all([
600
- import('node:fs/promises'),
601
- import('node:path'),
602
- import('node:url'),
603
- ]);
604
-
605
- const normalized = String(modelRef || '').trim();
606
- if (!normalized) return null;
607
- const candidates = [
608
- normalized,
609
- join('models', 'local', normalized),
610
- join('models', 'curated', normalized),
611
- ];
612
- for (const candidate of candidates) {
613
- const absolutePath = resolve(candidate);
614
- const manifestPath = join(absolutePath, 'manifest.json');
615
- try {
616
- await access(manifestPath, constants.R_OK);
617
- return pathToFileURL(absolutePath).href;
618
- } catch {
619
- // Try next candidate.
620
- }
621
- }
622
- return null;
623
- }
624
-
625
- async function initializeInferenceFromStore(modelId) {
626
- await openModelStore(modelId);
627
- const manifestText = await loadManifestFromStore();
628
- if (!manifestText) {
629
- throw new Error(`Manifest not found in store for model "${modelId}".`);
630
- }
631
- const manifest = parseManifest(manifestText);
632
- const pipeline = await createPipeline(manifest, {
633
- gpu: { device: getDevice() },
634
- });
635
- return { pipeline, manifest };
636
- }
637
-
638
- export async function loadDistillModelHandle(modelRef, role, loadOptions = {}) {
639
- const normalizedRef = normalizeOptionalString(modelRef);
640
- if (!normalizedRef) {
641
- throw new Error(`Distill ${role} model reference is required.`);
642
- }
643
-
644
- const loadFromUrl = async (url) => {
645
- const initialized = await initializeInference(url, {
646
- log: () => {},
647
- onProgress: () => {},
648
- runtime: loadOptions.runtime || undefined,
649
- });
650
- return {
651
- modelRef: normalizedRef,
652
- modelUrl: url,
653
- manifest: initialized.manifest,
654
- pipeline: initialized.pipeline,
655
- };
656
- };
657
-
658
- if (looksLikeUrl(normalizedRef)) {
659
- return loadFromUrl(normalizedRef);
660
- }
661
-
662
- if (isNodeRuntime()) {
663
- const localUrl = await resolveNodeModelUrlFromRef(normalizedRef);
664
- if (localUrl) {
665
- return loadFromUrl(localUrl);
666
- }
667
- }
668
-
669
- if (looksLikeFilesystemPath(normalizedRef) && isNodeRuntime()) {
670
- const [{ resolve }, { pathToFileURL }] = await Promise.all([
671
- import('node:path'),
672
- import('node:url'),
673
- ]);
674
- return loadFromUrl(pathToFileURL(resolve(normalizedRef)).href);
675
- }
676
-
677
- const { pipeline, manifest } = await initializeInferenceFromStore(normalizedRef);
678
- return {
679
- modelRef: normalizedRef,
680
- modelUrl: null,
681
- manifest,
682
- pipeline,
683
- };
684
- }
685
-
686
- function resolveDistillModelRefs(options = {}, trainingConfig = null) {
687
- const distillConfig = trainingConfig?.distill || {};
688
- return {
689
- teacherModelRef: normalizeOptionalString(options.teacherModelId ?? distillConfig.teacherModelId),
690
- studentModelRef: normalizeOptionalString(options.studentModelId ?? distillConfig.studentModelId),
691
- };
692
- }
693
-
694
- export async function createDistillRuntimeContext(options = {}, trainingConfig = null) {
695
- const { teacherModelRef, studentModelRef } = resolveDistillModelRefs(options, trainingConfig);
696
- if (!teacherModelRef || !studentModelRef) {
697
- throw new Error('Distill stage requires teacherModelId and studentModelId.');
698
- }
699
-
700
- const distillConfig = trainingConfig?.distill || {};
701
- const studentGraphMode = normalizeDistillStudentGraphMode(
702
- options.studentGraphMode
703
- ?? distillConfig.studentGraphMode
704
- );
705
- const teacher = await loadDistillModelHandle(teacherModelRef, 'teacher');
706
- const studentRuntime = studentGraphMode === DISTILL_STUDENT_GRAPH_FULL
707
- ? {
708
- runtimeConfig: {
709
- shared: {
710
- debug: {
711
- logLevel: {
712
- defaultLogLevel: 'debug',
713
- },
714
- },
715
- },
716
- inference: {
717
- compute: {
718
- activationDtype: 'f32',
719
- keepF32Weights: true,
720
- },
721
- },
722
- },
723
- }
724
- : null;
725
- let student = null;
726
- try {
727
- student = await loadDistillModelHandle(studentModelRef, 'student', {
728
- runtime: studentRuntime,
729
- });
730
- } catch (error) {
731
- if (teacher?.pipeline && typeof teacher.pipeline.unload === 'function') {
732
- await teacher.pipeline.unload();
733
- }
734
- throw error;
735
- }
736
-
737
- const runtime = {
738
- stage: normalizeDistillStage(options.trainingStage || distillConfig.stage),
739
- teacherPipeline: teacher.pipeline,
740
- studentPipeline: student.pipeline,
741
- teacherModelId: teacher.manifest?.modelId || teacherModelRef,
742
- studentModelId: student.manifest?.modelId || studentModelRef,
743
- teacherModelUrl: teacher.modelUrl || null,
744
- studentModelUrl: student.modelUrl || null,
745
- topK: clampDistillTopK(distillConfig.topK ?? DISTILL_ADAPTER_TOP_K),
746
- temperature: Math.max(1e-4, toFiniteNumber(distillConfig.temperature, 1)),
747
- alphaKd: toFiniteNumber(distillConfig.alphaKd, 1),
748
- alphaCe: toFiniteNumber(distillConfig.alphaCe, 0),
749
- tripletMargin: Math.max(0, toFiniteNumber(distillConfig.tripletMargin, 0.2)),
750
- studentGraphMode,
751
- targetTokenMode: studentGraphMode === DISTILL_STUDENT_GRAPH_FULL
752
- ? 'teacher_top_token'
753
- : 'topk_class',
754
- async cleanup() {
755
- if (teacher?.pipeline && typeof teacher.pipeline.unload === 'function') {
756
- await teacher.pipeline.unload();
757
- }
758
- if (student?.pipeline && typeof student.pipeline.unload === 'function') {
759
- await student.pipeline.unload();
760
- }
761
- },
762
- };
763
- return runtime;
764
- }
765
-
766
- function resolveDistillDatasetPath(options = {}, trainingConfig = null) {
767
- return normalizeDistillDatasetPath(
768
- options.distillDatasetPath ?? trainingConfig?.distill?.datasetPath ?? null
769
- );
770
- }
771
-
772
- function resolveRuntimeUrl(pathname) {
773
- if (typeof globalThis.location !== 'undefined' && globalThis.location?.href) {
774
- return pathname;
775
- }
776
- return new URL(pathname, import.meta.url).toString();
777
- }
778
-
779
- async function ensureTrainingGpuRuntime() {
780
- setPlatformsBaseUrl(resolveRuntimeUrl('../config/platforms/'));
781
- setRegistryUrl(resolveRuntimeUrl('../config/kernels/registry.json'));
782
- await initDevice();
783
- }
784
-
785
- export function createToyModelFixture(overrides = {}) {
786
- const config = createTrainingConfig({
787
- ...overrides,
788
- training: {
789
- enabled: true,
790
- lossScaling: { enabled: false },
791
- gradient: { maxNorm: 0 },
792
- ...(overrides.training || {}),
793
- },
794
- });
795
-
796
- const encoderWeight = makeTensorFromFloat32(
797
- [0.1, -0.2, 0.3, 0.4, 0.05, -0.1],
798
- [3, 2],
799
- 'training_suite_encoder_weight'
800
- );
801
- const priorWeight = makeTensorFromFloat32(
802
- [0.02, -0.01, 0.03, -0.05, 0.04, -0.02],
803
- [3, 2],
804
- 'training_suite_prior_weight'
805
- );
806
- const decoderWeight = makeTensorFromFloat32(
807
- [0.03, 0.02, -0.01, 0.06, -0.04, 0.02],
808
- [3, 2],
809
- 'training_suite_decoder_weight'
810
- );
811
- const baseWeight = makeTensorFromFloat32(
812
- [0.08, -0.12, 0.16, 0.22, -0.03, 0.09],
813
- [3, 2],
814
- 'training_suite_base_weight'
815
- );
816
- const input = makeTensorFromFloat32([0.5, 0.1, -0.3, 0.2, 0.4, -0.1], [2, 3], 'training_suite_input');
817
- const targets = makeTensorFromUint32([1, 0], [2], 'training_suite_targets');
818
- const batch = { input, targets };
819
-
820
- const model = {
821
- async forward(inputTensor, tape) {
822
- return tape.record(
823
- OpType.MATMUL,
824
- (a, b) => runMatmul(a, b, 2, 2, 3, { transposeB: false }),
825
- [inputTensor, baseWeight],
826
- { M: 2, N: 2, K: 3, transposeB: false }
827
- );
828
- },
829
- loraParams() {
830
- return [baseWeight];
831
- },
832
- paramGroups() {
833
- return {
834
- encoder: [encoderWeight],
835
- prior: [priorWeight],
836
- decoder: [decoderWeight],
837
- base: [baseWeight],
838
- lora: [baseWeight],
839
- };
840
- },
841
- };
842
-
843
- return {
844
- config,
845
- model,
846
- batch,
847
- cleanup() {
848
- releaseTensor(encoderWeight);
849
- releaseTensor(priorWeight);
850
- releaseTensor(decoderWeight);
851
- releaseTensor(baseWeight);
852
- releaseTensor(input);
853
- releaseTensor(targets);
854
- },
855
- };
856
- }
857
-
858
- export { createDistillStudentRuntimeModelFixture };
859
-
860
- async function runRunnerSmokeTest() {
861
- const fixture = createToyModelFixture();
862
- try {
863
- const runner = new TrainingRunner(fixture.config, {
864
- optimizer: new AdamOptimizer(fixture.config),
865
- crossEntropyLoss,
866
- clipGradients,
867
- });
868
- const dataset = {
869
- async *batches() {
870
- for (let i = 0; i < 3; i += 1) {
871
- yield fixture.batch;
872
- }
873
- },
874
- };
875
-
876
- const metrics = await runner.run(fixture.model, dataset, {
877
- epochs: 1,
878
- batchSize: 1,
879
- shuffle: false,
880
- maxSteps: 3,
881
- });
882
- if (!Array.isArray(metrics) || metrics.length === 0) {
883
- return { passed: false, error: 'Training runner produced no metrics.' };
884
- }
885
- for (const entry of metrics) {
886
- if (!isFiniteNumber(entry.total_loss) || !isFiniteNumber(entry.step_time_ms)) {
887
- return { passed: false, error: 'Training runner emitted non-finite metrics.' };
888
- }
889
- }
890
-
891
- return { passed: true };
892
- } finally {
893
- fixture.cleanup();
894
- }
895
- }
896
-
897
- async function runTrainStepMetricsTest() {
898
- const fixture = createToyModelFixture();
899
- try {
900
- const result = await trainStep(fixture.model, fixture.batch, fixture.config, {
901
- crossEntropyLoss,
902
- clipGradients,
903
- optimizer: new AdamOptimizer(fixture.config),
904
- });
905
-
906
- if (!isFiniteNumber(result.forward_ms) || !isFiniteNumber(result.backward_ms)) {
907
- return { passed: false, error: 'trainStep did not report finite phase timings.' };
908
- }
909
- if (!result.clipMetrics || !isFiniteNumber(result.clipMetrics.gradient_norm_unclipped)) {
910
- return { passed: false, error: 'trainStep did not report clipping metrics.' };
911
- }
912
- if (!result.optimizerMetrics || !isFiniteNumber(result.optimizerMetrics.optimizer_ms)) {
913
- return { passed: false, error: 'trainStep did not report optimizer metrics.' };
914
- }
915
-
916
- return { passed: true };
917
- } finally {
918
- fixture.cleanup();
919
- }
920
- }
921
-
922
- const UL_STAGE_SET = Object.freeze(['stage1_joint', 'stage2_base']);
923
- const DISTILL_STAGE_SET = Object.freeze(['stage_a', 'stage_b']);
924
- const TRAINING_STAGE_SET = Object.freeze([...UL_STAGE_SET, ...DISTILL_STAGE_SET]);
925
-
926
- function normalizeTrainingStage(stage) {
927
- const normalized = String(stage || '').trim();
928
- if (!normalized) return null;
929
- if (!TRAINING_STAGE_SET.includes(normalized)) {
930
- throw new Error(`Unknown training stage "${normalized}". Expected one of: ${TRAINING_STAGE_SET.join(', ')}.`);
931
- }
932
- return normalized;
933
- }
934
-
935
- function isUlStage(stage) {
936
- return UL_STAGE_SET.includes(String(stage || ''));
937
- }
938
-
939
- function isDistillStage(stage) {
940
- return DISTILL_STAGE_SET.includes(String(stage || ''));
941
- }
942
-
943
- function normalizeTrainingConfigOverride(value) {
944
- if (!value) return null;
945
- if (typeof value !== 'object' || Array.isArray(value)) {
946
- throw new Error('trainingConfig must be an object when provided.');
947
- }
948
- return value;
949
- }
950
-
951
- function normalizeAdapterActivationConfig(options = {}) {
952
- const runtimeConfig = normalizeTrainingConfigOverride(options.trainingConfig);
953
- const direct = options.adapterActivation;
954
- const nested = runtimeConfig?.adapterActivation;
955
- const config = direct && typeof direct === 'object' ? direct : (nested && typeof nested === 'object' ? nested : null);
956
- if (!config) {
957
- return {
958
- enabled: false,
959
- autoActivate: false,
960
- adapterPayload: null,
961
- exportConfig: null,
962
- };
963
- }
964
- const exportConfig = config.export && typeof config.export === 'object'
965
- ? config.export
966
- : null;
967
- const adapterPayload = (() => {
968
- if (config.adapterManifest && typeof config.adapterManifest === 'object') {
969
- return { adapterManifest: config.adapterManifest };
970
- }
971
- if (typeof config.adapterManifestJson === 'string' && config.adapterManifestJson.trim()) {
972
- return { adapterManifestJson: config.adapterManifestJson };
973
- }
974
- if (typeof config.adapterManifestUrl === 'string' && config.adapterManifestUrl.trim()) {
975
- return { adapterManifestUrl: config.adapterManifestUrl };
976
- }
977
- if (typeof config.adapterManifestPath === 'string' && config.adapterManifestPath.trim()) {
978
- return { adapterManifestPath: config.adapterManifestPath };
979
- }
980
- if (config.adapter != null) {
981
- return { adapter: config.adapter };
982
- }
983
- return null;
984
- })();
985
- return {
986
- enabled: config.enabled !== false,
987
- autoActivate: config.autoActivate === true,
988
- adapterPayload,
989
- exportConfig,
990
- };
991
- }
992
-
993
- function normalizeLoRAExportConfig(value) {
994
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
995
- return null;
996
- }
997
- const tensors = Array.isArray(value.tensors) ? value.tensors : [];
998
- if (tensors.length === 0) {
999
- return null;
1000
- }
1001
- const normalizedTensors = tensors.map((entry, index) => {
1002
- const name = normalizeOptionalString(entry?.name);
1003
- const paramIndex = Number.isFinite(entry?.paramIndex)
1004
- ? Math.floor(entry.paramIndex)
1005
- : -1;
1006
- if (!name) {
1007
- throw new Error(`adapterActivation.export.tensors[${index}].name is required.`);
1008
- }
1009
- if (!Number.isInteger(paramIndex) || paramIndex < 0) {
1010
- throw new Error(`adapterActivation.export.tensors[${index}].paramIndex must be a non-negative integer.`);
1011
- }
1012
- return { name, paramIndex };
1013
- });
1014
- const targetModules = Array.isArray(value.targetModules)
1015
- ? value.targetModules.map((moduleName) => String(moduleName || '').trim()).filter(Boolean)
1016
- : [];
1017
- if (targetModules.length === 0) {
1018
- throw new Error('adapterActivation.export.targetModules must contain at least one module.');
1019
- }
1020
- const id = normalizeOptionalString(value.id);
1021
- const name = normalizeOptionalString(value.name);
1022
- const baseModel = normalizeOptionalString(value.baseModel);
1023
- const rank = Number(value.rank);
1024
- const alpha = Number(value.alpha);
1025
- if (!id || !name || !baseModel) {
1026
- throw new Error('adapterActivation.export requires id, name, and baseModel.');
1027
- }
1028
- if (!Number.isFinite(rank) || rank <= 0 || !Number.isInteger(rank)) {
1029
- throw new Error('adapterActivation.export.rank must be a positive integer.');
1030
- }
1031
- if (!Number.isFinite(alpha) || alpha <= 0) {
1032
- throw new Error('adapterActivation.export.alpha must be a positive number.');
1033
- }
1034
- return {
1035
- id,
1036
- name,
1037
- baseModel,
1038
- rank,
1039
- alpha,
1040
- targetModules,
1041
- tensors: normalizedTensors,
1042
- format: value.format === 'array' ? 'array' : 'base64',
1043
- pretty: value.pretty === true,
1044
- };
1045
- }
1046
-
1047
- async function exportLoRAAdapterFromModel(model, exportConfig, runIndex = null) {
1048
- const normalizedConfig = normalizeLoRAExportConfig(exportConfig);
1049
- if (!normalizedConfig) return null;
1050
- if (!model || typeof model.loraParams !== 'function') {
1051
- throw new Error('adapterActivation.export requires model.loraParams() support.');
1052
- }
1053
- const params = model.loraParams();
1054
- if (!Array.isArray(params) || params.length === 0) {
1055
- throw new Error('adapterActivation.export requires non-empty model.loraParams().');
1056
- }
1057
- const tensors = normalizedConfig.tensors.map((entry) => {
1058
- const tensor = params[entry.paramIndex];
1059
- if (!tensor) {
1060
- throw new Error(`adapterActivation.export tensor paramIndex ${entry.paramIndex} is out of range.`);
1061
- }
1062
- return {
1063
- name: entry.name,
1064
- tensor,
1065
- };
1066
- });
1067
- const exported = await exportLoRAAdapter({
1068
- id: normalizedConfig.id,
1069
- name: normalizedConfig.name,
1070
- baseModel: normalizedConfig.baseModel,
1071
- rank: normalizedConfig.rank,
1072
- alpha: normalizedConfig.alpha,
1073
- targetModules: normalizedConfig.targetModules,
1074
- tensors,
1075
- format: normalizedConfig.format,
1076
- pretty: normalizedConfig.pretty,
1077
- });
1078
- return {
1079
- runIndex,
1080
- manifest: exported.manifest,
1081
- json: exported.json,
1082
- hash: sha256Hex(exported.json),
1083
- };
1084
- }
1085
-
1086
- async function tryActivateAdapterPayload(payload) {
1087
- if (!payload) {
1088
- return {
1089
- activated: false,
1090
- adapterName: null,
1091
- source: null,
1092
- reason: 'no_adapter_payload',
1093
- };
1094
- }
1095
- const { activateLoRAFromTrainingOutput } = await import('../client/doppler-provider/model-manager.js');
1096
- try {
1097
- return await activateLoRAFromTrainingOutput(payload);
1098
- } catch (error) {
1099
- return {
1100
- activated: false,
1101
- adapterName: null,
1102
- source: null,
1103
- reason: String(error?.message || error),
1104
- };
1105
- }
1106
- }
1107
-
1108
- function buildUlTrainingOverrides(options = {}) {
1109
- const trainingConfig = normalizeTrainingConfigOverride(options.trainingConfig);
1110
- const explicitStage = normalizeTrainingStage(options.trainingStage || trainingConfig?.ul?.stage);
1111
- const ulEnabled = isUlStage(explicitStage) || trainingConfig?.ul?.enabled === true;
1112
- if (!ulEnabled) {
1113
- return trainingConfig || null;
1114
- }
1115
- const stage = isUlStage(explicitStage) ? explicitStage : 'stage1_joint';
1116
- const ulOverride = {
1117
- ...(trainingConfig?.ul || {}),
1118
- enabled: true,
1119
- stage,
1120
- stage1Artifact: options.stage1Artifact ?? trainingConfig?.ul?.stage1Artifact ?? null,
1121
- stage1ArtifactHash: options.stage1ArtifactHash ?? trainingConfig?.ul?.stage1ArtifactHash ?? null,
1122
- artifactDir: options.ulArtifactDir ?? trainingConfig?.ul?.artifactDir ?? 'reports/training/ul',
1123
- };
1124
- if (stage === 'stage2_base') {
1125
- ulOverride.freeze = {
1126
- encoder: true,
1127
- prior: true,
1128
- decoder: true,
1129
- base: false,
1130
- lora: false,
1131
- ...(trainingConfig?.ul?.freeze || {}),
1132
- };
1133
- }
1134
- return {
1135
- ...(trainingConfig || {}),
1136
- ul: ulOverride,
1137
- };
1138
- }
1139
-
1140
- export function buildDistillTrainingOverrides(options = {}) {
1141
- const trainingConfig = normalizeTrainingConfigOverride(options.trainingConfig);
1142
- const explicitStage = normalizeTrainingStage(options.trainingStage || trainingConfig?.distill?.stage);
1143
- const distillEnabled = isDistillStage(explicitStage) || trainingConfig?.distill?.enabled === true;
1144
- if (!distillEnabled) {
1145
- return trainingConfig || null;
1146
- }
1147
- const stage = isDistillStage(explicitStage) ? explicitStage : 'stage_a';
1148
- const distillOverride = {
1149
- ...(trainingConfig?.distill || {}),
1150
- enabled: true,
1151
- stage,
1152
- teacherModelId: options.teacherModelId ?? trainingConfig?.distill?.teacherModelId ?? null,
1153
- studentModelId: options.studentModelId ?? trainingConfig?.distill?.studentModelId ?? null,
1154
- datasetId: options.distillDatasetId ?? trainingConfig?.distill?.datasetId ?? null,
1155
- datasetPath: options.distillDatasetPath ?? trainingConfig?.distill?.datasetPath ?? null,
1156
- languagePair: options.distillLanguagePair ?? trainingConfig?.distill?.languagePair ?? null,
1157
- sourceLangs: (
1158
- options.distillSourceLangs
1159
- ?? trainingConfig?.distill?.sourceLangs
1160
- ?? null
1161
- ),
1162
- targetLangs: (
1163
- options.distillTargetLangs
1164
- ?? trainingConfig?.distill?.targetLangs
1165
- ?? null
1166
- ),
1167
- pairAllowlist: (
1168
- options.distillPairAllowlist
1169
- ?? trainingConfig?.distill?.pairAllowlist
1170
- ?? null
1171
- ),
1172
- strictPairContract: (
1173
- options.strictPairContract === true
1174
- || trainingConfig?.distill?.strictPairContract === true
1175
- ),
1176
- shardIndex: options.distillShardIndex ?? trainingConfig?.distill?.shardIndex ?? null,
1177
- shardCount: options.distillShardCount ?? trainingConfig?.distill?.shardCount ?? null,
1178
- resumeFrom: options.resumeFrom ?? trainingConfig?.distill?.resumeFrom ?? null,
1179
- stageAArtifact: options.stageAArtifact ?? trainingConfig?.distill?.stageAArtifact ?? null,
1180
- stageAArtifactHash: options.stageAArtifactHash ?? trainingConfig?.distill?.stageAArtifactHash ?? null,
1181
- artifactDir: options.distillArtifactDir ?? trainingConfig?.distill?.artifactDir ?? 'reports/training/distill',
1182
- };
1183
- if (stage === 'stage_b') {
1184
- distillOverride.freeze = {
1185
- encoder: true,
1186
- prior: true,
1187
- decoder: true,
1188
- base: false,
1189
- lora: false,
1190
- ...(trainingConfig?.distill?.freeze || {}),
1191
- };
1192
- }
1193
- return {
1194
- ...(trainingConfig || {}),
1195
- distill: distillOverride,
1196
- };
1197
- }
1198
-
1199
- async function computeNodeFileHash(filePath) {
1200
- if (!(typeof process !== 'undefined' && process.versions?.node)) {
1201
- return null;
1202
- }
1203
- const [{ readFile }, { resolve }] = await Promise.all([
1204
- import('node:fs/promises'),
1205
- import('node:path'),
1206
- ]);
1207
- const absolutePath = resolve(String(filePath));
1208
- const raw = await readFile(absolutePath, 'utf8');
1209
- return {
1210
- absolutePath,
1211
- hash: sha256Hex(raw),
1212
- };
1213
- }
1214
-
1215
- async function runUlStageTest(stage, options = {}) {
1216
- const ulTraining = buildUlTrainingOverrides({
1217
- ...options,
1218
- trainingStage: stage,
1219
- });
1220
- const fixture = createToyModelFixture({
1221
- training: ulTraining || undefined,
1222
- });
1223
-
1224
- try {
1225
- const runner = new TrainingRunner(fixture.config, {
1226
- optimizer: new AdamOptimizer(fixture.config),
1227
- crossEntropyLoss,
1228
- clipGradients,
1229
- });
1230
- const dataset = {
1231
- async *batches() {
1232
- for (let i = 0; i < 2; i += 1) {
1233
- yield fixture.batch;
1234
- }
1235
- },
1236
- };
1237
- const ulArtifactDir = normalizeOptionalString(options.ulArtifactDir)
1238
- || normalizeOptionalString(fixture.config.training?.ul?.artifactDir)
1239
- || 'reports/training/ul';
1240
- const metrics = await runner.run(fixture.model, dataset, {
1241
- epochs: 1,
1242
- batchSize: 1,
1243
- shuffle: false,
1244
- maxSteps: 2,
1245
- modelId: options.modelId || 'training',
1246
- modelUrl: options.modelUrl || null,
1247
- runtimePreset: options.runtimePreset || null,
1248
- trainingStage: stage,
1249
- command: options.command || null,
1250
- surface: options.surface || null,
1251
- forceResume: options.forceResume === true,
1252
- forceResumeReason: options.forceResumeReason || null,
1253
- forceResumeSource: options.forceResumeSource || null,
1254
- checkpointOperator: options.checkpointOperator || null,
1255
- checkpointEvery: options.checkpointEvery ?? null,
1256
- gpuAdapterInfo: getKernelCapabilities(),
1257
- timestamp: options.timestamp || null,
1258
- ulArtifactDir,
1259
- });
1260
- if (!Array.isArray(metrics) || metrics.length === 0) {
1261
- return { passed: false, error: `UL ${stage} produced no metrics.` };
1262
- }
1263
- const requiredFields = [
1264
- 'loss_prior',
1265
- 'loss_decoder',
1266
- 'loss_recon',
1267
- 'lambda',
1268
- 'latent_bitrate_proxy',
1269
- 'loss_total',
1270
- 'coeff_ce',
1271
- 'coeff_prior',
1272
- 'coeff_decoder',
1273
- 'coeff_recon',
1274
- ];
1275
- if (stage === 'stage1_joint') {
1276
- requiredFields.push(
1277
- 'schedule_step_index',
1278
- 'latent_clean_mean',
1279
- 'latent_clean_std',
1280
- 'latent_noise_mean',
1281
- 'latent_noise_std',
1282
- 'latent_noisy_mean',
1283
- 'latent_noisy_std',
1284
- 'latent_shape',
1285
- 'latent_clean_values',
1286
- 'latent_noise_values',
1287
- 'latent_noisy_values'
1288
- );
1289
- }
1290
- if (stage === 'stage2_base') {
1291
- requiredFields.push('stage1_latent_count');
1292
- }
1293
- for (const field of requiredFields) {
1294
- if (!(field in metrics[0])) {
1295
- return { passed: false, error: `UL ${stage} missing metric field "${field}".` };
1296
- }
1297
- }
1298
- const artifact = runner.lastArtifact;
1299
- if (!artifact || !artifact.manifestPath) {
1300
- return { passed: false, error: `UL ${stage} did not produce artifacts.` };
1301
- }
1302
- return {
1303
- passed: true,
1304
- artifact: {
1305
- ...artifact,
1306
- resumeAudits: Array.isArray(runner.resumeState?.resumeAudits)
1307
- ? runner.resumeState.resumeAudits
1308
- : [],
1309
- },
1310
- metrics: {
1311
- stage,
1312
- steps: metrics.length,
1313
- manifestPath: artifact.manifestPath,
1314
- manifestHash: artifact.manifestHash,
1315
- manifestContentHash: artifact.manifestContentHash,
1316
- manifestFileHash: artifact.manifestFileHash ?? null,
1317
- ulResolvedConfig: {
1318
- enabled: fixture.config.training?.ul?.enabled === true,
1319
- stage: fixture.config.training?.ul?.stage ?? null,
1320
- lambda0: fixture.config.training?.ul?.lambda0 ?? null,
1321
- seed: fixture.config.training?.ul?.seed ?? null,
1322
- noiseSchedule: fixture.config.training?.ul?.noiseSchedule ?? null,
1323
- priorAlignment: fixture.config.training?.ul?.priorAlignment ?? null,
1324
- decoderSigmoidWeight: fixture.config.training?.ul?.decoderSigmoidWeight ?? null,
1325
- freeze: fixture.config.training?.ul?.freeze ?? null,
1326
- },
1327
- resumeAuditCount: Number.isInteger(runner.resumeState?.resumeAuditCount)
1328
- ? runner.resumeState.resumeAuditCount
1329
- : 0,
1330
- },
1331
- };
1332
- } finally {
1333
- fixture.cleanup();
1334
- }
1335
- }
1336
-
1337
- async function runUlStage1Test(options = {}) {
1338
- return runUlStageTest('stage1_joint', options);
1339
- }
1340
-
1341
- async function runUlStage2Test(options = {}) {
1342
- const explicitStage1Artifact = String(options.stage1Artifact || '').trim();
1343
- let stage1Artifact = explicitStage1Artifact || null;
1344
- let stage1ArtifactHash = String(options.stage1ArtifactHash || '').trim() || null;
1345
-
1346
- if (!stage1Artifact) {
1347
- const stage1 = await runUlStage1Test({
1348
- ...options,
1349
- trainingStage: 'stage1_joint',
1350
- });
1351
- if (!stage1?.passed || !stage1?.artifact?.manifestPath) {
1352
- return { passed: false, error: 'UL stage2 preflight failed to generate stage1 artifact.' };
1353
- }
1354
- stage1Artifact = stage1.artifact.manifestPath;
1355
- stage1ArtifactHash = stage1.artifact.manifestHash;
1356
- const nodeHash = await computeNodeFileHash(stage1Artifact);
1357
- if (nodeHash?.hash) {
1358
- stage1ArtifactHash = nodeHash.hash;
1359
- stage1Artifact = nodeHash.absolutePath;
1360
- }
1361
- }
1362
-
1363
- return runUlStageTest('stage2_base', {
1364
- ...options,
1365
- stage1Artifact,
1366
- stage1ArtifactHash,
1367
- });
1368
- }
1369
-
1370
- async function runDistillStageTest(stage, options = {}) {
1371
- const distillTraining = buildDistillTrainingOverrides({
1372
- ...options,
1373
- trainingStage: stage,
1374
- });
1375
- const distillOutputDim = clampDistillTopK(distillTraining?.distill?.topK ?? DISTILL_ADAPTER_TOP_K);
1376
- const resolvedTrainingConfig = createTrainingConfig({
1377
- training: distillTraining || undefined,
1378
- }).training;
1379
- let fixture = null;
1380
- let distillRuntime = null;
1381
-
1382
- try {
1383
- const distillDatasetPath = resolveDistillDatasetPath(options, resolvedTrainingConfig);
1384
- if (!distillDatasetPath) {
1385
- throw new Error('Distill stage requires --distill-dataset-path (training.distill.datasetPath).');
1386
- }
1387
- const distillDataScope = resolveDistillDataScope(options, resolvedTrainingConfig);
1388
- const distillDatasetReport = await loadDistillDatasetFromJsonl(distillDatasetPath, distillDataScope);
1389
- distillRuntime = await createDistillRuntimeContext({
1390
- ...options,
1391
- trainingStage: stage,
1392
- }, resolvedTrainingConfig);
1393
- fixture = await createDistillStudentRuntimeModelFixture({
1394
- training: distillTraining || undefined,
1395
- }, {
1396
- outputDim: distillOutputDim,
1397
- distillRuntime,
1398
- });
1399
-
1400
- const runner = new TrainingRunner(fixture.config, {
1401
- optimizer: new AdamOptimizer(fixture.config),
1402
- crossEntropyLoss,
1403
- clipGradients,
1404
- });
1405
- const distillMaxSteps = Number.isInteger(options.trainingBenchSteps) && options.trainingBenchSteps > 0
1406
- ? options.trainingBenchSteps
1407
- : 2;
1408
- const dataset = distillDatasetReport.createDataset({
1409
- batchSize: 1,
1410
- shuffle: false,
1411
- seed: 1337,
1412
- distillRuntime,
1413
- });
1414
- const distillRunStartMs = performance.now();
1415
- const distillArtifactDir = normalizeOptionalString(options.distillArtifactDir)
1416
- || normalizeOptionalString(fixture.config.training?.distill?.artifactDir)
1417
- || 'reports/training/distill';
1418
- const metrics = await runner.run(fixture.model, dataset, {
1419
- epochs: 1,
1420
- batchSize: 1,
1421
- shuffle: false,
1422
- maxSteps: distillMaxSteps,
1423
- modelId: options.modelId || distillRuntime.studentModelId || 'training',
1424
- modelUrl: options.modelUrl || distillRuntime.studentModelUrl || null,
1425
- runtimePreset: options.runtimePreset || null,
1426
- trainingStage: stage,
1427
- command: options.command || null,
1428
- surface: options.surface || null,
1429
- forceResume: options.forceResume === true,
1430
- forceResumeReason: options.forceResumeReason || null,
1431
- forceResumeSource: options.forceResumeSource || null,
1432
- checkpointOperator: options.checkpointOperator || null,
1433
- checkpointEvery: options.checkpointEvery ?? null,
1434
- gpuAdapterInfo: getKernelCapabilities(),
1435
- timestamp: options.timestamp || null,
1436
- distillArtifactDir,
1437
- stageAArtifact: options.stageAArtifact || null,
1438
- stageAArtifactHash: options.stageAArtifactHash || null,
1439
- teacherModelId: distillRuntime.teacherModelId || null,
1440
- studentModelId: distillRuntime.studentModelId || null,
1441
- distillDatasetId: options.distillDatasetId || null,
1442
- distillDatasetPath: distillDatasetReport.absolutePath,
1443
- distillLanguagePair: options.distillLanguagePair || null,
1444
- distillSourceLangs: distillDataScope.sourceLangs || null,
1445
- distillTargetLangs: distillDataScope.targetLangs || null,
1446
- distillPairAllowlist: distillDataScope.pairAllowlist || null,
1447
- strictPairContract: distillDataScope.strictPairContract === true,
1448
- distillShardIndex: options.distillShardIndex ?? fixture.config.training?.distill?.shardIndex ?? null,
1449
- distillShardCount: options.distillShardCount ?? fixture.config.training?.distill?.shardCount ?? null,
1450
- resumeFrom: options.resumeFrom ?? fixture.config.training?.distill?.resumeFrom ?? null,
1451
- });
1452
- if (!Array.isArray(metrics) || metrics.length === 0) {
1453
- return { passed: false, error: `Distill ${stage} produced no metrics.` };
1454
- }
1455
- const requiredFields = stage === 'stage_a'
1456
- ? ['loss_kd', 'distill_stage']
1457
- : ['loss_triplet', 'distill_stage', 'distill_triplet_margin'];
1458
- for (const field of requiredFields) {
1459
- if (!(field in metrics[0])) {
1460
- return { passed: false, error: `Distill ${stage} missing metric field "${field}".` };
1461
- }
1462
- }
1463
- const artifact = runner.lastArtifact;
1464
- if (!artifact || !artifact.manifestPath) {
1465
- return { passed: false, error: `Distill ${stage} did not produce artifacts.` };
1466
- }
1467
- const progress = resolveBenchProgressSummary(
1468
- metrics,
1469
- resolveDistillShardProgressContext(
1470
- options,
1471
- fixture.config.training,
1472
- distillMaxSteps,
1473
- distillDatasetReport?.shardCount ?? null
1474
- ),
1475
- distillRunStartMs
1476
- );
1477
- return {
1478
- passed: true,
1479
- artifact: {
1480
- ...artifact,
1481
- resumeAudits: Array.isArray(runner.resumeState?.resumeAudits)
1482
- ? runner.resumeState.resumeAudits
1483
- : [],
1484
- },
1485
- metrics: {
1486
- stage,
1487
- steps: metrics.length,
1488
- progress,
1489
- manifestPath: artifact.manifestPath,
1490
- manifestHash: artifact.manifestHash,
1491
- manifestContentHash: artifact.manifestContentHash,
1492
- manifestFileHash: artifact.manifestFileHash ?? null,
1493
- distillResolvedConfig: {
1494
- enabled: fixture.config.training?.distill?.enabled === true,
1495
- stage: fixture.config.training?.distill?.stage ?? null,
1496
- teacherModelId: fixture.config.training?.distill?.teacherModelId ?? null,
1497
- studentModelId: fixture.config.training?.distill?.studentModelId ?? null,
1498
- datasetId: fixture.config.training?.distill?.datasetId ?? null,
1499
- datasetPath: fixture.config.training?.distill?.datasetPath ?? null,
1500
- languagePair: fixture.config.training?.distill?.languagePair ?? null,
1501
- sourceLangs: fixture.config.training?.distill?.sourceLangs ?? null,
1502
- targetLangs: fixture.config.training?.distill?.targetLangs ?? null,
1503
- pairAllowlist: fixture.config.training?.distill?.pairAllowlist ?? null,
1504
- strictPairContract: fixture.config.training?.distill?.strictPairContract === true,
1505
- shardIndex: fixture.config.training?.distill?.shardIndex ?? null,
1506
- shardCount: fixture.config.training?.distill?.shardCount ?? null,
1507
- resumeFrom: fixture.config.training?.distill?.resumeFrom ?? null,
1508
- temperature: fixture.config.training?.distill?.temperature ?? null,
1509
- alphaKd: fixture.config.training?.distill?.alphaKd ?? null,
1510
- alphaCe: fixture.config.training?.distill?.alphaCe ?? null,
1511
- tripletMargin: fixture.config.training?.distill?.tripletMargin ?? null,
1512
- studentGraphMode: fixture.config.training?.distill?.studentGraphMode ?? null,
1513
- topK: fixture.config.training?.distill?.topK ?? distillOutputDim,
1514
- freeze: fixture.config.training?.distill?.freeze ?? null,
1515
- },
1516
- distillRuntime: {
1517
- teacherModelId: distillRuntime.teacherModelId || null,
1518
- studentModelId: distillRuntime.studentModelId || null,
1519
- teacherModelUrl: distillRuntime.teacherModelUrl || null,
1520
- studentModelUrl: distillRuntime.studentModelUrl || null,
1521
- topK: distillRuntime.topK,
1522
- studentGraphMode: distillRuntime.studentGraphMode || null,
1523
- targetTokenMode: distillRuntime.targetTokenMode || null,
1524
- },
1525
- distillDataset: {
1526
- path: distillDatasetReport.absolutePath,
1527
- rowCount: distillDatasetReport.rowCount,
1528
- sampleCount: distillDatasetReport.sampleCount,
1529
- shardCount: distillDatasetReport.shardCount ?? 1,
1530
- directionCounts: distillDatasetReport.directionCounts,
1531
- dataScope: distillDatasetReport.dataScope || null,
1532
- },
1533
- checkpoint: runner.lastCheckpoint || null,
1534
- resumeAuditCount: Number.isInteger(runner.resumeState?.resumeAuditCount)
1535
- ? runner.resumeState.resumeAuditCount
1536
- : 0,
1537
- },
1538
- };
1539
- } finally {
1540
- if (distillRuntime && typeof distillRuntime.cleanup === 'function') {
1541
- await distillRuntime.cleanup();
1542
- }
1543
- if (fixture) {
1544
- fixture.cleanup();
1545
- }
1546
- }
1547
- }
1548
-
1549
- async function runDistillStageATest(options = {}) {
1550
- return runDistillStageTest('stage_a', options);
1551
- }
1552
-
1553
- async function runDistillStageBTest(options = {}) {
1554
- const explicitStageAArtifact = String(options.stageAArtifact || '').trim();
1555
- let stageAArtifact = explicitStageAArtifact || null;
1556
- let stageAArtifactHash = String(options.stageAArtifactHash || '').trim() || null;
1557
-
1558
- if (!stageAArtifact) {
1559
- const stageA = await runDistillStageATest({
1560
- ...options,
1561
- trainingStage: 'stage_a',
1562
- });
1563
- if (!stageA?.passed || !stageA?.artifact?.manifestPath) {
1564
- return { passed: false, error: 'Distill stage_b preflight failed to generate stage_a artifact.' };
1565
- }
1566
- stageAArtifact = stageA.artifact.manifestPath;
1567
- stageAArtifactHash = stageA.artifact.manifestHash;
1568
- const nodeHash = await computeNodeFileHash(stageAArtifact);
1569
- if (nodeHash?.hash) {
1570
- stageAArtifactHash = nodeHash.hash;
1571
- stageAArtifact = nodeHash.absolutePath;
1572
- }
1573
- }
1574
-
1575
- return runDistillStageTest('stage_b', {
1576
- ...options,
1577
- stageAArtifact,
1578
- stageAArtifactHash,
1579
- });
1580
- }
1581
-
1582
- function createLegacySkippedTest(name) {
1583
- return async () => ({
1584
- passed: true,
1585
- skipped: true,
1586
- error: `Legacy browser-only test "${name}" remains in tests/training/browser/test-page.js.`,
1587
- });
1588
- }
1589
-
1590
- const CORE_TESTS = Object.freeze({
1591
- 'runner-smoke': runRunnerSmokeTest,
1592
- 'train-step-metrics': runTrainStepMetricsTest,
1593
- 'ul-stage1': runUlStage1Test,
1594
- 'ul-stage2': runUlStage2Test,
1595
- 'distill-stage-a': runDistillStageATest,
1596
- 'distill-stage-b': runDistillStageBTest,
1597
- });
1598
-
1599
- const TESTS = Object.freeze({
1600
- ...CORE_TESTS,
1601
- ...Object.fromEntries(LEGACY_BROWSER_TESTS.map((name) => [name, createLegacySkippedTest(name)])),
1602
- });
1603
-
1604
- export const trainingHarness = Object.freeze({
1605
- async getGPU() {
1606
- await ensureTrainingGpuRuntime();
1607
- return true;
1608
- },
1609
- async runTest(name, options = {}) {
1610
- const fn = TESTS[name];
1611
- if (!fn) {
1612
- return { passed: false, error: `Unknown training test: ${name}` };
1613
- }
1614
- return fn(options);
1615
- },
1616
- listTests() {
1617
- return Object.keys(TESTS);
1618
- },
1619
- });
1620
-
1621
- export async function runTrainingSuite(options = {}) {
1622
- const trainingSchemaVersion = assertTrainingSchemaVersion(options.trainingSchemaVersion);
1623
- const adapterActivation = normalizeAdapterActivationConfig(options);
1624
- const startTime = performance.now();
1625
- await trainingHarness.getGPU();
1626
-
1627
- const availableTests = trainingHarness.listTests();
1628
- const requestedTestsFromOptions = normalizeTrainingTestNames(options.trainingTests);
1629
- const requestedStage = normalizeTrainingStage(options.trainingStage);
1630
- const stageDefaultTests = requestedStage === 'stage1_joint'
1631
- ? ['ul-stage1']
1632
- : (
1633
- requestedStage === 'stage2_base'
1634
- ? ['ul-stage2']
1635
- : (
1636
- requestedStage === 'stage_a'
1637
- ? ['distill-stage-a']
1638
- : (requestedStage === 'stage_b' ? ['distill-stage-b'] : null)
1639
- )
1640
- );
1641
- const requestedTests = requestedTestsFromOptions || stageDefaultTests;
1642
- if (requestedTests) {
1643
- const unknownTests = requestedTests.filter((name) => !availableTests.includes(name));
1644
- if (unknownTests.length > 0) {
1645
- throw new Error(`Unknown training test(s): ${unknownTests.join(', ')}`);
1646
- }
1647
- }
1648
- const testsToRun = requestedTests ?? availableTests;
1649
-
1650
- const results = [];
1651
- for (const testName of testsToRun) {
1652
- const testStart = performance.now();
1653
- try {
1654
- const outcome = await trainingHarness.runTest(testName, options);
1655
- const passed = outcome?.passed === true;
1656
- const skipped = outcome?.skipped === true;
1657
- const errorMessage = skipped
1658
- ? (outcome?.error ? String(outcome.error) : undefined)
1659
- : (passed ? undefined : String(outcome?.error || 'Training test failed'));
1660
- const entry = {
1661
- name: testName,
1662
- passed,
1663
- skipped,
1664
- duration: Math.max(0, performance.now() - testStart),
1665
- ...(errorMessage ? { error: errorMessage } : {}),
1666
- };
1667
- if (outcome?.metrics && typeof outcome.metrics === 'object') {
1668
- entry.metrics = outcome.metrics;
1669
- }
1670
- if (outcome?.artifact && typeof outcome.artifact === 'object') {
1671
- entry.artifact = outcome.artifact;
1672
- }
1673
- results.push(entry);
1674
- } catch (error) {
1675
- results.push({
1676
- name: testName,
1677
- passed: false,
1678
- duration: Math.max(0, performance.now() - testStart),
1679
- error: String(error?.message || error),
1680
- });
1681
- }
1682
- }
1683
-
1684
- const summary = buildSuiteSummary('training', results, startTime);
1685
- const adapterActivationResult = (
1686
- adapterActivation.enabled
1687
- && adapterActivation.autoActivate
1688
- )
1689
- ? await tryActivateAdapterPayload(adapterActivation.adapterPayload)
1690
- : null;
1691
- return {
1692
- ...summary,
1693
- modelId: options.modelId || options.modelUrl || 'training',
1694
- metrics: {
1695
- testsRun: results.length,
1696
- selectedTests: testsToRun,
1697
- availableTests,
1698
- trainingStage: requestedStage || null,
1699
- trainingSchemaVersion,
1700
- adapterActivation: adapterActivationResult,
1701
- },
1702
- deviceInfo: getKernelCapabilities(),
1703
- };
1704
- }
1705
-
1706
- function toPositiveInteger(value, fallback) {
1707
- const parsed = Number(value);
1708
- if (!Number.isFinite(parsed)) return fallback;
1709
- const floored = Math.floor(parsed);
1710
- return floored > 0 ? floored : fallback;
1711
- }
1712
-
1713
- function toPositiveIntegerOrNull(value) {
1714
- const parsed = Number(value);
1715
- if (!Number.isFinite(parsed)) return null;
1716
- const floored = Math.floor(parsed);
1717
- return floored > 0 ? floored : null;
1718
- }
1719
-
1720
- function resolveDistillShardProgressContext(
1721
- options = {},
1722
- trainingOverrides = null,
1723
- stepsPerShard = null,
1724
- fallbackShardCount = null
1725
- ) {
1726
- const distillConfig = trainingOverrides?.distill || {};
1727
- const shardIndexInput = toPositiveIntegerOrNull(
1728
- options.distillShardIndex ?? distillConfig.shardIndex ?? null
1729
- );
1730
- const shardCountInput = toPositiveIntegerOrNull(
1731
- options.distillShardCount ?? distillConfig.shardCount ?? null
1732
- );
1733
- const fallbackShardCountInput = toPositiveIntegerOrNull(fallbackShardCount);
1734
- if (
1735
- shardIndexInput !== null
1736
- && shardCountInput !== null
1737
- && shardIndexInput > shardCountInput
1738
- ) {
1739
- throw new Error('distillShardIndex must be <= distillShardCount.');
1740
- }
1741
- const shardCount = shardCountInput ?? fallbackShardCountInput ?? 1;
1742
- const shardIndex = shardIndexInput ?? 1;
1743
- const normalizedStepsPerShard = toPositiveIntegerOrNull(stepsPerShard);
1744
- const totalGlobalSteps = normalizedStepsPerShard
1745
- ? (normalizedStepsPerShard * shardCount)
1746
- : null;
1747
- return {
1748
- shardIndex: Math.min(Math.max(1, shardIndex), shardCount),
1749
- shardCount: Math.max(1, shardCount),
1750
- stepsPerShard: normalizedStepsPerShard,
1751
- totalGlobalSteps,
1752
- };
1753
- }
1754
-
1755
- function resolveBenchProgressSummary(stepEntries, context, startTimeMs) {
1756
- const entries = Array.isArray(stepEntries) ? stepEntries : [];
1757
- const lastEntry = entries.length > 0 ? entries[entries.length - 1] : null;
1758
- const shardIndex = context?.shardIndex ?? 1;
1759
- const shardCount = context?.shardCount ?? 1;
1760
- const stepsPerShard = context?.stepsPerShard ?? null;
1761
- const totalGlobalSteps = context?.totalGlobalSteps ?? null;
1762
- const fallbackGlobalStep = stepsPerShard
1763
- ? (((shardIndex - 1) * stepsPerShard) + Math.min(entries.length, stepsPerShard))
1764
- : null;
1765
- const completedGlobalSteps = Number.isFinite(lastEntry?.progress_global_step)
1766
- ? lastEntry.progress_global_step
1767
- : fallbackGlobalStep;
1768
- const resolvedTotalGlobalSteps = Number.isFinite(lastEntry?.progress_global_steps)
1769
- ? lastEntry.progress_global_steps
1770
- : totalGlobalSteps;
1771
- const percentComplete = Number.isFinite(lastEntry?.progress_percent_complete)
1772
- ? lastEntry.progress_percent_complete
1773
- : (
1774
- Number.isFinite(completedGlobalSteps)
1775
- && Number.isFinite(resolvedTotalGlobalSteps)
1776
- && resolvedTotalGlobalSteps > 0
1777
- ? Math.min(100, (completedGlobalSteps / resolvedTotalGlobalSteps) * 100)
1778
- : null
1779
- );
1780
- const etaMs = Number.isFinite(lastEntry?.progress_eta_ms)
1781
- ? Math.max(0, lastEntry.progress_eta_ms)
1782
- : (
1783
- Number.isFinite(percentComplete)
1784
- && percentComplete >= 100
1785
- ? 0
1786
- : null
1787
- );
1788
- const elapsedMs = Number.isFinite(lastEntry?.progress_elapsed_ms)
1789
- ? Math.max(0, lastEntry.progress_elapsed_ms)
1790
- : Math.max(0, performance.now() - startTimeMs);
1791
- return {
1792
- shardIndex,
1793
- shardCount,
1794
- stepsPerShard,
1795
- completedGlobalSteps: Number.isFinite(completedGlobalSteps) ? completedGlobalSteps : null,
1796
- totalGlobalSteps: Number.isFinite(resolvedTotalGlobalSteps) ? resolvedTotalGlobalSteps : null,
1797
- percentComplete,
1798
- etaMs,
1799
- etaIso: Number.isFinite(etaMs) ? new Date(Date.now() + etaMs).toISOString() : null,
1800
- elapsedMs,
1801
- updatedAt: new Date().toISOString(),
1802
- };
1803
- }
1804
-
1805
- function appendTimelineEvent(timeline, type, details = {}) {
1806
- timeline.push({
1807
- index: timeline.length + 1,
1808
- timestamp: new Date().toISOString(),
1809
- type,
1810
- ...details,
1811
- });
1812
- }
1813
-
1814
- function resolveBenchRunSettings(options = {}) {
1815
- const benchRun = options.benchRun && typeof options.benchRun === 'object'
1816
- ? options.benchRun
1817
- : {};
1818
- return {
1819
- warmupRuns: Math.max(0, Math.floor(Number(benchRun.warmupRuns) || 0)),
1820
- timedRuns: toPositiveInteger(benchRun.timedRuns, 1),
1821
- stepsPerRun: toPositiveInteger(
1822
- options.trainingBenchSteps ?? benchRun.steps ?? options.trainingSteps,
1823
- 2
1824
- ),
1825
- };
1826
- }
1827
-
1828
- function resolveTrainingOverrides(options = {}) {
1829
- const distillTraining = buildDistillTrainingOverrides(options);
1830
- if (distillTraining?.distill?.enabled) {
1831
- return distillTraining;
1832
- }
1833
- const ulTraining = buildUlTrainingOverrides(options);
1834
- if (ulTraining) {
1835
- return ulTraining;
1836
- }
1837
- return normalizeTrainingConfigOverride(options.trainingConfig) || undefined;
1838
- }
1839
-
1840
- export async function runTrainingBenchSuite(options = {}) {
1841
- const trainingSchemaVersion = assertTrainingSchemaVersion(options.trainingSchemaVersion);
1842
- const startTime = performance.now();
1843
- await trainingHarness.getGPU();
1844
-
1845
- const benchSettings = resolveBenchRunSettings(options);
1846
- const totalRuns = benchSettings.warmupRuns + benchSettings.timedRuns;
1847
- const trainingOverrides = resolveTrainingOverrides(options);
1848
- const adapterActivation = normalizeAdapterActivationConfig(options);
1849
- const distillEnabled = trainingOverrides?.distill?.enabled === true;
1850
- const distillDatasetPath = resolveDistillDatasetPath(options, trainingOverrides);
1851
- const distillDataScope = resolveDistillDataScope(options, trainingOverrides);
1852
- const distillDatasetReport = distillEnabled
1853
- ? await loadDistillDatasetFromJsonl(distillDatasetPath, distillDataScope)
1854
- : null;
1855
- const resolvedResumeFrom = options.resumeFrom || trainingOverrides?.distill?.resumeFrom || null;
1856
- const resolvedStage1Artifact = options.stage1Artifact || trainingOverrides?.ul?.stage1Artifact || null;
1857
- const resolvedStage1ArtifactHash = options.stage1ArtifactHash || trainingOverrides?.ul?.stage1ArtifactHash || null;
1858
- const resolvedStageAArtifact = options.stageAArtifact || trainingOverrides?.distill?.stageAArtifact || null;
1859
- const resolvedStageAArtifactHash = options.stageAArtifactHash || trainingOverrides?.distill?.stageAArtifactHash || null;
1860
- let distillRuntime = null;
1861
- if (distillEnabled) {
1862
- if (!distillDatasetPath) {
1863
- throw new Error('Distill benchmark requires --distill-dataset-path (training.distill.datasetPath).');
1864
- }
1865
- distillRuntime = await createDistillRuntimeContext(options, trainingOverrides);
1866
- }
1867
-
1868
- const timedRunDurationsMs = [];
1869
- const timedRunStepsPerSec = [];
1870
- const timedStepDurationsMs = [];
1871
- const timedRunUlArtifacts = [];
1872
- const timedRunDistillArtifacts = [];
1873
- const timedRunAdapterExports = [];
1874
- const trainingMetricsReport = [];
1875
- const distillShardProgress = resolveDistillShardProgressContext(
1876
- options,
1877
- trainingOverrides,
1878
- benchSettings.stepsPerRun,
1879
- distillDatasetReport?.shardCount ?? null
1880
- );
1881
- const checkpointResumeTimeline = [];
1882
- appendTimelineEvent(checkpointResumeTimeline, 'benchmark_started', {
1883
- workloadType: 'training',
1884
- trainingStage: (
1885
- options.trainingStage
1886
- || trainingOverrides?.distill?.stage
1887
- || trainingOverrides?.ul?.stage
1888
- || null
1889
- ),
1890
- forceResume: options.forceResume === true,
1891
- forceResumeReason: options.forceResume === true
1892
- ? (options.forceResumeReason || null)
1893
- : null,
1894
- shardIndex: distillShardProgress.shardIndex,
1895
- shardCount: distillShardProgress.shardCount,
1896
- stepsPerShard: distillShardProgress.stepsPerShard,
1897
- });
1898
- if (resolvedResumeFrom) {
1899
- appendTimelineEvent(checkpointResumeTimeline, 'resume_requested', {
1900
- resumeFrom: String(resolvedResumeFrom),
1901
- });
1902
- }
1903
- if (resolvedStage1Artifact) {
1904
- appendTimelineEvent(checkpointResumeTimeline, 'resume_dependency_declared', {
1905
- dependencyType: 'ul_stage1',
1906
- stage1Artifact: String(resolvedStage1Artifact),
1907
- stage1ArtifactHash: resolvedStage1ArtifactHash,
1908
- });
1909
- }
1910
- if (resolvedStageAArtifact) {
1911
- appendTimelineEvent(checkpointResumeTimeline, 'resume_dependency_declared', {
1912
- dependencyType: 'distill_stage_a',
1913
- stageAArtifact: String(resolvedStageAArtifact),
1914
- stageAArtifactHash: resolvedStageAArtifactHash,
1915
- });
1916
- }
1917
- let completedTimedRuns = 0;
1918
- let latestExportedAdapter = null;
1919
-
1920
- try {
1921
- for (let runIndex = 0; runIndex < totalRuns; runIndex += 1) {
1922
- const fixture = distillEnabled
1923
- ? await createDistillStudentRuntimeModelFixture({
1924
- training: trainingOverrides,
1925
- }, {
1926
- outputDim: distillRuntime?.topK ?? DISTILL_ADAPTER_TOP_K,
1927
- distillRuntime,
1928
- })
1929
- : createToyModelFixture({
1930
- training: trainingOverrides,
1931
- });
1932
- try {
1933
- const runner = new TrainingRunner(fixture.config, {
1934
- optimizer: new AdamOptimizer(fixture.config),
1935
- crossEntropyLoss,
1936
- clipGradients,
1937
- });
1938
- const dataset = distillEnabled
1939
- ? distillDatasetReport.createDataset({
1940
- batchSize: 1,
1941
- shuffle: false,
1942
- seed: 1337 + runIndex,
1943
- distillRuntime,
1944
- })
1945
- : {
1946
- async *batches() {
1947
- for (let i = 0; i < benchSettings.stepsPerRun; i += 1) {
1948
- yield fixture.batch;
1949
- }
1950
- },
1951
- };
1952
-
1953
- const runStart = performance.now();
1954
- const isTimedRun = runIndex >= benchSettings.warmupRuns;
1955
- appendTimelineEvent(checkpointResumeTimeline, 'run_started', {
1956
- runIndex: runIndex + 1,
1957
- phase: isTimedRun ? 'timed' : 'warmup',
1958
- });
1959
- const runMetrics = await runner.run(fixture.model, dataset, {
1960
- epochs: 1,
1961
- batchSize: 1,
1962
- shuffle: false,
1963
- maxSteps: benchSettings.stepsPerRun,
1964
- modelId: options.modelId || distillRuntime?.studentModelId || 'training',
1965
- modelUrl: options.modelUrl || distillRuntime?.studentModelUrl || null,
1966
- runtimePreset: options.runtimePreset || null,
1967
- trainingStage: (
1968
- options.trainingStage
1969
- || trainingOverrides?.distill?.stage
1970
- || trainingOverrides?.ul?.stage
1971
- || null
1972
- ),
1973
- command: options.command || null,
1974
- surface: options.surface || null,
1975
- forceResume: options.forceResume === true,
1976
- forceResumeReason: options.forceResumeReason || null,
1977
- forceResumeSource: options.forceResumeSource || null,
1978
- checkpointOperator: options.checkpointOperator || null,
1979
- checkpointEvery: options.checkpointEvery ?? null,
1980
- gpuAdapterInfo: getKernelCapabilities(),
1981
- timestamp: options.timestamp || null,
1982
- ulArtifactDir: options.ulArtifactDir || null,
1983
- distillArtifactDir: options.distillArtifactDir || null,
1984
- stageAArtifact: resolvedStageAArtifact,
1985
- stageAArtifactHash: resolvedStageAArtifactHash,
1986
- teacherModelId: distillRuntime?.teacherModelId || options.teacherModelId || null,
1987
- studentModelId: distillRuntime?.studentModelId || options.studentModelId || null,
1988
- distillDatasetId: options.distillDatasetId || null,
1989
- distillDatasetPath: distillDatasetReport?.absolutePath || null,
1990
- distillLanguagePair: options.distillLanguagePair || null,
1991
- distillSourceLangs: distillDataScope.sourceLangs || null,
1992
- distillTargetLangs: distillDataScope.targetLangs || null,
1993
- distillPairAllowlist: distillDataScope.pairAllowlist || null,
1994
- strictPairContract: distillDataScope.strictPairContract === true,
1995
- distillShardIndex: distillShardProgress.shardIndex,
1996
- distillShardCount: distillShardProgress.shardCount,
1997
- resumeFrom: resolvedResumeFrom,
1998
- });
1999
- const runDurationMs = Math.max(0, performance.now() - runStart);
2000
- if (runner.resumeState && typeof runner.resumeState === 'object') {
2001
- appendTimelineEvent(checkpointResumeTimeline, 'run_resumed', {
2002
- runIndex: runIndex + 1,
2003
- phase: isTimedRun ? 'timed' : 'warmup',
2004
- resumedStep: runner.resumeState.step ?? null,
2005
- resumedEpoch: runner.resumeState.epoch ?? null,
2006
- resumedBatch: runner.resumeState.batch ?? null,
2007
- resumedCheckpointHash: runner.resumeState.checkpointHash ?? null,
2008
- previousCheckpointHash: runner.resumeState.previousCheckpointHash ?? null,
2009
- resumeAuditCount: Number.isInteger(runner.resumeState.resumeAuditCount)
2010
- ? runner.resumeState.resumeAuditCount
2011
- : 0,
2012
- checkpointKey: runner.resumeState.checkpointKey ?? null,
2013
- });
2014
- if (Number.isInteger(runner.resumeState.resumeAuditCount) && runner.resumeState.resumeAuditCount > 0) {
2015
- appendTimelineEvent(checkpointResumeTimeline, 'resume_override_applied', {
2016
- runIndex: runIndex + 1,
2017
- phase: isTimedRun ? 'timed' : 'warmup',
2018
- resumeAudits: Array.isArray(runner.resumeState.resumeAudits)
2019
- ? runner.resumeState.resumeAudits
2020
- : [],
2021
- });
2022
- }
2023
- }
2024
- appendTimelineEvent(checkpointResumeTimeline, 'run_completed', {
2025
- runIndex: runIndex + 1,
2026
- phase: isTimedRun ? 'timed' : 'warmup',
2027
- durationMs: runDurationMs,
2028
- stepCount: Array.isArray(runMetrics) ? runMetrics.length : 0,
2029
- });
2030
- if (isTimedRun) {
2031
- completedTimedRuns += 1;
2032
- timedRunDurationsMs.push(runDurationMs);
2033
- const runStepCount = Array.isArray(runMetrics) ? runMetrics.length : 0;
2034
- if (runDurationMs > 0 && runStepCount > 0) {
2035
- timedRunStepsPerSec.push((runStepCount * 1000) / runDurationMs);
2036
- }
2037
- for (const stepEntry of runMetrics) {
2038
- const stepWithRun = {
2039
- ...stepEntry,
2040
- bench_run_index: completedTimedRuns,
2041
- bench_run_global_index: runIndex + 1,
2042
- };
2043
- if (isFiniteNumber(stepWithRun?.step_time_ms)) {
2044
- timedStepDurationsMs.push(stepWithRun.step_time_ms);
2045
- }
2046
- trainingMetricsReport.push(stepWithRun);
2047
- }
2048
- if (runner.lastCheckpoint && typeof runner.lastCheckpoint === 'object') {
2049
- appendTimelineEvent(checkpointResumeTimeline, 'checkpoint_state_written', {
2050
- runIndex: runIndex + 1,
2051
- timedRunIndex: completedTimedRuns,
2052
- checkpointKey: runner.lastCheckpoint.key || null,
2053
- checkpointStep: runner.lastCheckpoint.step ?? null,
2054
- checkpointEpoch: runner.lastCheckpoint.epoch ?? null,
2055
- checkpointBatch: runner.lastCheckpoint.batch ?? null,
2056
- });
2057
- }
2058
- if (runner.lastArtifact && typeof runner.lastArtifact === 'object') {
2059
- const artifactEntry = {
2060
- runIndex: completedTimedRuns,
2061
- ...runner.lastArtifact,
2062
- resumeAudits: Array.isArray(runner.resumeState?.resumeAudits)
2063
- ? runner.resumeState.resumeAudits
2064
- : [],
2065
- };
2066
- appendTimelineEvent(checkpointResumeTimeline, 'checkpoint_written', {
2067
- runIndex: runIndex + 1,
2068
- timedRunIndex: completedTimedRuns,
2069
- artifactKind: artifactEntry.kind || null,
2070
- stage: artifactEntry.stage || null,
2071
- manifestPath: artifactEntry.manifestPath || null,
2072
- manifestHash: artifactEntry.manifestHash || null,
2073
- manifestFileHash: artifactEntry.manifestFileHash || null,
2074
- });
2075
- if (artifactEntry.stageADependency) {
2076
- appendTimelineEvent(checkpointResumeTimeline, 'resume_dependency_resolved', {
2077
- dependencyType: 'distill_stage_a',
2078
- runIndex: runIndex + 1,
2079
- stageADependency: artifactEntry.stageADependency,
2080
- });
2081
- }
2082
- if (artifactEntry.stage1Dependency) {
2083
- appendTimelineEvent(checkpointResumeTimeline, 'resume_dependency_resolved', {
2084
- dependencyType: 'ul_stage1',
2085
- runIndex: runIndex + 1,
2086
- stage1Dependency: artifactEntry.stage1Dependency,
2087
- });
2088
- }
2089
- if (runner.lastArtifact.kind === 'distill') {
2090
- timedRunDistillArtifacts.push(artifactEntry);
2091
- } else {
2092
- timedRunUlArtifacts.push(artifactEntry);
2093
- }
2094
- }
2095
- if (adapterActivation.enabled && adapterActivation.exportConfig) {
2096
- const exportedAdapter = await exportLoRAAdapterFromModel(
2097
- fixture.model,
2098
- adapterActivation.exportConfig,
2099
- completedTimedRuns
2100
- );
2101
- if (exportedAdapter) {
2102
- latestExportedAdapter = exportedAdapter;
2103
- timedRunAdapterExports.push({
2104
- runIndex: completedTimedRuns,
2105
- id: exportedAdapter.manifest?.id || null,
2106
- name: exportedAdapter.manifest?.name || null,
2107
- hash: exportedAdapter.hash,
2108
- });
2109
- }
2110
- }
2111
- }
2112
- } finally {
2113
- fixture.cleanup();
2114
- }
2115
- }
2116
- } finally {
2117
- if (distillRuntime && typeof distillRuntime.cleanup === 'function') {
2118
- await distillRuntime.cleanup();
2119
- }
2120
- }
2121
-
2122
- const runMsStats = computeSampleStats(timedRunDurationsMs);
2123
- const stepMsStats = computeSampleStats(timedStepDurationsMs);
2124
- const stepsPerSecStats = computeSampleStats(timedRunStepsPerSec);
2125
- const progress = resolveBenchProgressSummary(trainingMetricsReport, distillShardProgress, startTime);
2126
- const activationPayload = adapterActivation.adapterPayload
2127
- ? adapterActivation.adapterPayload
2128
- : (latestExportedAdapter
2129
- ? {
2130
- adapterManifest: latestExportedAdapter.manifest,
2131
- adapterManifestJson: latestExportedAdapter.json,
2132
- }
2133
- : null);
2134
- const adapterActivationResult = (
2135
- adapterActivation.enabled
2136
- && adapterActivation.autoActivate
2137
- )
2138
- ? await tryActivateAdapterPayload(activationPayload)
2139
- : null;
2140
- appendTimelineEvent(checkpointResumeTimeline, 'benchmark_completed', {
2141
- completedTimedRuns,
2142
- metricEntryCount: trainingMetricsReport.length,
2143
- percentComplete: progress.percentComplete,
2144
- etaMs: progress.etaMs,
2145
- });
2146
-
2147
- const results = [
2148
- {
2149
- name: 'training-benchmark',
2150
- passed: completedTimedRuns > 0 && trainingMetricsReport.length > 0,
2151
- duration: Math.max(0, performance.now() - startTime),
2152
- error: completedTimedRuns > 0 && trainingMetricsReport.length > 0
2153
- ? undefined
2154
- : 'No timed training benchmark runs completed.',
2155
- },
2156
- ];
2157
-
2158
- const summary = buildSuiteSummary('bench', results, startTime);
2159
- return {
2160
- ...summary,
2161
- modelId: options.modelId || distillRuntime?.studentModelId || options.modelUrl || 'training',
2162
- metrics: {
2163
- workloadType: 'training',
2164
- warmupRuns: benchSettings.warmupRuns,
2165
- timedRuns: benchSettings.timedRuns,
2166
- completedTimedRuns,
2167
- stepsPerRun: benchSettings.stepsPerRun,
2168
- trainingSchemaVersion,
2169
- trainingMetricsReport,
2170
- progress,
2171
- ulArtifacts: timedRunUlArtifacts,
2172
- distillArtifacts: timedRunDistillArtifacts,
2173
- adapterExports: timedRunAdapterExports,
2174
- adapterActivation: adapterActivationResult,
2175
- checkpointResumeTimeline,
2176
- distillDataset: distillDatasetReport
2177
- ? {
2178
- path: distillDatasetReport.absolutePath,
2179
- rowCount: distillDatasetReport.rowCount,
2180
- sampleCount: distillDatasetReport.sampleCount,
2181
- shardCount: distillDatasetReport.shardCount ?? 1,
2182
- directionCounts: distillDatasetReport.directionCounts,
2183
- dataScope: distillDatasetReport.dataScope || null,
2184
- }
2185
- : null,
2186
- latency: {
2187
- runMs: runMsStats,
2188
- stepMs: stepMsStats,
2189
- },
2190
- throughput: {
2191
- stepsPerSec: stepsPerSecStats,
2192
- },
2193
- },
2194
- deviceInfo: getKernelCapabilities(),
2195
- };
2196
- }