@atomic-chat/core 0.13.6 → 0.18.3

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 (460) hide show
  1. package/README.md +1 -1
  2. package/dist/app-daemon.js +9 -0
  3. package/dist/app-daemon.js.map +1 -1
  4. package/dist/backend/advisor/advisor.d.ts +8 -7
  5. package/dist/backend/advisor/advisor.js +17 -25
  6. package/dist/backend/advisor/advisor.js.map +1 -1
  7. package/dist/backend/catalog/index.d.ts +4 -2
  8. package/dist/backend/catalog/index.js +4 -2
  9. package/dist/backend/catalog/index.js.map +1 -1
  10. package/dist/backend/catalog/manifest.d.ts +5 -51
  11. package/dist/backend/catalog/manifest.js +5 -93
  12. package/dist/backend/catalog/manifest.js.map +1 -1
  13. package/dist/backend/catalog/upstream-releases-baseline.d.ts +2 -0
  14. package/dist/backend/catalog/upstream-releases-baseline.js +12 -0
  15. package/dist/backend/catalog/upstream-releases-baseline.js.map +1 -0
  16. package/dist/backend/catalog/upstream-releases-baseline.json +101 -0
  17. package/dist/backend/catalog/upstream-releases-catalog.d.ts +54 -0
  18. package/dist/backend/catalog/upstream-releases-catalog.js +148 -0
  19. package/dist/backend/catalog/upstream-releases-catalog.js.map +1 -0
  20. package/dist/backend/catalog/upstream-releases.d.ts +75 -0
  21. package/dist/backend/catalog/upstream-releases.js +155 -0
  22. package/dist/backend/catalog/upstream-releases.js.map +1 -0
  23. package/dist/backend/install/service.d.ts +7 -4
  24. package/dist/backend/install/service.js +4 -4
  25. package/dist/backend/install/service.js.map +1 -1
  26. package/dist/cli/commands/serve.js +10 -28
  27. package/dist/cli/commands/serve.js.map +1 -1
  28. package/dist/cli/main.d.ts +1 -1
  29. package/dist/cli/main.js +5 -1
  30. package/dist/cli/main.js.map +1 -1
  31. package/dist/client/control-client.d.ts +16 -19
  32. package/dist/client/control-client.js +24 -29
  33. package/dist/client/control-client.js.map +1 -1
  34. package/dist/cloud/registry.d.ts +14 -1
  35. package/dist/cloud/registry.js +74 -2
  36. package/dist/cloud/registry.js.map +1 -1
  37. package/dist/config/paths.d.ts +8 -3
  38. package/dist/config/paths.js +21 -9
  39. package/dist/config/paths.js.map +1 -1
  40. package/dist/contracts/diffusion.d.ts +45 -18
  41. package/dist/contracts/diffusion.js +1 -1
  42. package/dist/contracts/diffusion.js.map +1 -1
  43. package/dist/contracts/engine-builds.d.ts +1 -1
  44. package/dist/contracts/engine-builds.js +1 -1
  45. package/dist/contracts/engine-builds.js.map +1 -1
  46. package/dist/contracts/engines.d.ts +1 -1
  47. package/dist/contracts/engines.js +4 -0
  48. package/dist/contracts/engines.js.map +1 -1
  49. package/dist/contracts/errors.d.ts +8 -4
  50. package/dist/contracts/errors.js +16 -0
  51. package/dist/contracts/errors.js.map +1 -1
  52. package/dist/contracts/events.d.ts +18 -6
  53. package/dist/contracts/foundry-local.d.ts +77 -0
  54. package/dist/contracts/foundry-local.js +17 -0
  55. package/dist/contracts/foundry-local.js.map +1 -0
  56. package/dist/contracts/index.d.ts +2 -1
  57. package/dist/contracts/index.js +2 -1
  58. package/dist/contracts/index.js.map +1 -1
  59. package/dist/contracts/media.d.ts +186 -0
  60. package/dist/contracts/media.js +55 -0
  61. package/dist/contracts/media.js.map +1 -0
  62. package/dist/contracts/model-yml.d.ts +28 -0
  63. package/dist/contracts/model-yml.js +11 -0
  64. package/dist/contracts/model-yml.js.map +1 -1
  65. package/dist/contracts/session.d.ts +14 -1
  66. package/dist/contracts/session.js +10 -0
  67. package/dist/contracts/session.js.map +1 -1
  68. package/dist/contracts/settings.d.ts +40 -1
  69. package/dist/contracts/settings.js.map +1 -1
  70. package/dist/core/atomic-core.d.ts +5 -5
  71. package/dist/core/atomic-core.js.map +1 -1
  72. package/dist/core/create.js +149 -64
  73. package/dist/core/create.js.map +1 -1
  74. package/dist/core/managed-engines.js +2 -0
  75. package/dist/core/managed-engines.js.map +1 -1
  76. package/dist/core/prism.d.ts +21 -6
  77. package/dist/core/prism.js +44 -0
  78. package/dist/core/prism.js.map +1 -1
  79. package/dist/core/types.d.ts +9 -5
  80. package/dist/diffusion/gallery.d.ts +24 -3
  81. package/dist/diffusion/gallery.js +151 -21
  82. package/dist/diffusion/gallery.js.map +1 -1
  83. package/dist/diffusion/index.d.ts +3 -0
  84. package/dist/diffusion/index.js +3 -0
  85. package/dist/diffusion/index.js.map +1 -1
  86. package/dist/diffusion/install.d.ts +0 -4
  87. package/dist/diffusion/install.js +5 -2
  88. package/dist/diffusion/install.js.map +1 -1
  89. package/dist/diffusion/jobs.d.ts +6 -1
  90. package/dist/diffusion/jobs.js +6 -1
  91. package/dist/diffusion/jobs.js.map +1 -1
  92. package/dist/diffusion/media-header.d.ts +22 -0
  93. package/dist/diffusion/media-header.js +149 -0
  94. package/dist/diffusion/media-header.js.map +1 -0
  95. package/dist/diffusion/parse.d.ts +3 -1
  96. package/dist/diffusion/parse.js +36 -0
  97. package/dist/diffusion/parse.js.map +1 -1
  98. package/dist/diffusion/recipe.d.ts +10 -1
  99. package/dist/diffusion/recipe.js +85 -21
  100. package/dist/diffusion/recipe.js.map +1 -1
  101. package/dist/diffusion/remote-job.d.ts +76 -0
  102. package/dist/diffusion/remote-job.js +643 -0
  103. package/dist/diffusion/remote-job.js.map +1 -0
  104. package/dist/diffusion/remote-store.d.ts +38 -0
  105. package/dist/diffusion/remote-store.js +91 -0
  106. package/dist/diffusion/remote-store.js.map +1 -0
  107. package/dist/diffusion/server-process.d.ts +5 -2
  108. package/dist/diffusion/server-process.js +10 -2
  109. package/dist/diffusion/server-process.js.map +1 -1
  110. package/dist/diffusion/service.d.ts +9 -1
  111. package/dist/diffusion/service.js +49 -9
  112. package/dist/diffusion/service.js.map +1 -1
  113. package/dist/diffusion/state.d.ts +13 -1
  114. package/dist/diffusion/state.js +8 -0
  115. package/dist/diffusion/state.js.map +1 -1
  116. package/dist/diffusion/video-gallery.d.ts +11 -4
  117. package/dist/diffusion/video-gallery.js +62 -25
  118. package/dist/diffusion/video-gallery.js.map +1 -1
  119. package/dist/diffusion/video-history.js +4 -1
  120. package/dist/diffusion/video-history.js.map +1 -1
  121. package/dist/diffusion/video-recipe.js +58 -25
  122. package/dist/diffusion/video-recipe.js.map +1 -1
  123. package/dist/diffusion/wiring.d.ts +3 -0
  124. package/dist/diffusion/wiring.js +1 -0
  125. package/dist/diffusion/wiring.js.map +1 -1
  126. package/dist/downloads/archive.d.ts +1 -1
  127. package/dist/downloads/archive.js +2 -2
  128. package/dist/downloads/archive.js.map +1 -1
  129. package/dist/downloads/downloader.d.ts +1 -18
  130. package/dist/downloads/downloader.js +1 -45
  131. package/dist/downloads/downloader.js.map +1 -1
  132. package/dist/engine-builds/engines.d.ts +83 -0
  133. package/dist/engine-builds/engines.js +144 -0
  134. package/dist/engine-builds/engines.js.map +1 -0
  135. package/dist/engine-builds/foundry-local.d.ts +22 -0
  136. package/dist/engine-builds/foundry-local.js +100 -0
  137. package/dist/engine-builds/foundry-local.js.map +1 -0
  138. package/dist/engine-builds/manifest.d.ts +57 -6
  139. package/dist/engine-builds/manifest.js +109 -4
  140. package/dist/engine-builds/manifest.js.map +1 -1
  141. package/dist/engine-builds/order.d.ts +2 -1
  142. package/dist/engine-builds/order.js +11 -4
  143. package/dist/engine-builds/order.js.map +1 -1
  144. package/dist/engine-builds/select.d.ts +27 -0
  145. package/dist/engine-builds/select.js +45 -0
  146. package/dist/engine-builds/select.js.map +1 -1
  147. package/dist/engine-builds/service.d.ts +14 -15
  148. package/dist/engine-builds/service.js +68 -126
  149. package/dist/engine-builds/service.js.map +1 -1
  150. package/dist/engines/service.d.ts +6 -3
  151. package/dist/engines/service.js +6 -3
  152. package/dist/engines/service.js.map +1 -1
  153. package/dist/hardware/index.d.ts +1 -0
  154. package/dist/hardware/index.js +1 -0
  155. package/dist/hardware/index.js.map +1 -1
  156. package/dist/hardware/npu.d.ts +14 -0
  157. package/dist/hardware/npu.js +29 -0
  158. package/dist/hardware/npu.js.map +1 -0
  159. package/dist/integrations/detect.d.ts +2 -0
  160. package/dist/integrations/detect.js +4 -3
  161. package/dist/integrations/detect.js.map +1 -1
  162. package/dist/lock/instance-lock.js +5 -2
  163. package/dist/lock/instance-lock.js.map +1 -1
  164. package/dist/lock/process-identity.d.ts +9 -3
  165. package/dist/lock/process-identity.js +75 -9
  166. package/dist/lock/process-identity.js.map +1 -1
  167. package/dist/media/adapters/a1111.d.ts +32 -0
  168. package/dist/media/adapters/a1111.js +207 -0
  169. package/dist/media/adapters/a1111.js.map +1 -0
  170. package/dist/media/adapters/aimlapi-videos.d.ts +34 -0
  171. package/dist/media/adapters/aimlapi-videos.js +172 -0
  172. package/dist/media/adapters/aimlapi-videos.js.map +1 -0
  173. package/dist/media/adapters/dashscope-image.d.ts +26 -0
  174. package/dist/media/adapters/dashscope-image.js +160 -0
  175. package/dist/media/adapters/dashscope-image.js.map +1 -0
  176. package/dist/media/adapters/dashscope-video.d.ts +47 -0
  177. package/dist/media/adapters/dashscope-video.js +251 -0
  178. package/dist/media/adapters/dashscope-video.js.map +1 -0
  179. package/dist/media/adapters/gemini-image.d.ts +27 -0
  180. package/dist/media/adapters/gemini-image.js +181 -0
  181. package/dist/media/adapters/gemini-image.js.map +1 -0
  182. package/dist/media/adapters/gemini-veo.d.ts +39 -0
  183. package/dist/media/adapters/gemini-veo.js +196 -0
  184. package/dist/media/adapters/gemini-veo.js.map +1 -0
  185. package/dist/media/adapters/hf-images.d.ts +85 -0
  186. package/dist/media/adapters/hf-images.js +439 -0
  187. package/dist/media/adapters/hf-images.js.map +1 -0
  188. package/dist/media/adapters/hf-videos.d.ts +44 -0
  189. package/dist/media/adapters/hf-videos.js +265 -0
  190. package/dist/media/adapters/hf-videos.js.map +1 -0
  191. package/dist/media/adapters/minimax-image.d.ts +26 -0
  192. package/dist/media/adapters/minimax-image.js +111 -0
  193. package/dist/media/adapters/minimax-image.js.map +1 -0
  194. package/dist/media/adapters/minimax-video-v2.d.ts +34 -0
  195. package/dist/media/adapters/minimax-video-v2.js +191 -0
  196. package/dist/media/adapters/minimax-video-v2.js.map +1 -0
  197. package/dist/media/adapters/minimax-video.d.ts +28 -0
  198. package/dist/media/adapters/minimax-video.js +155 -0
  199. package/dist/media/adapters/minimax-video.js.map +1 -0
  200. package/dist/media/adapters/mistral-agent-image.d.ts +33 -0
  201. package/dist/media/adapters/mistral-agent-image.js +108 -0
  202. package/dist/media/adapters/mistral-agent-image.js.map +1 -0
  203. package/dist/media/adapters/nvidia-genai.d.ts +28 -0
  204. package/dist/media/adapters/nvidia-genai.js +182 -0
  205. package/dist/media/adapters/nvidia-genai.js.map +1 -0
  206. package/dist/media/adapters/openai-images.d.ts +23 -0
  207. package/dist/media/adapters/openai-images.js +164 -0
  208. package/dist/media/adapters/openai-images.js.map +1 -0
  209. package/dist/media/adapters/openai-videos.d.ts +34 -0
  210. package/dist/media/adapters/openai-videos.js +175 -0
  211. package/dist/media/adapters/openai-videos.js.map +1 -0
  212. package/dist/media/adapters/openrouter-images.d.ts +25 -0
  213. package/dist/media/adapters/openrouter-images.js +161 -0
  214. package/dist/media/adapters/openrouter-images.js.map +1 -0
  215. package/dist/media/adapters/openrouter-videos.d.ts +43 -0
  216. package/dist/media/adapters/openrouter-videos.js +208 -0
  217. package/dist/media/adapters/openrouter-videos.js.map +1 -0
  218. package/dist/media/adapters/registry.d.ts +7 -0
  219. package/dist/media/adapters/registry.js +45 -0
  220. package/dist/media/adapters/registry.js.map +1 -0
  221. package/dist/media/adapters/types.d.ts +133 -0
  222. package/dist/media/adapters/types.js +15 -0
  223. package/dist/media/adapters/types.js.map +1 -0
  224. package/dist/media/adapters/xai-images.d.ts +19 -0
  225. package/dist/media/adapters/xai-images.js +83 -0
  226. package/dist/media/adapters/xai-images.js.map +1 -0
  227. package/dist/media/adapters/xai-videos.d.ts +29 -0
  228. package/dist/media/adapters/xai-videos.js +148 -0
  229. package/dist/media/adapters/xai-videos.js.map +1 -0
  230. package/dist/media/catalog-baseline.d.ts +2 -0
  231. package/dist/media/catalog-baseline.js +10 -0
  232. package/dist/media/catalog-baseline.js.map +1 -0
  233. package/dist/media/catalog-baseline.json +1819 -0
  234. package/dist/media/catalog-service.d.ts +42 -0
  235. package/dist/media/catalog-service.js +111 -0
  236. package/dist/media/catalog-service.js.map +1 -0
  237. package/dist/media/catalog.d.ts +50 -0
  238. package/dist/media/catalog.js +315 -0
  239. package/dist/media/catalog.js.map +1 -0
  240. package/dist/media/http.d.ts +125 -0
  241. package/dist/media/http.js +308 -0
  242. package/dist/media/http.js.map +1 -0
  243. package/dist/media/index.d.ts +14 -0
  244. package/dist/media/index.js +15 -0
  245. package/dist/media/index.js.map +1 -0
  246. package/dist/media/mask.d.ts +12 -0
  247. package/dist/media/mask.js +57 -0
  248. package/dist/media/mask.js.map +1 -0
  249. package/dist/media/service.d.ts +42 -0
  250. package/dist/media/service.js +144 -0
  251. package/dist/media/service.js.map +1 -0
  252. package/dist/models/hf.d.ts +3 -16
  253. package/dist/models/hf.js +4 -42
  254. package/dist/models/hf.js.map +1 -1
  255. package/dist/router/resolve.d.ts +15 -4
  256. package/dist/router/resolve.js +26 -3
  257. package/dist/router/resolve.js.map +1 -1
  258. package/dist/runtime/environment/linux-provisioner.js +7 -67
  259. package/dist/runtime/environment/linux-provisioner.js.map +1 -1
  260. package/dist/runtime/environment/runtime-removal-plan.d.ts +19 -0
  261. package/dist/runtime/environment/runtime-removal-plan.js +74 -0
  262. package/dist/runtime/environment/runtime-removal-plan.js.map +1 -0
  263. package/dist/runtime/environment/windows-provisioner.js +20 -4
  264. package/dist/runtime/environment/windows-provisioner.js.map +1 -1
  265. package/dist/runtime/foundry-local/accelerators.d.ts +42 -0
  266. package/dist/runtime/foundry-local/accelerators.js +153 -0
  267. package/dist/runtime/foundry-local/accelerators.js.map +1 -0
  268. package/dist/runtime/foundry-local/check.d.ts +19 -0
  269. package/dist/runtime/foundry-local/check.js +69 -0
  270. package/dist/runtime/foundry-local/check.js.map +1 -0
  271. package/dist/runtime/foundry-local/host/args.d.ts +44 -0
  272. package/dist/runtime/foundry-local/host/args.js +109 -0
  273. package/dist/runtime/foundry-local/host/args.js.map +1 -0
  274. package/dist/runtime/foundry-local/host/execution-providers.d.ts +27 -0
  275. package/dist/runtime/foundry-local/host/execution-providers.js +43 -0
  276. package/dist/runtime/foundry-local/host/execution-providers.js.map +1 -0
  277. package/dist/runtime/foundry-local/host/ffi-bun.d.ts +17 -0
  278. package/dist/runtime/foundry-local/host/ffi-bun.js +256 -0
  279. package/dist/runtime/foundry-local/host/ffi-bun.js.map +1 -0
  280. package/dist/runtime/foundry-local/host/library.d.ts +61 -0
  281. package/dist/runtime/foundry-local/host/library.js +17 -0
  282. package/dist/runtime/foundry-local/host/library.js.map +1 -0
  283. package/dist/runtime/foundry-local/host/run.d.ts +54 -0
  284. package/dist/runtime/foundry-local/host/run.js +316 -0
  285. package/dist/runtime/foundry-local/host/run.js.map +1 -0
  286. package/dist/runtime/foundry-local/host-process.d.ts +78 -0
  287. package/dist/runtime/foundry-local/host-process.js +182 -0
  288. package/dist/runtime/foundry-local/host-process.js.map +1 -0
  289. package/dist/runtime/foundry-local/index.d.ts +11 -0
  290. package/dist/runtime/foundry-local/index.js +11 -0
  291. package/dist/runtime/foundry-local/index.js.map +1 -0
  292. package/dist/runtime/foundry-local/model-yml.d.ts +8 -0
  293. package/dist/runtime/foundry-local/model-yml.js +63 -0
  294. package/dist/runtime/foundry-local/model-yml.js.map +1 -0
  295. package/dist/runtime/foundry-local/runtime.d.ts +88 -0
  296. package/dist/runtime/foundry-local/runtime.js +321 -0
  297. package/dist/runtime/foundry-local/runtime.js.map +1 -0
  298. package/dist/runtime/llamacpp/args.d.ts +5 -0
  299. package/dist/runtime/llamacpp/args.js +7 -1
  300. package/dist/runtime/llamacpp/args.js.map +1 -1
  301. package/dist/runtime/llamacpp/errors.d.ts +1 -0
  302. package/dist/runtime/llamacpp/errors.js +10 -0
  303. package/dist/runtime/llamacpp/errors.js.map +1 -1
  304. package/dist/runtime/llamacpp/load-plan.d.ts +5 -0
  305. package/dist/runtime/llamacpp/load-plan.js +8 -0
  306. package/dist/runtime/llamacpp/load-plan.js.map +1 -1
  307. package/dist/runtime/llamacpp/runtime-device.d.ts +8 -0
  308. package/dist/runtime/llamacpp/runtime-device.js +9 -3
  309. package/dist/runtime/llamacpp/runtime-device.js.map +1 -1
  310. package/dist/runtime/llamacpp/runtime.d.ts +6 -1
  311. package/dist/runtime/llamacpp/runtime.js +19 -3
  312. package/dist/runtime/llamacpp/runtime.js.map +1 -1
  313. package/dist/runtime/managed-engines/spec.d.ts +2 -2
  314. package/dist/runtime/managed-engines/spec.js +6 -0
  315. package/dist/runtime/managed-engines/spec.js.map +1 -1
  316. package/dist/runtime/managed-models/compatibility.d.ts +10 -0
  317. package/dist/runtime/managed-models/compatibility.js +18 -0
  318. package/dist/runtime/managed-models/compatibility.js.map +1 -1
  319. package/dist/runtime/managed-text/gateway.d.ts +2 -0
  320. package/dist/runtime/managed-text/gateway.js +1 -1
  321. package/dist/runtime/managed-text/gateway.js.map +1 -1
  322. package/dist/runtime/managed-text/request-rules.d.ts +9 -7
  323. package/dist/runtime/managed-text/request-rules.js +58 -2
  324. package/dist/runtime/managed-text/request-rules.js.map +1 -1
  325. package/dist/runtime/managed-text/setting-values.d.ts +9 -0
  326. package/dist/runtime/managed-text/setting-values.js +44 -0
  327. package/dist/runtime/managed-text/setting-values.js.map +1 -0
  328. package/dist/runtime/sglang/adapter.d.ts +50 -0
  329. package/dist/runtime/sglang/adapter.js +393 -0
  330. package/dist/runtime/sglang/adapter.js.map +1 -0
  331. package/dist/runtime/sglang/engine.d.ts +16 -0
  332. package/dist/runtime/sglang/engine.js +38 -0
  333. package/dist/runtime/sglang/engine.js.map +1 -0
  334. package/dist/runtime/sglang/index.d.ts +11 -0
  335. package/dist/runtime/sglang/index.js +12 -0
  336. package/dist/runtime/sglang/index.js.map +1 -0
  337. package/dist/runtime/sglang/memory.d.ts +64 -0
  338. package/dist/runtime/sglang/memory.js +90 -0
  339. package/dist/runtime/sglang/memory.js.map +1 -0
  340. package/dist/runtime/sglang/settings.d.ts +49 -0
  341. package/dist/runtime/sglang/settings.js +118 -0
  342. package/dist/runtime/sglang/settings.js.map +1 -0
  343. package/dist/runtime/shared/external-sessions.js +2 -0
  344. package/dist/runtime/shared/external-sessions.js.map +1 -1
  345. package/dist/runtime/shared/process.d.ts +13 -1
  346. package/dist/runtime/shared/process.js +21 -12
  347. package/dist/runtime/shared/process.js.map +1 -1
  348. package/dist/runtime/vllm/adapter.js +2 -47
  349. package/dist/runtime/vllm/adapter.js.map +1 -1
  350. package/dist/runtime/vllm/memory.js +3 -16
  351. package/dist/runtime/vllm/memory.js.map +1 -1
  352. package/dist/runtime/vllm/settings.d.ts +7 -0
  353. package/dist/runtime/vllm/settings.js +2 -30
  354. package/dist/runtime/vllm/settings.js.map +1 -1
  355. package/dist/server/control/router.js +6 -3
  356. package/dist/server/control/router.js.map +1 -1
  357. package/dist/server/control/routes/foundry-local.d.ts +10 -0
  358. package/dist/server/control/routes/foundry-local.js +42 -0
  359. package/dist/server/control/routes/foundry-local.js.map +1 -0
  360. package/dist/server/control/routes/media.d.ts +9 -0
  361. package/dist/server/control/routes/media.js +24 -0
  362. package/dist/server/control/routes/media.js.map +1 -0
  363. package/dist/server/control/routes/model-compatibility.d.ts +9 -0
  364. package/dist/server/control/routes/model-compatibility.js +31 -0
  365. package/dist/server/control/routes/model-compatibility.js.map +1 -0
  366. package/dist/server/control/routes/models.js +3 -1
  367. package/dist/server/control/routes/models.js.map +1 -1
  368. package/dist/server/control/types.d.ts +30 -20
  369. package/dist/server/control/types.js.map +1 -1
  370. package/dist/server/http.js +17 -2
  371. package/dist/server/http.js.map +1 -1
  372. package/dist/server/public/errors.d.ts +1 -0
  373. package/dist/server/public/errors.js +18 -0
  374. package/dist/server/public/errors.js.map +1 -1
  375. package/dist/server/public/images-params.js +18 -1
  376. package/dist/server/public/images-params.js.map +1 -1
  377. package/dist/server/public/images.d.ts +11 -2
  378. package/dist/server/public/images.js +73 -9
  379. package/dist/server/public/images.js.map +1 -1
  380. package/dist/server/public/index.js +7 -1
  381. package/dist/server/public/index.js.map +1 -1
  382. package/dist/server/public/listing.js +2 -0
  383. package/dist/server/public/listing.js.map +1 -1
  384. package/dist/server/public/remote-media.d.ts +51 -0
  385. package/dist/server/public/remote-media.js +225 -0
  386. package/dist/server/public/remote-media.js.map +1 -0
  387. package/dist/server/public/responses.js +4 -2
  388. package/dist/server/public/responses.js.map +1 -1
  389. package/dist/server/public/static-assets.generated.js +1 -1
  390. package/dist/server/public/static-assets.generated.js.map +1 -1
  391. package/dist/server/public/trace.js +2 -0
  392. package/dist/server/public/trace.js.map +1 -1
  393. package/dist/server/public/types.d.ts +5 -1
  394. package/dist/server/public/videos-params.js +13 -3
  395. package/dist/server/public/videos-params.js.map +1 -1
  396. package/dist/server/public/videos.d.ts +1 -0
  397. package/dist/server/public/videos.js +21 -3
  398. package/dist/server/public/videos.js.map +1 -1
  399. package/dist/settings/schema/foundry-local.json +14 -0
  400. package/dist/settings/schema/llamacpp-upstream.json +9 -0
  401. package/dist/settings/schema/sglang.json +251 -0
  402. package/dist/settings/schema.js +35 -1
  403. package/dist/settings/schema.js.map +1 -1
  404. package/dist/version.d.ts +1 -1
  405. package/dist/version.js +1 -1
  406. package/package.json +2 -5
  407. package/src/settings/schema/foundry-local.json +14 -0
  408. package/src/settings/schema/llamacpp-upstream.json +9 -0
  409. package/src/settings/schema/sglang.json +251 -0
  410. package/dist/backend/catalog/bundled-manifest-baseline.d.ts +0 -2
  411. package/dist/backend/catalog/bundled-manifest-baseline.js +0 -65
  412. package/dist/backend/catalog/bundled-manifest-baseline.js.map +0 -1
  413. package/dist/contracts/model-setup.d.ts +0 -115
  414. package/dist/contracts/model-setup.js +0 -33
  415. package/dist/contracts/model-setup.js.map +0 -1
  416. package/dist/core/model-setup/index.d.ts +0 -4
  417. package/dist/core/model-setup/index.js +0 -5
  418. package/dist/core/model-setup/index.js.map +0 -1
  419. package/dist/core/model-setup/plan.d.ts +0 -56
  420. package/dist/core/model-setup/plan.js +0 -158
  421. package/dist/core/model-setup/plan.js.map +0 -1
  422. package/dist/core/model-setup/service.d.ts +0 -92
  423. package/dist/core/model-setup/service.js +0 -329
  424. package/dist/core/model-setup/service.js.map +0 -1
  425. package/dist/core/model-setup/store.d.ts +0 -29
  426. package/dist/core/model-setup/store.js +0 -116
  427. package/dist/core/model-setup/store.js.map +0 -1
  428. package/dist/core/model-setup/wiring.d.ts +0 -59
  429. package/dist/core/model-setup/wiring.js +0 -132
  430. package/dist/core/model-setup/wiring.js.map +0 -1
  431. package/dist/core/tensorrt-llm.d.ts +0 -169
  432. package/dist/core/tensorrt-llm.js +0 -428
  433. package/dist/core/tensorrt-llm.js.map +0 -1
  434. package/dist/downloads/segmented.d.ts +0 -40
  435. package/dist/downloads/segmented.js +0 -170
  436. package/dist/downloads/segmented.js.map +0 -1
  437. package/dist/runtime/tensorrt-llm/delete.d.ts +0 -15
  438. package/dist/runtime/tensorrt-llm/delete.js +0 -60
  439. package/dist/runtime/tensorrt-llm/delete.js.map +0 -1
  440. package/dist/runtime/tensorrt-llm/guest-files.d.ts +0 -8
  441. package/dist/runtime/tensorrt-llm/guest-files.js +0 -49
  442. package/dist/runtime/tensorrt-llm/guest-files.js.map +0 -1
  443. package/dist/runtime/tensorrt-llm/location.d.ts +0 -20
  444. package/dist/runtime/tensorrt-llm/location.js +0 -48
  445. package/dist/runtime/tensorrt-llm/location.js.map +0 -1
  446. package/dist/runtime/tensorrt-llm/model-dir.d.ts +0 -38
  447. package/dist/runtime/tensorrt-llm/model-dir.js +0 -137
  448. package/dist/runtime/tensorrt-llm/model-dir.js.map +0 -1
  449. package/dist/runtime/tensorrt-llm/quant-format.d.ts +0 -65
  450. package/dist/runtime/tensorrt-llm/quant-format.js +0 -189
  451. package/dist/runtime/tensorrt-llm/quant-format.js.map +0 -1
  452. package/dist/runtime/tensorrt-llm/registry.d.ts +0 -26
  453. package/dist/runtime/tensorrt-llm/registry.js +0 -68
  454. package/dist/runtime/tensorrt-llm/registry.js.map +0 -1
  455. package/dist/runtime/tensorrt-llm/runtime.d.ts +0 -130
  456. package/dist/runtime/tensorrt-llm/runtime.js +0 -395
  457. package/dist/runtime/tensorrt-llm/runtime.js.map +0 -1
  458. package/dist/server/control/routes/model-setups.d.ts +0 -11
  459. package/dist/server/control/routes/model-setups.js +0 -55
  460. package/dist/server/control/routes/model-setups.js.map +0 -1
