@atomic-chat/core 0.13.6 → 0.17.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 (342) hide show
  1. package/README.md +1 -1
  2. package/dist/backend/advisor/advisor.d.ts +8 -7
  3. package/dist/backend/advisor/advisor.js +17 -25
  4. package/dist/backend/advisor/advisor.js.map +1 -1
  5. package/dist/backend/catalog/index.d.ts +4 -2
  6. package/dist/backend/catalog/index.js +4 -2
  7. package/dist/backend/catalog/index.js.map +1 -1
  8. package/dist/backend/catalog/manifest.d.ts +5 -51
  9. package/dist/backend/catalog/manifest.js +5 -93
  10. package/dist/backend/catalog/manifest.js.map +1 -1
  11. package/dist/backend/catalog/upstream-releases-baseline.d.ts +2 -0
  12. package/dist/backend/catalog/upstream-releases-baseline.js +12 -0
  13. package/dist/backend/catalog/upstream-releases-baseline.js.map +1 -0
  14. package/dist/backend/catalog/upstream-releases-baseline.json +101 -0
  15. package/dist/backend/catalog/upstream-releases-catalog.d.ts +54 -0
  16. package/dist/backend/catalog/upstream-releases-catalog.js +148 -0
  17. package/dist/backend/catalog/upstream-releases-catalog.js.map +1 -0
  18. package/dist/backend/catalog/upstream-releases.d.ts +75 -0
  19. package/dist/backend/catalog/upstream-releases.js +155 -0
  20. package/dist/backend/catalog/upstream-releases.js.map +1 -0
  21. package/dist/backend/install/service.d.ts +7 -4
  22. package/dist/backend/install/service.js +4 -4
  23. package/dist/backend/install/service.js.map +1 -1
  24. package/dist/cli/commands/serve.js +10 -28
  25. package/dist/cli/commands/serve.js.map +1 -1
  26. package/dist/cli/main.d.ts +1 -1
  27. package/dist/cli/main.js +0 -1
  28. package/dist/cli/main.js.map +1 -1
  29. package/dist/client/control-client.d.ts +7 -19
  30. package/dist/client/control-client.js +9 -29
  31. package/dist/client/control-client.js.map +1 -1
  32. package/dist/cloud/registry.d.ts +14 -1
  33. package/dist/cloud/registry.js +73 -2
  34. package/dist/cloud/registry.js.map +1 -1
  35. package/dist/config/paths.d.ts +4 -3
  36. package/dist/config/paths.js +15 -14
  37. package/dist/config/paths.js.map +1 -1
  38. package/dist/contracts/diffusion.d.ts +45 -18
  39. package/dist/contracts/diffusion.js +1 -1
  40. package/dist/contracts/diffusion.js.map +1 -1
  41. package/dist/contracts/engines.d.ts +1 -1
  42. package/dist/contracts/engines.js +2 -0
  43. package/dist/contracts/engines.js.map +1 -1
  44. package/dist/contracts/errors.d.ts +1 -3
  45. package/dist/contracts/errors.js +16 -0
  46. package/dist/contracts/errors.js.map +1 -1
  47. package/dist/contracts/events.d.ts +11 -6
  48. package/dist/contracts/index.d.ts +1 -1
  49. package/dist/contracts/index.js +1 -1
  50. package/dist/contracts/index.js.map +1 -1
  51. package/dist/contracts/media.d.ts +186 -0
  52. package/dist/contracts/media.js +55 -0
  53. package/dist/contracts/media.js.map +1 -0
  54. package/dist/contracts/session.d.ts +10 -1
  55. package/dist/contracts/session.js +10 -0
  56. package/dist/contracts/session.js.map +1 -1
  57. package/dist/contracts/settings.d.ts +36 -1
  58. package/dist/contracts/settings.js.map +1 -1
  59. package/dist/core/atomic-core.d.ts +5 -5
  60. package/dist/core/atomic-core.js.map +1 -1
  61. package/dist/core/create.js +43 -59
  62. package/dist/core/create.js.map +1 -1
  63. package/dist/core/managed-engines.js +2 -0
  64. package/dist/core/managed-engines.js.map +1 -1
  65. package/dist/core/prism.d.ts +21 -6
  66. package/dist/core/prism.js +44 -0
  67. package/dist/core/prism.js.map +1 -1
  68. package/dist/core/types.d.ts +0 -5
  69. package/dist/core/types.js.map +1 -1
  70. package/dist/diffusion/gallery.d.ts +24 -3
  71. package/dist/diffusion/gallery.js +151 -21
  72. package/dist/diffusion/gallery.js.map +1 -1
  73. package/dist/diffusion/index.d.ts +3 -0
  74. package/dist/diffusion/index.js +3 -0
  75. package/dist/diffusion/index.js.map +1 -1
  76. package/dist/diffusion/jobs.d.ts +6 -1
  77. package/dist/diffusion/jobs.js +6 -1
  78. package/dist/diffusion/jobs.js.map +1 -1
  79. package/dist/diffusion/media-header.d.ts +22 -0
  80. package/dist/diffusion/media-header.js +149 -0
  81. package/dist/diffusion/media-header.js.map +1 -0
  82. package/dist/diffusion/parse.d.ts +3 -1
  83. package/dist/diffusion/parse.js +36 -0
  84. package/dist/diffusion/parse.js.map +1 -1
  85. package/dist/diffusion/recipe.d.ts +10 -1
  86. package/dist/diffusion/recipe.js +85 -21
  87. package/dist/diffusion/recipe.js.map +1 -1
  88. package/dist/diffusion/remote-job.d.ts +76 -0
  89. package/dist/diffusion/remote-job.js +643 -0
  90. package/dist/diffusion/remote-job.js.map +1 -0
  91. package/dist/diffusion/remote-store.d.ts +38 -0
  92. package/dist/diffusion/remote-store.js +91 -0
  93. package/dist/diffusion/remote-store.js.map +1 -0
  94. package/dist/diffusion/service.d.ts +9 -1
  95. package/dist/diffusion/service.js +49 -9
  96. package/dist/diffusion/service.js.map +1 -1
  97. package/dist/diffusion/state.d.ts +13 -1
  98. package/dist/diffusion/state.js +8 -0
  99. package/dist/diffusion/state.js.map +1 -1
  100. package/dist/diffusion/video-gallery.d.ts +11 -4
  101. package/dist/diffusion/video-gallery.js +62 -25
  102. package/dist/diffusion/video-gallery.js.map +1 -1
  103. package/dist/diffusion/video-history.js +4 -1
  104. package/dist/diffusion/video-history.js.map +1 -1
  105. package/dist/diffusion/video-recipe.js +58 -25
  106. package/dist/diffusion/video-recipe.js.map +1 -1
  107. package/dist/diffusion/wiring.d.ts +3 -0
  108. package/dist/diffusion/wiring.js +1 -0
  109. package/dist/diffusion/wiring.js.map +1 -1
  110. package/dist/downloads/downloader.d.ts +1 -18
  111. package/dist/downloads/downloader.js +1 -45
  112. package/dist/downloads/downloader.js.map +1 -1
  113. package/dist/media/adapters/a1111.d.ts +32 -0
  114. package/dist/media/adapters/a1111.js +207 -0
  115. package/dist/media/adapters/a1111.js.map +1 -0
  116. package/dist/media/adapters/aimlapi-videos.d.ts +34 -0
  117. package/dist/media/adapters/aimlapi-videos.js +172 -0
  118. package/dist/media/adapters/aimlapi-videos.js.map +1 -0
  119. package/dist/media/adapters/dashscope-image.d.ts +26 -0
  120. package/dist/media/adapters/dashscope-image.js +160 -0
  121. package/dist/media/adapters/dashscope-image.js.map +1 -0
  122. package/dist/media/adapters/dashscope-video.d.ts +47 -0
  123. package/dist/media/adapters/dashscope-video.js +251 -0
  124. package/dist/media/adapters/dashscope-video.js.map +1 -0
  125. package/dist/media/adapters/gemini-image.d.ts +27 -0
  126. package/dist/media/adapters/gemini-image.js +181 -0
  127. package/dist/media/adapters/gemini-image.js.map +1 -0
  128. package/dist/media/adapters/gemini-veo.d.ts +39 -0
  129. package/dist/media/adapters/gemini-veo.js +196 -0
  130. package/dist/media/adapters/gemini-veo.js.map +1 -0
  131. package/dist/media/adapters/hf-images.d.ts +85 -0
  132. package/dist/media/adapters/hf-images.js +439 -0
  133. package/dist/media/adapters/hf-images.js.map +1 -0
  134. package/dist/media/adapters/hf-videos.d.ts +44 -0
  135. package/dist/media/adapters/hf-videos.js +265 -0
  136. package/dist/media/adapters/hf-videos.js.map +1 -0
  137. package/dist/media/adapters/minimax-image.d.ts +26 -0
  138. package/dist/media/adapters/minimax-image.js +111 -0
  139. package/dist/media/adapters/minimax-image.js.map +1 -0
  140. package/dist/media/adapters/minimax-video-v2.d.ts +34 -0
  141. package/dist/media/adapters/minimax-video-v2.js +191 -0
  142. package/dist/media/adapters/minimax-video-v2.js.map +1 -0
  143. package/dist/media/adapters/minimax-video.d.ts +28 -0
  144. package/dist/media/adapters/minimax-video.js +155 -0
  145. package/dist/media/adapters/minimax-video.js.map +1 -0
  146. package/dist/media/adapters/mistral-agent-image.d.ts +33 -0
  147. package/dist/media/adapters/mistral-agent-image.js +108 -0
  148. package/dist/media/adapters/mistral-agent-image.js.map +1 -0
  149. package/dist/media/adapters/nvidia-genai.d.ts +28 -0
  150. package/dist/media/adapters/nvidia-genai.js +182 -0
  151. package/dist/media/adapters/nvidia-genai.js.map +1 -0
  152. package/dist/media/adapters/openai-images.d.ts +23 -0
  153. package/dist/media/adapters/openai-images.js +164 -0
  154. package/dist/media/adapters/openai-images.js.map +1 -0
  155. package/dist/media/adapters/openai-videos.d.ts +34 -0
  156. package/dist/media/adapters/openai-videos.js +175 -0
  157. package/dist/media/adapters/openai-videos.js.map +1 -0
  158. package/dist/media/adapters/openrouter-images.d.ts +25 -0
  159. package/dist/media/adapters/openrouter-images.js +161 -0
  160. package/dist/media/adapters/openrouter-images.js.map +1 -0
  161. package/dist/media/adapters/openrouter-videos.d.ts +43 -0
  162. package/dist/media/adapters/openrouter-videos.js +208 -0
  163. package/dist/media/adapters/openrouter-videos.js.map +1 -0
  164. package/dist/media/adapters/registry.d.ts +7 -0
  165. package/dist/media/adapters/registry.js +45 -0
  166. package/dist/media/adapters/registry.js.map +1 -0
  167. package/dist/media/adapters/types.d.ts +133 -0
  168. package/dist/media/adapters/types.js +15 -0
  169. package/dist/media/adapters/types.js.map +1 -0
  170. package/dist/media/adapters/xai-images.d.ts +19 -0
  171. package/dist/media/adapters/xai-images.js +83 -0
  172. package/dist/media/adapters/xai-images.js.map +1 -0
  173. package/dist/media/adapters/xai-videos.d.ts +29 -0
  174. package/dist/media/adapters/xai-videos.js +148 -0
  175. package/dist/media/adapters/xai-videos.js.map +1 -0
  176. package/dist/media/catalog-baseline.d.ts +2 -0
  177. package/dist/media/catalog-baseline.js +10 -0
  178. package/dist/media/catalog-baseline.js.map +1 -0
  179. package/dist/media/catalog-baseline.json +1819 -0
  180. package/dist/media/catalog-service.d.ts +42 -0
  181. package/dist/media/catalog-service.js +111 -0
  182. package/dist/media/catalog-service.js.map +1 -0
  183. package/dist/media/catalog.d.ts +50 -0
  184. package/dist/media/catalog.js +315 -0
  185. package/dist/media/catalog.js.map +1 -0
  186. package/dist/media/http.d.ts +125 -0
  187. package/dist/media/http.js +308 -0
  188. package/dist/media/http.js.map +1 -0
  189. package/dist/media/index.d.ts +14 -0
  190. package/dist/media/index.js +15 -0
  191. package/dist/media/index.js.map +1 -0
  192. package/dist/media/mask.d.ts +12 -0
  193. package/dist/media/mask.js +57 -0
  194. package/dist/media/mask.js.map +1 -0
  195. package/dist/media/service.d.ts +42 -0
  196. package/dist/media/service.js +144 -0
  197. package/dist/media/service.js.map +1 -0
  198. package/dist/models/hf.d.ts +3 -16
  199. package/dist/models/hf.js +4 -42
  200. package/dist/models/hf.js.map +1 -1
  201. package/dist/router/resolve.d.ts +15 -4
  202. package/dist/router/resolve.js +25 -3
  203. package/dist/router/resolve.js.map +1 -1
  204. package/dist/runtime/environment/linux-provisioner.js +7 -67
  205. package/dist/runtime/environment/linux-provisioner.js.map +1 -1
  206. package/dist/runtime/environment/runtime-removal-plan.d.ts +19 -0
  207. package/dist/runtime/environment/runtime-removal-plan.js +74 -0
  208. package/dist/runtime/environment/runtime-removal-plan.js.map +1 -0
  209. package/dist/runtime/environment/windows-provisioner.js +20 -4
  210. package/dist/runtime/environment/windows-provisioner.js.map +1 -1
  211. package/dist/runtime/managed-engines/spec.d.ts +2 -2
  212. package/dist/runtime/managed-engines/spec.js +6 -0
  213. package/dist/runtime/managed-engines/spec.js.map +1 -1
  214. package/dist/runtime/managed-models/compatibility.d.ts +10 -0
  215. package/dist/runtime/managed-models/compatibility.js +18 -0
  216. package/dist/runtime/managed-models/compatibility.js.map +1 -1
  217. package/dist/runtime/managed-text/request-rules.d.ts +9 -7
  218. package/dist/runtime/managed-text/request-rules.js +58 -2
  219. package/dist/runtime/managed-text/request-rules.js.map +1 -1
  220. package/dist/runtime/managed-text/setting-values.d.ts +9 -0
  221. package/dist/runtime/managed-text/setting-values.js +44 -0
  222. package/dist/runtime/managed-text/setting-values.js.map +1 -0
  223. package/dist/runtime/sglang/adapter.d.ts +50 -0
  224. package/dist/runtime/sglang/adapter.js +393 -0
  225. package/dist/runtime/sglang/adapter.js.map +1 -0
  226. package/dist/runtime/sglang/engine.d.ts +16 -0
  227. package/dist/runtime/sglang/engine.js +38 -0
  228. package/dist/runtime/sglang/engine.js.map +1 -0
  229. package/dist/runtime/sglang/index.d.ts +11 -0
  230. package/dist/runtime/sglang/index.js +12 -0
  231. package/dist/runtime/sglang/index.js.map +1 -0
  232. package/dist/runtime/sglang/memory.d.ts +64 -0
  233. package/dist/runtime/sglang/memory.js +90 -0
  234. package/dist/runtime/sglang/memory.js.map +1 -0
  235. package/dist/runtime/sglang/settings.d.ts +49 -0
  236. package/dist/runtime/sglang/settings.js +118 -0
  237. package/dist/runtime/sglang/settings.js.map +1 -0
  238. package/dist/runtime/shared/external-sessions.js +1 -0
  239. package/dist/runtime/shared/external-sessions.js.map +1 -1
  240. package/dist/runtime/vllm/adapter.js +2 -47
  241. package/dist/runtime/vllm/adapter.js.map +1 -1
  242. package/dist/runtime/vllm/memory.js +3 -16
  243. package/dist/runtime/vllm/memory.js.map +1 -1
  244. package/dist/runtime/vllm/settings.d.ts +7 -0
  245. package/dist/runtime/vllm/settings.js +2 -30
  246. package/dist/runtime/vllm/settings.js.map +1 -1
  247. package/dist/server/control/router.js +4 -3
  248. package/dist/server/control/router.js.map +1 -1
  249. package/dist/server/control/routes/media.d.ts +9 -0
  250. package/dist/server/control/routes/media.js +24 -0
  251. package/dist/server/control/routes/media.js.map +1 -0
  252. package/dist/server/control/routes/model-compatibility.d.ts +9 -0
  253. package/dist/server/control/routes/model-compatibility.js +31 -0
  254. package/dist/server/control/routes/model-compatibility.js.map +1 -0
  255. package/dist/server/control/types.d.ts +14 -20
  256. package/dist/server/control/types.js.map +1 -1
  257. package/dist/server/http.js +15 -2
  258. package/dist/server/http.js.map +1 -1
  259. package/dist/server/public/images-params.js +18 -1
  260. package/dist/server/public/images-params.js.map +1 -1
  261. package/dist/server/public/images.d.ts +11 -2
  262. package/dist/server/public/images.js +73 -9
  263. package/dist/server/public/images.js.map +1 -1
  264. package/dist/server/public/index.js +7 -1
  265. package/dist/server/public/index.js.map +1 -1
  266. package/dist/server/public/listing.js +1 -0
  267. package/dist/server/public/listing.js.map +1 -1
  268. package/dist/server/public/remote-media.d.ts +51 -0
  269. package/dist/server/public/remote-media.js +225 -0
  270. package/dist/server/public/remote-media.js.map +1 -0
  271. package/dist/server/public/responses.js +4 -2
  272. package/dist/server/public/responses.js.map +1 -1
  273. package/dist/server/public/static-assets.generated.js +1 -1
  274. package/dist/server/public/static-assets.generated.js.map +1 -1
  275. package/dist/server/public/trace.js +2 -0
  276. package/dist/server/public/trace.js.map +1 -1
  277. package/dist/server/public/types.d.ts +5 -1
  278. package/dist/server/public/videos-params.js +13 -3
  279. package/dist/server/public/videos-params.js.map +1 -1
  280. package/dist/server/public/videos.d.ts +1 -0
  281. package/dist/server/public/videos.js +21 -3
  282. package/dist/server/public/videos.js.map +1 -1
  283. package/dist/settings/schema/llamacpp-upstream.json +9 -0
  284. package/dist/settings/schema/sglang.json +251 -0
  285. package/dist/settings/schema.js +27 -1
  286. package/dist/settings/schema.js.map +1 -1
  287. package/dist/version.d.ts +1 -1
  288. package/dist/version.js +1 -1
  289. package/package.json +1 -5
  290. package/src/settings/schema/llamacpp-upstream.json +9 -0
  291. package/src/settings/schema/sglang.json +251 -0
  292. package/dist/backend/catalog/bundled-manifest-baseline.d.ts +0 -2
  293. package/dist/backend/catalog/bundled-manifest-baseline.js +0 -65
  294. package/dist/backend/catalog/bundled-manifest-baseline.js.map +0 -1
  295. package/dist/contracts/model-setup.d.ts +0 -115
  296. package/dist/contracts/model-setup.js +0 -33
  297. package/dist/contracts/model-setup.js.map +0 -1
  298. package/dist/core/model-setup/index.d.ts +0 -4
  299. package/dist/core/model-setup/index.js +0 -5
  300. package/dist/core/model-setup/index.js.map +0 -1
  301. package/dist/core/model-setup/plan.d.ts +0 -56
  302. package/dist/core/model-setup/plan.js +0 -158
  303. package/dist/core/model-setup/plan.js.map +0 -1
  304. package/dist/core/model-setup/service.d.ts +0 -92
  305. package/dist/core/model-setup/service.js +0 -329
  306. package/dist/core/model-setup/service.js.map +0 -1
  307. package/dist/core/model-setup/store.d.ts +0 -29
  308. package/dist/core/model-setup/store.js +0 -116
  309. package/dist/core/model-setup/store.js.map +0 -1
  310. package/dist/core/model-setup/wiring.d.ts +0 -59
  311. package/dist/core/model-setup/wiring.js +0 -132
  312. package/dist/core/model-setup/wiring.js.map +0 -1
  313. package/dist/core/tensorrt-llm.d.ts +0 -169
  314. package/dist/core/tensorrt-llm.js +0 -428
  315. package/dist/core/tensorrt-llm.js.map +0 -1
  316. package/dist/downloads/segmented.d.ts +0 -40
  317. package/dist/downloads/segmented.js +0 -170
  318. package/dist/downloads/segmented.js.map +0 -1
  319. package/dist/runtime/tensorrt-llm/delete.d.ts +0 -15
  320. package/dist/runtime/tensorrt-llm/delete.js +0 -60
  321. package/dist/runtime/tensorrt-llm/delete.js.map +0 -1
  322. package/dist/runtime/tensorrt-llm/guest-files.d.ts +0 -8
  323. package/dist/runtime/tensorrt-llm/guest-files.js +0 -49
  324. package/dist/runtime/tensorrt-llm/guest-files.js.map +0 -1
  325. package/dist/runtime/tensorrt-llm/location.d.ts +0 -20
  326. package/dist/runtime/tensorrt-llm/location.js +0 -48
  327. package/dist/runtime/tensorrt-llm/location.js.map +0 -1
  328. package/dist/runtime/tensorrt-llm/model-dir.d.ts +0 -38
  329. package/dist/runtime/tensorrt-llm/model-dir.js +0 -137
  330. package/dist/runtime/tensorrt-llm/model-dir.js.map +0 -1
  331. package/dist/runtime/tensorrt-llm/quant-format.d.ts +0 -65
  332. package/dist/runtime/tensorrt-llm/quant-format.js +0 -189
  333. package/dist/runtime/tensorrt-llm/quant-format.js.map +0 -1
  334. package/dist/runtime/tensorrt-llm/registry.d.ts +0 -26
  335. package/dist/runtime/tensorrt-llm/registry.js +0 -68
  336. package/dist/runtime/tensorrt-llm/registry.js.map +0 -1
  337. package/dist/runtime/tensorrt-llm/runtime.d.ts +0 -130
  338. package/dist/runtime/tensorrt-llm/runtime.js +0 -395
  339. package/dist/runtime/tensorrt-llm/runtime.js.map +0 -1
  340. package/dist/server/control/routes/model-setups.d.ts +0 -11
  341. package/dist/server/control/routes/model-setups.js +0 -55
  342. package/dist/server/control/routes/model-setups.js.map +0 -1
