@atomic-chat/core 0.13.2 → 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 (377) 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 +7 -5
  60. package/dist/core/atomic-core.js +1 -0
  61. package/dist/core/atomic-core.js.map +1 -1
  62. package/dist/core/create.js +48 -58
  63. package/dist/core/create.js.map +1 -1
  64. package/dist/core/managed-engines.js +2 -0
  65. package/dist/core/managed-engines.js.map +1 -1
  66. package/dist/core/prism.d.ts +23 -6
  67. package/dist/core/prism.js +45 -0
  68. package/dist/core/prism.js.map +1 -1
  69. package/dist/core/public-server.js +3 -2
  70. package/dist/core/public-server.js.map +1 -1
  71. package/dist/core/types.d.ts +11 -0
  72. package/dist/core/types.js.map +1 -1
  73. package/dist/decision/process.d.ts +4 -0
  74. package/dist/decision/process.js +10 -1
  75. package/dist/decision/process.js.map +1 -1
  76. package/dist/diffusion/args.d.ts +3 -2
  77. package/dist/diffusion/args.js +21 -4
  78. package/dist/diffusion/args.js.map +1 -1
  79. package/dist/diffusion/compat.d.ts +1 -1
  80. package/dist/diffusion/compat.js +6 -2
  81. package/dist/diffusion/compat.js.map +1 -1
  82. package/dist/diffusion/gallery.d.ts +24 -3
  83. package/dist/diffusion/gallery.js +151 -21
  84. package/dist/diffusion/gallery.js.map +1 -1
  85. package/dist/diffusion/index.d.ts +3 -0
  86. package/dist/diffusion/index.js +3 -0
  87. package/dist/diffusion/index.js.map +1 -1
  88. package/dist/diffusion/jobs.d.ts +6 -1
  89. package/dist/diffusion/jobs.js +10 -1
  90. package/dist/diffusion/jobs.js.map +1 -1
  91. package/dist/diffusion/media-header.d.ts +22 -0
  92. package/dist/diffusion/media-header.js +149 -0
  93. package/dist/diffusion/media-header.js.map +1 -0
  94. package/dist/diffusion/parse.d.ts +3 -1
  95. package/dist/diffusion/parse.js +36 -0
  96. package/dist/diffusion/parse.js.map +1 -1
  97. package/dist/diffusion/recipe.d.ts +10 -1
  98. package/dist/diffusion/recipe.js +85 -21
  99. package/dist/diffusion/recipe.js.map +1 -1
  100. package/dist/diffusion/remote-job.d.ts +76 -0
  101. package/dist/diffusion/remote-job.js +643 -0
  102. package/dist/diffusion/remote-job.js.map +1 -0
  103. package/dist/diffusion/remote-store.d.ts +38 -0
  104. package/dist/diffusion/remote-store.js +91 -0
  105. package/dist/diffusion/remote-store.js.map +1 -0
  106. package/dist/diffusion/service.d.ts +9 -1
  107. package/dist/diffusion/service.js +49 -9
  108. package/dist/diffusion/service.js.map +1 -1
  109. package/dist/diffusion/state.d.ts +13 -1
  110. package/dist/diffusion/state.js +8 -0
  111. package/dist/diffusion/state.js.map +1 -1
  112. package/dist/diffusion/tracker.d.ts +6 -0
  113. package/dist/diffusion/tracker.js +11 -0
  114. package/dist/diffusion/tracker.js.map +1 -1
  115. package/dist/diffusion/validate.js +2 -2
  116. package/dist/diffusion/validate.js.map +1 -1
  117. package/dist/diffusion/video-gallery.d.ts +11 -4
  118. package/dist/diffusion/video-gallery.js +62 -25
  119. package/dist/diffusion/video-gallery.js.map +1 -1
  120. package/dist/diffusion/video-history.js +4 -1
  121. package/dist/diffusion/video-history.js.map +1 -1
  122. package/dist/diffusion/video-recipe.js +58 -25
  123. package/dist/diffusion/video-recipe.js.map +1 -1
  124. package/dist/diffusion/wiring.d.ts +3 -0
  125. package/dist/diffusion/wiring.js +1 -0
  126. package/dist/diffusion/wiring.js.map +1 -1
  127. package/dist/diffusion/workflow.d.ts +8 -2
  128. package/dist/diffusion/workflow.js +13 -5
  129. package/dist/diffusion/workflow.js.map +1 -1
  130. package/dist/downloads/downloader.d.ts +6 -1
  131. package/dist/downloads/downloader.js +12 -1
  132. package/dist/downloads/downloader.js.map +1 -1
  133. package/dist/embedding/process.d.ts +4 -0
  134. package/dist/embedding/process.js +10 -1
  135. package/dist/embedding/process.js.map +1 -1
  136. package/dist/media/adapters/a1111.d.ts +32 -0
  137. package/dist/media/adapters/a1111.js +207 -0
  138. package/dist/media/adapters/a1111.js.map +1 -0
  139. package/dist/media/adapters/aimlapi-videos.d.ts +34 -0
  140. package/dist/media/adapters/aimlapi-videos.js +172 -0
  141. package/dist/media/adapters/aimlapi-videos.js.map +1 -0
  142. package/dist/media/adapters/dashscope-image.d.ts +26 -0
  143. package/dist/media/adapters/dashscope-image.js +160 -0
  144. package/dist/media/adapters/dashscope-image.js.map +1 -0
  145. package/dist/media/adapters/dashscope-video.d.ts +47 -0
  146. package/dist/media/adapters/dashscope-video.js +251 -0
  147. package/dist/media/adapters/dashscope-video.js.map +1 -0
  148. package/dist/media/adapters/gemini-image.d.ts +27 -0
  149. package/dist/media/adapters/gemini-image.js +181 -0
  150. package/dist/media/adapters/gemini-image.js.map +1 -0
  151. package/dist/media/adapters/gemini-veo.d.ts +39 -0
  152. package/dist/media/adapters/gemini-veo.js +196 -0
  153. package/dist/media/adapters/gemini-veo.js.map +1 -0
  154. package/dist/media/adapters/hf-images.d.ts +85 -0
  155. package/dist/media/adapters/hf-images.js +439 -0
  156. package/dist/media/adapters/hf-images.js.map +1 -0
  157. package/dist/media/adapters/hf-videos.d.ts +44 -0
  158. package/dist/media/adapters/hf-videos.js +265 -0
  159. package/dist/media/adapters/hf-videos.js.map +1 -0
  160. package/dist/media/adapters/minimax-image.d.ts +26 -0
  161. package/dist/media/adapters/minimax-image.js +111 -0
  162. package/dist/media/adapters/minimax-image.js.map +1 -0
  163. package/dist/media/adapters/minimax-video-v2.d.ts +34 -0
  164. package/dist/media/adapters/minimax-video-v2.js +191 -0
  165. package/dist/media/adapters/minimax-video-v2.js.map +1 -0
  166. package/dist/media/adapters/minimax-video.d.ts +28 -0
  167. package/dist/media/adapters/minimax-video.js +155 -0
  168. package/dist/media/adapters/minimax-video.js.map +1 -0
  169. package/dist/media/adapters/mistral-agent-image.d.ts +33 -0
  170. package/dist/media/adapters/mistral-agent-image.js +108 -0
  171. package/dist/media/adapters/mistral-agent-image.js.map +1 -0
  172. package/dist/media/adapters/nvidia-genai.d.ts +28 -0
  173. package/dist/media/adapters/nvidia-genai.js +182 -0
  174. package/dist/media/adapters/nvidia-genai.js.map +1 -0
  175. package/dist/media/adapters/openai-images.d.ts +23 -0
  176. package/dist/media/adapters/openai-images.js +164 -0
  177. package/dist/media/adapters/openai-images.js.map +1 -0
  178. package/dist/media/adapters/openai-videos.d.ts +34 -0
  179. package/dist/media/adapters/openai-videos.js +175 -0
  180. package/dist/media/adapters/openai-videos.js.map +1 -0
  181. package/dist/media/adapters/openrouter-images.d.ts +25 -0
  182. package/dist/media/adapters/openrouter-images.js +161 -0
  183. package/dist/media/adapters/openrouter-images.js.map +1 -0
  184. package/dist/media/adapters/openrouter-videos.d.ts +43 -0
  185. package/dist/media/adapters/openrouter-videos.js +208 -0
  186. package/dist/media/adapters/openrouter-videos.js.map +1 -0
  187. package/dist/media/adapters/registry.d.ts +7 -0
  188. package/dist/media/adapters/registry.js +45 -0
  189. package/dist/media/adapters/registry.js.map +1 -0
  190. package/dist/media/adapters/types.d.ts +133 -0
  191. package/dist/media/adapters/types.js +15 -0
  192. package/dist/media/adapters/types.js.map +1 -0
  193. package/dist/media/adapters/xai-images.d.ts +19 -0
  194. package/dist/media/adapters/xai-images.js +83 -0
  195. package/dist/media/adapters/xai-images.js.map +1 -0
  196. package/dist/media/adapters/xai-videos.d.ts +29 -0
  197. package/dist/media/adapters/xai-videos.js +148 -0
  198. package/dist/media/adapters/xai-videos.js.map +1 -0
  199. package/dist/media/catalog-baseline.d.ts +2 -0
  200. package/dist/media/catalog-baseline.js +10 -0
  201. package/dist/media/catalog-baseline.js.map +1 -0
  202. package/dist/media/catalog-baseline.json +1819 -0
  203. package/dist/media/catalog-service.d.ts +42 -0
  204. package/dist/media/catalog-service.js +111 -0
  205. package/dist/media/catalog-service.js.map +1 -0
  206. package/dist/media/catalog.d.ts +50 -0
  207. package/dist/media/catalog.js +315 -0
  208. package/dist/media/catalog.js.map +1 -0
  209. package/dist/media/http.d.ts +125 -0
  210. package/dist/media/http.js +308 -0
  211. package/dist/media/http.js.map +1 -0
  212. package/dist/media/index.d.ts +14 -0
  213. package/dist/media/index.js +15 -0
  214. package/dist/media/index.js.map +1 -0
  215. package/dist/media/mask.d.ts +12 -0
  216. package/dist/media/mask.js +57 -0
  217. package/dist/media/mask.js.map +1 -0
  218. package/dist/media/service.d.ts +42 -0
  219. package/dist/media/service.js +144 -0
  220. package/dist/media/service.js.map +1 -0
  221. package/dist/models/compatibility/inspect.d.ts +11 -2
  222. package/dist/models/compatibility/inspect.js +44 -13
  223. package/dist/models/compatibility/inspect.js.map +1 -1
  224. package/dist/models/compatibility/service.d.ts +3 -0
  225. package/dist/models/compatibility/service.js +1 -0
  226. package/dist/models/compatibility/service.js.map +1 -1
  227. package/dist/models/gguf/tensors.d.ts +1 -0
  228. package/dist/models/gguf/tensors.js +4 -1
  229. package/dist/models/gguf/tensors.js.map +1 -1
  230. package/dist/models/hf.d.ts +3 -16
  231. package/dist/models/hf.js +4 -42
  232. package/dist/models/hf.js.map +1 -1
  233. package/dist/router/resolve.d.ts +15 -4
  234. package/dist/router/resolve.js +25 -3
  235. package/dist/router/resolve.js.map +1 -1
  236. package/dist/runtime/environment/linux-provisioner.js +7 -67
  237. package/dist/runtime/environment/linux-provisioner.js.map +1 -1
  238. package/dist/runtime/environment/runtime-removal-plan.d.ts +19 -0
  239. package/dist/runtime/environment/runtime-removal-plan.js +74 -0
  240. package/dist/runtime/environment/runtime-removal-plan.js.map +1 -0
  241. package/dist/runtime/environment/windows-provisioner.js +20 -4
  242. package/dist/runtime/environment/windows-provisioner.js.map +1 -1
  243. package/dist/runtime/managed-engines/spec.d.ts +2 -2
  244. package/dist/runtime/managed-engines/spec.js +6 -0
  245. package/dist/runtime/managed-engines/spec.js.map +1 -1
  246. package/dist/runtime/managed-models/compatibility.d.ts +10 -0
  247. package/dist/runtime/managed-models/compatibility.js +18 -0
  248. package/dist/runtime/managed-models/compatibility.js.map +1 -1
  249. package/dist/runtime/managed-text/adapter.d.ts +17 -0
  250. package/dist/runtime/managed-text/adapter.js.map +1 -1
  251. package/dist/runtime/managed-text/lifecycle.d.ts +8 -0
  252. package/dist/runtime/managed-text/lifecycle.js +38 -1
  253. package/dist/runtime/managed-text/lifecycle.js.map +1 -1
  254. package/dist/runtime/managed-text/readiness.d.ts +21 -1
  255. package/dist/runtime/managed-text/readiness.js +64 -0
  256. package/dist/runtime/managed-text/readiness.js.map +1 -1
  257. package/dist/runtime/managed-text/request-rules.d.ts +9 -7
  258. package/dist/runtime/managed-text/request-rules.js +58 -2
  259. package/dist/runtime/managed-text/request-rules.js.map +1 -1
  260. package/dist/runtime/managed-text/setting-values.d.ts +9 -0
  261. package/dist/runtime/managed-text/setting-values.js +44 -0
  262. package/dist/runtime/managed-text/setting-values.js.map +1 -0
  263. package/dist/runtime/sglang/adapter.d.ts +50 -0
  264. package/dist/runtime/sglang/adapter.js +393 -0
  265. package/dist/runtime/sglang/adapter.js.map +1 -0
  266. package/dist/runtime/sglang/engine.d.ts +16 -0
  267. package/dist/runtime/sglang/engine.js +38 -0
  268. package/dist/runtime/sglang/engine.js.map +1 -0
  269. package/dist/runtime/sglang/index.d.ts +11 -0
  270. package/dist/runtime/sglang/index.js +12 -0
  271. package/dist/runtime/sglang/index.js.map +1 -0
  272. package/dist/runtime/sglang/memory.d.ts +64 -0
  273. package/dist/runtime/sglang/memory.js +90 -0
  274. package/dist/runtime/sglang/memory.js.map +1 -0
  275. package/dist/runtime/sglang/settings.d.ts +49 -0
  276. package/dist/runtime/sglang/settings.js +118 -0
  277. package/dist/runtime/sglang/settings.js.map +1 -0
  278. package/dist/runtime/shared/external-sessions.js +1 -0
  279. package/dist/runtime/shared/external-sessions.js.map +1 -1
  280. package/dist/runtime/shared/ports.d.ts +10 -0
  281. package/dist/runtime/shared/ports.js +30 -0
  282. package/dist/runtime/shared/ports.js.map +1 -1
  283. package/dist/runtime/tensorrt-llm/adapter.d.ts +1 -4
  284. package/dist/runtime/tensorrt-llm/adapter.js +28 -11
  285. package/dist/runtime/tensorrt-llm/adapter.js.map +1 -1
  286. package/dist/runtime/tensorrt-llm/check.js +1 -0
  287. package/dist/runtime/tensorrt-llm/check.js.map +1 -1
  288. package/dist/runtime/tensorrt-llm/compatibility.d.ts +30 -6
  289. package/dist/runtime/tensorrt-llm/compatibility.js +41 -9
  290. package/dist/runtime/tensorrt-llm/compatibility.js.map +1 -1
  291. package/dist/runtime/tensorrt-llm/cuda-graphs.d.ts +32 -0
  292. package/dist/runtime/tensorrt-llm/cuda-graphs.js +33 -0
  293. package/dist/runtime/tensorrt-llm/cuda-graphs.js.map +1 -0
  294. package/dist/runtime/tensorrt-llm/engine.js +11 -5
  295. package/dist/runtime/tensorrt-llm/engine.js.map +1 -1
  296. package/dist/runtime/tensorrt-llm/kv-cache.d.ts +16 -0
  297. package/dist/runtime/tensorrt-llm/kv-cache.js +21 -1
  298. package/dist/runtime/tensorrt-llm/kv-cache.js.map +1 -1
  299. package/dist/runtime/vllm/adapter.js +2 -47
  300. package/dist/runtime/vllm/adapter.js.map +1 -1
  301. package/dist/runtime/vllm/memory.js +3 -16
  302. package/dist/runtime/vllm/memory.js.map +1 -1
  303. package/dist/runtime/vllm/settings.d.ts +7 -0
  304. package/dist/runtime/vllm/settings.js +2 -30
  305. package/dist/runtime/vllm/settings.js.map +1 -1
  306. package/dist/server/control/router.js +5 -4
  307. package/dist/server/control/router.js.map +1 -1
  308. package/dist/server/control/routes/media.d.ts +9 -0
  309. package/dist/server/control/routes/media.js +24 -0
  310. package/dist/server/control/routes/media.js.map +1 -0
  311. package/dist/server/control/routes/model-compatibility.d.ts +9 -0
  312. package/dist/server/control/routes/model-compatibility.js +31 -0
  313. package/dist/server/control/routes/model-compatibility.js.map +1 -0
  314. package/dist/server/control/types.d.ts +18 -20
  315. package/dist/server/http.js +15 -2
  316. package/dist/server/http.js.map +1 -1
  317. package/dist/server/public/gates.d.ts +6 -1
  318. package/dist/server/public/gates.js +7 -3
  319. package/dist/server/public/gates.js.map +1 -1
  320. package/dist/server/public/images-params.js +18 -1
  321. package/dist/server/public/images-params.js.map +1 -1
  322. package/dist/server/public/images.d.ts +11 -2
  323. package/dist/server/public/images.js +73 -9
  324. package/dist/server/public/images.js.map +1 -1
  325. package/dist/server/public/index.d.ts +1 -0
  326. package/dist/server/public/index.js +16 -7
  327. package/dist/server/public/index.js.map +1 -1
  328. package/dist/server/public/listing.js +1 -0
  329. package/dist/server/public/listing.js.map +1 -1
  330. package/dist/server/public/remote-media.d.ts +51 -0
  331. package/dist/server/public/remote-media.js +225 -0
  332. package/dist/server/public/remote-media.js.map +1 -0
  333. package/dist/server/public/responses.js +4 -2
  334. package/dist/server/public/responses.js.map +1 -1
  335. package/dist/server/public/static-assets.generated.js +1 -1
  336. package/dist/server/public/static-assets.generated.js.map +1 -1
  337. package/dist/server/public/trace.js +2 -0
  338. package/dist/server/public/trace.js.map +1 -1
  339. package/dist/server/public/types.d.ts +12 -1
  340. package/dist/server/public/videos-params.js +13 -3
  341. package/dist/server/public/videos-params.js.map +1 -1
  342. package/dist/server/public/videos.d.ts +1 -0
  343. package/dist/server/public/videos.js +21 -3
  344. package/dist/server/public/videos.js.map +1 -1
  345. package/dist/settings/schema/llamacpp-upstream.json +9 -0
  346. package/dist/settings/schema/sglang.json +251 -0
  347. package/dist/settings/schema.js +27 -1
  348. package/dist/settings/schema.js.map +1 -1
  349. package/dist/version.d.ts +1 -1
  350. package/dist/version.js +1 -1
  351. package/package.json +2 -6
  352. package/src/settings/schema/llamacpp-upstream.json +9 -0
  353. package/src/settings/schema/sglang.json +251 -0
  354. package/dist/backend/catalog/bundled-manifest-baseline.d.ts +0 -2
  355. package/dist/backend/catalog/bundled-manifest-baseline.js +0 -65
  356. package/dist/backend/catalog/bundled-manifest-baseline.js.map +0 -1
  357. package/dist/contracts/model-setup.d.ts +0 -115
  358. package/dist/contracts/model-setup.js +0 -33
  359. package/dist/contracts/model-setup.js.map +0 -1
  360. package/dist/core/model-setup/index.d.ts +0 -4
  361. package/dist/core/model-setup/index.js +0 -5
  362. package/dist/core/model-setup/index.js.map +0 -1
  363. package/dist/core/model-setup/plan.d.ts +0 -56
  364. package/dist/core/model-setup/plan.js +0 -158
  365. package/dist/core/model-setup/plan.js.map +0 -1
  366. package/dist/core/model-setup/service.d.ts +0 -92
  367. package/dist/core/model-setup/service.js +0 -329
  368. package/dist/core/model-setup/service.js.map +0 -1
  369. package/dist/core/model-setup/store.d.ts +0 -29
  370. package/dist/core/model-setup/store.js +0 -116
  371. package/dist/core/model-setup/store.js.map +0 -1
  372. package/dist/core/model-setup/wiring.d.ts +0 -59
  373. package/dist/core/model-setup/wiring.js +0 -132
  374. package/dist/core/model-setup/wiring.js.map +0 -1
  375. package/dist/server/control/routes/model-setups.d.ts +0 -11
  376. package/dist/server/control/routes/model-setups.js +0 -55
  377. package/dist/server/control/routes/model-setups.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ export interface SettingValues {
2
+ invalid(key: string, value: unknown, why: string): never;
3
+ integer(key: string, value: unknown, min: number, max: number): number;
4
+ decimal(key: string, value: unknown, inRange: (n: number) => boolean, range: string): number;
5
+ yesNo(key: string, value: unknown): boolean;
6
+ oneOf<T extends string>(key: string, value: unknown, allowed: readonly T[]): T;
7
+ }
8
+ /** The checks, with messages that say `<provider> setting <key> …`. */
9
+ export declare function settingValues(provider: string): SettingValues;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * The value checks a managed provider's settings reader runs on merged stored values and a load's
3
+ * overrides (vLLM, SGLang): a number may arrive as its text, as the app's inputs store it, and anything
4
+ * out of range is `INVALID_ARGUMENT` naming the provider, the key and the value — before a container
5
+ * exists.
6
+ */
7
+ import { AtomicCoreError } from '../../contracts/index.js';
8
+ /** The checks, with messages that say `<provider> setting <key> …`. */
9
+ export function settingValues(provider) {
10
+ const invalid = (key, value, why) => {
11
+ throw new AtomicCoreError('INVALID_ARGUMENT', `${provider} setting ${key} ${why}.`, `${key}=${JSON.stringify(value)}`);
12
+ };
13
+ const asNumber = (value) => typeof value === 'string' && value.trim() !== '' ? Number(value) : value;
14
+ return {
15
+ invalid,
16
+ integer(key, value, min, max) {
17
+ const number = asNumber(value);
18
+ if (typeof number !== 'number' || !Number.isInteger(number) || number < min || number > max) {
19
+ return invalid(key, value, `must be a whole number from ${min} to ${max}`);
20
+ }
21
+ return number;
22
+ },
23
+ decimal(key, value, inRange, range) {
24
+ const number = asNumber(value);
25
+ if (typeof number !== 'number' || !Number.isFinite(number) || !inRange(number)) {
26
+ return invalid(key, value, `must be a number ${range}`);
27
+ }
28
+ return number;
29
+ },
30
+ yesNo(key, value) {
31
+ if (value === true || value === 'true')
32
+ return true;
33
+ if (value === false || value === 'false')
34
+ return false;
35
+ return invalid(key, value, 'must be true or false');
36
+ },
37
+ oneOf(key, value, allowed) {
38
+ return allowed.includes(value)
39
+ ? value
40
+ : invalid(key, value, `must be one of ${allowed.join(', ')}`);
41
+ },
42
+ };
43
+ }
44
+ //# sourceMappingURL=setting-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setting-values.js","sourceRoot":"","sources":["../../../src/runtime/managed-text/setting-values.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAU1D,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,KAAc,EAAE,GAAW,EAAS,EAAE;QAClE,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,GAAG,QAAQ,YAAY,GAAG,IAAI,GAAG,GAAG,EACpC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAClC,CAAA;IACH,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAW,EAAE,CAC3C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC1E,OAAO;QACL,OAAO;QACP,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;gBAC5F,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,+BAA+B,GAAG,OAAO,GAAG,EAAE,CAAC,CAAA;YAC5E,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;YAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/E,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,oBAAoB,KAAK,EAAE,CAAC,CAAA;YACzD,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,KAAK,CAAC,GAAG,EAAE,KAAK;YACd,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAA;YACnD,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAA;YACtD,OAAO,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAA;QACrD,CAAC;QACD,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO;YACvB,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAiC,CAAC;gBACxD,CAAC,CAAE,KAAkC;gBACrC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjE,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { ModelFamilySupport } from '../../contracts/index.js';
2
+ import { type ManagedEngineLaunch, type ManagedExitClassification, type ManagedLaunchContext, type ManagedRoute, type ManagedTextAdapter, type ManagedTextCapabilities } from '../managed-text/index.js';
3
+ import { type SglangSettings } from './settings.js';
4
+ /** The port `sglang.launch_server` listens on inside its container (SGLang's own default). */
5
+ export declare const SGLANG_CONTAINER_PORT = 30000;
6
+ /** What core decides for a launch from the card as it stands right before the container (design D4). */
7
+ export interface SglangLaunchPlan {
8
+ /**
9
+ * `--mem-fraction-static`: the share of the memory SGLang finds free at start-up that it keeps for
10
+ * weights and KV cache; the rest is its room for activations and CUDA graphs.
11
+ */
12
+ memFractionStatic: number;
13
+ /**
14
+ * The checkpoint has a vision or audio part: SGLang is told it is a language model only, so it
15
+ * reserves nothing for images and refuses them. A text-only model gets no override at all.
16
+ */
17
+ multimodal: boolean;
18
+ }
19
+ export declare function buildSglangLaunch(context: ManagedLaunchContext<SglangSettings>): ManagedEngineLaunch;
20
+ /** A base for engine start-up, the first kernel compilation and graph capture; more per GiB of weights. */
21
+ export declare const SGLANG_READINESS_BASE_MS: number;
22
+ export declare const SGLANG_READINESS_PER_GIB_MS = 20000;
23
+ export declare function sglangReadinessTimeoutMs(weightBytes: number, settings: SglangSettings): number;
24
+ export declare function classifySglangExit(log: string, exitCode: number | null): ManagedExitClassification;
25
+ export declare function sglangCapabilities(context: {
26
+ settings: SglangSettings;
27
+ family: ModelFamilySupport | null;
28
+ }): ManagedTextCapabilities;
29
+ /** Everything else SGLang serves — `/server_info`, `/flush_cache`, `/metrics`, embeddings… — is the gateway's 404. */
30
+ export declare const SGLANG_ROUTES: readonly ManagedRoute[];
31
+ export declare const SGLANG_REWRITABLE_ROUTES: readonly ManagedRoute[];
32
+ /**
33
+ * Caps the output a request asks for at `max_output_tokens` (one key, as the client sent it); a chat
34
+ * request that asks for none is capped by `SGLANG_MAX_NEW_TOKENS_LIMIT` instead, within the room the
35
+ * context has left (a completions request that names none gets OpenAI's 16, SGLang's own default). Writes the sampling defaults a request does not set: SGLang's OpenAI path fills
36
+ * every sampling value before `--preferred-sampling-params` would apply. Refuses what the session
37
+ * cannot do with `:1337`'s own wording and code: tools without a parser, structured output the family
38
+ * does not declare, images.
39
+ */
40
+ export declare function sglangRewriteRequestBody(route: string, body: unknown, settings: SglangSettings, capabilities?: ManagedTextCapabilities): unknown;
41
+ /** SGLang's context overflow as OpenAI's `context_length_exceeded`; anything else relayed as it is. */
42
+ export declare function mapSglangContextLengthError(status: number, body: string): object | null;
43
+ /**
44
+ * Reasoning parsers that may file a no-thinking reply under `reasoning_content` (design D3: the same
45
+ * hook as vLLM's). SGLang's `qwen3` parser splits only on the tags it sees when the request turned
46
+ * thinking off, so the hook is a no-op then; it moves what a model thought by its template's default.
47
+ */
48
+ export declare const SGLANG_REASONING_AT_START_PARSERS: ReadonlySet<string>;
49
+ export declare function sglangRewriteResponseFor(route: string, requestBody: unknown, family: ModelFamilySupport | null): ((json: Record<string, unknown>) => Record<string, unknown>) | null;
50
+ export declare const sglangAdapter: ManagedTextAdapter<SglangSettings>;
@@ -0,0 +1,393 @@
1
+ /**
2
+ * The `sglang` engine's `ManagedTextAdapter` (change `add-sglang-runtime`, task 2.2, design D3, D5;
3
+ * spec `sglang-runtime`): how core runs `python3 -m sglang.launch_server` from the `lmsysorg/sglang`
4
+ * image on the shared managed-text lifecycle. Everything here follows SGLang v0.5.21's source (the
5
+ * rulings of task 2.2 in the change's `rulings/core.md` say where).
6
+ *
7
+ * - **argv**: `--model-path <model> --served-model-name <id> --host 0.0.0.0 --port 30000
8
+ * --context-length <ctx> --max-running-requests <n> --mem-fraction-static <f>`, then only what
9
+ * differs from SGLang's own: the KV cache limit, the prefill chunk, `--disable-radix-cache`,
10
+ * `--dtype`, `--random-seed`, the CUDA graph mode (D5), `--kv-cache-dtype fp8_e4m3` on compute
11
+ * capability 8.9 and newer, the family's parsers, and `--json-model-override-args
12
+ * {"language_model_only":true}` for a multimodal checkpoint. `f` is core's (`plan`, from the card's
13
+ * free memory right before the container, design D4); within it SGLang sizes the KV cache itself.
14
+ * Never `--trust-remote-code` (no code from a model repository runs), `--log-requests` (prompts would
15
+ * land in the logs core serves), `--api-key`/`--admin-api-key` (the session gateway checks the key)
16
+ * or `--enable-metrics`.
17
+ * - **env**: Hugging Face offline (every file is already in the store), no tracking, the output limit
18
+ * for a request that names none (`SGLANG_MAX_NEW_TOKENS_LIMIT`), and every compile cache — SGLang's
19
+ * own and its JIT kernels', Triton's, inductor's, FlashInfer's, CUDA's, TileLang's — under the engine
20
+ * cache, so a second start of the same model reuses the first one's work.
21
+ * - **readiness** `GET /health`, then the shared generation probe; **routes** chat completions,
22
+ * completions and the model list; requests capped at the output setting, given the sampling defaults
23
+ * they do not set, refused for tools without a parser, structured output the family does not declare,
24
+ * and images; SGLang's context overflow answered as OpenAI's `context_length_exceeded` with both
25
+ * numbers.
26
+ *
27
+ * Log lines, exit wording and error bodies follow SGLang v0.5.21's source
28
+ * (`test/helpers/sglang-log-fixtures.ts`); the live run of task 4.1 confirms or replaces them.
29
+ */
30
+ import { AtomicCoreError } from '../../contracts/index.js';
31
+ import { supportsFp8KvCache } from '../managed-models/index.js';
32
+ import { withGenerationDefaults } from '../managed-text/generation-defaults.js';
33
+ import { MANAGED_TEXT_ADAPTER_CONTRACT_VERSION, ManagedRequestRefusal, asksForStructuredOutput, asksForTools, capRequestedOutput, carriesMedia, reasoningIntoContent, thinkingRequested, } from '../managed-text/index.js';
34
+ import { validateSglangSettings } from './settings.js';
35
+ const GiB = 1024 ** 3;
36
+ /** The port `sglang.launch_server` listens on inside its container (SGLang's own default). */
37
+ export const SGLANG_CONTAINER_PORT = 30000;
38
+ function isPlan(value) {
39
+ if (value === null || typeof value !== 'object')
40
+ return false;
41
+ const plan = value;
42
+ return (typeof plan['memFractionStatic'] === 'number' &&
43
+ plan['memFractionStatic'] > 0 &&
44
+ plan['memFractionStatic'] < 1 &&
45
+ typeof plan['multimodal'] === 'boolean');
46
+ }
47
+ /**
48
+ * Design D5 in SGLang v0.5.21's flags: `auto` captures decode graphs only up to the requests served at
49
+ * once (`--cuda-graph-max-bs-decode`), so they cost little memory; `on` is SGLang's own range; `off`
50
+ * disables both phases. `--disable-cuda-graph` is deprecated in v0.5.21 and never used.
51
+ */
52
+ function cudaGraphArgs(settings) {
53
+ switch (settings.cuda_graphs) {
54
+ case 'auto':
55
+ return ['--cuda-graph-max-bs-decode', String(settings.max_running_requests)];
56
+ case 'on':
57
+ return [];
58
+ case 'off':
59
+ return ['--disable-decode-cuda-graph', '--disable-prefill-cuda-graph'];
60
+ }
61
+ }
62
+ /**
63
+ * Every compile cache of the engine, under the engine cache (`ManagedLaunchContext.engineCachePath`).
64
+ * SGLang points the third-party ones at `SGLANG_CACHE_DIR` itself only when nothing imported them yet,
65
+ * and its JIT kernels at `~/.cache/sglang/jit` whatever that says, so each is set here.
66
+ */
67
+ function cacheEnv(cache) {
68
+ return {
69
+ SGLANG_CACHE_DIR: `${cache}/sglang`,
70
+ SGLANG_JIT_CACHE_DIR: `${cache}/sglang/jit`,
71
+ TRITON_CACHE_DIR: `${cache}/triton`,
72
+ TORCHINDUCTOR_CACHE_DIR: `${cache}/inductor`,
73
+ FLASHINFER_WORKSPACE_BASE: `${cache}/flashinfer`,
74
+ CUDA_CACHE_PATH: `${cache}/nv`,
75
+ TILELANG_CACHE_DIR: `${cache}/tilelang`,
76
+ };
77
+ }
78
+ export function buildSglangLaunch(context) {
79
+ if (!isPlan(context.plan)) {
80
+ throw new AtomicCoreError('INVALID_ARGUMENT', 'An SGLang launch needs core’s memory plan (its static memory share), computed right before the container is created.');
81
+ }
82
+ const { settings, family } = context;
83
+ const argv = [
84
+ 'python3',
85
+ '-m',
86
+ 'sglang.launch_server',
87
+ '--model-path',
88
+ context.modelPath,
89
+ '--served-model-name',
90
+ context.modelId,
91
+ '--host',
92
+ '0.0.0.0',
93
+ '--port',
94
+ String(SGLANG_CONTAINER_PORT),
95
+ '--context-length',
96
+ String(settings.context_length),
97
+ '--max-running-requests',
98
+ String(settings.max_running_requests),
99
+ '--mem-fraction-static',
100
+ String(Number(context.plan.memFractionStatic.toFixed(4))),
101
+ ];
102
+ if (settings.max_total_tokens !== null)
103
+ argv.push('--max-total-tokens', String(settings.max_total_tokens));
104
+ if (settings.chunked_prefill_size !== null) {
105
+ argv.push('--chunked-prefill-size', String(settings.chunked_prefill_size));
106
+ }
107
+ if (!settings.enable_prefix_caching)
108
+ argv.push('--disable-radix-cache');
109
+ if (settings.dtype !== 'auto')
110
+ argv.push('--dtype', settings.dtype);
111
+ if (settings.seed !== null)
112
+ argv.push('--random-seed', String(settings.seed));
113
+ argv.push(...cudaGraphArgs(settings));
114
+ if (settings.kv_cache_dtype === 'fp8' && supportsFp8KvCache(context.gpuComputeCapability)) {
115
+ argv.push('--kv-cache-dtype', 'fp8_e4m3');
116
+ }
117
+ // The checkpoint's own "text only" declaration, which every class of the descriptor honours (no
118
+ // multimodal reservation, media refused); SGLang's --language-model-only flag accepts only three
119
+ // architectures, none of them ours.
120
+ if (context.plan.multimodal) {
121
+ argv.push('--json-model-override-args', JSON.stringify({ language_model_only: true }));
122
+ }
123
+ if (family?.tool_parser)
124
+ argv.push('--tool-call-parser', family.tool_parser);
125
+ if (family?.reasoning_parser)
126
+ argv.push('--reasoning-parser', family.reasoning_parser);
127
+ return {
128
+ engine: { container_port: SGLANG_CONTAINER_PORT },
129
+ argv,
130
+ env: {
131
+ HF_HUB_OFFLINE: '1',
132
+ TRANSFORMERS_OFFLINE: '1',
133
+ DO_NOT_TRACK: '1',
134
+ // A chat request that names no output gets this, then whatever room the context has left:
135
+ // SGLang's scheduler clips rather than refuses, so a long prompt is not refused for the cap's
136
+ // room. (Completions keep OpenAI's default of 16, which SGLang applies before this.)
137
+ SGLANG_MAX_NEW_TOKENS_LIMIT: String(settings.max_output_tokens),
138
+ ...cacheEnv(context.engineCachePath),
139
+ },
140
+ };
141
+ }
142
+ /** A base for engine start-up, the first kernel compilation and graph capture; more per GiB of weights. */
143
+ export const SGLANG_READINESS_BASE_MS = 10 * 60_000;
144
+ export const SGLANG_READINESS_PER_GIB_MS = 20_000;
145
+ export function sglangReadinessTimeoutMs(weightBytes, settings) {
146
+ if (settings.load_timeout_seconds !== null)
147
+ return settings.load_timeout_seconds * 1000;
148
+ return Math.ceil(SGLANG_READINESS_BASE_MS + (weightBytes / GiB) * SGLANG_READINESS_PER_GIB_MS);
149
+ }
150
+ // ---------------------------------------------------------------------------------------------
151
+ // Exit classification
152
+ // ---------------------------------------------------------------------------------------------
153
+ const OOM = /CUDA out of memory\. Tried to allocate ([\d.]+) ?(GiB|MiB|KiB).*?of which ([\d.]+) ?(GiB|MiB|KiB|bytes) is free/;
154
+ /** `mem_cache/kv_cache_configurator.py`: the weights took all of the static share. */
155
+ const NO_KV_MEMORY = /Loaded weights leave no GPU memory for the KV cache under --mem-fraction-static=([\d.]+)\. Raise --mem-fraction-static above ([\d.]+)/;
156
+ /** `model_executor/pool_configurator.py`: a KV pool of no tokens. */
157
+ const EMPTY_POOL = /Not enough memory\. Please try to increase --mem-fraction-static\.(?: Current value: mem_fraction_static=([\d.]+))?/;
158
+ /** `configs/model_config.py::_derive_context_length`: the setting is longer than the model's own context. */
159
+ const CONTEXT_TOO_LONG = /context_length \((\d+)\) is greater than the derived context_length \((\d+)\)/;
160
+ const UNSUPPORTED_ARCHITECTURE = /Model architectures \[([^\]]*)\] are not supported for now/;
161
+ const ANY_OOM = /out of memory/i;
162
+ const toGiB = (amount, unit) => unit === 'GiB'
163
+ ? amount
164
+ : unit === 'MiB'
165
+ ? amount / 1024
166
+ : unit === 'KiB'
167
+ ? amount / 1024 ** 2
168
+ : amount / GiB;
169
+ const round = (value) => Math.round(value * 100) / 100;
170
+ export function classifySglangExit(log, exitCode) {
171
+ const noKv = NO_KV_MEMORY.exec(log);
172
+ if (noKv !== null) {
173
+ return {
174
+ kind: 'out-of-memory',
175
+ message: `The model's weights left no GPU memory for the KV cache: SGLang kept a share of ${noKv[1]} of the ` +
176
+ `free memory and needed more than ${noKv[2]}. Free GPU memory, or choose a smaller model.`,
177
+ numbers: { mem_fraction_static: Number(noKv[1]), minimum_mem_fraction_static: Number(noKv[2]) },
178
+ excerpt: noKv[0],
179
+ };
180
+ }
181
+ const empty = EMPTY_POOL.exec(log);
182
+ if (empty !== null) {
183
+ return {
184
+ kind: 'out-of-memory',
185
+ message: `The KV cache got no room after the model's weights` +
186
+ (empty[1] === undefined ? '' : ` within SGLang's memory share of ${empty[1]}`) +
187
+ '. Free GPU memory, or choose a smaller model.',
188
+ numbers: empty[1] === undefined ? {} : { mem_fraction_static: Number(empty[1]) },
189
+ excerpt: empty[0],
190
+ };
191
+ }
192
+ const oom = OOM.exec(log);
193
+ if (oom !== null) {
194
+ return {
195
+ kind: 'out-of-memory',
196
+ message: `The GPU ran out of memory: SGLang tried to allocate ${oom[1]} ${oom[2]} with ${oom[3]} ${oom[4]} free.`,
197
+ numbers: {
198
+ requested_gib: round(toGiB(Number(oom[1]), oom[2])),
199
+ free_gib: round(toGiB(Number(oom[3]), oom[4])),
200
+ },
201
+ excerpt: oom[0],
202
+ };
203
+ }
204
+ const tooLong = CONTEXT_TOO_LONG.exec(log);
205
+ if (tooLong !== null) {
206
+ return {
207
+ kind: 'other',
208
+ message: `The context length ${tooLong[1]} is longer than the model supports (${tooLong[2]} tokens). ` +
209
+ `Lower the context length in the SGLang settings to ${tooLong[2]} or less.`,
210
+ numbers: { context_length: Number(tooLong[1]), model_context_length: Number(tooLong[2]) },
211
+ excerpt: tooLong[0],
212
+ };
213
+ }
214
+ const arch = UNSUPPORTED_ARCHITECTURE.exec(log);
215
+ if (arch !== null) {
216
+ return {
217
+ kind: 'unsupported-model',
218
+ message: `This SGLang release cannot run the model's architecture: ${arch[1]?.replace(/'/g, '')}.`,
219
+ excerpt: arch[0],
220
+ };
221
+ }
222
+ if (ANY_OOM.test(log)) {
223
+ return { kind: 'out-of-memory', message: 'The GPU ran out of memory while SGLang started.' };
224
+ }
225
+ return {
226
+ kind: 'other',
227
+ message: `SGLang exited${exitCode === null ? '' : ` with code ${exitCode}`} before it was ready.`,
228
+ };
229
+ }
230
+ // ---------------------------------------------------------------------------------------------
231
+ // Capabilities, routes, request and response rewrites
232
+ // ---------------------------------------------------------------------------------------------
233
+ export function sglangCapabilities(context) {
234
+ const family = context.family;
235
+ return {
236
+ tools: Boolean(family?.tool_parser),
237
+ reasoning: Boolean(family?.reasoning_parser),
238
+ structured_output: family?.structured_output === true,
239
+ vision: false,
240
+ embeddings: false,
241
+ responses: false,
242
+ };
243
+ }
244
+ /** Everything else SGLang serves — `/server_info`, `/flush_cache`, `/metrics`, embeddings… — is the gateway's 404. */
245
+ export const SGLANG_ROUTES = [
246
+ { method: 'POST', path: '/v1/chat/completions' },
247
+ { method: 'POST', path: '/v1/completions' },
248
+ { method: 'GET', path: '/v1/models' },
249
+ ];
250
+ export const SGLANG_REWRITABLE_ROUTES = [
251
+ { method: 'POST', path: '/v1/chat/completions' },
252
+ { method: 'POST', path: '/v1/completions' },
253
+ ];
254
+ const REWRITABLE = new Set(SGLANG_REWRITABLE_ROUTES.map((route) => route.path));
255
+ /**
256
+ * Caps the output a request asks for at `max_output_tokens` (one key, as the client sent it); a chat
257
+ * request that asks for none is capped by `SGLANG_MAX_NEW_TOKENS_LIMIT` instead, within the room the
258
+ * context has left (a completions request that names none gets OpenAI's 16, SGLang's own default). Writes the sampling defaults a request does not set: SGLang's OpenAI path fills
259
+ * every sampling value before `--preferred-sampling-params` would apply. Refuses what the session
260
+ * cannot do with `:1337`'s own wording and code: tools without a parser, structured output the family
261
+ * does not declare, images.
262
+ */
263
+ export function sglangRewriteRequestBody(route, body, settings, capabilities) {
264
+ if (!REWRITABLE.has(route))
265
+ return body;
266
+ if (typeof body !== 'object' || body === null || Array.isArray(body))
267
+ return body;
268
+ const client = body;
269
+ const model = typeof client['model'] === 'string' ? `The model '${client['model']}'` : 'This model';
270
+ if (carriesMedia(client)) {
271
+ throw new ManagedRequestRefusal(`${model} does not support images.`, 'unsupported_capability');
272
+ }
273
+ if (capabilities !== undefined) {
274
+ if (!capabilities.tools && asksForTools(client)) {
275
+ throw new ManagedRequestRefusal(`${model} does not support tool calling.`, 'unsupported_capability');
276
+ }
277
+ if (!capabilities.structured_output && asksForStructuredOutput(client)) {
278
+ throw new ManagedRequestRefusal(`${model} does not support structured output.`, 'unsupported_capability');
279
+ }
280
+ }
281
+ return capRequestedOutput(route, withGenerationDefaults(client, settings.generation), settings.max_output_tokens);
282
+ }
283
+ /**
284
+ * SGLang's 400 wording for a request over the context (`managers/tokenizer_manager.py`), with the
285
+ * limit and the request: the input alone, and the input with the output it asked for.
286
+ */
287
+ const OVERFLOW = [
288
+ {
289
+ pattern: /The input \((\d+) tokens\) is longer than the model's context length \((\d+) tokens\)/,
290
+ limit: 2,
291
+ requested: 1,
292
+ },
293
+ {
294
+ pattern: /maximum context length of (\d+) tokens\. You requested a total of (\d+) tokens/,
295
+ limit: 1,
296
+ requested: 2,
297
+ },
298
+ ];
299
+ function errorMessage(body) {
300
+ try {
301
+ const parsed = JSON.parse(body);
302
+ const message = parsed.error?.message ?? parsed.message;
303
+ return typeof message === 'string' ? message : '';
304
+ }
305
+ catch {
306
+ return '';
307
+ }
308
+ }
309
+ /** SGLang's context overflow as OpenAI's `context_length_exceeded`; anything else relayed as it is. */
310
+ export function mapSglangContextLengthError(status, body) {
311
+ if (status !== 400)
312
+ return null;
313
+ const message = errorMessage(body);
314
+ for (const { pattern, limit, requested } of OVERFLOW) {
315
+ const match = pattern.exec(message);
316
+ if (match === null)
317
+ continue;
318
+ return {
319
+ error: {
320
+ message: `This model's maximum context length is ${match[limit]} tokens, but the request has ${match[requested]} tokens. Shorten the conversation or the requested output.`,
321
+ type: 'invalid_request_error',
322
+ param: 'messages',
323
+ code: 'context_length_exceeded',
324
+ },
325
+ };
326
+ }
327
+ return null;
328
+ }
329
+ /**
330
+ * Reasoning parsers that may file a no-thinking reply under `reasoning_content` (design D3: the same
331
+ * hook as vLLM's). SGLang's `qwen3` parser splits only on the tags it sees when the request turned
332
+ * thinking off, so the hook is a no-op then; it moves what a model thought by its template's default.
333
+ */
334
+ export const SGLANG_REASONING_AT_START_PARSERS = new Set(['qwen3']);
335
+ export function sglangRewriteResponseFor(route, requestBody, family) {
336
+ if (route !== '/v1/chat/completions')
337
+ return null;
338
+ const parser = family?.reasoning_parser ?? null;
339
+ if (parser === null || !SGLANG_REASONING_AT_START_PARSERS.has(parser))
340
+ return null;
341
+ return thinkingRequested(requestBody) ? null : reasoningIntoContent;
342
+ }
343
+ /**
344
+ * `initializing-engine` from the first line that shows SGLang working on the model: reading weights,
345
+ * sizing the KV pool, capturing CUDA graphs. Before them the load stays in `starting-container`
346
+ * (Python, CUDA and the tokenizer and scheduler processes coming up).
347
+ */
348
+ const STAGE_MARKERS = [
349
+ { stage: 'initializing-engine', pattern: /Load weight begin/ },
350
+ { stage: 'initializing-engine', pattern: /Load weight end/ },
351
+ { stage: 'initializing-engine', pattern: /Memory pool end/ },
352
+ { stage: 'initializing-engine', pattern: /Capture .* begin/ },
353
+ { stage: 'initializing-engine', pattern: /max_total_num_tokens=/ },
354
+ ];
355
+ export const sglangAdapter = {
356
+ id: 'sglang',
357
+ contractVersion: MANAGED_TEXT_ADAPTER_CONTRACT_VERSION,
358
+ readiness: { path: '/health', expectedStatus: 200 },
359
+ // `/health` alone is not proof the engine can serve (spec: ready only after one generated token).
360
+ generationProbe: {
361
+ modelsPath: '/v1/models',
362
+ path: '/v1/chat/completions',
363
+ body: { messages: [{ role: 'user', content: 'Hi' }], max_tokens: 1, stream: false },
364
+ },
365
+ routes: SGLANG_ROUTES,
366
+ rewritableRoutes: SGLANG_REWRITABLE_ROUTES,
367
+ stageMarkers: STAGE_MARKERS,
368
+ validateSettings: (raw) => validateSglangSettings((raw ?? {})),
369
+ buildLaunch: buildSglangLaunch,
370
+ readinessTimeoutMs: sglangReadinessTimeoutMs,
371
+ classifyExit: classifySglangExit,
372
+ capabilities: sglangCapabilities,
373
+ rewriteRequestBody: sglangRewriteRequestBody,
374
+ rewriteResponseFor: sglangRewriteResponseFor,
375
+ mapErrorResponse: (_route, status, body) => mapSglangContextLengthError(status, body),
376
+ // Everything SGLang is started with — the output limit too, an environment variable of its launch —
377
+ // and the sampling defaults its gateway writes; only the load timeout is a load's alone.
378
+ restartKey: (settings) => [
379
+ settings.context_length,
380
+ settings.max_output_tokens,
381
+ settings.max_running_requests,
382
+ settings.mem_fraction_static,
383
+ settings.max_total_tokens,
384
+ settings.cuda_graphs,
385
+ settings.kv_cache_dtype,
386
+ settings.enable_prefix_caching,
387
+ settings.chunked_prefill_size,
388
+ settings.dtype,
389
+ settings.seed,
390
+ JSON.stringify(settings.generation),
391
+ ],
392
+ };
393
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/runtime/sglang/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { ManagedEngineSpec } from '../managed-engines/spec.js';
2
+ import type { ManagedTextCapabilities } from '../managed-text/index.js';
3
+ import type { SessionRoutePolicy } from '../shared/index.js';
4
+ import { type SglangSettings } from './settings.js';
5
+ export declare const SGLANG_ENGINE_ID = "sglang";
6
+ /**
7
+ * What the public server (`:1337`) must know about an `sglang` session to route it honestly: only the
8
+ * routes the adapter declares, tool calls and JSON output only as the session can, and SGLang's
9
+ * context overflow answered as `context_length_exceeded`. `null` capabilities (a session the core did
10
+ * not start) keep the routes and the mapping and leave tools and JSON output to the engine.
11
+ */
12
+ export declare function sglangRoutePolicy(capabilities: ManagedTextCapabilities | null, limits?: {
13
+ contextLength: number;
14
+ maxOutputTokens: number;
15
+ } | null): SessionRoutePolicy;
16
+ export declare const SGLANG_ENGINE: ManagedEngineSpec<SglangSettings>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * SGLang as a managed engine (change `add-sglang-runtime`, task 2.4, design D1): its adapter,
3
+ * settings, memory rule and launch plan, route policy, and its descriptor in conf
4
+ * (`runtimes/sglang.json`, read only once conf main publishes it — until then the provider is
5
+ * unsupported, design D9).
6
+ */
7
+ import { defaultDescriptorUrl } from '../environment/index.js';
8
+ import { SGLANG_ROUTES, mapSglangContextLengthError, sglangAdapter } from './adapter.js';
9
+ import { sglangCheckEngine, sglangLaunchPlan } from './memory.js';
10
+ import { sglangSettings } from './settings.js';
11
+ export const SGLANG_ENGINE_ID = 'sglang';
12
+ /**
13
+ * What the public server (`:1337`) must know about an `sglang` session to route it honestly: only the
14
+ * routes the adapter declares, tool calls and JSON output only as the session can, and SGLang's
15
+ * context overflow answered as `context_length_exceeded`. `null` capabilities (a session the core did
16
+ * not start) keep the routes and the mapping and leave tools and JSON output to the engine.
17
+ */
18
+ export function sglangRoutePolicy(capabilities, limits = null) {
19
+ return {
20
+ routes: SGLANG_ROUTES,
21
+ tools: capabilities?.tools ?? true,
22
+ structuredOutput: capabilities?.structured_output ?? true,
23
+ mapError: mapSglangContextLengthError,
24
+ ...(limits === null ? {} : limits),
25
+ };
26
+ }
27
+ export const SGLANG_ENGINE = {
28
+ engine_id: SGLANG_ENGINE_ID,
29
+ provider: SGLANG_ENGINE_ID,
30
+ label: 'SGLang',
31
+ descriptor: { engine_id: SGLANG_ENGINE_ID, label: 'SGLang', url: defaultDescriptorUrl(SGLANG_ENGINE_ID) },
32
+ adapter: sglangAdapter,
33
+ settings: sglangSettings,
34
+ check: sglangCheckEngine,
35
+ launchPlan: sglangLaunchPlan,
36
+ routePolicy: sglangRoutePolicy,
37
+ };
38
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/runtime/sglang/engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,EAAE,aAAa,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACxF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,EAAE,cAAc,EAAuB,MAAM,eAAe,CAAA;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AAExC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAA4C,EAC5C,SAAoE,IAAI;IAExE,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,IAAI;QAClC,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,IAAI,IAAI;QACzD,QAAQ,EAAE,2BAA2B;QACrC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;KACnC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAsC;IAC9D,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,QAAQ;IACf,UAAU,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,EAAE;IACzG,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,cAAc;IACxB,KAAK,EAAE,iBAAiB;IACxB,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,iBAAiB;CAC/B,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The `sglang` provider (change `add-sglang-runtime`): its settings (`settings.ts`), the
3
+ * `ManagedTextAdapter` for `sglang.launch_server` (`adapter.ts`), its memory model (`memory.ts`) and
4
+ * its spec in the managed engine registry (`engine.ts`).
5
+ *
6
+ * Public API of this module is exported from this file only.
7
+ */
8
+ export * from './settings.js';
9
+ export * from './adapter.js';
10
+ export * from './memory.js';
11
+ export * from './engine.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The `sglang` provider (change `add-sglang-runtime`): its settings (`settings.ts`), the
3
+ * `ManagedTextAdapter` for `sglang.launch_server` (`adapter.ts`), its memory model (`memory.ts`) and
4
+ * its spec in the managed engine registry (`engine.ts`).
5
+ *
6
+ * Public API of this module is exported from this file only.
7
+ */
8
+ export * from './settings.js';
9
+ export * from './adapter.js';
10
+ export * from './memory.js';
11
+ export * from './engine.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/sglang/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}