@@ -0,0 +1,251 @@
1
+ /**
2
+ * `dashscope-video`: Alibaba Cloud Model Studio's (DashScope) Wan video models. The provider is
3
+ * registered with its OpenAI-compatible base (`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,
4
+ * or a workspace host); video lives on DashScope's native API on the same origin, so every URL is
5
+ * `originOf(base)` + a native path.
6
+ *
7
+ * - submit → `POST {origin}/api/v1/services/aigc/video-generation/video-synthesis` with
8
+ * `X-DashScope-Async: enable` (required: the API is asynchronous only) and `{model, input:{prompt,
9
+ * negative_prompt, img_url | media}, parameters:{resolution | size, ratio, duration, prompt_extend,
10
+ * watermark, seed}}` → `{output:{task_id, task_status}}`. Wan 2.7 takes its frames as `media`
11
+ * (`first_frame`, `last_frame`) and `resolution` + `ratio`; older models take `img_url` and `size`
12
+ * (`1280*720`) or a `resolution` tier;
13
+ * - poll → `GET {origin}/api/v1/tasks/{task_id}` → `output.task_status` PENDING | RUNNING | SUCCEEDED |
14
+ * FAILED | CANCELED | UNKNOWN (expired, past 24 h), `output.video_url` once it succeeded,
15
+ * `output.code`/`output.message` once it failed;
16
+ * - download → `output.video_url`, a signed link valid for 24 h;
17
+ * - cancel → `POST {origin}/api/v1/tasks/{task_id}/cancel` (only a pending task; errors are ignored);
18
+ * - listing → `GET {origin}/api/v1/models?capabilities=VG` (`output.models[]`).
19
+ *
20
+ * DashScope names its errors by `code` (`InvalidParameter`, `DataInspectionFailed`, `Arrearage`, …);
21
+ * `dashscopeCodeKind` reads those before the HTTP status.
22
+ */
23
+ import { callProvider, downloadResult, MAX_VIDEO_BYTES, originOf, parseWxH, providerMessage, remoteError, remoteHttpError, sniffVideoMime, toDataUrl, } from '../http.js';
24
+ const fields = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {};
25
+ const textOf = (value) => typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
26
+ const SUBMIT_PATH = '/api/v1/services/aigc/video-generation/video-synthesis';
27
+ /** Wan 2.7 speaks the newer protocol: frames as `media`, `resolution` + `ratio`. */
28
+ const MEDIA_PROTOCOL = /wan2\.7/i;
29
+ /** DashScope's native API origin: the registered base's (`…/compatible-mode/v1` → its origin). */
30
+ export function dashscopeOrigin(baseUrl) {
31
+ return originOf(baseUrl) ?? baseUrl.replace(/\/+$/, '');
32
+ }
33
+ /** What a DashScope error `code` says, before the HTTP status does; `undefined` when it says nothing known. */
34
+ export function dashscopeCodeKind(code) {
35
+ if (!code)
36
+ return undefined;
37
+ if (/DataInspection|IPInfringement|Inappropriate|Sensitive|GreenNet/i.test(code))
38
+ return 'REMOTE_CONTENT_BLOCKED';
39
+ if (/Throttling|RateLimit|RateQuota/i.test(code))
40
+ return 'REMOTE_RATE_LIMITED';
41
+ if (/Arrearage|Quota|Balance|FreeTierOnly|Overdue/i.test(code))
42
+ return 'REMOTE_QUOTA';
43
+ if (/ApiKey|AccessDenied|Unauthorized|NoPermission|Forbidden/i.test(code))
44
+ return 'REMOTE_AUTH_FAILED';
45
+ if (/InvalidParameter|InvalidURL|InvalidFile|InvalidImage|BadRequest|ModelNotFound|NotSupported/i.test(code))
46
+ return 'REMOTE_REJECTED';
47
+ return undefined;
48
+ }
49
+ /** A DashScope failure (an HTTP error body, a failed task's `output`) with its code and words. */
50
+ export function dashscopeError(provider, code, said, fallback, status) {
51
+ const kind = dashscopeCodeKind(code) ?? fallback;
52
+ const details = [status === undefined ? undefined : `HTTP ${status}`, code, said].filter(Boolean).join(': ');
53
+ const message = said ? `${provider}: ${said}` : `${provider} failed${code ? ` (${code})` : ''}.`;
54
+ return remoteError(kind, message, details || undefined);
55
+ }
56
+ /** A non-2xx answer: its `code` when DashScope gave a known one, the status otherwise. */
57
+ export function dashscopeHttpError(provider, status, body, text = '') {
58
+ const generic = remoteHttpError(provider, status, body, text);
59
+ const code = textOf(fields(body)['code']);
60
+ if (!dashscopeCodeKind(code))
61
+ return generic;
62
+ return dashscopeError(provider, code, providerMessage(body, text), generic.code, status);
63
+ }
64
+ /** Statuses read with `dashscopeHttpError` instead of the generic mapping. */
65
+ const CODED_STATUSES = [400, 401, 403, 404, 429];
66
+ /** One request on the native API, its error `code` read before the status. */
67
+ async function callNative(ctx, path, options = {}) {
68
+ const answer = await callProvider(ctx, `${dashscopeOrigin(ctx.baseUrl)}${path}`, {
69
+ ...options,
70
+ accept: CODED_STATUSES,
71
+ });
72
+ if (answer.status >= 300)
73
+ throw dashscopeHttpError(ctx.provider, answer.status, answer.json, answer.text);
74
+ return fields(answer.json);
75
+ }
76
+ /** The workflow is the model's, and image to video has the frames it needs. */
77
+ function checkInputs(job) {
78
+ if (!job.model.workflows.includes(job.workflow))
79
+ throw remoteError('REMOTE_UNSUPPORTED', `${job.model.name} cannot do ${job.workflow}.`, job.workflow);
80
+ if (job.workflow !== 'image-to-video')
81
+ return;
82
+ if (!job.firstFrame)
83
+ throw remoteError('REMOTE_UNSUPPORTED', 'Image to video needs a first frame.');
84
+ if (job.lastFrame && (!job.model.params.last_frame || !MEDIA_PROTOCOL.test(job.model.id)))
85
+ throw remoteError('REMOTE_UNSUPPORTED', `${job.model.name} does not take a last frame.`);
86
+ }
87
+ /**
88
+ * The submit body: what the job set and the model offers. Prompt rewriting and the watermark are off,
89
+ * so the clip is what the prompt says.
90
+ */
91
+ export function dashscopeVideoBody(job) {
92
+ checkInputs(job);
93
+ const params = job.model.params;
94
+ const input = { prompt: job.prompt };
95
+ if (job.negativePrompt && params.negative_prompt)
96
+ input['negative_prompt'] = job.negativePrompt;
97
+ if (job.workflow === 'image-to-video' && job.firstFrame) {
98
+ const first = toDataUrl(job.firstFrame.bytes, job.firstFrame.mime);
99
+ if (MEDIA_PROTOCOL.test(job.model.id)) {
100
+ const media = [{ type: 'first_frame', url: first }];
101
+ if (job.lastFrame)
102
+ media.push({ type: 'last_frame', url: toDataUrl(job.lastFrame.bytes, job.lastFrame.mime) });
103
+ input['media'] = media;
104
+ }
105
+ else
106
+ input['img_url'] = first;
107
+ }
108
+ const parameters = {};
109
+ if (job.resolution && params.resolutions)
110
+ parameters['resolution'] = job.resolution;
111
+ const size = parseWxH(job.size);
112
+ if (size && params.sizes)
113
+ parameters['size'] = `${size.width}*${size.height}`;
114
+ if (job.aspectRatio && params.aspect_ratios && job.workflow === 'create')
115
+ parameters['ratio'] = job.aspectRatio;
116
+ if (job.durationSecs !== undefined && params.durations)
117
+ parameters['duration'] = Math.round(job.durationSecs);
118
+ parameters['prompt_extend'] = false;
119
+ parameters['watermark'] = false;
120
+ if (job.seed !== undefined && params.seed)
121
+ parameters['seed'] = job.seed;
122
+ return { model: job.model.id, input, parameters };
123
+ }
124
+ /** What a model id says it does: `…t2v…` makes clips from text, `…i2v…` from a frame. */
125
+ function workflowOf(id) {
126
+ if (/i2v/i.test(id))
127
+ return 'image-to-video';
128
+ if (/t2v/i.test(id))
129
+ return 'create';
130
+ return undefined;
131
+ }
132
+ /**
133
+ * The video models of a `/api/v1/models` listing (`output.models[]`, tolerating `data[]`/`models[]`):
134
+ * those that generate video and whose id says text or image to video (a reference, editing or
135
+ * animation model takes inputs this adapter does not send).
136
+ */
137
+ export function dashscopeVideoModels(json) {
138
+ const body = fields(json);
139
+ const output = fields(body['output']);
140
+ const list = [output['models'], body['data'], body['models']].find(Array.isArray) ?? [];
141
+ const out = [];
142
+ const seen = new Set();
143
+ for (const item of list) {
144
+ const entry = fields(item);
145
+ const id = textOf(entry['model']) ?? textOf(entry['id']);
146
+ if (!id || seen.has(id))
147
+ continue;
148
+ const capabilities = entry['capabilities'];
149
+ if (Array.isArray(capabilities) &&
150
+ !capabilities.some((c) => typeof c === 'string' && c.toUpperCase() === 'VG'))
151
+ continue;
152
+ const workflow = workflowOf(id);
153
+ if (!workflow)
154
+ continue;
155
+ seen.add(id);
156
+ const model = { id, workflows: [workflow] };
157
+ const name = textOf(entry['name']);
158
+ if (name)
159
+ model.name = name;
160
+ const description = textOf(entry['description']);
161
+ if (description)
162
+ model.description = description;
163
+ out.push(model);
164
+ }
165
+ return out;
166
+ }
167
+ /** A clip the provider pointed at, refused unless its bytes are a video. */
168
+ async function fetchClip(ctx, url) {
169
+ const file = await downloadResult(ctx, url, { maxBytes: MAX_VIDEO_BYTES, what: 'video' });
170
+ const mime = sniffVideoMime(file.bytes);
171
+ if (!mime)
172
+ throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} returned a file that is not a video.`, file.mime || undefined);
173
+ return { bytes: file.bytes, mime };
174
+ }
175
+ export const DASHSCOPE_VIDEO = {
176
+ dialect: 'dashscope-video',
177
+ kind: 'video',
178
+ // DashScope suggests polling about every 15 seconds.
179
+ pollIntervalMs: { first: 10000, max: 20000 },
180
+ async listModels(ctx) {
181
+ const answer = await callProvider(ctx, `${dashscopeOrigin(ctx.baseUrl)}/api/v1/models?page_no=1&page_size=100&capabilities=VG`, { accept: [404] });
182
+ if (answer.status === 404)
183
+ return [];
184
+ return dashscopeVideoModels(answer.json);
185
+ },
186
+ async submit(ctx, job) {
187
+ const body = await callNative(ctx, SUBMIT_PATH, {
188
+ json: dashscopeVideoBody(job),
189
+ headers: { 'X-DashScope-Async': 'enable' },
190
+ });
191
+ const id = textOf(fields(body['output'])['task_id']);
192
+ if (!id) {
193
+ const code = textOf(body['code']);
194
+ if (code)
195
+ throw dashscopeError(ctx.provider, code, textOf(body['message']), 'REMOTE_REJECTED');
196
+ throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} answered without a task id.`);
197
+ }
198
+ return { id };
199
+ },
200
+ async poll(ctx, submission) {
201
+ const body = await callNative(ctx, `/api/v1/tasks/${encodeURIComponent(submission.id)}`);
202
+ const output = fields(body['output']);
203
+ const status = (textOf(output['task_status']) ?? '').toUpperCase();
204
+ switch (status) {
205
+ case 'PENDING':
206
+ return { state: 'queued' };
207
+ case 'SUCCEEDED': {
208
+ const url = textOf(output['video_url']);
209
+ if (!url)
210
+ return {
211
+ state: 'failed',
212
+ error: remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} finished without a clip.`),
213
+ };
214
+ return { state: 'completed', result: { url } };
215
+ }
216
+ case 'FAILED':
217
+ return {
218
+ state: 'failed',
219
+ error: dashscopeError(ctx.provider, textOf(output['code']), textOf(output['message']), 'REMOTE_UNAVAILABLE'),
220
+ };
221
+ case 'CANCELED':
222
+ case 'CANCELLED':
223
+ return {
224
+ state: 'failed',
225
+ error: remoteError('CANCELLED', `${ctx.provider} cancelled the generation.`),
226
+ };
227
+ case 'UNKNOWN':
228
+ return {
229
+ state: 'failed',
230
+ error: remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} no longer knows this task (tasks expire after 24 hours).`),
231
+ };
232
+ default:
233
+ return { state: 'running' };
234
+ }
235
+ },
236
+ async download(ctx, _submission, result) {
237
+ if (!result.url)
238
+ throw remoteError('REMOTE_UNAVAILABLE', `${ctx.provider} gave no clip to download.`);
239
+ return fetchClip(ctx, result.url);
240
+ },
241
+ async cancel(ctx, submission) {
242
+ try {
243
+ await callProvider(ctx, `${dashscopeOrigin(ctx.baseUrl)}/api/v1/tasks/${encodeURIComponent(submission.id)}/cancel`, { method: 'POST' });
244
+ }
245
+ catch (error) {
246
+ // Only a pending task can be cancelled; a running one just finishes.
247
+ ctx.log('debug', `${ctx.provider}: cancel of ${submission.id} refused: ${error.message}`);
248
+ }
249
+ },
250
+ };
251
+ //# sourceMappingURL=dashscope-video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashscope-video.js","sourceRoot":"","sources":["../../../src/media/adapters/dashscope-video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * `gemini-image`: Google's Gemini image models (Nano Banana) on the native Generative Language API,
3
+ * key in `x-goog-api-key`.
4
+ *
5
+ * The provider is registered with its OpenAI-compatible base
6
+ * `https://generativelanguage.googleapis.com/v1beta/openai`; the native base is that URL without its
7
+ * trailing `/openai` (a base registered without it is used as it is). Every workflow (`create`,
8
+ * `edit`, `reference`) is `POST {native}/models/{model}:generateContent`: the prompt, then each input
9
+ * image inline. The size goes in `generationConfig.imageConfig` (the SDK's field) or, when the model's
10
+ * `options.image_config_field` is `responseFormat`, in `generationConfig.responseFormat.image`.
11
+ * There is no batch field, so `n` images are `n` calls in a row. The listing is
12
+ * `GET {native}/models`, kept to the image models that answer `generateContent`.
13
+ */
14
+ import type { AtomicCoreError } from '../../contracts/index.js';
15
+ import type { LiveMediaModel } from '../catalog.js';
16
+ import type { GeneratedImage, ImageAdapter, ImageGenerationJob } from './types.js';
17
+ /** The native API's base from the registered one: `…/v1beta/openai` → `…/v1beta`. */
18
+ export declare function geminiNativeBase(baseUrl: string): string;
19
+ /** The JSON body of `generateContent` for one image. */
20
+ export declare function geminiImageBody(job: ImageGenerationJob): Record<string, unknown>;
21
+ /** The images of a `generateContent` answer, or the `REMOTE_*` error it amounts to. */
22
+ export declare function geminiImages(provider: string, json: unknown): GeneratedImage[];
23
+ /** A non-2xx answer: Google's 400 for a bad key is an auth failure; the rest as `remoteHttpError`. */
24
+ export declare function geminiHttpError(provider: string, status: number, json: unknown, body?: string): AtomicCoreError;
25
+ /** The image models of `GET /models` that answer `generateContent`, without the `models/` prefix. */
26
+ export declare function geminiImageModels(json: unknown): LiveMediaModel[];
27
+ export declare const GEMINI_IMAGE: ImageAdapter;
@@ -0,0 +1,181 @@
1
+ /**
2
+ * `gemini-image`: Google's Gemini image models (Nano Banana) on the native Generative Language API,
3
+ * key in `x-goog-api-key`.
4
+ *
5
+ * The provider is registered with its OpenAI-compatible base
6
+ * `https://generativelanguage.googleapis.com/v1beta/openai`; the native base is that URL without its
7
+ * trailing `/openai` (a base registered without it is used as it is). Every workflow (`create`,
8
+ * `edit`, `reference`) is `POST {native}/models/{model}:generateContent`: the prompt, then each input
9
+ * image inline. The size goes in `generationConfig.imageConfig` (the SDK's field) or, when the model's
10
+ * `options.image_config_field` is `responseFormat`, in `generationConfig.responseFormat.image`.
11
+ * There is no batch field, so `n` images are `n` calls in a row. The listing is
12
+ * `GET {native}/models`, kept to the image models that answer `generateContent`.
13
+ */
14
+ import { callProvider, decodeBase64Image, GENERATE_TIMEOUT_MS, joinUrl, providerMessage, remoteError, remoteHttpError, } from '../http.js';
15
+ const WORKFLOWS = ['create', 'edit', 'reference'];
16
+ /** Why a candidate stopped when the image was refused for its content. */
17
+ const BLOCKED_FINISH = new Set([
18
+ 'IMAGE_SAFETY',
19
+ 'IMAGE_PROHIBITED_CONTENT',
20
+ 'SAFETY',
21
+ 'PROHIBITED_CONTENT',
22
+ 'BLOCKLIST',
23
+ 'SPII',
24
+ ]);
25
+ /** Listing pages read at most; one page holds a thousand models. */
26
+ const MAX_PAGES = 5;
27
+ const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
28
+ const text = (value) => typeof value === 'string' && value !== '' ? value : undefined;
29
+ /** The native API's base from the registered one: `…/v1beta/openai` → `…/v1beta`. */
30
+ export function geminiNativeBase(baseUrl) {
31
+ return baseUrl.replace(/\/+$/, '').replace(/\/openai$/, '');
32
+ }
33
+ /** The JSON body of `generateContent` for one image. */
34
+ export function geminiImageBody(job) {
35
+ const parts = [{ text: job.prompt }];
36
+ if (job.workflow !== 'create')
37
+ for (const image of job.images)
38
+ parts.push({ inline_data: { mime_type: image.mime, data: image.bytes.toString('base64') } });
39
+ const generationConfig = { responseModalities: ['TEXT', 'IMAGE'] };
40
+ const image = {};
41
+ if (job.aspectRatio)
42
+ image['aspectRatio'] = job.aspectRatio;
43
+ if (job.resolution)
44
+ image['imageSize'] = job.resolution.toUpperCase();
45
+ if (Object.keys(image).length > 0) {
46
+ if (job.model.options?.['image_config_field'] === 'responseFormat')
47
+ generationConfig['responseFormat'] = { image };
48
+ else
49
+ generationConfig['imageConfig'] = image;
50
+ }
51
+ return { contents: [{ role: 'user', parts }], generationConfig };
52
+ }
53
+ /** The images of a `generateContent` answer, or the `REMOTE_*` error it amounts to. */
54
+ export function geminiImages(provider, json) {
55
+ const body = isObject(json) ? json : {};
56
+ const feedback = isObject(body['promptFeedback']) ? body['promptFeedback'] : {};
57
+ const blockReason = text(feedback['blockReason']);
58
+ if (blockReason)
59
+ throw remoteError('REMOTE_CONTENT_BLOCKED', `${provider} refused the prompt.`, [blockReason, text(feedback['blockReasonMessage'])].filter(Boolean).join(': '));
60
+ const candidates = Array.isArray(body['candidates']) ? body['candidates'] : [];
61
+ const candidate = isObject(candidates[0]) ? candidates[0] : {};
62
+ const finish = text(candidate['finishReason']);
63
+ const content = isObject(candidate['content']) ? candidate['content'] : {};
64
+ const parts = Array.isArray(content['parts']) ? content['parts'] : [];
65
+ const images = [];
66
+ const said = [];
67
+ for (const part of parts) {
68
+ if (!isObject(part) || part['thought'] === true)
69
+ continue;
70
+ const inline = isObject(part['inlineData'])
71
+ ? part['inlineData']
72
+ : isObject(part['inline_data'])
73
+ ? part['inline_data']
74
+ : undefined;
75
+ const data = inline ? text(inline['data']) : undefined;
76
+ if (data)
77
+ images.push(decodeBase64Image(data));
78
+ else if (text(part['text']))
79
+ said.push(part['text'].trim());
80
+ }
81
+ if (images.length > 0)
82
+ return images;
83
+ const details = [finish, text(candidate['finishMessage']), ...said].filter(Boolean).join(': ') || undefined;
84
+ if (finish && BLOCKED_FINISH.has(finish))
85
+ throw remoteError('REMOTE_CONTENT_BLOCKED', `${provider} refused to draw this.`, details);
86
+ throw remoteError('REMOTE_REJECTED', `${provider} answered without an image.`, details);
87
+ }
88
+ /** A non-2xx answer: Google's 400 for a bad key is an auth failure; the rest as `remoteHttpError`. */
89
+ export function geminiHttpError(provider, status, json, body = '') {
90
+ const error = isObject(json) && isObject(json['error']) ? json['error'] : {};
91
+ const reasons = (Array.isArray(error['details']) ? error['details'] : [])
92
+ .map((detail) => (isObject(detail) ? detail['reason'] : undefined))
93
+ .filter((reason) => typeof reason === 'string');
94
+ if (status === 400 &&
95
+ (reasons.includes('API_KEY_INVALID') || /api key not valid/i.test(text(error['message']) ?? ''))) {
96
+ const said = providerMessage(json, body);
97
+ return remoteError('REMOTE_AUTH_FAILED', `${provider} refused the API key.`, `HTTP 400${said ? `: ${said}` : ''}`);
98
+ }
99
+ return remoteHttpError(provider, status, json, body);
100
+ }
101
+ /** The image models of `GET /models` that answer `generateContent`, without the `models/` prefix. */
102
+ export function geminiImageModels(json) {
103
+ const list = isObject(json) && Array.isArray(json['models']) ? json['models'] : [];
104
+ const out = [];
105
+ for (const item of list) {
106
+ if (!isObject(item))
107
+ continue;
108
+ const id = text(item['name'])?.replace(/^models\//, '');
109
+ if (!id || !/-image|nano-banana/i.test(id))
110
+ continue;
111
+ const methods = item['supportedGenerationMethods'];
112
+ if (!Array.isArray(methods) || !methods.includes('generateContent'))
113
+ continue;
114
+ const model = { id };
115
+ const name = text(item['displayName']);
116
+ if (name)
117
+ model.name = name;
118
+ const description = text(item['description']);
119
+ if (description)
120
+ model.description = description;
121
+ out.push(model);
122
+ }
123
+ return out;
124
+ }
125
+ async function generateOne(ctx, job) {
126
+ const id = job.model.id.replace(/^models\//, '');
127
+ const url = joinUrl(geminiNativeBase(ctx.baseUrl), `/models/${encodeURIComponent(id)}:generateContent`);
128
+ const answer = await callProvider(ctx, url, {
129
+ json: geminiImageBody(job),
130
+ auth: 'goog',
131
+ timeoutMs: GENERATE_TIMEOUT_MS,
132
+ accept: [400],
133
+ });
134
+ if (answer.status === 400)
135
+ throw geminiHttpError(ctx.provider, answer.status, answer.json, answer.text);
136
+ return geminiImages(ctx.provider, answer.json);
137
+ }
138
+ export const GEMINI_IMAGE = {
139
+ dialect: 'gemini-image',
140
+ kind: 'image',
141
+ async listModels(ctx) {
142
+ const base = joinUrl(geminiNativeBase(ctx.baseUrl), '/models');
143
+ const out = [];
144
+ const seen = new Set();
145
+ let token;
146
+ for (let page = 0; page < MAX_PAGES; page++) {
147
+ const query = new URLSearchParams({ pageSize: '1000' });
148
+ if (token)
149
+ query.set('pageToken', token);
150
+ const answer = await callProvider(ctx, `${base}?${query.toString()}`, { auth: 'goog', accept: [400] });
151
+ if (answer.status === 400)
152
+ throw geminiHttpError(ctx.provider, answer.status, answer.json, answer.text);
153
+ for (const model of geminiImageModels(answer.json))
154
+ if (!seen.has(model.id)) {
155
+ seen.add(model.id);
156
+ out.push(model);
157
+ }
158
+ token = isObject(answer.json) ? text(answer.json['nextPageToken']) : undefined;
159
+ if (!token)
160
+ break;
161
+ }
162
+ return out;
163
+ },
164
+ async generate(ctx, job, report) {
165
+ if (!WORKFLOWS.includes(job.workflow))
166
+ throw remoteError('REMOTE_UNSUPPORTED', `${ctx.provider} does not support this workflow.`, job.workflow);
167
+ if (job.workflow !== 'create' && job.images.length === 0)
168
+ throw remoteError('REMOTE_UNSUPPORTED', 'This workflow needs a source image.', job.workflow);
169
+ report({ phase: 'generating' });
170
+ const count = Math.max(1, job.n);
171
+ const out = [];
172
+ // No batch field: one call per image, in a row, never retried.
173
+ for (let i = 0; i < count; i++) {
174
+ out.push(...(await generateOne(ctx, job)));
175
+ if (count > 1)
176
+ report({ phase: 'generating', fraction: (i + 1) / count });
177
+ }
178
+ return out;
179
+ },
180
+ };
181
+ //# sourceMappingURL=gemini-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-image.js","sourceRoot":"","sources":["../../../src/media/adapters/gemini-image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAA;AAInB,MAAM,SAAS,GAAmC,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AACjF,0EAA0E;AAC1E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,cAAc;IACd,0BAA0B;IAC1B,QAAQ;IACR,oBAAoB;IACpB,WAAW;IACX,MAAM;CACP,CAAC,CAAA;AACF,oEAAoE;AACpE,MAAM,SAAS,GAAG,CAAC,CAAA;AAGnB,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAmB,EAAE,CACnD,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACtE,MAAM,IAAI,GAAG,CAAC,KAAc,EAAsB,EAAE,CAClD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAE/D,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7D,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,GAAuB;IACrD,MAAM,KAAK,GAAa,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;IAC9C,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAA;IAChG,MAAM,gBAAgB,GAAW,EAAE,kBAAkB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC1E,MAAM,KAAK,GAAW,EAAE,CAAA;IACxB,IAAI,GAAG,CAAC,WAAW;QAAE,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,WAAW,CAAA;IAC3D,IAAI,GAAG,CAAC,UAAU;QAAE,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAA;IACrE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,oBAAoB,CAAC,KAAK,gBAAgB;YAChE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAA;;YAC3C,gBAAgB,CAAC,aAAa,CAAC,GAAG,KAAK,CAAA;IAC9C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAA;AAClE,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAa;IAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAA;IACjD,IAAI,WAAW;QACb,MAAM,WAAW,CACf,wBAAwB,EACxB,GAAG,QAAQ,sBAAsB,EACjC,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/E,CAAA;IACH,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9E,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACrE,MAAM,MAAM,GAAqB,EAAE,CAAA;IACnC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI;YAAE,SAAQ;QACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YACpB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrB,CAAC,CAAC,SAAS,CAAA;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACtD,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;aACzC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,MAAM,CAAY,CAAC,IAAI,EAAE,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAA;IACpC,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;IAC3G,IAAI,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;QACtC,MAAM,WAAW,CAAC,wBAAwB,EAAE,GAAG,QAAQ,wBAAwB,EAAE,OAAO,CAAC,CAAA;IAC3F,MAAM,WAAW,CAAC,iBAAiB,EAAE,GAAG,QAAQ,6BAA6B,EAAE,OAAO,CAAC,CAAA;AACzF,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,MAAc,EAAE,IAAa,EAAE,IAAI,GAAG,EAAE;IACxF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC5E,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SAClE,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAA;IACnE,IACE,MAAM,KAAK,GAAG;QACd,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAChG,CAAC;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxC,OAAO,WAAW,CAChB,oBAAoB,EACpB,GAAG,QAAQ,uBAAuB,EAClC,WAAW,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAA;IACH,CAAC;IACD,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClF,MAAM,GAAG,GAAqB,EAAE,CAAA;IAChC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAQ;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAAE,SAAQ;QAC7E,MAAM,KAAK,GAAmB,EAAE,EAAE,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QACtC,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QAC7C,IAAI,WAAW;YAAE,KAAK,CAAC,WAAW,GAAG,WAAW,CAAA;QAChD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAiB,EAAE,GAAuB;IACnE,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAChD,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,kBAAkB,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAA;IACvG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE;QAC1C,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC;QAC1B,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,CAAC,GAAG,CAAC;KACd,CAAC,CAAA;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IACvG,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,OAAO;IAEb,KAAK,CAAC,UAAU,CAAC,GAAG;QAClB,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAA;QAC9D,MAAM,GAAG,GAAqB,EAAE,CAAA;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,IAAI,KAAyB,CAAA;QAC7B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;YACvD,IAAI,KAAK;gBAAE,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACtG,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACvG,KAAK,MAAM,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;oBACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;oBAClB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACjB,CAAC;YACH,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC9E,IAAI,CAAC,KAAK;gBAAE,MAAK;QACnB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnC,MAAM,WAAW,CAAC,oBAAoB,EAAE,GAAG,GAAG,CAAC,QAAQ,kCAAkC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1G,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACtD,MAAM,WAAW,CAAC,oBAAoB,EAAE,qCAAqC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9F,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,GAAG,GAAqB,EAAE,CAAA;QAChC,+DAA+D;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1C,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `gemini-veo`: Google's Veo through the Gemini API. The provider is registered with Gemini's
3
+ * OpenAI-compatible base (`https://generativelanguage.googleapis.com/v1beta/openai`); Veo lives on
4
+ * the native API next to it, so `{native}` is that base without its trailing `/openai`
5
+ * (`.../v1beta`). The key goes as `x-goog-api-key`.
6
+ *
7
+ * - submit: `POST {native}/models/{model}:predictLongRunning`, JSON `{instances: [{prompt, image,
8
+ * lastFrame}], parameters: {aspectRatio, resolution, durationSeconds, seed, negativePrompt,
9
+ * numberOfVideos: 1}}` → `{name: 'models/…/operations/…'}`. Frames go as `{inlineData: {mimeType,
10
+ * data}}`. Veo renders 1080p and 4k at 8 seconds only, so a shorter clip at those sizes is asked
11
+ * for at 8. `durationSeconds` goes as a number (the SDKs' form); a model whose
12
+ * `options.duration_as_string` is true sends the docs table's string (`"8"`).
13
+ * - poll: `GET {native}/{name}` → `{done, error: {code, message}, response: {generateVideoResponse:
14
+ * {generatedSamples: [{video: {uri}}], raiMediaFilteredCount, raiMediaFilteredReasons}}}`. A done
15
+ * operation without samples that names filter reasons is `REMOTE_CONTENT_BLOCKED`.
16
+ * - download: the sample's `uri`, on the API's own host, so with the key; it redirects to storage,
17
+ * where `downloadResult` leaves the key behind.
18
+ * - models: `GET {native}/models?pageSize=1000`, the `veo-` models that offer `predictLongRunning`.
19
+ *
20
+ * No cancel: the Gemini API cannot cancel a Veo operation.
21
+ */
22
+ import type { AtomicCoreError } from '../../contracts/index.js';
23
+ import type { LiveMediaModel } from '../catalog.js';
24
+ import type { VideoAdapter, VideoGenerationJob, VideoPoll } from './types.js';
25
+ type Fields = Record<string, unknown>;
26
+ /** `{base}` of the Gemini API's native routes: the registered base without its `/openai`. */
27
+ export declare function veoNativeBase(baseUrl: string): string;
28
+ /** The clip length to ask for: 8 seconds whenever the resolution allows nothing else. */
29
+ export declare function veoDuration(resolution: string | undefined, seconds: number | undefined): number | undefined;
30
+ /** The `predictLongRunning` body: each parameter only when the job set it and the model offers it. */
31
+ export declare function veoRequest(job: VideoGenerationJob, provider?: string): Fields;
32
+ /** An operation's `error: {code, message}` (google.rpc codes) as the closest `REMOTE_*` code. */
33
+ export declare function veoError(provider: string, error: unknown): AtomicCoreError;
34
+ /** One operation (`GET {native}/{name}`) as a poll result. */
35
+ export declare function readVeoOperation(provider: string, json: unknown): VideoPoll;
36
+ /** The Veo models of a native `GET /models` answer. */
37
+ export declare function veoModels(json: unknown): LiveMediaModel[];
38
+ export declare const GEMINI_VEO: VideoAdapter;
39
+ export {};