@@ -1,189 +0,0 @@
1
- /**
2
- * The quantization-format naming rule: a fixed checkpoint-metadata → format-name mapping that
3
- * `RuntimeDescriptor.quantization[].format` (`src/contracts/environment.ts`) is keyed by. Ported
4
- * verbatim from `atomic-chat-conf`'s README, "Runtime descriptors (`runtimes/`)" →
5
- * `quantization[].format` names — this file *is* the core side of that conf↔core contract, so any
6
- * change to the rule has to change both places together.
7
- *
8
- * The inputs are a checkpoint's `config.json` and, when the repository carries the file, its
9
- * `hf_quant_config.json`. A checkpoint can be quantized with no `quantization_config` in
10
- * `config.json` at all (e.g. `nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8`,
11
- * `nvidia/Llama-3.3-70B-Instruct-NVFP4`), so `hf_quant_config.json` must always be checked before
12
- * `dtype`/`torch_dtype` is trusted. Steps apply in order, stopping at the first that matches; `null`
13
- * means the naming rule does not recognise the checkpoint (an unsupported `quant_method` such as
14
- * `awq`/`gptq`, an `fp8` checkpoint without the block size this engine loads, or a `dtype` other
15
- * than `bfloat16`/`float16`) — the caller rejects that as an unsupported format, never guesses.
16
- *
17
- * Pure and network-free, like every file in this module (design D12).
18
- */
19
- const FP8_PB_WO = 'fp8_pb_wo';
20
- const FP8_BLOCK_SCALES = 'fp8_block_scales';
21
- function asObject(value) {
22
- return typeof value === 'object' && value !== null && !Array.isArray(value)
23
- ? value
24
- : undefined;
25
- }
26
- function asNonEmptyString(value) {
27
- return typeof value === 'string' && value.length > 0 ? value : undefined;
28
- }
29
- /** `fp8_pb_wo` is what NVIDIA ModelOpt calls it; the engine itself calls the same format `fp8_block_scales`. */
30
- function renameFp8PbWo(quantAlgo) {
31
- const lower = quantAlgo.toLowerCase();
32
- return lower === FP8_PB_WO ? FP8_BLOCK_SCALES : lower;
33
- }
34
- /**
35
- * Every sibling that is a `.gguf` file. GGUF is not a case of the naming rule at all — this engine
36
- * never loads a GGUF checkpoint's `config.json` — it is the separate, always-reject gate
37
- * `compatibility.ts` applies before the naming rule runs at all (spec `tensorrt-llm-models`: "for
38
- * GGUF there is llama.cpp"). A listing with even one `.gguf` file counts, which also covers a
39
- * GGUF-only listing.
40
- */
41
- export function isGgufCheckpoint(files) {
42
- return files.some((file) => file.path.toLowerCase().endsWith('.gguf'));
43
- }
44
- /**
45
- * Step 1: `hf_quant_config.json` present (NVIDIA ModelOpt) → its `quantization.quant_algo`,
46
- * lower-cased and renamed. The README rule stops here whenever the file is present at all — a
47
- * present-but-empty/missing `quant_algo` (e.g. a ModelOpt KV-cache-only export) is `null`
48
- * (unrecognised), never a reason to fall through to `config.json`/`dtype`.
49
- */
50
- function fromHfQuantConfig(hfQuantConfigJson) {
51
- const quantization = asObject(hfQuantConfigJson.quantization);
52
- const quantAlgo = quantization === undefined ? undefined : asNonEmptyString(quantization.quant_algo);
53
- return quantAlgo === undefined ? null : renameFp8PbWo(quantAlgo);
54
- }
55
- /**
56
- * Step 2: `config.json`'s `quantization_config.quant_method`. Returns `null` (recognised as *not
57
- * loadable*, distinct from `undefined` meaning "step 2 does not apply") for every `quant_method`
58
- * this engine release cannot load, so the caller never falls through to reading `dtype` for a
59
- * checkpoint that step 2 already identified as quantized.
60
- */
61
- function fromConfigQuantizationConfig(configJson) {
62
- const quantizationConfig = asObject(configJson.quantization_config);
63
- if (quantizationConfig === undefined)
64
- return undefined;
65
- const quantMethod = quantizationConfig.quant_method;
66
- if (quantMethod === 'modelopt') {
67
- const quantAlgo = asNonEmptyString(quantizationConfig.quant_algo);
68
- return quantAlgo === undefined ? null : renameFp8PbWo(quantAlgo);
69
- }
70
- if (quantMethod === 'fp8') {
71
- const blockSize = quantizationConfig.weight_block_size;
72
- const isFp8BlockScales = Array.isArray(blockSize) && blockSize.length === 2 && blockSize[0] === 128 && blockSize[1] === 128;
73
- // `fp8` without that exact block size is not loadable by this engine release
74
- // (`model_config.py:323`) and must not fall through to step 3 as `bf16`/`fp16`.
75
- return isFp8BlockScales ? FP8_BLOCK_SCALES : null;
76
- }
77
- if (quantMethod === 'mxfp4')
78
- return 'mxfp4';
79
- // awq, gptq, anything else: not loadable by this engine release.
80
- return null;
81
- }
82
- /**
83
- * The checkpoint's weight dtype: `dtype` is what TensorRT-LLM itself reads, `torch_dtype` is the
84
- * legacy fallback. A VLM-style config (Qwen3.5 and later) declares it only on `text_config`, which
85
- * TensorRT-LLM 1.3 falls back to as well (`model_config.py`), so this does too.
86
- */
87
- function configDtype(configJson) {
88
- const textConfig = asObject(configJson.text_config);
89
- return (asNonEmptyString(configJson.dtype) ??
90
- asNonEmptyString(configJson.torch_dtype) ??
91
- (textConfig === undefined
92
- ? undefined
93
- : (asNonEmptyString(textConfig.dtype) ?? asNonEmptyString(textConfig.torch_dtype))));
94
- }
95
- /** Step 3: unquantized, named by `configDtype`. */
96
- function fromDtype(configJson) {
97
- const dtype = configDtype(configJson);
98
- if (dtype === 'bfloat16')
99
- return 'bf16';
100
- if (dtype === 'float16')
101
- return 'fp16';
102
- return null;
103
- }
104
- /**
105
- * The naming rule, applied in order. `null` means unrecognised: the caller must reject it as an
106
- * unsupported format rather than reporting `bf16`/`fp16` by default.
107
- *
108
- * `hf_quant_config.json` being present at all stops the rule at step 1 — its own `null` (an
109
- * unrecognised or missing `quant_algo`) is final and never falls through to `config.json`/`dtype`,
110
- * matching the README: "if hf_quant_config.json is present ... the format is its quant_algo".
111
- */
112
- export function quantizationFormat(configJson, hfQuantConfigJson) {
113
- if (hfQuantConfigJson !== null) {
114
- return fromHfQuantConfig(hfQuantConfigJson);
115
- }
116
- const fromConfig = fromConfigQuantizationConfig(configJson);
117
- if (fromConfig !== undefined)
118
- return fromConfig;
119
- return fromDtype(configJson);
120
- }
121
- /**
122
- * The KV-cache's own quantization algorithm — NVIDIA ModelOpt's `kv_cache_quant_algo`, a sibling
123
- * field to `quant_algo` above, read the same way and from the same object: `hf_quant_config.json`'s
124
- * `quantization` when the repository carries the file, else `config.json`'s `quantization_config`.
125
- * Used by the KV-cache memory formula (`compatibility.ts`, task 2.16w round 1) to size a KV cache
126
- * entry at 1 byte (`FP8`) instead of the engine's own default 2 bytes (`bf16`/`fp16`). `undefined`
127
- * when neither object carries it — an unquantized KV cache, or a checkpoint this naming rule does
128
- * not otherwise recognise.
129
- */
130
- export function kvCacheQuantAlgo(configJson, hfQuantConfigJson) {
131
- if (hfQuantConfigJson !== null) {
132
- const quantization = asObject(hfQuantConfigJson.quantization);
133
- return quantization === undefined ? undefined : asNonEmptyString(quantization.kv_cache_quant_algo);
134
- }
135
- const quantizationConfig = asObject(configJson.quantization_config);
136
- return quantizationConfig === undefined
137
- ? undefined
138
- : asNonEmptyString(quantizationConfig.kv_cache_quant_algo);
139
- }
140
- /**
141
- * What the naming rule actually saw when it did not recognise a format, for error messages only —
142
- * never consulted to decide the format itself (that is `quantizationFormat`'s job alone). Mirrors
143
- * `quantizationFormat`'s own step order, so the two must be kept in sync.
144
- */
145
- export function describeUnrecognizedQuantization(configJson, hfQuantConfigJson) {
146
- if (hfQuantConfigJson !== null) {
147
- const quantization = asObject(hfQuantConfigJson.quantization);
148
- const quantAlgo = quantization?.quant_algo;
149
- return `hf_quant_config.json quantization.quant_algo=${JSON.stringify(quantAlgo ?? null)}`;
150
- }
151
- const quantizationConfig = asObject(configJson.quantization_config);
152
- if (quantizationConfig !== undefined) {
153
- const quantMethod = quantizationConfig.quant_method;
154
- if (quantMethod === 'modelopt') {
155
- return `config.json quantization_config.quant_method="modelopt" quant_algo=${JSON.stringify(quantizationConfig.quant_algo ?? null)}`;
156
- }
157
- if (quantMethod === 'fp8') {
158
- return `config.json quantization_config.quant_method="fp8" weight_block_size=${JSON.stringify(quantizationConfig.weight_block_size ?? null)}`;
159
- }
160
- return `config.json quantization_config.quant_method=${JSON.stringify(quantMethod ?? null)}`;
161
- }
162
- return `config.json dtype=${JSON.stringify(configDtype(configJson) ?? null)}`;
163
- }
164
- /** What NVIDIA ModelOpt calls a checkpoint whose layers carry different formats. */
165
- export const MIXED_PRECISION = 'mixed_precision';
166
- /**
167
- * The formats a checkpoint actually needs the engine to load. One format for every checkpoint but a
168
- * ModelOpt `MIXED_PRECISION` one, whose `hf_quant_config.json` lists a `quant_algo` per layer in
169
- * `quantization.quantized_layers` (e.g. `NVFP4` + `FP8`, or `W4A16_NVFP4` + `FP8`): every distinct
170
- * per-layer format, named by the same rule as a whole-checkpoint `quant_algo`. An empty list means
171
- * the mixed checkpoint names no per-layer format at all, which the caller must reject.
172
- */
173
- export function quantizationComponents(format, hfQuantConfigJson) {
174
- if (format !== MIXED_PRECISION)
175
- return [format];
176
- const quantization = hfQuantConfigJson === null ? undefined : asObject(hfQuantConfigJson.quantization);
177
- const layers = quantization === undefined ? undefined : asObject(quantization.quantized_layers);
178
- if (layers === undefined)
179
- return [];
180
- const formats = new Set();
181
- for (const layer of Object.values(layers)) {
182
- const quantAlgo = asNonEmptyString(asObject(layer)?.quant_algo);
183
- if (quantAlgo === undefined)
184
- return [];
185
- formats.add(renameFp8PbWo(quantAlgo));
186
- }
187
- return [...formats].sort();
188
- }
189
- //# sourceMappingURL=quant-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quant-format.js","sourceRoot":"","sources":["../../../src/runtime/tensorrt-llm/quant-format.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,MAAM,SAAS,GAAG,WAAW,CAAA;AAC7B,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;AAE3C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,CAAC,CAAE,KAAoB;QACvB,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1E,CAAC;AAED,gHAAgH;AAChH,SAAS,aAAa,CAAC,SAAiB;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IACrC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAA;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAkC;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AACxE,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,iBAA6B;IACtD,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IACpG,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;AAClE,CAAC;AAED;;;;;GAKG;AACH,SAAS,4BAA4B,CAAC,UAAsB;IAC1D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;IACnE,IAAI,kBAAkB,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACtD,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAA;IACnD,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;QACjE,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,kBAAkB,CAAC,iBAAiB,CAAA;QACtD,MAAM,gBAAgB,GACpB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAA;QACpG,6EAA6E;QAC7E,gFAAgF;QAChF,OAAO,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAA;IACnD,CAAC;IACD,IAAI,WAAW,KAAK,OAAO;QAAE,OAAO,OAAO,CAAA;IAC3C,iEAAiE;IACjE,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,UAAsB;IACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;IACnD,OAAO,CACL,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC;QAClC,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC;QACxC,CAAC,UAAU,KAAK,SAAS;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CACtF,CAAA;AACH,CAAC;AAED,mDAAmD;AACnD,SAAS,SAAS,CAAC,UAAsB;IACvC,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,MAAM,CAAA;IACvC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACtC,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAsB,EACtB,iBAAoC;IAEpC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM,UAAU,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAA;IAC3D,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAA;IAC/C,OAAO,SAAS,CAAC,UAAU,CAAC,CAAA;AAC9B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAsB,EACtB,iBAAoC;IAEpC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAC7D,OAAO,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAA;IACpG,CAAC;IACD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;IACnE,OAAO,kBAAkB,KAAK,SAAS;QACrC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC9C,UAAsB,EACtB,iBAAoC;IAEpC,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;QAC7D,MAAM,SAAS,GAAG,YAAY,EAAE,UAAU,CAAA;QAC1C,OAAO,gDAAgD,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,CAAA;IAC5F,CAAC;IACD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAA;IACnE,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,YAAY,CAAA;QACnD,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAO,sEAAsE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,CAAA;QACtI,CAAC;QACD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,wEAAwE,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,iBAAiB,IAAI,IAAI,CAAC,EAAE,CAAA;QAC/I,CAAC;QACD,OAAO,gDAAgD,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAA;IAC9F,CAAC;IACD,OAAO,qBAAqB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,EAAE,CAAA;AAC/E,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAA;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,iBAAoC;IACzF,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,YAAY,GAAG,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;IACtG,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAA;IAC/F,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAA;QAC/D,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,EAAE,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;AAC5B,CAAC"}
@@ -1,26 +0,0 @@
1
- import type { TensorrtLlmModelYmlDocument } from './model-dir.js';
2
- export interface TensorrtLlmModelEntry {
3
- id: string;
4
- /** Directory holding `model.yml`. */
5
- dir: string;
6
- yml: TensorrtLlmModelYmlDocument;
7
- }
8
- /** Scan errors are collected rather than thrown: one broken model must not hide the rest of the list. */
9
- export interface TensorrtLlmScanResult {
10
- entries: TensorrtLlmModelEntry[];
11
- skipped: Array<{
12
- dir: string;
13
- error: string;
14
- }>;
15
- }
16
- export declare class TensorrtLlmModelRegistry {
17
- private readonly modelsDir;
18
- /**
19
- * The models root, or how to learn it at each scan (change `add-tensorrt-llm-windows`, task 2.8): on
20
- * Windows it is a folder in Atomic Chat's WSL distribution, known only once that exists — `null`
21
- * until then, which lists nothing.
22
- */
23
- constructor(modelsDir: string | (() => Promise<string | null>));
24
- scan(): Promise<TensorrtLlmScanResult>;
25
- list(): Promise<TensorrtLlmModelEntry[]>;
26
- }
@@ -1,68 +0,0 @@
1
- /**
2
- * The `tensorrt-llm` model registry (task 2.16, spec `tensorrt-llm-models`, "Модель — каталог
3
- * провайдера с манифестом"): a depth-first scan of `<data>/tensorrt-llm/models`, following the same
4
- * rules `src/models/registry.ts`'s `ModelRegistry` already uses for llama.cpp so all three surfaces
5
- * (core, the app, the CLI) see the same ids for the same folders — a directory holding `model.yml`
6
- * *is* a model and is never descended into, the id is its path relative to the models root with `\`
7
- * rewritten to `/`, ids sort ascending, and an unreadable or invalid `model.yml` is skipped rather
8
- * than failing the whole scan (spec "Недокачанный каталог": a directory with files but no
9
- * `model.yml` is not shown at all).
10
- *
11
- * There is no caching here, by design: every call re-walks the directory, so a model the app finishes
12
- * downloading and writes `model.yml` for appears on the very next `list()` with no restart needed
13
- * (spec "Модель докачана в app"). `model.yml` itself is a different shape from llama.cpp's
14
- * (`repository`, `revision`, `files`, `architectures`, `quantization` — no `model_path`), which is
15
- * why this is its own registry rather than a reuse of the llama.cpp one; `parseTensorrtLlmModelYml`
16
- * (`model-dir.ts`) is the one parser both this scan and the single-id load-path lookup
17
- * (`readTensorrtLlmModel`) share, so they can never disagree about what a `model.yml` means.
18
- */
19
- import { readdir, readFile } from 'node:fs/promises';
20
- import { join } from 'node:path';
21
- import { MODEL_YML, modelIdFromDir } from '../../config/index.js';
22
- import { parseTensorrtLlmModelYml } from './model-dir.js';
23
- export class TensorrtLlmModelRegistry {
24
- modelsDir;
25
- /**
26
- * The models root, or how to learn it at each scan (change `add-tensorrt-llm-windows`, task 2.8): on
27
- * Windows it is a folder in Atomic Chat's WSL distribution, known only once that exists — `null`
28
- * until then, which lists nothing.
29
- */
30
- constructor(modelsDir) {
31
- this.modelsDir = modelsDir;
32
- }
33
- async scan() {
34
- const result = { entries: [], skipped: [] };
35
- const root = typeof this.modelsDir === 'string' ? this.modelsDir : await this.modelsDir().catch(() => null);
36
- if (root === null)
37
- return result;
38
- const stack = [root];
39
- while (stack.length) {
40
- const dir = stack.pop();
41
- const ymlPath = join(dir, MODEL_YML);
42
- const text = await readFile(ymlPath, 'utf8').catch(() => undefined);
43
- if (text !== undefined) {
44
- try {
45
- result.entries.push({
46
- id: modelIdFromDir(root, dir),
47
- dir,
48
- yml: parseTensorrtLlmModelYml(text, ymlPath),
49
- });
50
- }
51
- catch (e) {
52
- result.skipped.push({ dir, error: e.message });
53
- }
54
- continue; // a model directory is a leaf, whether or not it parsed
55
- }
56
- const children = await readdir(dir, { withFileTypes: true }).catch(() => []);
57
- for (const child of children)
58
- if (child.isDirectory())
59
- stack.push(join(dir, child.name));
60
- }
61
- result.entries.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
62
- return result;
63
- }
64
- async list() {
65
- return (await this.scan()).entries;
66
- }
67
- }
68
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/runtime/tensorrt-llm/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAgBzD,MAAM,OAAO,wBAAwB;IAMN;IAL7B;;;;OAIG;IACH,YAA6B,SAAkD;QAAlD,cAAS,GAAT,SAAS,CAAyC;IAAG,CAAC;IAEnF,KAAK,CAAC,IAAI;QACR,MAAM,MAAM,GAA0B,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QAClE,MAAM,IAAI,GACR,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAChG,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QAChC,MAAM,KAAK,GAAa,CAAC,IAAI,CAAC,CAAA;QAC9B,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAY,CAAA;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YACpC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YACnE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;wBAClB,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC;wBAC7B,GAAG;wBACH,GAAG,EAAE,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC7C,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC3D,CAAC;gBACD,SAAQ,CAAC,wDAAwD;YACnE,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YAC5E,KAAK,MAAM,KAAK,IAAI,QAAQ;gBAAE,IAAI,KAAK,CAAC,WAAW,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1F,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvE,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAA;IACpC,CAAC;CACF"}
@@ -1,130 +0,0 @@
1
- import type { SessionInfo, UnloadResult } from '../../contracts/index.js';
2
- import type { ModelCapabilities } from '../../models/index.js';
3
- import type { ManagedLastAttempt, ManagedTextCapabilities, ManagedTextLifecycle } from '../managed-text/index.js';
4
- import type { CtxIncreaseResult, GpuClaimHook, GpuOccupancy, LocalLoadOptions, LocalRuntime, RecreateResult, SessionRoutePolicy } from '../shared/index.js';
5
- import type { TensorrtLlmHostFacts } from './host-facts.js';
6
- import type { ReadyInstallation } from './installation.js';
7
- import type { TensorrtLlmModel } from './model-dir.js';
8
- export interface TensorrtLlmRuntimeDeps {
9
- /**
10
- * The lifecycle over the core's one Docker executor and journal (the startup handle the setup
11
- * operation shares), asked at every load: `null` while this host has no docker CLI — a setup that
12
- * installs Docker later makes the next load find it, with no restart; rejected, with the cause,
13
- * when wiring the executor failed. The same instance every time it resolves non-null.
14
- */
15
- lifecycle: () => Promise<ManagedTextLifecycle | null>;
16
- /** The `ready` installation, its pinned descriptor and image; rejects with why there is none. */
17
- readyInstallation: () => Promise<ReadyInstallation>;
18
- /** The cards and SELinux, asked right before each load: a card can disappear between two loads. */
19
- hostFacts: () => Promise<TensorrtLlmHostFacts>;
20
- model: (modelId: string) => Promise<TensorrtLlmModel>;
21
- /** The provider's stored settings (`settings.get('tensorrt-llm')`), read at every load. */
22
- settings: () => Record<string, unknown>;
23
- /**
24
- * Core's GPU residency (spec `gpu-residency`), run as the `stopping-previous` stage: frees the chosen
25
- * card of every other engine and this provider's other session. Absent, the stage stops only the
26
- * other `tensorrt-llm` models, itself.
27
- */
28
- claimGpu?: GpuClaimHook;
29
- }
30
- /**
31
- * `GET /models/tensorrt-llm/:id/capabilities`: the fields every provider's answer has (all false for
32
- * this engine — no projector, no embedding, no speculative decoding), and the managed engine's own,
33
- * which the app gates Agent, tools and attachments on (task 3.8).
34
- */
35
- export type TensorrtLlmModelCapabilities = ModelCapabilities & ManagedTextCapabilities & {
36
- /** The architecture `model.yml` names, which picked the descriptor's `model_families` entry. */
37
- architecture: string | null;
38
- };
39
- /** `GET /models/tensorrt-llm/:id/logs`: the loaded container's live tail, or the last failed attempt's. */
40
- export type TensorrtLlmModelLogs = {
41
- model_id: string;
42
- source: 'session';
43
- generation: string;
44
- log_tail: string;
45
- } | {
46
- model_id: string;
47
- source: 'last-attempt';
48
- generation: string;
49
- log_tail: string;
50
- error: ManagedLastAttempt['error'];
51
- at: number;
52
- } | {
53
- model_id: string;
54
- source: null;
55
- log_tail: '';
56
- };
57
- export declare class TensorrtLlmRuntime implements LocalRuntime {
58
- private readonly deps;
59
- private current;
60
- private closed;
61
- /** Removals of the engine in progress: while any holds loads off, every load is refused (M-1). */
62
- private loadHolds;
63
- /** Deletions of one model in progress (task 2.24): each refuses loads of that model only, counted. */
64
- private readonly modelHolds;
65
- /** Generations whose GPU claim succeeded: a load only holds its card from then on. */
66
- private readonly claimed;
67
- /** What each loaded session can do, keyed by model and pinned to the generation it was computed for. */
68
- private readonly sessionCapabilities;
69
- constructor(deps: TensorrtLlmRuntimeDeps);
70
- list(): SessionInfo[];
71
- findSession(modelId: string): SessionInfo | undefined;
72
- getLoadedModels(): string[];
73
- isLoading(modelId: string): boolean;
74
- load(modelId: string, opts?: LocalLoadOptions): Promise<SessionInfo>;
75
- /**
76
- * Throws `MANAGED_STOP_UNCONFIRMED` when Docker will not confirm the stop: the card stays reserved
77
- * and the caller is told, rather than handed a success that is not one.
78
- */
79
- unload(modelId: string): Promise<UnloadResult>;
80
- /**
81
- * Every model holding a card through this provider — loading, ready, stopping, or stopped without
82
- * Docker's confirmation: what a removal of the engine must unload first (task 2.6), through core's
83
- * own unload so each model's cross-process claim is released with it (final review M-1).
84
- */
85
- residentModels(): string[];
86
- /**
87
- * Refuses every load with `MANAGED_OPERATION_CONFLICT` until the returned release is called (final
88
- * review M-1): a removal of the engine holds loads off for as long as it runs, so no load creates
89
- * a container on an installation being removed. Holds nest; each release counts once.
90
- */
91
- holdOffLoads(): () => void;
92
- /**
93
- * Refuses loads of this one model with `MANAGED_OPERATION_CONFLICT` until the returned release is
94
- * called (task 2.24): a deletion holds them off from before it stops the model until its files are
95
- * gone, so no load mounts a folder being removed. Other models load as usual. Holds nest.
96
- */
97
- holdOffModel(modelId: string): () => void;
98
- /** Never: the context is fixed when the container starts (design D9, spec "без авто-роста"). */
99
- autoIncreaseCtx(_modelId: string): Promise<CtxIncreaseResult>;
100
- recreateSession(modelId: string): Promise<RecreateResult>;
101
- shutdown(): Promise<void>;
102
- routePolicy(modelId: string): SessionRoutePolicy | undefined;
103
- /** Answers rather than throws, like every provider's capabilities: all false while nothing resolves. */
104
- capabilities(modelId: string): Promise<TensorrtLlmModelCapabilities>;
105
- logs(modelId: string): Promise<TensorrtLlmModelLogs>;
106
- private assertOpen;
107
- private assertNotHeldOff;
108
- /**
109
- * The card each container holds, for core's residency rule: every model past its claim — loading,
110
- * ready, stopping, or stopped without Docker's confirmation, which still holds the card.
111
- */
112
- gpuOccupancy(): GpuOccupancy[];
113
- /**
114
- * The `stopping-previous` stage. With core's residency: its claim on `gpuId`, which stops every other
115
- * `tensorrt-llm` model (one session at a time) and every other engine on that card, each with a
116
- * confirmed exit, and refuses with `GPU_BUSY` while one will not stop. Without it: every other
117
- * `tensorrt-llm` model, loading or loaded, stopped with confirmation. Either way the load holds its
118
- * card from then on — with residency, from the moment core grants the claim, inside core's turn.
119
- */
120
- private stopOthers;
121
- /**
122
- * The lifecycle's `beforeCreate` hook (task 2.16w round 1, finding 1 (Critical)): the pre-launch
123
- * check's memory line, re-probed fresh right before the container is actually created — after
124
- * `stopPrevious` has run, so a model switch on a single-GPU host sees the card the previous
125
- * session just freed, never a snapshot `load()` took before eviction. `MANAGED_PREREQUISITE_
126
- * BLOCKED` when the chosen card is no longer on the host at all (the same code a missing card gets
127
- * earlier in `load()`); `MODEL_INCOMPATIBLE` when it is still there but does not have room.
128
- */
129
- private checkMemoryBeforeCreate;
130
- }