@simulatte/doppler 0.1.8 → 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 (1340) hide show
  1. package/README.md +3 -97
  2. package/package.json +5 -160
  3. package/BRANDING.md +0 -14
  4. package/CHANGELOG.md +0 -145
  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 -304
  51. package/src/client/doppler-api.d.ts +0 -80
  52. package/src/client/doppler-api.js +0 -314
  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 -88
  69. package/src/client/doppler-registry.json +0 -24
  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 -226
  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/registry.d.ts +0 -86
  92. package/src/config/kernels/registry.js +0 -116
  93. package/src/config/kernels/registry.json +0 -7443
  94. package/src/config/loader.d.ts +0 -57
  95. package/src/config/loader.js +0 -578
  96. package/src/config/merge-contract-check.d.ts +0 -16
  97. package/src/config/merge-contract-check.js +0 -383
  98. package/src/config/merge-helpers.d.ts +0 -58
  99. package/src/config/merge-helpers.js +0 -175
  100. package/src/config/merge.d.ts +0 -143
  101. package/src/config/merge.js +0 -414
  102. package/src/config/param-categories.d.ts +0 -17
  103. package/src/config/param-categories.js +0 -72
  104. package/src/config/param-validator.d.ts +0 -26
  105. package/src/config/param-validator.js +0 -280
  106. package/src/config/platforms/amd-rdna3.json +0 -16
  107. package/src/config/platforms/apple-m1.json +0 -16
  108. package/src/config/platforms/apple-m2.json +0 -16
  109. package/src/config/platforms/apple-m3.json +0 -16
  110. package/src/config/platforms/generic.json +0 -14
  111. package/src/config/platforms/loader.d.ts +0 -65
  112. package/src/config/platforms/loader.js +0 -153
  113. package/src/config/platforms/nvidia-rtx30.json +0 -16
  114. package/src/config/platforms/nvidia-rtx40.json +0 -16
  115. package/src/config/presets/kernel-paths/embeddinggemma-f16-f32a.json +0 -60
  116. package/src/config/presets/kernel-paths/embeddinggemma-f32-f32a.json +0 -60
  117. package/src/config/presets/kernel-paths/embeddinggemma-q4k-dequant-f32a.json +0 -60
  118. package/src/config/presets/kernel-paths/gemma2-f16-f16a.json +0 -61
  119. package/src/config/presets/kernel-paths/gemma2-f16-f32a.json +0 -60
  120. package/src/config/presets/kernel-paths/gemma2-q4k-dequant-f16a.json +0 -61
  121. package/src/config/presets/kernel-paths/gemma2-q4k-dequant-f32a-nosubgroups.json +0 -60
  122. package/src/config/presets/kernel-paths/gemma2-q4k-fused-f32a.json +0 -57
  123. package/src/config/presets/kernel-paths/gemma3-f16-fused-f16a-online.json +0 -200
  124. package/src/config/presets/kernel-paths/gemma3-f16-fused-f32a-online-streamingprefill.json +0 -223
  125. package/src/config/presets/kernel-paths/gemma3-f16-fused-f32a-online.json +0 -223
  126. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f16a-online.json +0 -60
  127. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32a-nosubgroups.json +0 -61
  128. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32a-online.json +0 -61
  129. package/src/config/presets/kernel-paths/gemma3-q4k-dequant-f32w-f32a-online.json +0 -56
  130. package/src/config/presets/kernel-paths/lfm2-q4k-dequant-f32a-nosubgroups.json +0 -61
  131. package/src/config/presets/kernel-paths/lfm2-q4k-dequant-f32a-online.json +0 -61
  132. package/src/config/presets/kernel-paths/registry.json +0 -138
  133. package/src/config/presets/models/deepseek.json +0 -20
  134. package/src/config/presets/models/diffusion.json +0 -10
  135. package/src/config/presets/models/embeddinggemma.json +0 -74
  136. package/src/config/presets/models/functiongemma.json +0 -31
  137. package/src/config/presets/models/gemma2.json +0 -60
  138. package/src/config/presets/models/gemma3.json +0 -77
  139. package/src/config/presets/models/gpt-oss.json +0 -68
  140. package/src/config/presets/models/janus-text.json +0 -27
  141. package/src/config/presets/models/kimi-k2.json +0 -25
  142. package/src/config/presets/models/lfm2.json +0 -83
  143. package/src/config/presets/models/llama3.json +0 -40
  144. package/src/config/presets/models/mamba.json +0 -34
  145. package/src/config/presets/models/mixtral.json +0 -37
  146. package/src/config/presets/models/modernbert.json +0 -32
  147. package/src/config/presets/models/qwen3.json +0 -49
  148. package/src/config/presets/models/qwen3_5.json +0 -16
  149. package/src/config/presets/models/transformer.json +0 -78
  150. package/src/config/presets/models/translategemma.json +0 -30
  151. package/src/config/presets/platforms/nvidia-gb200-8gpu.json +0 -45
  152. package/src/config/presets/platforms/nvidia-gb200-nvl72.json +0 -45
  153. package/src/config/presets/platforms/nvidia-gh200-nvl2.json +0 -44
  154. package/src/config/presets/platforms/nvidia-gh200.json +0 -44
  155. package/src/config/presets/runtime/compute/f16-activations.json +0 -30
  156. package/src/config/presets/runtime/compute/f16-batched.json +0 -32
  157. package/src/config/presets/runtime/default.json +0 -101
  158. package/src/config/presets/runtime/diagnostics/debug-logits.json +0 -53
  159. package/src/config/presets/runtime/experiments/bench/gemma3-bench-q4k.json +0 -53
  160. package/src/config/presets/runtime/experiments/debug/gemma3-debug-q4k.json +0 -210
  161. package/src/config/presets/runtime/experiments/verify/gemma3-verify.json +0 -39
  162. package/src/config/presets/runtime/kernels/dequant-f16-q4k.json +0 -13
  163. package/src/config/presets/runtime/kernels/dequant-f32-q4k.json +0 -13
  164. package/src/config/presets/runtime/kernels/embeddinggemma-q4k-dequant-f32a.json +0 -37
  165. package/src/config/presets/runtime/kernels/fused-q4k.json +0 -13
  166. package/src/config/presets/runtime/kernels/gemma2-q4k-dequant-f16a.json +0 -33
  167. package/src/config/presets/runtime/kernels/gemma2-q4k-dequant-f32a-nosubgroups.json +0 -33
  168. package/src/config/presets/runtime/kernels/gemma2-q4k-fused-f32a.json +0 -33
  169. package/src/config/presets/runtime/kernels/safe-q4k.json +0 -13
  170. package/src/config/presets/runtime/model/gemma2-debug.json +0 -77
  171. package/src/config/presets/runtime/model/gemma2-pipeline-debug.json +0 -66
  172. package/src/config/presets/runtime/model/gemma2-pipeline.json +0 -75
  173. package/src/config/presets/runtime/model/gemma3-layer-probe.json +0 -85
  174. package/src/config/presets/runtime/model/qwen3-5-layer-probe.json +0 -52
  175. package/src/config/presets/runtime/model/qwen3-5-linear-attn-debug.json +0 -90
  176. package/src/config/presets/runtime/modes/bench.json +0 -37
  177. package/src/config/presets/runtime/modes/debug.json +0 -39
  178. package/src/config/presets/runtime/modes/default.json +0 -10
  179. package/src/config/presets/runtime/modes/embedding-bench.json +0 -28
  180. package/src/config/presets/runtime/modes/embedding.json +0 -54
  181. package/src/config/presets/runtime/modes/low-memory.json +0 -40
  182. package/src/config/presets/runtime/modes/production.json +0 -48
  183. package/src/config/presets/runtime/modes/simulation.json +0 -30
  184. package/src/config/presets/runtime/modes/trace-layers.json +0 -126
  185. package/src/config/presets/runtime/platform/metal-apple-q4k.json +0 -11
  186. package/src/config/quantization-contract-check.d.ts +0 -12
  187. package/src/config/quantization-contract-check.js +0 -91
  188. package/src/config/required-inference-fields-contract-check.d.ts +0 -24
  189. package/src/config/required-inference-fields-contract-check.js +0 -237
  190. package/src/config/runtime-merge.d.ts +0 -5
  191. package/src/config/runtime-merge.js +0 -21
  192. package/src/config/runtime.d.ts +0 -28
  193. package/src/config/runtime.js +0 -61
  194. package/src/config/schema/adapter.schema.d.ts +0 -53
  195. package/src/config/schema/adapter.schema.js +0 -60
  196. package/src/config/schema/backward-registry.schema.d.ts +0 -14
  197. package/src/config/schema/backward-registry.schema.js +0 -46
  198. package/src/config/schema/benchmark.schema.d.ts +0 -54
  199. package/src/config/schema/benchmark.schema.js +0 -74
  200. package/src/config/schema/bridge.schema.d.ts +0 -25
  201. package/src/config/schema/bridge.schema.js +0 -22
  202. package/src/config/schema/browser-suite-metrics.schema.d.ts +0 -17
  203. package/src/config/schema/browser-suite-metrics.schema.js +0 -46
  204. package/src/config/schema/buffer-pool.schema.d.ts +0 -92
  205. package/src/config/schema/buffer-pool.schema.js +0 -50
  206. package/src/config/schema/conversion-report.schema.d.ts +0 -40
  207. package/src/config/schema/conversion-report.schema.js +0 -108
  208. package/src/config/schema/conversion.schema.d.ts +0 -184
  209. package/src/config/schema/conversion.schema.js +0 -13
  210. package/src/config/schema/converter.schema.d.ts +0 -123
  211. package/src/config/schema/converter.schema.js +0 -136
  212. package/src/config/schema/debug.schema.d.ts +0 -250
  213. package/src/config/schema/debug.schema.js +0 -106
  214. package/src/config/schema/diffusion.schema.d.ts +0 -88
  215. package/src/config/schema/diffusion.schema.js +0 -62
  216. package/src/config/schema/distill-training.schema.d.ts +0 -48
  217. package/src/config/schema/distill-training.schema.js +0 -139
  218. package/src/config/schema/distribution.schema.d.ts +0 -155
  219. package/src/config/schema/distribution.schema.js +0 -81
  220. package/src/config/schema/doppler.schema.d.ts +0 -75
  221. package/src/config/schema/doppler.schema.js +0 -341
  222. package/src/config/schema/ecosystem.schema.d.ts +0 -255
  223. package/src/config/schema/ecosystem.schema.js +0 -534
  224. package/src/config/schema/emulation.schema.d.ts +0 -351
  225. package/src/config/schema/emulation.schema.js +0 -299
  226. package/src/config/schema/energy.schema.d.ts +0 -102
  227. package/src/config/schema/energy.schema.js +0 -72
  228. package/src/config/schema/execution-v0.schema.d.ts +0 -187
  229. package/src/config/schema/execution-v0.schema.js +0 -55
  230. package/src/config/schema/gpu-cache.schema.d.ts +0 -26
  231. package/src/config/schema/gpu-cache.schema.js +0 -8
  232. package/src/config/schema/harness.schema.d.ts +0 -32
  233. package/src/config/schema/harness.schema.js +0 -20
  234. package/src/config/schema/hotswap.schema.d.ts +0 -55
  235. package/src/config/schema/hotswap.schema.js +0 -18
  236. package/src/config/schema/index.d.ts +0 -885
  237. package/src/config/schema/index.js +0 -489
  238. package/src/config/schema/inference-defaults.schema.d.ts +0 -276
  239. package/src/config/schema/inference-defaults.schema.js +0 -188
  240. package/src/config/schema/inference.schema.d.ts +0 -298
  241. package/src/config/schema/inference.schema.js +0 -39
  242. package/src/config/schema/intent-bundle.schema.d.ts +0 -28
  243. package/src/config/schema/intent-bundle.schema.js +0 -12
  244. package/src/config/schema/kernel-path.schema.d.ts +0 -183
  245. package/src/config/schema/kernel-path.schema.js +0 -9
  246. package/src/config/schema/kernel-registry.schema.d.ts +0 -199
  247. package/src/config/schema/kernel-registry.schema.js +0 -46
  248. package/src/config/schema/kernel-thresholds.schema.d.ts +0 -302
  249. package/src/config/schema/kernel-thresholds.schema.js +0 -195
  250. package/src/config/schema/kernel-warmup.schema.d.ts +0 -19
  251. package/src/config/schema/kernel-warmup.schema.js +0 -5
  252. package/src/config/schema/kvcache.schema.d.ts +0 -131
  253. package/src/config/schema/kvcache.schema.js +0 -31
  254. package/src/config/schema/loading.schema.d.ts +0 -153
  255. package/src/config/schema/loading.schema.js +0 -84
  256. package/src/config/schema/lora.schema.d.ts +0 -12
  257. package/src/config/schema/lora.schema.js +0 -12
  258. package/src/config/schema/manifest.schema.d.ts +0 -507
  259. package/src/config/schema/manifest.schema.js +0 -146
  260. package/src/config/schema/memory-limits.schema.d.ts +0 -107
  261. package/src/config/schema/memory-limits.schema.js +0 -57
  262. package/src/config/schema/moe.schema.d.ts +0 -78
  263. package/src/config/schema/moe.schema.js +0 -31
  264. package/src/config/schema/platform.schema.d.ts +0 -121
  265. package/src/config/schema/platform.schema.js +0 -1
  266. package/src/config/schema/preset.schema.d.ts +0 -124
  267. package/src/config/schema/preset.schema.js +0 -1
  268. package/src/config/schema/quantization-defaults.schema.d.ts +0 -34
  269. package/src/config/schema/quantization-defaults.schema.js +0 -5
  270. package/src/config/schema/quantization.schema.d.ts +0 -10
  271. package/src/config/schema/quantization.schema.js +0 -33
  272. package/src/config/schema/shared-runtime.schema.d.ts +0 -75
  273. package/src/config/schema/shared-runtime.schema.js +0 -45
  274. package/src/config/schema/speculative.schema.d.ts +0 -21
  275. package/src/config/schema/speculative.schema.js +0 -11
  276. package/src/config/schema/storage.schema.d.ts +0 -123
  277. package/src/config/schema/storage.schema.js +0 -66
  278. package/src/config/schema/tooling.schema.d.ts +0 -29
  279. package/src/config/schema/tooling.schema.js +0 -12
  280. package/src/config/schema/training-metrics.schema.d.ts +0 -89
  281. package/src/config/schema/training-metrics.schema.js +0 -374
  282. package/src/config/schema/training.schema.d.ts +0 -88
  283. package/src/config/schema/training.schema.js +0 -106
  284. package/src/config/schema/tuner.schema.d.ts +0 -39
  285. package/src/config/schema/tuner.schema.js +0 -13
  286. package/src/config/schema/ul-training.schema.d.ts +0 -61
  287. package/src/config/schema/ul-training.schema.js +0 -140
  288. package/src/config/schema/units.schema.d.ts +0 -27
  289. package/src/config/schema/units.schema.js +0 -26
  290. package/src/config/training-defaults.d.ts +0 -24
  291. package/src/config/training-defaults.js +0 -99
  292. package/src/converter/conversion-plan.d.ts +0 -64
  293. package/src/converter/conversion-plan.js +0 -565
  294. package/src/converter/core.d.ts +0 -264
  295. package/src/converter/core.js +0 -1374
  296. package/src/converter/execution-v0-manifest.d.ts +0 -15
  297. package/src/converter/execution-v0-manifest.js +0 -149
  298. package/src/converter/index.d.ts +0 -99
  299. package/src/converter/index.js +0 -60
  300. package/src/converter/manifest-inference.d.ts +0 -20
  301. package/src/converter/manifest-inference.js +0 -513
  302. package/src/converter/parsers/diffusion.d.ts +0 -50
  303. package/src/converter/parsers/diffusion.js +0 -327
  304. package/src/converter/parsers/gguf.d.ts +0 -22
  305. package/src/converter/parsers/gguf.js +0 -46
  306. package/src/converter/parsers/index.d.ts +0 -21
  307. package/src/converter/parsers/index.js +0 -12
  308. package/src/converter/parsers/transformer.d.ts +0 -16
  309. package/src/converter/parsers/transformer.js +0 -29
  310. package/src/converter/quantization-info.d.ts +0 -37
  311. package/src/converter/quantization-info.js +0 -422
  312. package/src/converter/quantizer.d.ts +0 -96
  313. package/src/converter/quantizer.js +0 -429
  314. package/src/converter/rope-config.d.ts +0 -15
  315. package/src/converter/rope-config.js +0 -262
  316. package/src/converter/shard-packer.d.ts +0 -138
  317. package/src/converter/shard-packer.js +0 -425
  318. package/src/converter/tokenizer-utils.d.ts +0 -12
  319. package/src/converter/tokenizer-utils.js +0 -104
  320. package/src/debug/config.d.ts +0 -78
  321. package/src/debug/config.js +0 -347
  322. package/src/debug/history.d.ts +0 -65
  323. package/src/debug/history.js +0 -71
  324. package/src/debug/index.d.ts +0 -268
  325. package/src/debug/index.js +0 -192
  326. package/src/debug/log.d.ts +0 -46
  327. package/src/debug/log.js +0 -132
  328. package/src/debug/perf.d.ts +0 -33
  329. package/src/debug/perf.js +0 -51
  330. package/src/debug/reference/README.md +0 -114
  331. package/src/debug/reference/hf_attn_debug.py +0 -114
  332. package/src/debug/reference/hf_embed_check.py +0 -89
  333. package/src/debug/reference/hf_layer_out.py +0 -100
  334. package/src/debug/reference/hf_qwen35_linear_attn_debug.py +0 -268
  335. package/src/debug/reference/hf_rope_check.py +0 -116
  336. package/src/debug/reference/hf_weights.py +0 -75
  337. package/src/debug/signals.d.ts +0 -63
  338. package/src/debug/signals.js +0 -39
  339. package/src/debug/stats.d.ts +0 -47
  340. package/src/debug/stats.js +0 -160
  341. package/src/debug/tensor.d.ts +0 -125
  342. package/src/debug/tensor.js +0 -268
  343. package/src/debug/trace.d.ts +0 -17
  344. package/src/debug/trace.js +0 -167
  345. package/src/diffusion/image-regression.d.ts +0 -31
  346. package/src/diffusion/image-regression.js +0 -107
  347. package/src/diffusion/index.d.ts +0 -8
  348. package/src/diffusion/index.js +0 -8
  349. package/src/distribution/p2p-control-plane.d.ts +0 -52
  350. package/src/distribution/p2p-control-plane.js +0 -272
  351. package/src/distribution/p2p-observability.d.ts +0 -116
  352. package/src/distribution/p2p-observability.js +0 -303
  353. package/src/distribution/p2p-transport-contract.d.ts +0 -57
  354. package/src/distribution/p2p-transport-contract.js +0 -310
  355. package/src/distribution/p2p-webrtc-browser.d.ts +0 -37
  356. package/src/distribution/p2p-webrtc-browser.js +0 -454
  357. package/src/distribution/shard-delivery.d.ts +0 -251
  358. package/src/distribution/shard-delivery.js +0 -2152
  359. package/src/energy/index.d.ts +0 -2
  360. package/src/energy/index.js +0 -2
  361. package/src/errors/doppler-error.d.ts +0 -21
  362. package/src/errors/doppler-error.js +0 -25
  363. package/src/errors/index.d.ts +0 -1
  364. package/src/errors/index.js +0 -1
  365. package/src/formats/gguf/index.d.ts +0 -8
  366. package/src/formats/gguf/index.js +0 -4
  367. package/src/formats/gguf/types.d.ts +0 -137
  368. package/src/formats/gguf/types.js +0 -460
  369. package/src/formats/index.d.ts +0 -51
  370. package/src/formats/index.js +0 -13
  371. package/src/formats/rdrr/classification.d.ts +0 -39
  372. package/src/formats/rdrr/classification.js +0 -275
  373. package/src/formats/rdrr/groups.d.ts +0 -35
  374. package/src/formats/rdrr/groups.js +0 -73
  375. package/src/formats/rdrr/index.d.ts +0 -25
  376. package/src/formats/rdrr/index.js +0 -19
  377. package/src/formats/rdrr/manifest.d.ts +0 -32
  378. package/src/formats/rdrr/manifest.js +0 -108
  379. package/src/formats/rdrr/parsing.d.ts +0 -27
  380. package/src/formats/rdrr/parsing.js +0 -151
  381. package/src/formats/rdrr/tensor-config-validator.d.ts +0 -42
  382. package/src/formats/rdrr/tensor-config-validator.js +0 -156
  383. package/src/formats/rdrr/types.d.ts +0 -201
  384. package/src/formats/rdrr/types.js +0 -16
  385. package/src/formats/rdrr/validation.d.ts +0 -9
  386. package/src/formats/rdrr/validation.js +0 -213
  387. package/src/formats/safetensors/index.d.ts +0 -8
  388. package/src/formats/safetensors/index.js +0 -4
  389. package/src/formats/safetensors/types.d.ts +0 -67
  390. package/src/formats/safetensors/types.js +0 -102
  391. package/src/formats/tokenizer/index.d.ts +0 -5
  392. package/src/formats/tokenizer/index.js +0 -3
  393. package/src/formats/tokenizer/types.d.ts +0 -9
  394. package/src/formats/tokenizer/types.js +0 -22
  395. package/src/generation/index.d.ts +0 -18
  396. package/src/generation/index.js +0 -12
  397. package/src/gpu/command-recorder.d.ts +0 -175
  398. package/src/gpu/command-recorder.js +0 -498
  399. package/src/gpu/device.d.ts +0 -142
  400. package/src/gpu/device.js +0 -462
  401. package/src/gpu/kernel-runtime.d.ts +0 -20
  402. package/src/gpu/kernel-runtime.js +0 -37
  403. package/src/gpu/kernel-selection-cache.d.ts +0 -13
  404. package/src/gpu/kernel-selection-cache.js +0 -13
  405. package/src/gpu/kernel-selection-log.d.ts +0 -12
  406. package/src/gpu/kernel-selection-log.js +0 -28
  407. package/src/gpu/kernel-selector.d.ts +0 -11
  408. package/src/gpu/kernel-selector.js +0 -10
  409. package/src/gpu/kernel-tuner/benchmarks.d.ts +0 -144
  410. package/src/gpu/kernel-tuner/benchmarks.js +0 -902
  411. package/src/gpu/kernel-tuner/cache.d.ts +0 -55
  412. package/src/gpu/kernel-tuner/cache.js +0 -133
  413. package/src/gpu/kernel-tuner/index.d.ts +0 -59
  414. package/src/gpu/kernel-tuner/index.js +0 -38
  415. package/src/gpu/kernel-tuner/tuner.d.ts +0 -82
  416. package/src/gpu/kernel-tuner/tuner.js +0 -247
  417. package/src/gpu/kernel-tuner/types.d.ts +0 -101
  418. package/src/gpu/kernel-tuner/types.js +0 -4
  419. package/src/gpu/kernel-tuner.d.ts +0 -33
  420. package/src/gpu/kernel-tuner.js +0 -12
  421. package/src/gpu/kernels/README.md +0 -127
  422. package/src/gpu/kernels/attention.d.ts +0 -236
  423. package/src/gpu/kernels/attention.js +0 -1438
  424. package/src/gpu/kernels/attention.wgsl +0 -249
  425. package/src/gpu/kernels/attention_bdpa_decode_f16.wgsl +0 -246
  426. package/src/gpu/kernels/attention_decode.wgsl +0 -233
  427. package/src/gpu/kernels/attention_decode_chunked_f16.wgsl +0 -183
  428. package/src/gpu/kernels/attention_decode_chunked_f16kv.wgsl +0 -208
  429. package/src/gpu/kernels/attention_decode_f16.wgsl +0 -202
  430. package/src/gpu/kernels/attention_decode_f16kv.wgsl +0 -224
  431. package/src/gpu/kernels/attention_decode_online_f16.wgsl +0 -223
  432. package/src/gpu/kernels/attention_decode_online_f16kv.wgsl +0 -225
  433. package/src/gpu/kernels/attention_decode_optimized.wgsl +0 -445
  434. package/src/gpu/kernels/attention_decode_paged_f16.wgsl +0 -172
  435. package/src/gpu/kernels/attention_decode_paged_f16kv.wgsl +0 -174
  436. package/src/gpu/kernels/attention_decode_subgroup.wgsl +0 -233
  437. package/src/gpu/kernels/attention_decode_tiered_f16.wgsl +0 -218
  438. package/src/gpu/kernels/attention_decode_tiered_f16kv.wgsl +0 -220
  439. package/src/gpu/kernels/attention_decode_tiered_int4_f16kv.wgsl +0 -242
  440. package/src/gpu/kernels/attention_decode_tiered_int8_f16kv.wgsl +0 -242
  441. package/src/gpu/kernels/attention_f16.wgsl +0 -214
  442. package/src/gpu/kernels/attention_f16kv.wgsl +0 -242
  443. package/src/gpu/kernels/attention_small.wgsl +0 -260
  444. package/src/gpu/kernels/attention_small_f16.wgsl +0 -240
  445. package/src/gpu/kernels/attention_small_f16kv.wgsl +0 -266
  446. package/src/gpu/kernels/attention_streaming.wgsl +0 -149
  447. package/src/gpu/kernels/attention_streaming_f16.wgsl +0 -147
  448. package/src/gpu/kernels/attention_streaming_f16kv.wgsl +0 -151
  449. package/src/gpu/kernels/backward/adam.d.ts +0 -28
  450. package/src/gpu/kernels/backward/adam.js +0 -203
  451. package/src/gpu/kernels/backward/adam.wgsl +0 -50
  452. package/src/gpu/kernels/backward/attention_backward.d.ts +0 -22
  453. package/src/gpu/kernels/backward/attention_backward.js +0 -364
  454. package/src/gpu/kernels/backward/attention_backward.wgsl +0 -49
  455. package/src/gpu/kernels/backward/bias_add_backward.d.ts +0 -17
  456. package/src/gpu/kernels/backward/bias_add_backward.js +0 -24
  457. package/src/gpu/kernels/backward/bias_add_backward.wgsl +0 -33
  458. package/src/gpu/kernels/backward/conv2d_backward.d.ts +0 -31
  459. package/src/gpu/kernels/backward/conv2d_backward.js +0 -148
  460. package/src/gpu/kernels/backward/conv2d_backward_input.wgsl +0 -83
  461. package/src/gpu/kernels/backward/conv2d_backward_weight.wgsl +0 -70
  462. package/src/gpu/kernels/backward/cross_entropy_backward.d.ts +0 -23
  463. package/src/gpu/kernels/backward/cross_entropy_backward.js +0 -29
  464. package/src/gpu/kernels/backward/cross_entropy_backward.wgsl +0 -39
  465. package/src/gpu/kernels/backward/embed_backward.d.ts +0 -29
  466. package/src/gpu/kernels/backward/embed_backward.js +0 -118
  467. package/src/gpu/kernels/backward/embed_backward.wgsl +0 -73
  468. package/src/gpu/kernels/backward/gelu_backward.d.ts +0 -16
  469. package/src/gpu/kernels/backward/gelu_backward.js +0 -39
  470. package/src/gpu/kernels/backward/gelu_backward.wgsl +0 -38
  471. package/src/gpu/kernels/backward/groupnorm_backward.d.ts +0 -24
  472. package/src/gpu/kernels/backward/groupnorm_backward.js +0 -29
  473. package/src/gpu/kernels/backward/groupnorm_backward.wgsl +0 -143
  474. package/src/gpu/kernels/backward/index.d.ts +0 -17
  475. package/src/gpu/kernels/backward/index.js +0 -23
  476. package/src/gpu/kernels/backward/layernorm_backward.d.ts +0 -22
  477. package/src/gpu/kernels/backward/layernorm_backward.js +0 -135
  478. package/src/gpu/kernels/backward/layernorm_backward.wgsl +0 -194
  479. package/src/gpu/kernels/backward/matmul_backward.d.ts +0 -32
  480. package/src/gpu/kernels/backward/matmul_backward.js +0 -124
  481. package/src/gpu/kernels/backward/matmul_backward.wgsl +0 -90
  482. package/src/gpu/kernels/backward/matmul_transpose_a.wgsl +0 -84
  483. package/src/gpu/kernels/backward/pixel_shuffle_backward.d.ts +0 -22
  484. package/src/gpu/kernels/backward/pixel_shuffle_backward.js +0 -30
  485. package/src/gpu/kernels/backward/pixel_shuffle_backward.wgsl +0 -54
  486. package/src/gpu/kernels/backward/rmsnorm_backward.d.ts +0 -24
  487. package/src/gpu/kernels/backward/rmsnorm_backward.js +0 -101
  488. package/src/gpu/kernels/backward/rmsnorm_backward.wgsl +0 -78
  489. package/src/gpu/kernels/backward/rope_backward.d.ts +0 -25
  490. package/src/gpu/kernels/backward/rope_backward.js +0 -109
  491. package/src/gpu/kernels/backward/rope_backward.wgsl +0 -59
  492. package/src/gpu/kernels/backward/scale_backward.d.ts +0 -16
  493. package/src/gpu/kernels/backward/scale_backward.js +0 -84
  494. package/src/gpu/kernels/backward/scale_backward.wgsl +0 -27
  495. package/src/gpu/kernels/backward/silu_backward.d.ts +0 -16
  496. package/src/gpu/kernels/backward/silu_backward.js +0 -39
  497. package/src/gpu/kernels/backward/silu_backward.wgsl +0 -31
  498. package/src/gpu/kernels/backward/softmax_backward.d.ts +0 -16
  499. package/src/gpu/kernels/backward/softmax_backward.js +0 -43
  500. package/src/gpu/kernels/backward/softmax_backward.wgsl +0 -44
  501. package/src/gpu/kernels/backward/upsample2d_backward.d.ts +0 -21
  502. package/src/gpu/kernels/backward/upsample2d_backward.js +0 -30
  503. package/src/gpu/kernels/backward/upsample2d_backward.wgsl +0 -59
  504. package/src/gpu/kernels/backward/utils.d.ts +0 -45
  505. package/src/gpu/kernels/backward/utils.js +0 -371
  506. package/src/gpu/kernels/bf16_to_f16.wgsl +0 -54
  507. package/src/gpu/kernels/bf16_to_f32.wgsl +0 -70
  508. package/src/gpu/kernels/bias_add.wgsl +0 -42
  509. package/src/gpu/kernels/bias_add_f16.wgsl +0 -47
  510. package/src/gpu/kernels/cast.d.ts +0 -67
  511. package/src/gpu/kernels/cast.js +0 -464
  512. package/src/gpu/kernels/cast_f16_to_f32.wgsl +0 -31
  513. package/src/gpu/kernels/cast_f32_to_f16.wgsl +0 -36
  514. package/src/gpu/kernels/check-finiteness.d.ts +0 -15
  515. package/src/gpu/kernels/check-finiteness.js +0 -149
  516. package/src/gpu/kernels/check-stop.d.ts +0 -31
  517. package/src/gpu/kernels/check-stop.js +0 -170
  518. package/src/gpu/kernels/clamp.d.ts +0 -22
  519. package/src/gpu/kernels/clamp.js +0 -42
  520. package/src/gpu/kernels/clamp.wgsl +0 -24
  521. package/src/gpu/kernels/constants.d.ts +0 -168
  522. package/src/gpu/kernels/constants.js +0 -129
  523. package/src/gpu/kernels/conv2d.d.ts +0 -34
  524. package/src/gpu/kernels/conv2d.js +0 -91
  525. package/src/gpu/kernels/conv2d.wgsl +0 -70
  526. package/src/gpu/kernels/conv2d_f16.wgsl +0 -72
  527. package/src/gpu/kernels/cross_entropy_loss.d.ts +0 -21
  528. package/src/gpu/kernels/cross_entropy_loss.js +0 -60
  529. package/src/gpu/kernels/cross_entropy_loss.wgsl +0 -39
  530. package/src/gpu/kernels/depthwise_conv2d.d.ts +0 -29
  531. package/src/gpu/kernels/depthwise_conv2d.js +0 -109
  532. package/src/gpu/kernels/depthwise_conv2d.wgsl +0 -55
  533. package/src/gpu/kernels/depthwise_conv2d_f16.wgsl +0 -59
  534. package/src/gpu/kernels/dequant.d.ts +0 -108
  535. package/src/gpu/kernels/dequant.js +0 -576
  536. package/src/gpu/kernels/dequant_f16_out.wgsl +0 -151
  537. package/src/gpu/kernels/dequant_f16_out_vec4.wgsl +0 -149
  538. package/src/gpu/kernels/dequant_f16_rowwise.wgsl +0 -139
  539. package/src/gpu/kernels/dequant_f32_rowwise.wgsl +0 -133
  540. package/src/gpu/kernels/dequant_mxfp4.wgsl +0 -120
  541. package/src/gpu/kernels/dequant_mxfp4_expert.wgsl +0 -129
  542. package/src/gpu/kernels/dequant_mxfp4_expert_f16.wgsl +0 -105
  543. package/src/gpu/kernels/dequant_mxfp4_vec4.wgsl +0 -116
  544. package/src/gpu/kernels/dequant_q6k.wgsl +0 -140
  545. package/src/gpu/kernels/dequant_q8_0.wgsl +0 -98
  546. package/src/gpu/kernels/dequant_shared.wgsl +0 -202
  547. package/src/gpu/kernels/dequant_shared_vec4.wgsl +0 -153
  548. package/src/gpu/kernels/dequant_subgroup.wgsl +0 -202
  549. package/src/gpu/kernels/dispatch.d.ts +0 -157
  550. package/src/gpu/kernels/dispatch.js +0 -235
  551. package/src/gpu/kernels/energy.d.ts +0 -113
  552. package/src/gpu/kernels/energy.js +0 -448
  553. package/src/gpu/kernels/energy_eval.wgsl +0 -26
  554. package/src/gpu/kernels/energy_eval_f16.wgsl +0 -30
  555. package/src/gpu/kernels/energy_quintel_grad.wgsl +0 -92
  556. package/src/gpu/kernels/energy_quintel_grad_f16.wgsl +0 -96
  557. package/src/gpu/kernels/energy_quintel_reduce.wgsl +0 -112
  558. package/src/gpu/kernels/energy_quintel_reduce_f16.wgsl +0 -116
  559. package/src/gpu/kernels/energy_quintel_update.wgsl +0 -92
  560. package/src/gpu/kernels/energy_quintel_update_f16.wgsl +0 -96
  561. package/src/gpu/kernels/energy_update.wgsl +0 -25
  562. package/src/gpu/kernels/energy_update_f16.wgsl +0 -30
  563. package/src/gpu/kernels/feature-check.d.ts +0 -42
  564. package/src/gpu/kernels/feature-check.js +0 -70
  565. package/src/gpu/kernels/fused_ffn.d.ts +0 -65
  566. package/src/gpu/kernels/fused_ffn.js +0 -337
  567. package/src/gpu/kernels/fused_ffn.wgsl +0 -420
  568. package/src/gpu/kernels/fused_ffn_f16.wgsl +0 -213
  569. package/src/gpu/kernels/fused_ffn_q4k.wgsl +0 -375
  570. package/src/gpu/kernels/fused_matmul_q4.wgsl +0 -404
  571. package/src/gpu/kernels/fused_matmul_q4_batched.wgsl +0 -194
  572. package/src/gpu/kernels/fused_matmul_q4_batched_f16.wgsl +0 -170
  573. package/src/gpu/kernels/fused_matmul_q4_batched_f16a.wgsl +0 -154
  574. package/src/gpu/kernels/fused_matmul_q4_f16a.wgsl +0 -219
  575. package/src/gpu/kernels/fused_matmul_q4_multicol_f16.wgsl +0 -216
  576. package/src/gpu/kernels/fused_matmul_q4_multicol_f16a.wgsl +0 -204
  577. package/src/gpu/kernels/fused_matmul_residual.d.ts +0 -46
  578. package/src/gpu/kernels/fused_matmul_residual.js +0 -175
  579. package/src/gpu/kernels/fused_matmul_rmsnorm.d.ts +0 -64
  580. package/src/gpu/kernels/fused_matmul_rmsnorm.js +0 -290
  581. package/src/gpu/kernels/fused_matmul_rmsnorm.wgsl +0 -324
  582. package/src/gpu/kernels/fused_matmul_rmsnorm_f16.wgsl +0 -303
  583. package/src/gpu/kernels/fused_swiglu.wgsl +0 -63
  584. package/src/gpu/kernels/fused_swiglu_f16.wgsl +0 -57
  585. package/src/gpu/kernels/gather.d.ts +0 -64
  586. package/src/gpu/kernels/gather.js +0 -137
  587. package/src/gpu/kernels/gather.wgsl +0 -61
  588. package/src/gpu/kernels/gather_f16.wgsl +0 -65
  589. package/src/gpu/kernels/gather_f16_f16_out.wgsl +0 -55
  590. package/src/gpu/kernels/gather_f16_out.wgsl +0 -55
  591. package/src/gpu/kernels/gather_f16_vec4.wgsl +0 -76
  592. package/src/gpu/kernels/gather_f16_vec4_f16_out.wgsl +0 -68
  593. package/src/gpu/kernels/gather_vec4.wgsl +0 -74
  594. package/src/gpu/kernels/gather_vec4_f16_out.wgsl +0 -68
  595. package/src/gpu/kernels/gelu.d.ts +0 -33
  596. package/src/gpu/kernels/gelu.js +0 -55
  597. package/src/gpu/kernels/gelu.wgsl +0 -64
  598. package/src/gpu/kernels/gelu_f16.wgsl +0 -66
  599. package/src/gpu/kernels/gptoss_mxfp4_expert_fused.wgsl +0 -127
  600. package/src/gpu/kernels/gptoss_router_topk.wgsl +0 -119
  601. package/src/gpu/kernels/grouped_pointwise_conv2d.d.ts +0 -27
  602. package/src/gpu/kernels/grouped_pointwise_conv2d.js +0 -103
  603. package/src/gpu/kernels/grouped_pointwise_conv2d.wgsl +0 -44
  604. package/src/gpu/kernels/grouped_pointwise_conv2d_f16.wgsl +0 -48
  605. package/src/gpu/kernels/groupnorm.d.ts +0 -31
  606. package/src/gpu/kernels/groupnorm.js +0 -102
  607. package/src/gpu/kernels/groupnorm_apply.wgsl +0 -41
  608. package/src/gpu/kernels/groupnorm_apply_f16.wgsl +0 -46
  609. package/src/gpu/kernels/groupnorm_stats.wgsl +0 -76
  610. package/src/gpu/kernels/groupnorm_stats_f16.wgsl +0 -79
  611. package/src/gpu/kernels/index.d.ts +0 -374
  612. package/src/gpu/kernels/index.js +0 -315
  613. package/src/gpu/kernels/kernel-base.d.ts +0 -33
  614. package/src/gpu/kernels/kernel-base.js +0 -46
  615. package/src/gpu/kernels/kernel-configs.d.ts +0 -65
  616. package/src/gpu/kernels/kernel-configs.js +0 -50
  617. package/src/gpu/kernels/kernel-tuning.d.ts +0 -42
  618. package/src/gpu/kernels/kernel-tuning.js +0 -149
  619. package/src/gpu/kernels/kv-quantize.d.ts +0 -37
  620. package/src/gpu/kernels/kv-quantize.js +0 -141
  621. package/src/gpu/kernels/kv_quantize_int4.wgsl +0 -119
  622. package/src/gpu/kernels/kv_quantize_int8.wgsl +0 -119
  623. package/src/gpu/kernels/layernorm.d.ts +0 -37
  624. package/src/gpu/kernels/layernorm.js +0 -96
  625. package/src/gpu/kernels/layernorm.wgsl +0 -121
  626. package/src/gpu/kernels/layernorm_f16.wgsl +0 -103
  627. package/src/gpu/kernels/linear-attention-core.d.ts +0 -39
  628. package/src/gpu/kernels/linear-attention-core.js +0 -535
  629. package/src/gpu/kernels/logit-merge.d.ts +0 -110
  630. package/src/gpu/kernels/logit-merge.js +0 -394
  631. package/src/gpu/kernels/matmul-dispatch.d.ts +0 -38
  632. package/src/gpu/kernels/matmul-dispatch.js +0 -155
  633. package/src/gpu/kernels/matmul-selection.d.ts +0 -87
  634. package/src/gpu/kernels/matmul-selection.js +0 -517
  635. package/src/gpu/kernels/matmul.d.ts +0 -111
  636. package/src/gpu/kernels/matmul.js +0 -315
  637. package/src/gpu/kernels/matmul_f16.wgsl +0 -170
  638. package/src/gpu/kernels/matmul_f16_tiled.wgsl +0 -165
  639. package/src/gpu/kernels/matmul_f16w_f32a.wgsl +0 -89
  640. package/src/gpu/kernels/matmul_f16w_f32a_tiled.wgsl +0 -154
  641. package/src/gpu/kernels/matmul_f32.wgsl +0 -100
  642. package/src/gpu/kernels/matmul_gemv.wgsl +0 -80
  643. package/src/gpu/kernels/matmul_gemv_f16a.wgsl +0 -81
  644. package/src/gpu/kernels/matmul_gemv_residual.wgsl +0 -119
  645. package/src/gpu/kernels/matmul_gemv_residual_f16.wgsl +0 -78
  646. package/src/gpu/kernels/matmul_gemv_subgroup.wgsl +0 -345
  647. package/src/gpu/kernels/matmul_gemv_subgroup_f16a.wgsl +0 -514
  648. package/src/gpu/kernels/modulate.d.ts +0 -29
  649. package/src/gpu/kernels/modulate.js +0 -57
  650. package/src/gpu/kernels/modulate.wgsl +0 -40
  651. package/src/gpu/kernels/modulate_f16.wgsl +0 -43
  652. package/src/gpu/kernels/moe.d.ts +0 -164
  653. package/src/gpu/kernels/moe.js +0 -542
  654. package/src/gpu/kernels/moe_gather.wgsl +0 -170
  655. package/src/gpu/kernels/moe_gather_f16.wgsl +0 -82
  656. package/src/gpu/kernels/moe_gather_vec4.wgsl +0 -74
  657. package/src/gpu/kernels/moe_offsets.wgsl +0 -48
  658. package/src/gpu/kernels/pipeline-cache.d.ts +0 -88
  659. package/src/gpu/kernels/pipeline-cache.js +0 -305
  660. package/src/gpu/kernels/pixel_shuffle.d.ts +0 -27
  661. package/src/gpu/kernels/pixel_shuffle.js +0 -57
  662. package/src/gpu/kernels/pixel_shuffle.wgsl +0 -43
  663. package/src/gpu/kernels/pixel_shuffle_f16.wgsl +0 -46
  664. package/src/gpu/kernels/relu.d.ts +0 -18
  665. package/src/gpu/kernels/relu.js +0 -66
  666. package/src/gpu/kernels/relu.wgsl +0 -22
  667. package/src/gpu/kernels/relu_f16.wgsl +0 -24
  668. package/src/gpu/kernels/repeat_channels.d.ts +0 -21
  669. package/src/gpu/kernels/repeat_channels.js +0 -68
  670. package/src/gpu/kernels/repeat_channels.wgsl +0 -28
  671. package/src/gpu/kernels/repeat_channels_f16.wgsl +0 -30
  672. package/src/gpu/kernels/residual.d.ts +0 -74
  673. package/src/gpu/kernels/residual.js +0 -173
  674. package/src/gpu/kernels/residual.wgsl +0 -56
  675. package/src/gpu/kernels/residual_f16.wgsl +0 -36
  676. package/src/gpu/kernels/residual_f16_vec4.wgsl +0 -48
  677. package/src/gpu/kernels/residual_vec4.wgsl +0 -47
  678. package/src/gpu/kernels/rmsnorm.d.ts +0 -53
  679. package/src/gpu/kernels/rmsnorm.js +0 -215
  680. package/src/gpu/kernels/rmsnorm.wgsl +0 -425
  681. package/src/gpu/kernels/rmsnorm_f16.wgsl +0 -172
  682. package/src/gpu/kernels/rope.d.ts +0 -50
  683. package/src/gpu/kernels/rope.js +0 -66
  684. package/src/gpu/kernels/rope.wgsl +0 -344
  685. package/src/gpu/kernels/rope_f16.wgsl +0 -271
  686. package/src/gpu/kernels/rule-matcher.d.ts +0 -30
  687. package/src/gpu/kernels/rule-matcher.js +0 -42
  688. package/src/gpu/kernels/rule-registry.d.ts +0 -7
  689. package/src/gpu/kernels/rule-registry.js +0 -41
  690. package/src/gpu/kernels/sample.d.ts +0 -75
  691. package/src/gpu/kernels/sample.js +0 -567
  692. package/src/gpu/kernels/sample.wgsl +0 -377
  693. package/src/gpu/kernels/sample_f16.wgsl +0 -331
  694. package/src/gpu/kernels/sana_linear_attention.d.ts +0 -27
  695. package/src/gpu/kernels/sana_linear_attention.js +0 -129
  696. package/src/gpu/kernels/sana_linear_attention_apply.wgsl +0 -43
  697. package/src/gpu/kernels/sana_linear_attention_apply_f16.wgsl +0 -46
  698. package/src/gpu/kernels/sana_linear_attention_summary.wgsl +0 -51
  699. package/src/gpu/kernels/sana_linear_attention_summary_f16.wgsl +0 -53
  700. package/src/gpu/kernels/scale.d.ts +0 -35
  701. package/src/gpu/kernels/scale.js +0 -44
  702. package/src/gpu/kernels/scale.wgsl +0 -38
  703. package/src/gpu/kernels/scatter_add.wgsl +0 -88
  704. package/src/gpu/kernels/scatter_add_dynamic.wgsl +0 -59
  705. package/src/gpu/kernels/scatter_add_dynamic_f16.wgsl +0 -52
  706. package/src/gpu/kernels/scatter_add_dynamic_f16_weights.wgsl +0 -50
  707. package/src/gpu/kernels/scatter_add_vec4.wgsl +0 -70
  708. package/src/gpu/kernels/shader-cache.d.ts +0 -56
  709. package/src/gpu/kernels/shader-cache.js +0 -208
  710. package/src/gpu/kernels/silu.d.ts +0 -76
  711. package/src/gpu/kernels/silu.js +0 -406
  712. package/src/gpu/kernels/silu.wgsl +0 -109
  713. package/src/gpu/kernels/silu_f16.wgsl +0 -108
  714. package/src/gpu/kernels/softmax.d.ts +0 -57
  715. package/src/gpu/kernels/softmax.js +0 -125
  716. package/src/gpu/kernels/softmax.wgsl +0 -388
  717. package/src/gpu/kernels/softmax_subgroup.wgsl +0 -175
  718. package/src/gpu/kernels/split_qg.d.ts +0 -50
  719. package/src/gpu/kernels/split_qg.js +0 -46
  720. package/src/gpu/kernels/split_qg.wgsl +0 -58
  721. package/src/gpu/kernels/split_qg_f16.wgsl +0 -62
  722. package/src/gpu/kernels/split_qkv.d.ts +0 -51
  723. package/src/gpu/kernels/split_qkv.js +0 -51
  724. package/src/gpu/kernels/split_qkv.wgsl +0 -71
  725. package/src/gpu/kernels/split_qkv_f16.wgsl +0 -75
  726. package/src/gpu/kernels/topk.wgsl +0 -243
  727. package/src/gpu/kernels/topk_f16.wgsl +0 -108
  728. package/src/gpu/kernels/topk_f16_weights.wgsl +0 -101
  729. package/src/gpu/kernels/transpose.d.ts +0 -21
  730. package/src/gpu/kernels/transpose.js +0 -51
  731. package/src/gpu/kernels/transpose.wgsl +0 -33
  732. package/src/gpu/kernels/types.d.ts +0 -21
  733. package/src/gpu/kernels/types.js +0 -4
  734. package/src/gpu/kernels/uniform-utils.d.ts +0 -48
  735. package/src/gpu/kernels/uniform-utils.js +0 -94
  736. package/src/gpu/kernels/upsample2d.d.ts +0 -25
  737. package/src/gpu/kernels/upsample2d.js +0 -67
  738. package/src/gpu/kernels/upsample2d.wgsl +0 -34
  739. package/src/gpu/kernels/upsample2d_f16.wgsl +0 -38
  740. package/src/gpu/kernels/utils.d.ts +0 -106
  741. package/src/gpu/kernels/utils.js +0 -246
  742. package/src/gpu/multi-model-recorder.d.ts +0 -21
  743. package/src/gpu/multi-model-recorder.js +0 -31
  744. package/src/gpu/partitioned-buffer-pool.d.ts +0 -28
  745. package/src/gpu/partitioned-buffer-pool.js +0 -57
  746. package/src/gpu/perf-guards.d.ts +0 -25
  747. package/src/gpu/perf-guards.js +0 -133
  748. package/src/gpu/profiler.d.ts +0 -114
  749. package/src/gpu/profiler.js +0 -396
  750. package/src/gpu/readback-utils.d.ts +0 -16
  751. package/src/gpu/readback-utils.js +0 -41
  752. package/src/gpu/submit-tracker.d.ts +0 -111
  753. package/src/gpu/submit-tracker.js +0 -242
  754. package/src/gpu/tensor.d.ts +0 -69
  755. package/src/gpu/tensor.js +0 -75
  756. package/src/gpu/uniform-cache.d.ts +0 -109
  757. package/src/gpu/uniform-cache.js +0 -263
  758. package/src/gpu/weight-buffer.d.ts +0 -115
  759. package/src/gpu/weight-buffer.js +0 -118
  760. package/src/hotswap/intent-bundle.d.ts +0 -37
  761. package/src/hotswap/intent-bundle.js +0 -129
  762. package/src/hotswap/manifest.d.ts +0 -42
  763. package/src/hotswap/manifest.js +0 -124
  764. package/src/hotswap/runtime.d.ts +0 -31
  765. package/src/hotswap/runtime.js +0 -150
  766. package/src/index-browser.d.ts +0 -92
  767. package/src/index-browser.js +0 -68
  768. package/src/index-internal.d.ts +0 -2
  769. package/src/index-internal.js +0 -2
  770. package/src/index.d.ts +0 -103
  771. package/src/index.js +0 -76
  772. package/src/inference/README.md +0 -593
  773. package/src/inference/browser-harness-contract-helpers.d.ts +0 -5
  774. package/src/inference/browser-harness-contract-helpers.js +0 -28
  775. package/src/inference/browser-harness-diffusion-energy-suites.d.ts +0 -2
  776. package/src/inference/browser-harness-diffusion-energy-suites.js +0 -269
  777. package/src/inference/browser-harness-model-helpers.d.ts +0 -16
  778. package/src/inference/browser-harness-model-helpers.js +0 -217
  779. package/src/inference/browser-harness-report-helpers.d.ts +0 -7
  780. package/src/inference/browser-harness-report-helpers.js +0 -42
  781. package/src/inference/browser-harness-runtime-helpers.d.ts +0 -61
  782. package/src/inference/browser-harness-runtime-helpers.js +0 -415
  783. package/src/inference/browser-harness-suite-helpers.d.ts +0 -28
  784. package/src/inference/browser-harness-suite-helpers.js +0 -268
  785. package/src/inference/browser-harness-text-helpers.d.ts +0 -27
  786. package/src/inference/browser-harness-text-helpers.js +0 -788
  787. package/src/inference/browser-harness.d.ts +0 -242
  788. package/src/inference/browser-harness.js +0 -990
  789. package/src/inference/decode-buffers.d.ts +0 -108
  790. package/src/inference/decode-buffers.js +0 -181
  791. package/src/inference/decode-ring.d.ts +0 -52
  792. package/src/inference/decode-ring.js +0 -273
  793. package/src/inference/expert-router.d.ts +0 -27
  794. package/src/inference/expert-router.js +0 -55
  795. package/src/inference/functiongemma.d.ts +0 -15
  796. package/src/inference/functiongemma.js +0 -1
  797. package/src/inference/kv-cache/base.d.ts +0 -150
  798. package/src/inference/kv-cache/base.js +0 -1083
  799. package/src/inference/kv-cache/basis-decomposed-paged.d.ts +0 -50
  800. package/src/inference/kv-cache/basis-decomposed-paged.js +0 -276
  801. package/src/inference/kv-cache/index.d.ts +0 -35
  802. package/src/inference/kv-cache/index.js +0 -20
  803. package/src/inference/kv-cache/sliding-window.d.ts +0 -72
  804. package/src/inference/kv-cache/sliding-window.js +0 -243
  805. package/src/inference/kv-cache/tiered.d.ts +0 -89
  806. package/src/inference/kv-cache/tiered.js +0 -576
  807. package/src/inference/kv-cache/types.d.ts +0 -188
  808. package/src/inference/kv-cache/types.js +0 -80
  809. package/src/inference/kv-cache.d.ts +0 -36
  810. package/src/inference/kv-cache.js +0 -18
  811. package/src/inference/moe-router.d.ts +0 -212
  812. package/src/inference/moe-router.js +0 -585
  813. package/src/inference/multi-model-network.d.ts +0 -139
  814. package/src/inference/multi-model-network.js +0 -771
  815. package/src/inference/multi-pipeline-pool.d.ts +0 -62
  816. package/src/inference/multi-pipeline-pool.js +0 -161
  817. package/src/inference/network-evolution.d.ts +0 -55
  818. package/src/inference/network-evolution.js +0 -79
  819. package/src/inference/pipelines/context.d.ts +0 -21
  820. package/src/inference/pipelines/context.js +0 -184
  821. package/src/inference/pipelines/diffusion/helpers.d.ts +0 -29
  822. package/src/inference/pipelines/diffusion/helpers.js +0 -120
  823. package/src/inference/pipelines/diffusion/index.d.ts +0 -3
  824. package/src/inference/pipelines/diffusion/index.js +0 -3
  825. package/src/inference/pipelines/diffusion/init.d.ts +0 -24
  826. package/src/inference/pipelines/diffusion/init.js +0 -138
  827. package/src/inference/pipelines/diffusion/pipeline.d.ts +0 -38
  828. package/src/inference/pipelines/diffusion/pipeline.js +0 -771
  829. package/src/inference/pipelines/diffusion/sana-transformer.d.ts +0 -53
  830. package/src/inference/pipelines/diffusion/sana-transformer.js +0 -738
  831. package/src/inference/pipelines/diffusion/scheduler.d.ts +0 -35
  832. package/src/inference/pipelines/diffusion/scheduler.js +0 -153
  833. package/src/inference/pipelines/diffusion/sd3-transformer.d.ts +0 -20
  834. package/src/inference/pipelines/diffusion/sd3-transformer.js +0 -1194
  835. package/src/inference/pipelines/diffusion/sd3-weights.d.ts +0 -21
  836. package/src/inference/pipelines/diffusion/sd3-weights.js +0 -287
  837. package/src/inference/pipelines/diffusion/text-encoder-gpu.d.ts +0 -87
  838. package/src/inference/pipelines/diffusion/text-encoder-gpu.js +0 -1223
  839. package/src/inference/pipelines/diffusion/text-encoder.d.ts +0 -29
  840. package/src/inference/pipelines/diffusion/text-encoder.js +0 -195
  841. package/src/inference/pipelines/diffusion/types.d.ts +0 -116
  842. package/src/inference/pipelines/diffusion/types.js +0 -1
  843. package/src/inference/pipelines/diffusion/vae.d.ts +0 -20
  844. package/src/inference/pipelines/diffusion/vae.js +0 -1375
  845. package/src/inference/pipelines/diffusion/weights.d.ts +0 -40
  846. package/src/inference/pipelines/diffusion/weights.js +0 -150
  847. package/src/inference/pipelines/dream/energy-head-pipeline.d.ts +0 -29
  848. package/src/inference/pipelines/dream/energy-head-pipeline.js +0 -6
  849. package/src/inference/pipelines/dream/pipeline.d.ts +0 -17
  850. package/src/inference/pipelines/dream/pipeline.js +0 -8
  851. package/src/inference/pipelines/energy/index.d.ts +0 -1
  852. package/src/inference/pipelines/energy/index.js +0 -1
  853. package/src/inference/pipelines/energy/pipeline.d.ts +0 -27
  854. package/src/inference/pipelines/energy/pipeline.js +0 -686
  855. package/src/inference/pipelines/energy/quintel.d.ts +0 -92
  856. package/src/inference/pipelines/energy/quintel.js +0 -218
  857. package/src/inference/pipelines/energy/types.d.ts +0 -63
  858. package/src/inference/pipelines/energy/types.js +0 -1
  859. package/src/inference/pipelines/energy-head/index.d.ts +0 -6
  860. package/src/inference/pipelines/energy-head/index.js +0 -6
  861. package/src/inference/pipelines/energy-head/row-head-pipeline.d.ts +0 -103
  862. package/src/inference/pipelines/energy-head/row-head-pipeline.js +0 -491
  863. package/src/inference/pipelines/factory.d.ts +0 -10
  864. package/src/inference/pipelines/factory.js +0 -6
  865. package/src/inference/pipelines/index.d.ts +0 -22
  866. package/src/inference/pipelines/index.js +0 -19
  867. package/src/inference/pipelines/registry.d.ts +0 -15
  868. package/src/inference/pipelines/registry.js +0 -23
  869. package/src/inference/pipelines/rng.d.ts +0 -2
  870. package/src/inference/pipelines/rng.js +0 -17
  871. package/src/inference/pipelines/structured/index.d.ts +0 -8
  872. package/src/inference/pipelines/structured/index.js +0 -8
  873. package/src/inference/pipelines/structured/json-head-pipeline.d.ts +0 -58
  874. package/src/inference/pipelines/structured/json-head-pipeline.js +0 -196
  875. package/src/inference/pipelines/text/attention/index.d.ts +0 -24
  876. package/src/inference/pipelines/text/attention/index.js +0 -17
  877. package/src/inference/pipelines/text/attention/output-projection.d.ts +0 -12
  878. package/src/inference/pipelines/text/attention/output-projection.js +0 -8
  879. package/src/inference/pipelines/text/attention/projections.d.ts +0 -110
  880. package/src/inference/pipelines/text/attention/projections.js +0 -515
  881. package/src/inference/pipelines/text/attention/record.d.ts +0 -36
  882. package/src/inference/pipelines/text/attention/record.js +0 -685
  883. package/src/inference/pipelines/text/attention/run.d.ts +0 -38
  884. package/src/inference/pipelines/text/attention/run.js +0 -933
  885. package/src/inference/pipelines/text/attention/types.d.ts +0 -98
  886. package/src/inference/pipelines/text/attention/types.js +0 -67
  887. package/src/inference/pipelines/text/attention.d.ts +0 -23
  888. package/src/inference/pipelines/text/attention.js +0 -12
  889. package/src/inference/pipelines/text/bdpa-steamroller.d.ts +0 -22
  890. package/src/inference/pipelines/text/bdpa-steamroller.js +0 -158
  891. package/src/inference/pipelines/text/buffer-types.d.ts +0 -7
  892. package/src/inference/pipelines/text/buffer-types.js +0 -4
  893. package/src/inference/pipelines/text/chat-format.d.ts +0 -46
  894. package/src/inference/pipelines/text/chat-format.js +0 -390
  895. package/src/inference/pipelines/text/config.d.ts +0 -244
  896. package/src/inference/pipelines/text/config.js +0 -703
  897. package/src/inference/pipelines/text/debug-utils/config.d.ts +0 -144
  898. package/src/inference/pipelines/text/debug-utils/config.js +0 -156
  899. package/src/inference/pipelines/text/debug-utils/index.d.ts +0 -53
  900. package/src/inference/pipelines/text/debug-utils/index.js +0 -44
  901. package/src/inference/pipelines/text/debug-utils/logging.d.ts +0 -106
  902. package/src/inference/pipelines/text/debug-utils/logging.js +0 -152
  903. package/src/inference/pipelines/text/debug-utils/tensor.d.ts +0 -119
  904. package/src/inference/pipelines/text/debug-utils/tensor.js +0 -268
  905. package/src/inference/pipelines/text/debug-utils/utils.d.ts +0 -77
  906. package/src/inference/pipelines/text/debug-utils/utils.js +0 -139
  907. package/src/inference/pipelines/text/debug-utils.d.ts +0 -42
  908. package/src/inference/pipelines/text/debug-utils.js +0 -34
  909. package/src/inference/pipelines/text/embed.d.ts +0 -67
  910. package/src/inference/pipelines/text/embed.js +0 -455
  911. package/src/inference/pipelines/text/execution-plan.d.ts +0 -116
  912. package/src/inference/pipelines/text/execution-plan.js +0 -329
  913. package/src/inference/pipelines/text/execution-v0-contract-helpers.d.ts +0 -59
  914. package/src/inference/pipelines/text/execution-v0-contract-helpers.js +0 -937
  915. package/src/inference/pipelines/text/execution-v0-runtime-builders.d.ts +0 -15
  916. package/src/inference/pipelines/text/execution-v0-runtime-builders.js +0 -279
  917. package/src/inference/pipelines/text/execution-v0.d.ts +0 -66
  918. package/src/inference/pipelines/text/execution-v0.js +0 -255
  919. package/src/inference/pipelines/text/ffn/dense.d.ts +0 -40
  920. package/src/inference/pipelines/text/ffn/dense.js +0 -759
  921. package/src/inference/pipelines/text/ffn/index.d.ts +0 -23
  922. package/src/inference/pipelines/text/ffn/index.js +0 -16
  923. package/src/inference/pipelines/text/ffn/moe.d.ts +0 -21
  924. package/src/inference/pipelines/text/ffn/moe.js +0 -49
  925. package/src/inference/pipelines/text/ffn/sandwich.d.ts +0 -25
  926. package/src/inference/pipelines/text/ffn/sandwich.js +0 -196
  927. package/src/inference/pipelines/text/ffn/standard.d.ts +0 -23
  928. package/src/inference/pipelines/text/ffn/standard.js +0 -87
  929. package/src/inference/pipelines/text/ffn/types.d.ts +0 -30
  930. package/src/inference/pipelines/text/ffn/types.js +0 -25
  931. package/src/inference/pipelines/text/ffn.d.ts +0 -31
  932. package/src/inference/pipelines/text/ffn.js +0 -18
  933. package/src/inference/pipelines/text/finiteness-guard-status.d.ts +0 -11
  934. package/src/inference/pipelines/text/finiteness-guard-status.js +0 -21
  935. package/src/inference/pipelines/text/finiteness-policy.d.ts +0 -35
  936. package/src/inference/pipelines/text/finiteness-policy.js +0 -45
  937. package/src/inference/pipelines/text/generator-helpers.d.ts +0 -34
  938. package/src/inference/pipelines/text/generator-helpers.js +0 -175
  939. package/src/inference/pipelines/text/generator-runtime.d.ts +0 -93
  940. package/src/inference/pipelines/text/generator-runtime.js +0 -378
  941. package/src/inference/pipelines/text/generator-steps.d.ts +0 -127
  942. package/src/inference/pipelines/text/generator-steps.js +0 -1197
  943. package/src/inference/pipelines/text/generator.d.ts +0 -41
  944. package/src/inference/pipelines/text/generator.js +0 -1361
  945. package/src/inference/pipelines/text/index.d.ts +0 -5
  946. package/src/inference/pipelines/text/index.js +0 -6
  947. package/src/inference/pipelines/text/init.d.ts +0 -312
  948. package/src/inference/pipelines/text/init.js +0 -1112
  949. package/src/inference/pipelines/text/kernel-path-auto-select.d.ts +0 -12
  950. package/src/inference/pipelines/text/kernel-path-auto-select.js +0 -92
  951. package/src/inference/pipelines/text/kernel-trace.d.ts +0 -152
  952. package/src/inference/pipelines/text/kernel-trace.js +0 -330
  953. package/src/inference/pipelines/text/layer-plan.d.ts +0 -65
  954. package/src/inference/pipelines/text/layer-plan.js +0 -249
  955. package/src/inference/pipelines/text/layer.d.ts +0 -56
  956. package/src/inference/pipelines/text/layer.js +0 -922
  957. package/src/inference/pipelines/text/linear-attention.d.ts +0 -109
  958. package/src/inference/pipelines/text/linear-attention.js +0 -907
  959. package/src/inference/pipelines/text/logits/cpu.d.ts +0 -81
  960. package/src/inference/pipelines/text/logits/cpu.js +0 -91
  961. package/src/inference/pipelines/text/logits/gpu.d.ts +0 -113
  962. package/src/inference/pipelines/text/logits/gpu.js +0 -411
  963. package/src/inference/pipelines/text/logits/index.d.ts +0 -62
  964. package/src/inference/pipelines/text/logits/index.js +0 -306
  965. package/src/inference/pipelines/text/logits/types.d.ts +0 -46
  966. package/src/inference/pipelines/text/logits/types.js +0 -4
  967. package/src/inference/pipelines/text/logits/utils.d.ts +0 -56
  968. package/src/inference/pipelines/text/logits/utils.js +0 -68
  969. package/src/inference/pipelines/text/logits.d.ts +0 -27
  970. package/src/inference/pipelines/text/logits.js +0 -16
  971. package/src/inference/pipelines/text/lora-apply.d.ts +0 -28
  972. package/src/inference/pipelines/text/lora-apply.js +0 -76
  973. package/src/inference/pipelines/text/lora-types.d.ts +0 -39
  974. package/src/inference/pipelines/text/lora-types.js +0 -18
  975. package/src/inference/pipelines/text/lora.d.ts +0 -18
  976. package/src/inference/pipelines/text/lora.js +0 -12
  977. package/src/inference/pipelines/text/model-load.d.ts +0 -58
  978. package/src/inference/pipelines/text/model-load.js +0 -739
  979. package/src/inference/pipelines/text/moe-cache.d.ts +0 -32
  980. package/src/inference/pipelines/text/moe-cache.js +0 -108
  981. package/src/inference/pipelines/text/moe-cpu-gptoss.d.ts +0 -9
  982. package/src/inference/pipelines/text/moe-cpu-gptoss.js +0 -115
  983. package/src/inference/pipelines/text/moe-cpu.d.ts +0 -13
  984. package/src/inference/pipelines/text/moe-cpu.js +0 -120
  985. package/src/inference/pipelines/text/moe-gpu.d.ts +0 -13
  986. package/src/inference/pipelines/text/moe-gpu.js +0 -635
  987. package/src/inference/pipelines/text/moe-helpers.d.ts +0 -12
  988. package/src/inference/pipelines/text/moe-helpers.js +0 -21
  989. package/src/inference/pipelines/text/moe-impl.d.ts +0 -117
  990. package/src/inference/pipelines/text/moe-impl.js +0 -9
  991. package/src/inference/pipelines/text/moe-shape-validator.d.ts +0 -31
  992. package/src/inference/pipelines/text/moe-shape-validator.js +0 -78
  993. package/src/inference/pipelines/text/ops.d.ts +0 -167
  994. package/src/inference/pipelines/text/ops.js +0 -367
  995. package/src/inference/pipelines/text/probes.d.ts +0 -31
  996. package/src/inference/pipelines/text/probes.js +0 -170
  997. package/src/inference/pipelines/text/sampling.d.ts +0 -54
  998. package/src/inference/pipelines/text/sampling.js +0 -249
  999. package/src/inference/pipelines/text/state.d.ts +0 -112
  1000. package/src/inference/pipelines/text/state.js +0 -152
  1001. package/src/inference/pipelines/text/types.d.ts +0 -627
  1002. package/src/inference/pipelines/text/types.js +0 -4
  1003. package/src/inference/pipelines/text/weights.d.ts +0 -110
  1004. package/src/inference/pipelines/text/weights.js +0 -173
  1005. package/src/inference/pipelines/text.d.ts +0 -157
  1006. package/src/inference/pipelines/text.js +0 -608
  1007. package/src/inference/speculative.d.ts +0 -239
  1008. package/src/inference/speculative.js +0 -402
  1009. package/src/inference/test-harness.d.ts +0 -178
  1010. package/src/inference/test-harness.js +0 -359
  1011. package/src/inference/tokenizer.d.ts +0 -72
  1012. package/src/inference/tokenizer.js +0 -239
  1013. package/src/inference/tokenizers/base.d.ts +0 -39
  1014. package/src/inference/tokenizers/base.js +0 -69
  1015. package/src/inference/tokenizers/bpe.d.ts +0 -27
  1016. package/src/inference/tokenizers/bpe.js +0 -180
  1017. package/src/inference/tokenizers/bundled.d.ts +0 -63
  1018. package/src/inference/tokenizers/bundled.js +0 -1009
  1019. package/src/inference/tokenizers/sentencepiece.d.ts +0 -28
  1020. package/src/inference/tokenizers/sentencepiece.js +0 -401
  1021. package/src/inference/tokenizers/types.d.ts +0 -166
  1022. package/src/inference/tokenizers/types.js +0 -7
  1023. package/src/loader/doppler-loader.d.ts +0 -134
  1024. package/src/loader/doppler-loader.js +0 -1052
  1025. package/src/loader/dtype-utils.d.ts +0 -40
  1026. package/src/loader/dtype-utils.js +0 -61
  1027. package/src/loader/embedding-loader.d.ts +0 -56
  1028. package/src/loader/embedding-loader.js +0 -211
  1029. package/src/loader/experts/expert-cache.d.ts +0 -156
  1030. package/src/loader/experts/expert-cache.js +0 -382
  1031. package/src/loader/experts/expert-loader.d.ts +0 -108
  1032. package/src/loader/experts/expert-loader.js +0 -388
  1033. package/src/loader/final-weights-loader.d.ts +0 -68
  1034. package/src/loader/final-weights-loader.js +0 -268
  1035. package/src/loader/index.d.ts +0 -150
  1036. package/src/loader/index.js +0 -124
  1037. package/src/loader/layer-loader.d.ts +0 -63
  1038. package/src/loader/layer-loader.js +0 -418
  1039. package/src/loader/loader-state.d.ts +0 -51
  1040. package/src/loader/loader-state.js +0 -142
  1041. package/src/loader/loader-types.d.ts +0 -236
  1042. package/src/loader/loader-types.js +0 -4
  1043. package/src/loader/manifest-config.d.ts +0 -97
  1044. package/src/loader/manifest-config.js +0 -132
  1045. package/src/loader/memory-monitor.d.ts +0 -112
  1046. package/src/loader/memory-monitor.js +0 -284
  1047. package/src/loader/multi-model-loader.d.ts +0 -51
  1048. package/src/loader/multi-model-loader.js +0 -133
  1049. package/src/loader/quantization-constants.d.ts +0 -23
  1050. package/src/loader/quantization-constants.js +0 -14
  1051. package/src/loader/shard-cache.d.ts +0 -60
  1052. package/src/loader/shard-cache.js +0 -638
  1053. package/src/loader/shard-resolver.d.ts +0 -12
  1054. package/src/loader/shard-resolver.js +0 -105
  1055. package/src/loader/tensors/tensor-loader.d.ts +0 -154
  1056. package/src/loader/tensors/tensor-loader.js +0 -497
  1057. package/src/loader/tensors/tensor-reader.d.ts +0 -22
  1058. package/src/loader/tensors/tensor-reader.js +0 -113
  1059. package/src/loader/tensors/tensor-role.d.ts +0 -7
  1060. package/src/loader/tensors/tensor-role.js +0 -12
  1061. package/src/loader/weight-downcast.d.ts +0 -62
  1062. package/src/loader/weight-downcast.js +0 -213
  1063. package/src/loader/weights.d.ts +0 -22
  1064. package/src/loader/weights.js +0 -4
  1065. package/src/memory/address-table.d.ts +0 -104
  1066. package/src/memory/address-table.js +0 -114
  1067. package/src/memory/buffer-pool.d.ts +0 -204
  1068. package/src/memory/buffer-pool.js +0 -821
  1069. package/src/memory/capability.d.ts +0 -49
  1070. package/src/memory/capability.js +0 -95
  1071. package/src/memory/heap-manager.d.ts +0 -104
  1072. package/src/memory/heap-manager.js +0 -264
  1073. package/src/memory/unified-detect.d.ts +0 -59
  1074. package/src/memory/unified-detect.js +0 -192
  1075. package/src/rules/converter/execution.rules.json +0 -20
  1076. package/src/rules/converter/tensor-roles.rules.json +0 -13
  1077. package/src/rules/converter/tokenizer.rules.json +0 -7
  1078. package/src/rules/execution-rules-contract-check.d.ts +0 -17
  1079. package/src/rules/execution-rules-contract-check.js +0 -245
  1080. package/src/rules/inference/attention.rules.json +0 -54
  1081. package/src/rules/inference/config.rules.json +0 -58
  1082. package/src/rules/inference/dtype.rules.json +0 -99
  1083. package/src/rules/inference/execution.rules.json +0 -45
  1084. package/src/rules/inference/ffn.rules.json +0 -35
  1085. package/src/rules/inference/kernel-path.rules.json +0 -92
  1086. package/src/rules/inference/layer-pattern.rules.json +0 -16
  1087. package/src/rules/inference/layer.rules.json +0 -7
  1088. package/src/rules/inference/moe.rules.json +0 -48
  1089. package/src/rules/kernels/attention.rules.json +0 -61
  1090. package/src/rules/kernels/conv2d.rules.json +0 -6
  1091. package/src/rules/kernels/depthwise-conv2d.rules.json +0 -6
  1092. package/src/rules/kernels/dequant.rules.json +0 -58
  1093. package/src/rules/kernels/energy.rules.json +0 -22
  1094. package/src/rules/kernels/fused-ffn.rules.json +0 -13
  1095. package/src/rules/kernels/fused-matmul-residual.rules.json +0 -6
  1096. package/src/rules/kernels/fused-matmul-rmsnorm.rules.json +0 -8
  1097. package/src/rules/kernels/gather.rules.json +0 -12
  1098. package/src/rules/kernels/gelu.rules.json +0 -11
  1099. package/src/rules/kernels/grouped-pointwise-conv2d.rules.json +0 -6
  1100. package/src/rules/kernels/groupnorm.rules.json +0 -10
  1101. package/src/rules/kernels/kernel-validator.d.ts +0 -24
  1102. package/src/rules/kernels/kernel-validator.js +0 -160
  1103. package/src/rules/kernels/kv_quantize.rules.json +0 -7
  1104. package/src/rules/kernels/layernorm.rules.json +0 -6
  1105. package/src/rules/kernels/matmul.rules.json +0 -60
  1106. package/src/rules/kernels/modulate.rules.json +0 -6
  1107. package/src/rules/kernels/moe.rules.gptoss.json +0 -105
  1108. package/src/rules/kernels/moe.rules.json +0 -11
  1109. package/src/rules/kernels/pixel_shuffle.rules.json +0 -6
  1110. package/src/rules/kernels/relu.rules.json +0 -6
  1111. package/src/rules/kernels/repeat-channels.rules.json +0 -6
  1112. package/src/rules/kernels/residual.rules.json +0 -12
  1113. package/src/rules/kernels/rmsnorm.rules.json +0 -11
  1114. package/src/rules/kernels/rope.rules.json +0 -6
  1115. package/src/rules/kernels/sample.rules.json +0 -6
  1116. package/src/rules/kernels/sana-linear-attention.rules.json +0 -6
  1117. package/src/rules/kernels/scale.rules.json +0 -6
  1118. package/src/rules/kernels/silu.rules.json +0 -21
  1119. package/src/rules/kernels/softmax.rules.json +0 -23
  1120. package/src/rules/kernels/split-qg.rules.json +0 -6
  1121. package/src/rules/kernels/split-qkv.rules.json +0 -6
  1122. package/src/rules/kernels/upsample2d.rules.json +0 -6
  1123. package/src/rules/layer-pattern-contract-check.d.ts +0 -17
  1124. package/src/rules/layer-pattern-contract-check.js +0 -231
  1125. package/src/rules/loader/tensor-loader.rules.json +0 -15
  1126. package/src/rules/loader/weights.rules.json +0 -41
  1127. package/src/rules/rule-registry.d.ts +0 -76
  1128. package/src/rules/rule-registry.js +0 -241
  1129. package/src/rules/tooling/command-runtime.rules.json +0 -56
  1130. package/src/storage/backends/idb-store.d.ts +0 -52
  1131. package/src/storage/backends/idb-store.js +0 -590
  1132. package/src/storage/backends/memory-store.d.ts +0 -36
  1133. package/src/storage/backends/memory-store.js +0 -242
  1134. package/src/storage/backends/opfs-store.d.ts +0 -41
  1135. package/src/storage/backends/opfs-store.js +0 -473
  1136. package/src/storage/blake3.d.ts +0 -17
  1137. package/src/storage/blake3.js +0 -269
  1138. package/src/storage/download-types.d.ts +0 -157
  1139. package/src/storage/download-types.js +0 -48
  1140. package/src/storage/downloader.d.ts +0 -103
  1141. package/src/storage/downloader.js +0 -1121
  1142. package/src/storage/emulated-vram.d.ts +0 -264
  1143. package/src/storage/emulated-vram.js +0 -576
  1144. package/src/storage/export.d.ts +0 -20
  1145. package/src/storage/export.js +0 -159
  1146. package/src/storage/index.d.ts +0 -256
  1147. package/src/storage/index.js +0 -188
  1148. package/src/storage/inventory.d.ts +0 -26
  1149. package/src/storage/inventory.js +0 -218
  1150. package/src/storage/preflight.d.ts +0 -144
  1151. package/src/storage/preflight.js +0 -316
  1152. package/src/storage/quickstart-downloader.d.ts +0 -154
  1153. package/src/storage/quickstart-downloader.js +0 -271
  1154. package/src/storage/quota.d.ts +0 -150
  1155. package/src/storage/quota.js +0 -304
  1156. package/src/storage/registry.d.ts +0 -28
  1157. package/src/storage/registry.js +0 -131
  1158. package/src/storage/reports.d.ts +0 -20
  1159. package/src/storage/reports.js +0 -94
  1160. package/src/storage/shard-manager.d.ts +0 -151
  1161. package/src/storage/shard-manager.js +0 -850
  1162. package/src/storage/source-artifact-store.d.ts +0 -52
  1163. package/src/storage/source-artifact-store.js +0 -234
  1164. package/src/sw.d.ts +0 -1
  1165. package/src/sw.js +0 -187
  1166. package/src/tooling/browser-command-runner.d.ts +0 -28
  1167. package/src/tooling/browser-command-runner.js +0 -82
  1168. package/src/tooling/command-api-constants.d.ts +0 -9
  1169. package/src/tooling/command-api-constants.js +0 -9
  1170. package/src/tooling/command-api-family-normalizers.d.ts +0 -9
  1171. package/src/tooling/command-api-family-normalizers.js +0 -343
  1172. package/src/tooling/command-api-helpers.d.ts +0 -25
  1173. package/src/tooling/command-api-helpers.js +0 -262
  1174. package/src/tooling/command-api.d.ts +0 -173
  1175. package/src/tooling/command-api.js +0 -76
  1176. package/src/tooling/command-envelope.d.ts +0 -81
  1177. package/src/tooling/command-envelope.js +0 -198
  1178. package/src/tooling/command-runner-shared.d.ts +0 -73
  1179. package/src/tooling/command-runner-shared.js +0 -180
  1180. package/src/tooling/command-runner.html +0 -45
  1181. package/src/tooling/conversion-config-materializer.d.ts +0 -24
  1182. package/src/tooling/conversion-config-materializer.js +0 -97
  1183. package/src/tooling/lean-execution-contract-runner.d.ts +0 -43
  1184. package/src/tooling/lean-execution-contract-runner.js +0 -158
  1185. package/src/tooling/lean-execution-contract.d.ts +0 -16
  1186. package/src/tooling/lean-execution-contract.js +0 -228
  1187. package/src/tooling/node-browser-command-runner.d.ts +0 -34
  1188. package/src/tooling/node-browser-command-runner.js +0 -813
  1189. package/src/tooling/node-command-runner.d.ts +0 -36
  1190. package/src/tooling/node-command-runner.js +0 -168
  1191. package/src/tooling/node-convert-worker-pool.d.ts +0 -16
  1192. package/src/tooling/node-convert-worker-pool.js +0 -186
  1193. package/src/tooling/node-convert-worker.d.ts +0 -1
  1194. package/src/tooling/node-convert-worker.js +0 -60
  1195. package/src/tooling/node-convert.d.ts +0 -54
  1196. package/src/tooling/node-converter.d.ts +0 -1
  1197. package/src/tooling/node-converter.js +0 -1315
  1198. package/src/tooling/node-file-fetch.d.ts +0 -1
  1199. package/src/tooling/node-file-fetch.js +0 -38
  1200. package/src/tooling/node-source-runtime.d.ts +0 -19
  1201. package/src/tooling/node-source-runtime.js +0 -586
  1202. package/src/tooling/node-webgpu.d.ts +0 -6
  1203. package/src/tooling/node-webgpu.js +0 -267
  1204. package/src/tooling/opfs-cache.d.ts +0 -11
  1205. package/src/tooling/opfs-cache.js +0 -191
  1206. package/src/tooling/runtime-input-composition.d.ts +0 -38
  1207. package/src/tooling/runtime-input-composition.js +0 -86
  1208. package/src/tooling/source-runtime-bundle.d.ts +0 -137
  1209. package/src/tooling/source-runtime-bundle.js +0 -711
  1210. package/src/tooling/source-runtime-materializer.d.ts +0 -6
  1211. package/src/tooling/source-runtime-materializer.js +0 -93
  1212. package/src/tooling-exports.browser.d.ts +0 -7
  1213. package/src/tooling-exports.browser.js +0 -2
  1214. package/src/tooling-exports.d.ts +0 -22
  1215. package/src/tooling-exports.js +0 -7
  1216. package/src/tooling-exports.shared.d.ts +0 -105
  1217. package/src/tooling-exports.shared.js +0 -92
  1218. package/src/training/README.md +0 -153
  1219. package/src/training/artifacts.d.ts +0 -160
  1220. package/src/training/artifacts.js +0 -896
  1221. package/src/training/attention-backward.d.ts +0 -30
  1222. package/src/training/attention-backward.js +0 -232
  1223. package/src/training/attention-forward.d.ts +0 -22
  1224. package/src/training/attention-forward.js +0 -82
  1225. package/src/training/autograd.d.ts +0 -51
  1226. package/src/training/autograd.js +0 -408
  1227. package/src/training/checkpoint-watch.d.ts +0 -8
  1228. package/src/training/checkpoint-watch.js +0 -139
  1229. package/src/training/checkpoint.d.ts +0 -36
  1230. package/src/training/checkpoint.js +0 -277
  1231. package/src/training/clip.d.ts +0 -9
  1232. package/src/training/clip.js +0 -55
  1233. package/src/training/dataloader.d.ts +0 -8
  1234. package/src/training/dataloader.js +0 -44
  1235. package/src/training/datasets/index.d.ts +0 -12
  1236. package/src/training/datasets/index.js +0 -6
  1237. package/src/training/datasets/jsonl.d.ts +0 -11
  1238. package/src/training/datasets/jsonl.js +0 -50
  1239. package/src/training/datasets/reploid.d.ts +0 -3
  1240. package/src/training/datasets/reploid.js +0 -36
  1241. package/src/training/datasets/text-pairs.d.ts +0 -21
  1242. package/src/training/datasets/text-pairs.js +0 -42
  1243. package/src/training/datasets/token-batch.d.ts +0 -21
  1244. package/src/training/datasets/token-batch.js +0 -52
  1245. package/src/training/datasets/translation-pairs.d.ts +0 -34
  1246. package/src/training/datasets/translation-pairs.js +0 -49
  1247. package/src/training/distillation/artifacts.d.ts +0 -71
  1248. package/src/training/distillation/artifacts.js +0 -132
  1249. package/src/training/distillation/checkpoint-watch.d.ts +0 -10
  1250. package/src/training/distillation/checkpoint-watch.js +0 -58
  1251. package/src/training/distillation/dataset.d.ts +0 -59
  1252. package/src/training/distillation/dataset.js +0 -337
  1253. package/src/training/distillation/eval.d.ts +0 -34
  1254. package/src/training/distillation/eval.js +0 -310
  1255. package/src/training/distillation/index.d.ts +0 -29
  1256. package/src/training/distillation/index.js +0 -29
  1257. package/src/training/distillation/runtime.d.ts +0 -20
  1258. package/src/training/distillation/runtime.js +0 -121
  1259. package/src/training/distillation/scoreboard.d.ts +0 -6
  1260. package/src/training/distillation/scoreboard.js +0 -8
  1261. package/src/training/distillation/stage-a.d.ts +0 -45
  1262. package/src/training/distillation/stage-a.js +0 -338
  1263. package/src/training/distillation/stage-b.d.ts +0 -24
  1264. package/src/training/distillation/stage-b.js +0 -20
  1265. package/src/training/distillation/student-fixture.d.ts +0 -22
  1266. package/src/training/distillation/student-fixture.js +0 -846
  1267. package/src/training/distillation/suite-data.d.ts +0 -45
  1268. package/src/training/distillation/suite-data.js +0 -189
  1269. package/src/training/export.d.ts +0 -32
  1270. package/src/training/export.js +0 -112
  1271. package/src/training/index.d.ts +0 -62
  1272. package/src/training/index.js +0 -51
  1273. package/src/training/lora-pipeline.d.ts +0 -40
  1274. package/src/training/lora-pipeline.js +0 -793
  1275. package/src/training/lora.d.ts +0 -19
  1276. package/src/training/lora.js +0 -71
  1277. package/src/training/loss-scaling.d.ts +0 -21
  1278. package/src/training/loss-scaling.js +0 -80
  1279. package/src/training/loss.d.ts +0 -10
  1280. package/src/training/loss.js +0 -40
  1281. package/src/training/objectives/base.d.ts +0 -58
  1282. package/src/training/objectives/base.js +0 -38
  1283. package/src/training/objectives/cross_entropy.d.ts +0 -18
  1284. package/src/training/objectives/cross_entropy.js +0 -34
  1285. package/src/training/objectives/distill_kd.d.ts +0 -16
  1286. package/src/training/objectives/distill_kd.js +0 -365
  1287. package/src/training/objectives/distill_triplet.d.ts +0 -16
  1288. package/src/training/objectives/distill_triplet.js +0 -408
  1289. package/src/training/objectives/index.d.ts +0 -12
  1290. package/src/training/objectives/index.js +0 -6
  1291. package/src/training/objectives/ul_stage1_joint.d.ts +0 -16
  1292. package/src/training/objectives/ul_stage1_joint.js +0 -188
  1293. package/src/training/objectives/ul_stage2_base.d.ts +0 -16
  1294. package/src/training/objectives/ul_stage2_base.js +0 -218
  1295. package/src/training/operator-artifacts.d.ts +0 -62
  1296. package/src/training/operator-artifacts.js +0 -140
  1297. package/src/training/operator-command.d.ts +0 -5
  1298. package/src/training/operator-command.js +0 -455
  1299. package/src/training/operator-eval.d.ts +0 -48
  1300. package/src/training/operator-eval.js +0 -230
  1301. package/src/training/operator-scoreboard.d.ts +0 -5
  1302. package/src/training/operator-scoreboard.js +0 -44
  1303. package/src/training/optimizer.d.ts +0 -22
  1304. package/src/training/optimizer.js +0 -127
  1305. package/src/training/runner.d.ts +0 -248
  1306. package/src/training/runner.js +0 -1220
  1307. package/src/training/suite.d.ts +0 -299
  1308. package/src/training/suite.js +0 -2196
  1309. package/src/training/tensor-factory.d.ts +0 -9
  1310. package/src/training/tensor-factory.js +0 -13
  1311. package/src/training/trainer.d.ts +0 -89
  1312. package/src/training/trainer.js +0 -299
  1313. package/src/training/ul_dataset.d.ts +0 -47
  1314. package/src/training/ul_dataset.js +0 -151
  1315. package/src/training/ul_schedule.d.ts +0 -6
  1316. package/src/training/ul_schedule.js +0 -29
  1317. package/src/training/workloads.d.ts +0 -164
  1318. package/src/training/workloads.js +0 -530
  1319. package/src/types/chrome.d.ts +0 -36
  1320. package/src/types/chrome.js +0 -1
  1321. package/src/types/gpu.d.ts +0 -185
  1322. package/src/types/gpu.js +0 -5
  1323. package/src/types/index.d.ts +0 -3
  1324. package/src/types/index.js +0 -3
  1325. package/src/types/inference.d.ts +0 -197
  1326. package/src/types/inference.js +0 -5
  1327. package/src/types/model.d.ts +0 -130
  1328. package/src/types/model.js +0 -5
  1329. package/src/utils/index.d.ts +0 -7
  1330. package/src/utils/index.js +0 -7
  1331. package/src/utils/load-json.d.ts +0 -5
  1332. package/src/utils/load-json.js +0 -23
  1333. package/src/utils/plain-object.d.ts +0 -1
  1334. package/src/utils/plain-object.js +0 -3
  1335. package/src/utils/sha256.d.ts +0 -4
  1336. package/src/utils/sha256.js +0 -135
  1337. package/src/version.d.ts +0 -2
  1338. package/src/version.js +0 -2
  1339. package/tools/convert-safetensors-node.js +0 -233
  1340. 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
- }