@henjicc/ai-sdk 0.8.0 → 0.10.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 (704) hide show
  1. package/CHANGELOG.md +275 -211
  2. package/README.md +580 -577
  3. package/dist/capabilities/speech-recognition/bailian/module.js +40 -26
  4. package/dist/capabilities/speech-recognition/bailian/parse.js +9 -2
  5. package/dist/capabilities/speech-recognition/bailian/presets.d.ts +9 -1
  6. package/dist/capabilities/speech-recognition/bailian/presets.js +7 -2
  7. package/dist/capabilities/speech-recognition/bailian/realtime/presets.d.ts +2 -1
  8. package/dist/capabilities/speech-recognition/bailian/realtime/presets.js +2 -0
  9. package/dist/capabilities/speech-recognition/bailian/types.d.ts +2 -0
  10. package/dist/capabilities/speech-recognition/bailian/upload.js +11 -58
  11. package/dist/capabilities/speech-recognition/index.d.ts +5 -0
  12. package/dist/capabilities/speech-recognition/siliconflow/presets.d.ts +2 -3
  13. package/dist/capabilities/speech-recognition/siliconflow/presets.js +0 -2
  14. package/dist/capabilities/translation/bailian/types.d.ts +3 -0
  15. package/dist/capabilities/translation/bailian/types.js +6 -4
  16. package/dist/catalog/apimart/flux-3-image.model.d.ts +3 -0
  17. package/dist/catalog/apimart/flux-3-image.model.js +62 -0
  18. package/dist/catalog/apimart/flux-3-video.model.d.ts +3 -0
  19. package/dist/catalog/apimart/flux-3-video.model.js +120 -0
  20. package/dist/catalog/apimart/gemini-omni-1.2-flash.model.d.ts +3 -0
  21. package/dist/catalog/apimart/gemini-omni-1.2-flash.model.js +175 -0
  22. package/dist/catalog/apimart/gemini-omni-flash.model.js +30 -37
  23. package/dist/catalog/apimart/gpt-image-2.5.model.js +1 -1
  24. package/dist/catalog/apimart/gpt-image-2.6.model.d.ts +3 -0
  25. package/dist/catalog/apimart/gpt-image-2.6.model.js +103 -0
  26. package/dist/catalog/apimart/gpt-image-2.model.js +1 -1
  27. package/dist/catalog/apimart/grok-imagine-2.0.model.js +1 -1
  28. package/dist/catalog/apimart/grok-imagine-video-1.5.model.d.ts +3 -0
  29. package/dist/catalog/apimart/grok-imagine-video-1.5.model.js +85 -0
  30. package/dist/catalog/apimart/happyhorse-1.1.model.d.ts +3 -0
  31. package/dist/catalog/apimart/happyhorse-1.1.model.js +78 -0
  32. package/dist/catalog/apimart/kling-3.0-omni.model.js +12 -2
  33. package/dist/catalog/apimart/kling-3.0-turbo.model.js +5 -2
  34. package/dist/catalog/apimart/kling-3.0.model.js +1 -1
  35. package/dist/catalog/apimart/kling-4.0.model.d.ts +3 -0
  36. package/dist/catalog/apimart/kling-4.0.model.js +149 -0
  37. package/dist/catalog/apimart/midjourney-video.model.js +31 -32
  38. package/dist/catalog/apimart/midjourney.model.js +11 -1
  39. package/dist/catalog/apimart/minimax-h3-max.model.d.ts +3 -0
  40. package/dist/catalog/apimart/minimax-h3-max.model.js +101 -0
  41. package/dist/catalog/apimart/minimax-h3.model.js +8 -3
  42. package/dist/catalog/apimart/nano-banana-2-lite.model.js +1 -1
  43. package/dist/catalog/apimart/nano-banana-2.1.model.d.ts +2 -0
  44. package/dist/catalog/apimart/nano-banana-2.1.model.js +49 -0
  45. package/dist/catalog/apimart/nano-banana-2.model.js +1 -1
  46. package/dist/catalog/apimart/nano-banana-pro.model.js +1 -1
  47. package/dist/catalog/apimart/qwen-image-3.0.model.js +1 -1
  48. package/dist/catalog/apimart/seedance-2.0-fast.model.js +1 -1
  49. package/dist/catalog/apimart/seedance-2.0-mini.model.js +4 -4
  50. package/dist/catalog/apimart/seedance-2.0.model.js +1 -1
  51. package/dist/catalog/apimart/seedance-2.5.model.js +27 -5
  52. package/dist/catalog/apimart/seedream-5.0-flash.model.d.ts +3 -0
  53. package/dist/catalog/apimart/seedream-5.0-flash.model.js +52 -0
  54. package/dist/catalog/apimart/seedream-5.0-lite.model.js +4 -4
  55. package/dist/catalog/apimart/seedream-5.0-pro.model.js +1 -1
  56. package/dist/catalog/apimart/veo-3.1.model.d.ts +3 -0
  57. package/dist/catalog/apimart/veo-3.1.model.js +132 -0
  58. package/dist/catalog/apimart/wan-2.7-image.model.d.ts +3 -0
  59. package/dist/catalog/apimart/wan-2.7-image.model.js +80 -0
  60. package/dist/catalog/apimart/wan-3.0.model.d.ts +3 -0
  61. package/dist/catalog/apimart/wan-3.0.model.js +101 -0
  62. package/dist/catalog/apimart/z-image-turbo.model.js +1 -1
  63. package/dist/catalog/audio/tts-common.d.ts +2 -1
  64. package/dist/catalog/audio/tts-common.js +5 -1
  65. package/dist/catalog/bailian/cosyvoice-v3.5.model.js +1 -1
  66. package/dist/catalog/bailian/minimax-h3.model.d.ts +3 -0
  67. package/dist/catalog/bailian/minimax-h3.model.js +95 -0
  68. package/dist/catalog/bailian/minimax-speech-2.8.model.js +1 -1
  69. package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.js +14 -3
  70. package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.d.ts +2 -0
  71. package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.js +44 -0
  72. package/dist/catalog/bailian/qwen-image-3.0.model.js +1 -1
  73. package/dist/catalog/bailian/wan-3.0.model.d.ts +3 -0
  74. package/dist/catalog/bailian/wan-3.0.model.js +104 -0
  75. package/dist/catalog/bailian/z-image-turbo.model.js +1 -1
  76. package/dist/catalog/consumer-contract.d.ts +16 -1
  77. package/dist/catalog/consumer-contract.js +31 -0
  78. package/dist/catalog/continuation.d.ts +20 -0
  79. package/dist/catalog/continuation.js +41 -0
  80. package/dist/catalog/fal/bria-creative-upscale.model.js +1 -1
  81. package/dist/catalog/fal/eleven-v3-tts.model.js +1 -1
  82. package/dist/catalog/fal/eleven-v4-tts.model.d.ts +2 -0
  83. package/dist/catalog/fal/eleven-v4-tts.model.js +38 -0
  84. package/dist/catalog/fal/flux-3-video.model.d.ts +2 -0
  85. package/dist/catalog/fal/flux-3-video.model.js +187 -0
  86. package/dist/catalog/fal/flux-3.model.d.ts +2 -0
  87. package/dist/catalog/fal/flux-3.model.js +69 -0
  88. package/dist/catalog/fal/gemini-omni-1.2-flash.model.d.ts +2 -0
  89. package/dist/catalog/fal/gemini-omni-1.2-flash.model.js +129 -0
  90. package/dist/catalog/fal/gemini-omni-flash.model.js +1 -1
  91. package/dist/catalog/fal/gpt-image-2.5.model.js +1 -1
  92. package/dist/catalog/fal/gpt-image-2.6.model.d.ts +2 -0
  93. package/dist/catalog/fal/gpt-image-2.6.model.js +97 -0
  94. package/dist/catalog/fal/gpt-image-2.model.js +1 -1
  95. package/dist/catalog/fal/grok-imagine-2.0.model.js +1 -1
  96. package/dist/catalog/fal/grok-imagine-video-1.5.model.d.ts +2 -0
  97. package/dist/catalog/fal/grok-imagine-video-1.5.model.js +121 -0
  98. package/dist/catalog/fal/hailuo-02.model.js +8 -4
  99. package/dist/catalog/fal/hailuo-2.3.model.js +1 -1
  100. package/dist/catalog/fal/ic-light-v2.model.js +1 -1
  101. package/dist/catalog/fal/ideogram-upscale.model.js +1 -1
  102. package/dist/catalog/fal/kling-3.0-omni.model.js +1 -1
  103. package/dist/catalog/fal/kling-3.0-turbo.model.js +5 -2
  104. package/dist/catalog/fal/kling-3.0.model.js +4 -1
  105. package/dist/catalog/fal/kling-4.0-flash.model.d.ts +2 -0
  106. package/dist/catalog/fal/kling-4.0-flash.model.js +132 -0
  107. package/dist/catalog/fal/kling-4.0.model.d.ts +2 -0
  108. package/dist/catalog/fal/kling-4.0.model.js +169 -0
  109. package/dist/catalog/fal/kling-image-o1.model.js +1 -1
  110. package/dist/catalog/fal/kling-video-o1.model.js +18 -7
  111. package/dist/catalog/fal/kling-video-v2.6-pro.model.js +3 -2
  112. package/dist/catalog/fal/ltx-2.3.model.d.ts +2 -0
  113. package/dist/catalog/fal/ltx-2.3.model.js +223 -0
  114. package/dist/catalog/fal/ltx-2.model.js +2 -1
  115. package/dist/catalog/fal/minimax-h3-max.model.d.ts +2 -0
  116. package/dist/catalog/fal/minimax-h3-max.model.js +132 -0
  117. package/dist/catalog/fal/minimax-h3.model.js +3 -4
  118. package/dist/catalog/fal/minimax-speech-2.8.model.js +1 -1
  119. package/dist/catalog/fal/nano-banana-2.1.model.d.ts +2 -0
  120. package/dist/catalog/fal/nano-banana-2.1.model.js +68 -0
  121. package/dist/catalog/fal/nano-banana-2.model.js +1 -1
  122. package/dist/catalog/fal/nano-banana-pro.model.js +1 -1
  123. package/dist/catalog/fal/nano-banana.model.js +1 -1
  124. package/dist/catalog/fal/pixverse-v5.5.model.js +9 -4
  125. package/dist/catalog/fal/qwen-image-3.0.model.js +2 -2
  126. package/dist/catalog/fal/qwen3-tts-1.7b.model.js +4 -3
  127. package/dist/catalog/fal/seedance-2.0-fast.model.js +1 -1
  128. package/dist/catalog/fal/seedance-2.0-mini.model.js +1 -1
  129. package/dist/catalog/fal/seedance-2.0.model.js +1 -1
  130. package/dist/catalog/fal/seedance-2.5.model.js +5 -2
  131. package/dist/catalog/fal/seedance.model.js +3 -2
  132. package/dist/catalog/fal/seedream-5.0-lite.model.js +1 -1
  133. package/dist/catalog/fal/seedream-5.0-pro.model.js +1 -1
  134. package/dist/catalog/fal/seedream-v4.5.model.js +1 -1
  135. package/dist/catalog/fal/seedream-v4.model.js +1 -1
  136. package/dist/catalog/fal/seedvr2-image-upscale.model.js +1 -1
  137. package/dist/catalog/fal/topaz-image-upscale.model.js +1 -1
  138. package/dist/catalog/fal/topaz-transparent-upscale.model.js +1 -1
  139. package/dist/catalog/fal/utils/klingV4.d.ts +17 -0
  140. package/dist/catalog/fal/utils/klingV4.js +33 -0
  141. package/dist/catalog/fal/veo-3.1.model.js +5 -2
  142. package/dist/catalog/fal/vidu-q2.model.js +20 -8
  143. package/dist/catalog/fal/wan-2.5-preview.model.js +4 -1
  144. package/dist/catalog/fal/wan-3.0.model.d.ts +2 -0
  145. package/dist/catalog/fal/wan-3.0.model.js +135 -0
  146. package/dist/catalog/fal/z-image-turbo.model.js +10 -9
  147. package/dist/catalog/grsai/gpt-image-2.5.model.js +13 -31
  148. package/dist/catalog/grsai/gpt-image-2.6.model.d.ts +2 -0
  149. package/dist/catalog/grsai/gpt-image-2.6.model.js +37 -0
  150. package/dist/catalog/grsai/gpt-image-2.model.js +5 -2
  151. package/dist/catalog/grsai/nano-banana-2-lite.model.js +1 -1
  152. package/dist/catalog/grsai/nano-banana-2.1.model.d.ts +2 -0
  153. package/dist/catalog/grsai/nano-banana-2.1.model.js +29 -0
  154. package/dist/catalog/grsai/nano-banana-2.model.js +1 -1
  155. package/dist/catalog/grsai/nano-banana-pro.model.js +1 -1
  156. package/dist/catalog/grsai/wan-3.0.model.d.ts +2 -0
  157. package/dist/catalog/grsai/wan-3.0.model.js +78 -0
  158. package/dist/catalog/index.d.ts +1 -0
  159. package/dist/catalog/index.js +205 -124
  160. package/dist/catalog/kie/eleven-v3-dialogue.model.js +1 -1
  161. package/dist/catalog/kie/flux-3-klein.model.d.ts +2 -0
  162. package/dist/catalog/kie/flux-3-klein.model.js +58 -0
  163. package/dist/catalog/kie/gemini-3.1-flash-tts.model.js +7 -4
  164. package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.d.ts +2 -0
  165. package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.js +11 -0
  166. package/dist/catalog/kie/gemini-3.8-flash-tts.model.d.ts +2 -0
  167. package/dist/catalog/kie/gemini-3.8-flash-tts.model.js +11 -0
  168. package/dist/catalog/kie/gemini-omni-video.model.js +8 -30
  169. package/dist/catalog/kie/gemini38Tts.d.ts +3 -0
  170. package/dist/catalog/kie/gemini38Tts.js +40 -0
  171. package/dist/catalog/kie/gpt-image-2.5.model.js +1 -1
  172. package/dist/catalog/kie/gpt-image-2.6.model.d.ts +2 -0
  173. package/dist/catalog/kie/gpt-image-2.6.model.js +87 -0
  174. package/dist/catalog/kie/gpt-image-2.model.js +8 -12
  175. package/dist/catalog/kie/grok-imagine-2.0.model.js +1 -1
  176. package/dist/catalog/kie/grok-imagine-video-1.5.model.d.ts +2 -0
  177. package/dist/catalog/kie/grok-imagine-video-1.5.model.js +52 -0
  178. package/dist/catalog/kie/grok-imagine-video.model.js +7 -3
  179. package/dist/catalog/kie/grok-imagine.model.js +4 -2
  180. package/dist/catalog/kie/hailuo-02.model.js +6 -4
  181. package/dist/catalog/kie/hailuo-2-3.model.js +1 -1
  182. package/dist/catalog/kie/happyhorse-1.1.model.js +5 -2
  183. package/dist/catalog/kie/kling-3.0-omni.model.js +51 -23
  184. package/dist/catalog/kie/kling-3.0-turbo.model.js +1 -1
  185. package/dist/catalog/kie/kling-3.0.model.js +1 -8
  186. package/dist/catalog/kie/kling-4.0-flash.model.d.ts +2 -0
  187. package/dist/catalog/kie/kling-4.0-flash.model.js +16 -0
  188. package/dist/catalog/kie/kling-4.0.model.d.ts +2 -0
  189. package/dist/catalog/kie/kling-4.0.model.js +17 -0
  190. package/dist/catalog/kie/kling-v2-6.model.js +1 -1
  191. package/dist/catalog/kie/kling40.d.ts +21 -0
  192. package/dist/catalog/kie/kling40.js +129 -0
  193. package/dist/catalog/kie/minimax-h3.model.js +16 -21
  194. package/dist/catalog/kie/nano-banana-2-lite.model.js +1 -1
  195. package/dist/catalog/kie/nano-banana-2.1.model.d.ts +2 -0
  196. package/dist/catalog/kie/nano-banana-2.1.model.js +34 -0
  197. package/dist/catalog/kie/nano-banana-2.model.js +2 -2
  198. package/dist/catalog/kie/nano-banana-pro.model.js +1 -1
  199. package/dist/catalog/kie/qwen-image-3.0.model.js +2 -10
  200. package/dist/catalog/kie/seedance-1.5-pro.model.js +2 -1
  201. package/dist/catalog/kie/seedance-2.0-fast.model.js +5 -1
  202. package/dist/catalog/kie/seedance-2.0-mini.model.js +5 -1
  203. package/dist/catalog/kie/seedance-2.0.model.js +5 -1
  204. package/dist/catalog/kie/seedance-2.5.model.js +10 -20
  205. package/dist/catalog/kie/seedance-v1.model.js +8 -4
  206. package/dist/catalog/kie/seedream-4.0.model.js +1 -1
  207. package/dist/catalog/kie/seedream-4.5.model.js +1 -1
  208. package/dist/catalog/kie/seedream-5.0-lite.model.js +1 -1
  209. package/dist/catalog/kie/seedream-5.0-pro.model.js +1 -1
  210. package/dist/catalog/kie/wan-3.0-prime.model.d.ts +2 -0
  211. package/dist/catalog/kie/wan-3.0-prime.model.js +15 -0
  212. package/dist/catalog/kie/wan-3.0.model.d.ts +2 -0
  213. package/dist/catalog/kie/wan-3.0.model.js +15 -0
  214. package/dist/catalog/kie/wan30.d.ts +10 -0
  215. package/dist/catalog/kie/wan30.js +78 -0
  216. package/dist/catalog/kie/z-image.model.js +1 -1
  217. package/dist/catalog/modelscope/flux-1-krea-dev.model.js +4 -2
  218. package/dist/catalog/modelscope/majicmix-realistic.model.js +3 -2
  219. package/dist/catalog/modelscope/modelscope-custom.model.js +3 -2
  220. package/dist/catalog/modelscope/qwen-image-2512.model.d.ts +5 -0
  221. package/dist/catalog/modelscope/{qwen-image.model.js → qwen-image-2512.model.js} +11 -8
  222. package/dist/catalog/modelscope/qwen-image-edit-2511.model.d.ts +5 -0
  223. package/dist/catalog/modelscope/{qwen-image-edit-2509.model.js → qwen-image-edit-2511.model.js} +9 -7
  224. package/dist/catalog/modelscope/sdxl-14-ckpt.model.js +3 -2
  225. package/dist/catalog/modelscope/utils.js +2 -2
  226. package/dist/catalog/modelscope/z-image-turbo.model.js +3 -2
  227. package/dist/catalog/ppio/kling-3.0.model.js +4 -1
  228. package/dist/catalog/ppio/minimax-speech.model.js +2 -1
  229. package/dist/catalog/shared/mediaPresence.d.ts +8 -1
  230. package/dist/catalog/shared/mediaPresence.js +21 -1
  231. package/dist/catalog/shared/nanoBanana21.d.ts +11 -0
  232. package/dist/catalog/shared/nanoBanana21.js +30 -0
  233. package/dist/catalog/shared/shotList.d.ts +31 -0
  234. package/dist/catalog/shared/shotList.js +48 -0
  235. package/dist/catalog/shared/subjectElements.d.ts +36 -0
  236. package/dist/catalog/shared/subjectElements.js +93 -0
  237. package/dist/catalog/siliconflow/moss-ttsd-0.5.model.js +1 -1
  238. package/dist/catalog/validate.js +14 -1
  239. package/dist/catalog/volcengine/seedance-2.0-fast.model.d.ts +2 -0
  240. package/dist/catalog/volcengine/seedance-2.0-fast.model.js +11 -0
  241. package/dist/catalog/volcengine/seedance-2.0-mini.model.d.ts +2 -0
  242. package/dist/catalog/volcengine/seedance-2.0-mini.model.js +11 -0
  243. package/dist/catalog/volcengine/seedance-2.0.model.d.ts +2 -0
  244. package/dist/catalog/volcengine/seedance-2.0.model.js +11 -0
  245. package/dist/catalog/volcengine/seedance-2.5.model.d.ts +2 -0
  246. package/dist/catalog/volcengine/seedance-2.5.model.js +11 -0
  247. package/dist/catalog/volcengine/seedance.d.ts +17 -0
  248. package/dist/catalog/volcengine/seedance.js +192 -0
  249. package/dist/catalog/volcengine/seedream-5.0-lite.model.js +2 -1
  250. package/dist/catalog/volcengine/seedream-5.0.js +1 -1
  251. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.d.ts +1 -0
  252. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +52 -10
  253. package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.d.ts +2 -0
  254. package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.js +438 -0
  255. package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +4 -4
  256. package/dist/discovery/index.js +13 -6
  257. package/dist/generation/core.d.ts +6 -0
  258. package/dist/generation/core.js +10 -2
  259. package/dist/index.d.ts +8 -0
  260. package/dist/index.js +9 -0
  261. package/dist/llm/bigmodel/preset.js +2 -1
  262. package/dist/llm/bigmodel/profiles.js +0 -6
  263. package/dist/llm/chat.d.ts +8 -0
  264. package/dist/llm/chat.js +18 -2
  265. package/dist/llm/chatTypes.d.ts +6 -0
  266. package/dist/llm/defaults.d.ts +2 -2
  267. package/dist/llm/defaults.js +3 -3
  268. package/dist/llm/groq/preset.js +18 -2
  269. package/dist/llm/modelCatalog.d.ts +9 -2
  270. package/dist/llm/modelCatalog.js +17 -4
  271. package/dist/llm/modelCatalogEntries.d.ts +2 -0
  272. package/dist/llm/modelCatalogEntries.js +197 -42
  273. package/dist/llm/providerPresets.d.ts +3 -0
  274. package/dist/llm/providerPresets.js +145 -32
  275. package/dist/llm/providerReasoningRequest.js +28 -11
  276. package/dist/llm/siliconflow/index.js +1 -1
  277. package/dist/llm/siliconflow/preset.js +30 -0
  278. package/dist/llm/types.d.ts +6 -0
  279. package/dist/packs/models/{ppio/wan-2.5-preview.d.ts → apimart/flux-3-image.d.ts} +1 -1
  280. package/dist/packs/models/apimart/flux-3-image.js +7 -0
  281. package/dist/packs/models/apimart/flux-3-video.d.ts +6 -0
  282. package/dist/packs/models/apimart/flux-3-video.js +7 -0
  283. package/dist/packs/models/apimart/gemini-omni-1.2-flash.d.ts +6 -0
  284. package/dist/packs/models/apimart/gemini-omni-1.2-flash.js +7 -0
  285. package/dist/packs/models/{modelscope/qwen-image.d.ts → apimart/gpt-image-2.6.d.ts} +1 -1
  286. package/dist/packs/models/apimart/gpt-image-2.6.js +7 -0
  287. package/dist/packs/models/apimart/grok-imagine-video-1.5.d.ts +6 -0
  288. package/dist/packs/models/apimart/grok-imagine-video-1.5.js +7 -0
  289. package/dist/packs/models/apimart/happyhorse-1.1.d.ts +6 -0
  290. package/dist/packs/models/apimart/happyhorse-1.1.js +7 -0
  291. package/dist/packs/models/apimart/kling-4.0.d.ts +6 -0
  292. package/dist/packs/models/apimart/kling-4.0.js +7 -0
  293. package/dist/packs/models/apimart/minimax-h3-max.d.ts +6 -0
  294. package/dist/packs/models/apimart/minimax-h3-max.js +7 -0
  295. package/dist/packs/models/{ppio/minimax-hailuo-2.3.d.ts → apimart/nano-banana-2.1.d.ts} +1 -1
  296. package/dist/packs/models/{ppio/minimax-hailuo-2.3.js → apimart/nano-banana-2.1.js} +4 -4
  297. package/dist/packs/models/apimart/seedream-5.0-flash.d.ts +6 -0
  298. package/dist/packs/models/apimart/seedream-5.0-flash.js +7 -0
  299. package/dist/packs/models/apimart/veo-3.1.d.ts +6 -0
  300. package/dist/packs/models/apimart/veo-3.1.js +7 -0
  301. package/dist/packs/models/apimart/wan-2.7-image.d.ts +6 -0
  302. package/dist/packs/models/apimart/wan-2.7-image.js +7 -0
  303. package/dist/packs/models/apimart/wan-3.0.d.ts +6 -0
  304. package/dist/packs/models/apimart/wan-3.0.js +7 -0
  305. package/dist/packs/models/bailian/cosyvoice-v3.5.js +1 -1
  306. package/dist/packs/models/bailian/minimax-h3.d.ts +6 -0
  307. package/dist/packs/models/bailian/minimax-h3.js +7 -0
  308. package/dist/packs/models/bailian/minimax-speech-2.8.js +1 -1
  309. package/dist/packs/models/bailian/qwen-audio-3.1-tts-flash.js +1 -1
  310. package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.d.ts +6 -0
  311. package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.js +7 -0
  312. package/dist/packs/models/bailian/qwen-image-3.0.js +1 -1
  313. package/dist/packs/models/bailian/wan-3.0.d.ts +6 -0
  314. package/dist/packs/models/bailian/wan-3.0.js +7 -0
  315. package/dist/packs/models/bailian/z-image-turbo.js +1 -1
  316. package/dist/packs/models/fal/eleven-v4-tts.d.ts +6 -0
  317. package/dist/packs/models/{ppio/wan-2.5-preview.js → fal/eleven-v4-tts.js} +4 -4
  318. package/dist/packs/models/fal/flux-3-video.d.ts +6 -0
  319. package/dist/packs/models/fal/flux-3-video.js +7 -0
  320. package/dist/packs/models/{ppio/wan-2.6.d.ts → fal/flux-3.d.ts} +1 -1
  321. package/dist/packs/models/{ppio/wan-2.6.js → fal/flux-3.js} +4 -4
  322. package/dist/packs/models/fal/gemini-omni-1.2-flash.d.ts +6 -0
  323. package/dist/packs/models/fal/gemini-omni-1.2-flash.js +7 -0
  324. package/dist/packs/models/fal/gpt-image-2.6.d.ts +6 -0
  325. package/dist/packs/models/fal/gpt-image-2.6.js +7 -0
  326. package/dist/packs/models/fal/grok-imagine-video-1.5.d.ts +6 -0
  327. package/dist/packs/models/fal/grok-imagine-video-1.5.js +7 -0
  328. package/dist/packs/models/fal/kling-4.0-flash.d.ts +6 -0
  329. package/dist/packs/models/fal/kling-4.0-flash.js +7 -0
  330. package/dist/packs/models/fal/kling-4.0.d.ts +6 -0
  331. package/dist/packs/models/{ppio/wan-2.7.js → fal/kling-4.0.js} +4 -4
  332. package/dist/packs/models/{ppio/wan-2.7.d.ts → fal/ltx-2.3.d.ts} +1 -1
  333. package/dist/packs/models/fal/ltx-2.3.js +7 -0
  334. package/dist/packs/models/fal/minimax-h3-max.d.ts +6 -0
  335. package/dist/packs/models/fal/minimax-h3-max.js +7 -0
  336. package/dist/packs/models/fal/nano-banana-2.1.d.ts +6 -0
  337. package/dist/packs/models/fal/nano-banana-2.1.js +7 -0
  338. package/dist/packs/models/fal/wan-3.0.d.ts +6 -0
  339. package/dist/packs/models/fal/wan-3.0.js +7 -0
  340. package/dist/packs/models/grsai/gpt-image-2.6.d.ts +6 -0
  341. package/dist/packs/models/grsai/gpt-image-2.6.js +7 -0
  342. package/dist/packs/models/grsai/nano-banana-2.1.d.ts +6 -0
  343. package/dist/packs/models/grsai/nano-banana-2.1.js +7 -0
  344. package/dist/packs/models/grsai/wan-3.0.d.ts +6 -0
  345. package/dist/packs/models/grsai/wan-3.0.js +7 -0
  346. package/dist/packs/models/kie/flux-3-klein.d.ts +6 -0
  347. package/dist/packs/models/kie/flux-3-klein.js +7 -0
  348. package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.d.ts +6 -0
  349. package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.js +7 -0
  350. package/dist/packs/models/kie/{eleven-turbo-2.5-tts.d.ts → gemini-3.8-flash-tts.d.ts} +1 -1
  351. package/dist/packs/models/kie/{eleven-turbo-2.5-tts.js → gemini-3.8-flash-tts.js} +1 -1
  352. package/dist/packs/models/kie/gpt-image-2.6.d.ts +6 -0
  353. package/dist/packs/models/kie/gpt-image-2.6.js +7 -0
  354. package/dist/packs/models/kie/grok-imagine-video-1.5.d.ts +6 -0
  355. package/dist/packs/models/kie/grok-imagine-video-1.5.js +7 -0
  356. package/dist/packs/models/kie/kling-4.0-flash.d.ts +6 -0
  357. package/dist/packs/models/kie/kling-4.0-flash.js +7 -0
  358. package/dist/packs/models/kie/kling-4.0.d.ts +6 -0
  359. package/dist/packs/models/kie/kling-4.0.js +7 -0
  360. package/dist/packs/models/kie/nano-banana-2.1.d.ts +6 -0
  361. package/dist/packs/models/kie/nano-banana-2.1.js +7 -0
  362. package/dist/packs/models/kie/wan-3.0-prime.d.ts +6 -0
  363. package/dist/packs/models/kie/wan-3.0-prime.js +7 -0
  364. package/dist/packs/models/kie/wan-3.0.d.ts +6 -0
  365. package/dist/packs/models/kie/wan-3.0.js +7 -0
  366. package/dist/packs/models/modelscope/flux-1-krea-dev.js +1 -1
  367. package/dist/packs/models/modelscope/majicmix-realistic.js +1 -1
  368. package/dist/packs/models/modelscope/modelscope-custom.js +1 -1
  369. package/dist/packs/models/modelscope/qwen-image-2512.d.ts +6 -0
  370. package/dist/packs/models/modelscope/{qwen-image.js → qwen-image-2512.js} +2 -2
  371. package/dist/packs/models/modelscope/{qwen-image-edit-2509.d.ts → qwen-image-edit-2511.d.ts} +1 -1
  372. package/dist/packs/models/modelscope/{qwen-image-edit-2509.js → qwen-image-edit-2511.js} +2 -2
  373. package/dist/packs/models/modelscope/sdxl-14-ckpt.js +1 -1
  374. package/dist/packs/models/modelscope/z-image-turbo.js +1 -1
  375. package/dist/packs/models/volcengine/seedance-2.0-fast.d.ts +6 -0
  376. package/dist/packs/models/volcengine/seedance-2.0-fast.js +7 -0
  377. package/dist/packs/models/volcengine/seedance-2.0-mini.d.ts +6 -0
  378. package/dist/packs/models/volcengine/seedance-2.0-mini.js +7 -0
  379. package/dist/packs/models/volcengine/seedance-2.0.d.ts +6 -0
  380. package/dist/packs/models/volcengine/seedance-2.0.js +7 -0
  381. package/dist/packs/models/volcengine/seedance-2.5.d.ts +6 -0
  382. package/dist/packs/models/volcengine/seedance-2.5.js +7 -0
  383. package/dist/packs/models/volcengine/seedream-5.0-flash.js +1 -1
  384. package/dist/packs/models/volcengine/seedream-5.0-lite.js +1 -1
  385. package/dist/packs/models/volcengine/seedream-5.0-pro.js +1 -1
  386. package/dist/packs/provider-adapters/bailian.js +1 -1
  387. package/dist/packs/provider-adapters/modelscope.js +1 -1
  388. package/dist/packs/provider-adapters/volcengine.js +1 -1
  389. package/dist/packs/provider-packs/apimart.d.ts +1 -1
  390. package/dist/packs/provider-packs/apimart.js +35 -22
  391. package/dist/packs/provider-packs/bailian.d.ts +1 -1
  392. package/dist/packs/provider-packs/bailian.js +8 -5
  393. package/dist/packs/provider-packs/fal.d.ts +1 -1
  394. package/dist/packs/provider-packs/fal.js +52 -40
  395. package/dist/packs/provider-packs/grsai.d.ts +1 -1
  396. package/dist/packs/provider-packs/grsai.js +8 -5
  397. package/dist/packs/provider-packs/kie.d.ts +1 -1
  398. package/dist/packs/provider-packs/kie.js +41 -32
  399. package/dist/packs/provider-packs/modelscope.js +2 -2
  400. package/dist/packs/provider-packs/ppio.d.ts +1 -1
  401. package/dist/packs/provider-packs/ppio.js +2 -6
  402. package/dist/packs/provider-packs/volcengine.d.ts +1 -1
  403. package/dist/packs/provider-packs/volcengine.js +8 -4
  404. package/dist/pricing/index.d.ts +1 -0
  405. package/dist/pricing/index.js +1 -0
  406. package/dist/pricing/mediaContext.d.ts +6 -1
  407. package/dist/pricing/mediaContext.js +12 -5
  408. package/dist/pricing/tokenPricing.d.ts +36 -0
  409. package/dist/pricing/tokenPricing.js +26 -0
  410. package/dist/providers/bailian.d.ts +1 -1
  411. package/dist/providers/bailian.js +71 -4
  412. package/dist/providers/fal.js +11 -1
  413. package/dist/providers/helpers.d.ts +1 -1
  414. package/dist/providers/helpers.js +17 -5
  415. package/dist/providers/kie.js +16 -5
  416. package/dist/providers/metadata.js +2 -2
  417. package/dist/providers/openai-speech.d.ts +6 -0
  418. package/dist/providers/openai-speech.js +31 -0
  419. package/dist/providers/providerAccessErrors.d.ts +3 -0
  420. package/dist/providers/providerAccessErrors.js +73 -0
  421. package/dist/providers/siliconflow.js +2 -27
  422. package/dist/providers/volcengine-speech.d.ts +1 -1
  423. package/dist/providers/volcengine-speech.js +31 -8
  424. package/dist/providers/volcengine-voice-clone.d.ts +3 -0
  425. package/dist/providers/volcengine-voice-clone.js +138 -0
  426. package/dist/providers/volcengine.d.ts +1 -1
  427. package/dist/providers/volcengine.js +89 -11
  428. package/dist/runtime/retry.js +3 -0
  429. package/dist/tool-packs/fal-erase/models/bria-eraser.model.js +1 -1
  430. package/dist/tool-packs/fal-erase/models/finegrain-eraser.model.js +1 -1
  431. package/dist/tool-packs/fal-erase/models/flux-pro-erase.model.js +1 -1
  432. package/dist/tool-packs/fal-image-utilities/models/control-light.model.js +1 -1
  433. package/dist/tool-packs/fal-image-utilities/models/outpaint.model.js +1 -1
  434. package/dist/tool-packs/fal-image-utilities/models/photo-restoration.model.js +1 -1
  435. package/dist/tool-packs/fal-image-utilities/models/pixelcut-background-removal.model.js +1 -1
  436. package/dist/tool-packs/fal-image-utilities/models/product-photography.model.js +1 -1
  437. package/dist/tool-packs/fal-image-utilities/models/relighting.model.js +1 -1
  438. package/dist/tool-packs/fal-multi-angle/models/flux-2-multiple-angles.model.js +1 -1
  439. package/dist/tool-packs/fal-multi-angle/models/perspective-change.model.js +1 -1
  440. package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2511-multiple-angles.model.js +1 -1
  441. package/dist/types/model.d.ts +68 -12
  442. package/dist/types/model.js +3 -0
  443. package/dist/types/modelTags.d.ts +142 -0
  444. package/dist/types/modelTags.js +44 -0
  445. package/dist/types/runtime.d.ts +3 -0
  446. package/dist/types/speechTimings.d.ts +15 -0
  447. package/dist/types/speechTimings.js +1 -0
  448. package/dist/upload/apimart-upload.d.ts +1 -1
  449. package/dist/upload/apimart-upload.js +37 -15
  450. package/dist/upload/bailian-oss-upload.d.ts +32 -0
  451. package/dist/upload/bailian-oss-upload.js +74 -0
  452. package/dist/upload/{fal-legacy.js → fal-host-fetch.js} +2 -2
  453. package/dist/upload/fal-transport.d.ts +6 -0
  454. package/dist/upload/fal-transport.js +2 -1
  455. package/dist/upload/index.d.ts +2 -2
  456. package/dist/upload/index.js +4 -7
  457. package/dist/upload/kie-upload.d.ts +1 -1
  458. package/dist/upload/kie-upload.js +34 -12
  459. package/dist/upload/media-binary.js +1 -0
  460. package/dist/upload/media-fields.js +7 -2
  461. package/dist/upload/preprocess-core.d.ts +2 -0
  462. package/dist/upload/preprocess-core.js +2 -0
  463. package/dist/upload/preprocess.d.ts +1 -1
  464. package/dist/upload/preprocess.js +12 -3
  465. package/dist/upload/provider-preprocessors/apimart.d.ts +1 -1
  466. package/dist/upload/provider-preprocessors/apimart.js +13 -5
  467. package/dist/upload/provider-preprocessors/bailian.d.ts +8 -0
  468. package/dist/upload/provider-preprocessors/bailian.js +45 -0
  469. package/dist/upload/provider-preprocessors/kie.d.ts +1 -1
  470. package/dist/upload/provider-preprocessors/kie.js +26 -9
  471. package/dist/upload/provider-preprocessors/ppio.d.ts +1 -2
  472. package/dist/upload/provider-preprocessors/ppio.js +2 -29
  473. package/dist/upload/provider-preprocessors/public-host.d.ts +5 -0
  474. package/dist/upload/provider-preprocessors/public-host.js +7 -0
  475. package/dist/upload/provider-preprocessors/volcengine.d.ts +5 -0
  476. package/dist/upload/provider-preprocessors/volcengine.js +10 -0
  477. package/dist/upload/public-host-upload.d.ts +7 -0
  478. package/dist/upload/public-host-upload.js +55 -0
  479. package/dist/upload/upload-response.js +12 -7
  480. package/docs/README.md +26 -26
  481. package/docs/consumers.md +150 -124
  482. package/docs/llm-adaptation/README.md +180 -166
  483. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +108 -104
  484. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +94 -76
  485. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/MiniMax.md +89 -84
  486. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +126 -126
  487. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +238 -234
  488. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/201/253/345/261/261/345/274/225/346/223/216.md +131 -87
  489. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274Qwen.md +112 -84
  490. package/docs/llm-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +88 -88
  491. package/docs/model-adaptation/Bria-Eraser/Bria-Eraser_Fal.md +32 -32
  492. package/docs/model-adaptation/Bria-/345/210/233/346/204/217/346/224/276/345/244/247/Bria-/345/210/233/346/204/217/346/224/276/345/244/247_Fal.md +31 -31
  493. package/docs/model-adaptation/ControlLight/ControlLight_Fal.md +85 -85
  494. package/docs/model-adaptation/Eleven-v4/Eleven-v4_Fal.md +49 -0
  495. package/docs/model-adaptation/FLUX-2-/345/244/232/350/247/222/345/272/246/FLUX-2-/345/244/232/350/247/222/345/272/246_Fal.md +107 -107
  496. package/docs/model-adaptation/FLUX-3/FLUX-3_APIMart.md +65 -0
  497. package/docs/model-adaptation/FLUX-3/FLUX-3_Fal.md +48 -0
  498. package/docs/model-adaptation/FLUX-3-Klein/FLUX-3-Klein_KIE.md +38 -0
  499. package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_APIMart.md +84 -0
  500. package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_Fal.md +80 -0
  501. package/docs/model-adaptation/Finegrain-Eraser/Finegrain-Eraser_Fal.md +31 -31
  502. package/docs/model-adaptation/Flux-Pro-Erase/Flux-Pro-Erase_Fal.md +34 -34
  503. package/docs/model-adaptation/Fun-ASR/Fun-ASR_/347/231/276/347/202/274.md +47 -47
  504. package/docs/model-adaptation/Fun-ASR-Flash-2026-06-15/Fun-ASR-Flash-2026-06-15_/347/231/276/347/202/274.md +45 -45
  505. package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +57 -57
  506. package/docs/model-adaptation/Fun-ASR-Realtime-2026-02-28/Fun-ASR-Realtime-2026-02-28_/347/231/276/347/202/274.md +39 -39
  507. package/docs/model-adaptation/GLM-5.3-Flash/GLM-5.3-Flash_/346/231/272/350/260/261.md +217 -213
  508. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_APIMart.md +173 -173
  509. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Fal.md +94 -94
  510. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Grsai.md +138 -137
  511. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_KIE.md +97 -93
  512. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -66
  513. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -55
  514. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +59 -53
  515. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -55
  516. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_APIMart.md +101 -0
  517. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Fal.md +55 -0
  518. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Grsai.md +32 -0
  519. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_KIE.md +51 -0
  520. package/docs/model-adaptation/GPT-OSS-20B/GPT-OSS-20B_Groq.md +62 -62
  521. package/docs/model-adaptation/Gemini-3.8-Flash-Lite-TTS/Gemini-3.8-Flash-Lite-TTS_KIE.md +22 -0
  522. package/docs/model-adaptation/Gemini-3.8-Flash-TTS/Gemini-3.8-Flash-TTS_KIE.md +38 -0
  523. package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_APIMart.md +79 -0
  524. package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_Fal.md +60 -0
  525. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +131 -124
  526. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_Fal.md +84 -84
  527. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +132 -129
  528. package/docs/model-adaptation/Grok-Imagine/Grok-Imagine_KIE.md +38 -36
  529. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_APIMart.md +250 -250
  530. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_Fal.md +84 -84
  531. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_KIE.md +105 -105
  532. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_APIMart.md +68 -0
  533. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_Fal.md +47 -0
  534. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_KIE.md +37 -0
  535. package/docs/model-adaptation/Hailuo-02/Hailuo-02_Fal.md +95 -93
  536. package/docs/model-adaptation/Hailuo-02/Hailuo-02_KIE.md +58 -56
  537. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_Fal.md +88 -88
  538. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_KIE.md +51 -51
  539. package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_APIMart.md +66 -0
  540. package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_KIE.md +31 -27
  541. package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +99 -99
  542. package/docs/model-adaptation/Ideogram-/345/233/276/347/211/207/346/224/276/345/244/247/Ideogram-/345/233/276/347/211/207/346/224/276/345/244/247_Fal.md +41 -41
  543. package/docs/model-adaptation/Image-Apps-v2-/345/225/206/345/223/201/346/221/204/345/275/261/Image-Apps-v2-/345/225/206/345/223/201/346/221/204/345/275/261_Fal.md +72 -72
  544. package/docs/model-adaptation/Image-Apps-v2-/346/211/251/345/233/276/Image-Apps-v2-/346/211/251/345/233/276_Fal.md +93 -93
  545. package/docs/model-adaptation/Image-Apps-v2-/347/205/247/347/211/207/344/277/256/345/244/215/Image-Apps-v2-/347/205/247/347/211/207/344/277/256/345/244/215_Fal.md +86 -86
  546. package/docs/model-adaptation/Image-Apps-v2-/351/207/215/346/211/223/345/205/211/Image-Apps-v2-/351/207/215/346/211/223/345/205/211_Fal.md +84 -84
  547. package/docs/model-adaptation/Kling-3.0/Kling-3.0_APIMart.md +112 -112
  548. package/docs/model-adaptation/Kling-3.0/Kling-3.0_Fal.md +91 -89
  549. package/docs/model-adaptation/Kling-3.0/Kling-3.0_KIE.md +106 -106
  550. package/docs/model-adaptation/Kling-3.0/Kling-3.0_/346/264/276/346/254/247/344/272/221.md +120 -119
  551. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_APIMart.md +130 -125
  552. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_Fal.md +107 -107
  553. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_KIE.md +148 -143
  554. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_APIMart.md +88 -85
  555. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_Fal.md +86 -83
  556. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_KIE.md +84 -84
  557. package/docs/model-adaptation/Kling-4.0/Kling-4.0_APIMart.md +76 -0
  558. package/docs/model-adaptation/Kling-4.0/Kling-4.0_Fal.md +115 -0
  559. package/docs/model-adaptation/Kling-4.0/Kling-4.0_KIE.md +61 -0
  560. package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_Fal.md +55 -0
  561. package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_KIE.md +33 -0
  562. package/docs/model-adaptation/LTX-2.3/LTX-2.3_Fal.md +121 -0
  563. package/docs/model-adaptation/Midjourney/Midjourney_APIMart.md +402 -396
  564. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_APIMart.md +237 -234
  565. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_Fal.md +112 -108
  566. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_KIE.md +118 -111
  567. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_/347/231/276/347/202/274.md +65 -0
  568. package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_APIMart.md +78 -0
  569. package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_Fal.md +62 -0
  570. package/docs/model-adaptation/MiniMax-Speech/MiniMax-Speech_/346/264/276/346/254/247/344/272/221.md +170 -170
  571. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_APIMart.md +89 -89
  572. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Fal.md +99 -99
  573. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Grsai.md +82 -82
  574. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_KIE.md +72 -70
  575. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_APIMart.md +79 -79
  576. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md +65 -65
  577. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_KIE.md +64 -64
  578. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_APIMart.md +35 -0
  579. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Fal.md +37 -0
  580. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Grsai.md +35 -0
  581. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_KIE.md +36 -0
  582. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_APIMart.md +83 -83
  583. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Fal.md +89 -89
  584. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md +82 -82
  585. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_KIE.md +64 -64
  586. package/docs/model-adaptation/Pixelcut-/350/203/214/346/231/257/347/247/273/351/231/244/Pixelcut-/350/203/214/346/231/257/347/247/273/351/231/244_Fal.md +79 -79
  587. package/docs/model-adaptation/Qwen-Audio-3.1-TTS-Plus/Qwen-Audio-3.1-TTS-Plus_/347/231/276/347/202/274.md +59 -0
  588. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_APIMart.md +117 -117
  589. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_Fal.md +85 -84
  590. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_KIE.md +103 -103
  591. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_/347/231/276/347/202/274.md +138 -138
  592. package/docs/model-adaptation/Qwen-Image-Edit-2511-/345/244/232/350/247/222/345/272/246/Qwen-Image-Edit-2511-/345/244/232/350/247/222/345/272/246_Fal.md +57 -57
  593. package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +68 -68
  594. package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +40 -40
  595. package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +40 -40
  596. package/docs/model-adaptation/Qwen3-ASR-Flash/Qwen3-ASR-Flash_/347/231/276/347/202/274.md +44 -44
  597. package/docs/model-adaptation/Qwen3-ASR-Flash-2026-02-10/Qwen3-ASR-Flash-2026-02-10_/347/231/276/347/202/274.md +37 -37
  598. package/docs/model-adaptation/Qwen3-ASR-Flash-Filetrans/Qwen3-ASR-Flash-Filetrans_/347/231/276/347/202/274.md +45 -45
  599. package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +58 -58
  600. package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime-2026-02-10/Qwen3-ASR-Flash-Realtime-2026-02-10_/347/231/276/347/202/274.md +37 -37
  601. package/docs/model-adaptation/README.md +371 -328
  602. package/docs/model-adaptation/Seed-ICL-2.0/Seed-ICL-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +65 -0
  603. package/docs/model-adaptation/SeedASR-2.0-File/SeedASR-2.0-File_/347/201/253/345/261/261/345/274/225/346/223/216.md +115 -115
  604. package/docs/model-adaptation/SeedASR-2.0-Realtime/SeedASR-2.0-Realtime_/347/201/253/345/261/261/345/274/225/346/223/216.md +147 -147
  605. package/docs/model-adaptation/SeedVR2-/345/233/276/347/211/207/346/224/276/345/244/247/SeedVR2-/345/233/276/347/211/207/346/224/276/345/244/247_Fal.md +45 -45
  606. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_APIMart.md +121 -121
  607. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_Fal.md +97 -97
  608. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_KIE.md +87 -86
  609. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +101 -0
  610. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_APIMart.md +89 -89
  611. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_Fal.md +95 -95
  612. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_KIE.md +79 -78
  613. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_/347/201/253/345/261/261/345/274/225/346/223/216.md +98 -0
  614. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_APIMart.md +93 -89
  615. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_Fal.md +96 -96
  616. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_KIE.md +79 -78
  617. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_/347/201/253/345/261/261/345/274/225/346/223/216.md +98 -0
  618. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_APIMart.md +217 -212
  619. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_Fal.md +98 -94
  620. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_KIE.md +94 -89
  621. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_/347/201/253/345/261/261/345/274/225/346/223/216.md +102 -0
  622. package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_APIMart.md +64 -0
  623. package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_/347/201/253/345/261/261/345/274/225/346/223/216.md +18 -18
  624. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_APIMart.md +113 -106
  625. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_Fal.md +91 -91
  626. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_KIE.md +89 -89
  627. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_/347/201/253/345/261/261/345/274/225/346/223/216.md +110 -108
  628. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_APIMart.md +194 -194
  629. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_Fal.md +100 -100
  630. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_KIE.md +141 -141
  631. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_/347/201/253/345/261/261/345/274/225/346/223/216.md +137 -137
  632. package/docs/model-adaptation/SenseVoiceSmall/SenseVoiceSmall_/347/241/205/345/237/272/346/265/201/345/212/250.md +73 -73
  633. package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +52 -6
  634. package/docs/model-adaptation/TTS-/346/227/266/351/227/264/346/210/263-2026-10.md +36 -0
  635. package/docs/model-adaptation/Topaz-/345/233/276/347/211/207/346/224/276/345/244/247/Topaz-/345/233/276/347/211/207/346/224/276/345/244/247_Fal.md +87 -87
  636. package/docs/model-adaptation/Topaz-/351/200/217/346/230/216/345/233/276/346/224/276/345/244/247/Topaz-/351/200/217/346/230/216/345/233/276/346/224/276/345/244/247_Fal.md +34 -34
  637. package/docs/model-adaptation/Veo-3.1/Veo-3.1_APIMart.md +90 -0
  638. package/docs/model-adaptation/Wan-2.7-Image/Wan-2.7-Image_APIMart.md +81 -0
  639. package/docs/model-adaptation/Wan-3.0/Wan-3.0_APIMart.md +74 -0
  640. package/docs/model-adaptation/Wan-3.0/Wan-3.0_Fal.md +60 -0
  641. package/docs/model-adaptation/Wan-3.0/Wan-3.0_Grsai.md +35 -0
  642. package/docs/model-adaptation/Wan-3.0/Wan-3.0_KIE.md +38 -0
  643. package/docs/model-adaptation/Wan-3.0/Wan-3.0_/347/231/276/347/202/274.md +96 -0
  644. package/docs/model-adaptation/Wan-3.0-Prime/Wan-3.0-Prime_KIE.md +20 -0
  645. package/docs/model-adaptation/Whisper-Large-v3/Whisper-Large-v3_Groq.md +80 -80
  646. package/docs/model-adaptation/Whisper-Large-v3-Turbo/Whisper-Large-v3-Turbo_Groq.md +79 -79
  647. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_APIMart.md +88 -88
  648. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_Fal.md +103 -95
  649. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_KIE.md +71 -71
  650. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/347/231/276/347/202/274.md +122 -122
  651. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/351/255/224/346/220/255.md +99 -97
  652. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/APIMart.md +240 -240
  653. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Fal.md +190 -172
  654. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Groq.md +136 -121
  655. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Grsai.md +217 -217
  656. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/KIE.md +159 -131
  657. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//345/200/231/351/200/211/344/276/233/345/272/224/345/225/206/350/260/203/347/240/224-/345/233/276/347/211/207/345/267/245/345/205/267.md +151 -151
  658. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//345/277/253/351/200/237/351/200/202/351/205/215/344/276/233/345/272/224/345/225/206.md +65 -65
  659. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//346/264/276/346/254/247/344/272/221.md +170 -147
  660. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/201/253/345/261/261/345/274/225/346/223/216.md +191 -183
  661. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +339 -282
  662. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/241/205/345/237/272/346/265/201/345/212/250.md +180 -153
  663. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//351/255/224/346/220/255.md +205 -207
  664. package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +339 -338
  665. package/docs/model-adaptation//351/200/217/350/247/206/345/217/230/346/215/242//351/200/217/350/247/206/345/217/230/346/215/242_Fal.md +59 -59
  666. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Electron.md +77 -77
  667. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Tauri.md +81 -81
  668. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/UXP.md +169 -169
  669. package/docs//346/216/245/345/205/245/346/214/207/345/215/227//344/276/233/345/272/224/345/225/206/345/237/237/345/220/215.md +83 -83
  670. package/docs//346/216/245/345/205/245/346/214/207/345/215/227//351/224/231/350/257/257/345/244/204/347/220/206.md +72 -72
  671. package/examples/form-renderer/README.md +17 -17
  672. package/examples/form-renderer/cli.ts +32 -32
  673. package/examples/form-renderer/index.ts +144 -144
  674. package/examples/form-renderer/package.json +16 -16
  675. package/examples/form-renderer/tsconfig.json +14 -14
  676. package/examples/llm-chat/README.md +38 -38
  677. package/examples/llm-chat/index.ts +100 -100
  678. package/examples/llm-chat/package.json +19 -19
  679. package/examples/llm-chat/tsconfig.json +14 -14
  680. package/examples/minimal-node/README.md +31 -31
  681. package/examples/minimal-node/index.ts +138 -138
  682. package/examples/minimal-node/package.json +17 -17
  683. package/examples/minimal-node/tsconfig.json +14 -14
  684. package/package.json +259 -258
  685. package/dist/catalog/grsai/gptImage25Sizes.d.ts +0 -1
  686. package/dist/catalog/grsai/gptImage25Sizes.js +0 -76
  687. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.d.ts +0 -2
  688. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.js +0 -29
  689. package/dist/catalog/modelscope/qwen-image-edit-2509.model.d.ts +0 -5
  690. package/dist/catalog/modelscope/qwen-image.model.d.ts +0 -5
  691. package/dist/catalog/ppio/minimax-hailuo-2.3.model.d.ts +0 -7
  692. package/dist/catalog/ppio/minimax-hailuo-2.3.model.js +0 -114
  693. package/dist/catalog/ppio/wan-2.5-preview.model.d.ts +0 -7
  694. package/dist/catalog/ppio/wan-2.5-preview.model.js +0 -198
  695. package/dist/catalog/ppio/wan-2.6.model.d.ts +0 -7
  696. package/dist/catalog/ppio/wan-2.6.model.js +0 -206
  697. package/dist/catalog/ppio/wan-2.7.model.d.ts +0 -2
  698. package/dist/catalog/ppio/wan-2.7.model.js +0 -373
  699. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_/346/264/276/346/254/247/344/272/221.md +0 -70
  700. package/docs/model-adaptation/TeleSpeechASR/TeleSpeechASR_/347/241/205/345/237/272/346/265/201/345/212/250.md +0 -76
  701. package/docs/model-adaptation/Wan-2.5-Preview/Wan-2.5-Preview_/346/264/276/346/254/247/344/272/221.md +0 -82
  702. package/docs/model-adaptation/Wan-2.6/Wan-2.6_/346/264/276/346/254/247/344/272/221.md +0 -84
  703. package/docs/model-adaptation/Wan-2.7/Wan-2.7_/346/264/276/346/254/247/344/272/221.md +0 -122
  704. /package/dist/upload/{fal-legacy.d.ts → fal-host-fetch.d.ts} +0 -0
@@ -1,3 +1,3 @@
1
1
  import type { Transport } from '../runtime/Transport.js';
2
2
  import type { PreparedMediaBinary } from './prepared-media.js';
3
- export declare function uploadToApiMart(apiKey: string, prepared: PreparedMediaBinary, transport: Transport): Promise<string>;
3
+ export declare function uploadToApiMart(apiKey: string, prepared: PreparedMediaBinary, transport: Transport, signal?: AbortSignal): Promise<string>;
@@ -2,9 +2,13 @@ import { buildApiMartEndpoints } from '../providers/endpoints/apimart.js';
2
2
  import { fetchProvider } from '../providers/provider-fetch.js';
3
3
  import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
4
4
  import { readUploadJson, readUploadString } from './upload-response.js';
5
+ import { createDeadlineSignal } from './fal-transport.js';
5
6
  const APIMART_MAX_IMAGE_BYTES = 20 * 1024 * 1024;
7
+ const APIMART_UPLOAD_TIMEOUT_MS = 120_000;
6
8
  const APIMART_IMAGE_MIME_TYPES = new Set(['image/jpeg', 'image/png', 'image/webp', 'image/gif']);
7
- export async function uploadToApiMart(apiKey, prepared, transport) {
9
+ export async function uploadToApiMart(apiKey, prepared, transport, signal) {
10
+ if (signal?.aborted)
11
+ throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
8
12
  if (!APIMART_IMAGE_MIME_TYPES.has(prepared.mimeType)) {
9
13
  throw new AiRuntimeError('unsupported_media_type', `APIMart 图片上传仅支持 JPEG、PNG、WebP、GIF,当前类型为 ${prepared.mimeType}。`);
10
14
  }
@@ -14,19 +18,37 @@ export async function uploadToApiMart(apiKey, prepared, transport) {
14
18
  const form = new FormData();
15
19
  form.append('file', new Blob([prepared.bytes], { type: prepared.mimeType }), prepared.filename);
16
20
  const endpoints = buildApiMartEndpoints('/v1/uploads/images');
17
- const response = await fetchProvider('APIMart image upload', endpoints[0], {
18
- method: 'POST',
19
- headers: { Authorization: `Bearer ${apiKey}` },
20
- body: form,
21
- }, {
22
- transport,
23
- retryPreconnectOnce: true,
24
- fallbackEndpoints: endpoints.slice(1),
25
- });
26
- const payload = await readUploadJson(response, 'APIMart image upload');
27
- const fileUrl = readUploadString(payload, '/url') ?? readUploadString(payload, '/data/url');
28
- if (!fileUrl) {
29
- throw new AiRuntimeError('upload_failed', `APIMart image upload missing file URL: ${JSON.stringify(payload)}`);
21
+ const deadline = createDeadlineSignal(signal, APIMART_UPLOAD_TIMEOUT_MS);
22
+ try {
23
+ deadline.signal.throwIfAborted();
24
+ const response = await fetchProvider('APIMart image upload', endpoints[0], {
25
+ method: 'POST',
26
+ headers: { Authorization: `Bearer ${apiKey}` },
27
+ body: form,
28
+ signal: deadline.signal,
29
+ }, {
30
+ transport,
31
+ retryPreconnectOnce: true,
32
+ fallbackEndpoints: endpoints.slice(1),
33
+ });
34
+ const payload = await readUploadJson(response, 'APIMart image upload');
35
+ deadline.signal.throwIfAborted();
36
+ const fileUrl = readUploadString(payload, '/url') ?? readUploadString(payload, '/data/url');
37
+ if (!fileUrl) {
38
+ throw new AiRuntimeError('upload_failed', `APIMart image upload missing file URL: ${JSON.stringify(payload)}`);
39
+ }
40
+ return fileUrl;
41
+ }
42
+ catch (error) {
43
+ if (signal?.aborted)
44
+ throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
45
+ if (deadline.didTimeout())
46
+ throw new AiRuntimeError('upload_timeout', `APIMart upload exceeded ${APIMART_UPLOAD_TIMEOUT_MS}ms`);
47
+ if (error instanceof Error && error.name === 'AbortError')
48
+ throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
49
+ throw error;
50
+ }
51
+ finally {
52
+ deadline.dispose();
30
53
  }
31
- return fileUrl;
32
54
  }
@@ -0,0 +1,32 @@
1
+ import type { Transport } from '../runtime/Transport.js';
2
+ /** 百炼临时存储:凭证按模型签发、不能跨模型复用;对象 48 小时后过期,模型请求要带 X-DashScope-OssResourceResolve。 */
3
+ export declare const BAILIAN_DEFAULT_API_BASE_URL = "https://dashscope.aliyuncs.com/api/v1";
4
+ export interface BailianUploadTarget {
5
+ /** 表单直传地址(HTTPS) */
6
+ uploadUrl: string;
7
+ /** 按官方顺序排好的表单字段,文件字段名为 file */
8
+ fields: [string, string][];
9
+ objectKey: string;
10
+ maxBytes: number;
11
+ }
12
+ /** 申请一次上传凭证并算好对象路径;objectName 只用作文件名的可读部分。 */
13
+ export declare function requestBailianUploadTarget(input: {
14
+ transport: Transport;
15
+ apiKey: string;
16
+ modelId: string;
17
+ objectName: string;
18
+ apiBaseUrl?: string;
19
+ signal?: AbortSignal;
20
+ }): Promise<BailianUploadTarget>;
21
+ /** 把内存里的字节传到临时存储,返回模型可用的 oss:// 地址。 */
22
+ export declare function uploadBytesToBailianOss(input: {
23
+ transport: Transport;
24
+ apiKey: string;
25
+ modelId: string;
26
+ objectName: string;
27
+ bytes: Uint8Array;
28
+ mimeType: string;
29
+ filename: string;
30
+ apiBaseUrl?: string;
31
+ signal?: AbortSignal;
32
+ }): Promise<string>;
@@ -0,0 +1,74 @@
1
+ import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
2
+ import { assertMediaSize } from '../runtime/MediaReader.js';
3
+ /** 百炼临时存储:凭证按模型签发、不能跨模型复用;对象 48 小时后过期,模型请求要带 X-DashScope-OssResourceResolve。 */
4
+ export const BAILIAN_DEFAULT_API_BASE_URL = 'https://dashscope.aliyuncs.com/api/v1';
5
+ function asRecord(value) {
6
+ return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
7
+ }
8
+ function requiredString(record, key) {
9
+ const value = record?.[key];
10
+ if (typeof value !== 'string' || !value)
11
+ throw new AiRuntimeError('invalid_response', `Bailian upload policy has no ${key}`);
12
+ return value;
13
+ }
14
+ /** 申请一次上传凭证并算好对象路径;objectName 只用作文件名的可读部分。 */
15
+ export async function requestBailianUploadTarget(input) {
16
+ const response = await input.transport.fetch(`${input.apiBaseUrl ?? BAILIAN_DEFAULT_API_BASE_URL}/uploads?action=getPolicy&model=${encodeURIComponent(input.modelId)}`, { headers: { Authorization: `Bearer ${input.apiKey}` }, signal: input.signal });
17
+ const text = await response.text();
18
+ if (!response.ok)
19
+ throw new AiRuntimeError('provider_http_error', `Bailian upload policy failed with HTTP ${response.status}`);
20
+ let payload;
21
+ try {
22
+ payload = JSON.parse(text);
23
+ }
24
+ catch {
25
+ throw new AiRuntimeError('invalid_response', 'Bailian upload policy returned invalid JSON');
26
+ }
27
+ const policy = asRecord(asRecord(payload)?.data);
28
+ let host;
29
+ try {
30
+ host = new URL(requiredString(policy, 'upload_host'));
31
+ }
32
+ catch (error) {
33
+ if (error instanceof AiRuntimeError)
34
+ throw error;
35
+ throw new AiRuntimeError('invalid_response', 'Bailian upload_host is invalid');
36
+ }
37
+ if (host.protocol !== 'https:')
38
+ throw new AiRuntimeError('invalid_response', 'Bailian upload_host must use HTTPS');
39
+ const uploadDir = requiredString(policy, 'upload_dir').replace(/^\/+|\/+$/g, '');
40
+ const rawLimit = policy?.max_file_size_mb;
41
+ const maxFileSizeMb = typeof rawLimit === 'number' || typeof rawLimit === 'string' ? Number(rawLimit) : NaN;
42
+ if (!Number.isFinite(maxFileSizeMb) || maxFileSizeMb <= 0) {
43
+ throw new AiRuntimeError('invalid_response', 'Bailian upload policy has invalid max_file_size_mb');
44
+ }
45
+ const objectKey = `${uploadDir}/${input.objectName.replace(/[^A-Za-z0-9._-]/g, '_')}`;
46
+ return {
47
+ uploadUrl: host.toString(),
48
+ fields: [
49
+ ['OSSAccessKeyId', requiredString(policy, 'oss_access_key_id')],
50
+ ['Signature', requiredString(policy, 'signature')],
51
+ ['policy', requiredString(policy, 'policy')],
52
+ ['x-oss-object-acl', requiredString(policy, 'x_oss_object_acl')],
53
+ ['x-oss-forbid-overwrite', requiredString(policy, 'x_oss_forbid_overwrite')],
54
+ ['key', objectKey],
55
+ ['success_action_status', '200'],
56
+ ],
57
+ objectKey,
58
+ // 官方临时存储单文件上限 1 GB,按十进制字节保守换算。
59
+ maxBytes: Math.min(1_000_000_000, Math.floor(maxFileSizeMb * 1_000_000)),
60
+ };
61
+ }
62
+ /** 把内存里的字节传到临时存储,返回模型可用的 oss:// 地址。 */
63
+ export async function uploadBytesToBailianOss(input) {
64
+ const target = await requestBailianUploadTarget(input);
65
+ assertMediaSize({ size: input.bytes.byteLength, mimeType: input.mimeType, filename: input.filename }, target.maxBytes);
66
+ const form = new FormData();
67
+ for (const [key, value] of target.fields)
68
+ form.append(key, value);
69
+ form.append('file', new Blob([new Uint8Array(input.bytes)], { type: input.mimeType }), input.filename);
70
+ const response = await input.transport.fetch(target.uploadUrl, { method: 'POST', body: form, signal: input.signal });
71
+ if (!response.ok)
72
+ throw new AiRuntimeError('upload_failed', `Bailian OSS upload failed with HTTP ${response.status}`);
73
+ return `oss://${target.objectKey}`;
74
+ }
@@ -4,9 +4,9 @@ import { uploadToFalWithTransport } from './fal-transport.js';
4
4
  * `uploadToFalWithTransport`。省略 transport 只为兼容 0.1.3 的两参数调用。
5
5
  */
6
6
  export async function uploadToFal(apiKey, prepared, transport) {
7
- return await uploadToFalWithTransport(apiKey, prepared, transport ?? createLegacyHostTransport());
7
+ return await uploadToFalWithTransport(apiKey, prepared, transport ?? createHostFetchTransport());
8
8
  }
9
- function createLegacyHostTransport() {
9
+ function createHostFetchTransport() {
10
10
  return {
11
11
  async fetch(url, init) {
12
12
  const hostFetch = globalThis.fetch;
@@ -5,3 +5,9 @@ import type { PreparedMediaBinary } from './prepared-media.js';
5
5
  * 都经宿主 Transport,且直接传递编码后的字节,不依赖 File/Blob 或全局 fetch。
6
6
  */
7
7
  export declare function uploadToFalWithTransport(apiKey: string, prepared: PreparedMediaBinary, transport: Transport, signal?: AbortSignal): Promise<string>;
8
+ /** 上传共享期限:用户取消和超时联动到同一网络信号,调用方必须 finally dispose。 */
9
+ export declare function createDeadlineSignal(parent: AbortSignal | undefined, timeoutMs: number): {
10
+ signal: AbortSignal;
11
+ didTimeout(): boolean;
12
+ dispose(): void;
13
+ };
@@ -81,7 +81,8 @@ function assertHttpsUrl(value, field) {
81
81
  function isJsonObject(value) {
82
82
  return typeof value === 'object' && value !== null && !Array.isArray(value);
83
83
  }
84
- function createDeadlineSignal(parent, timeoutMs) {
84
+ /** 上传共享期限:用户取消和超时联动到同一网络信号,调用方必须 finally dispose。 */
85
+ export function createDeadlineSignal(parent, timeoutMs) {
85
86
  const controller = new AbortController();
86
87
  let timedOut = false;
87
88
  const abort = () => controller.abort();
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * 媒体文件上传相关工具(供应商官方上传服务封装):字段识别、上传策略、上传实现、
3
- * `data:` URI 解析、MIME 推断(任务 2.4 迁入)。
3
+ * `data:` URI 解析与 MIME 推断供宿主共享,避免重复实现媒体判定。
4
4
  */
5
5
  export { buildMediaSourceIndex, classifyMediaKey, inheritMediaKind, isLocalMediaSource, isRemoteHttpUrl, normalizeLocalSource, resolveMediaKind, type MediaKind, type MediaSourceIndex, type ResolvedMediaKind, } from './media-fields.js';
6
6
  export { defaultFilename, inferMimeFromPath, parseDataUri, type ParsedDataUri } from './media-binary.js';
7
7
  export { preprocessRequestBody } from './preprocess.js';
8
8
  export { fromBase64, toBase64, toDataUri, uploadToApiMart, uploadToKie, type PreparedMediaBinary, } from './providers.js';
9
- export { uploadToFal } from './fal-legacy.js';
9
+ export { uploadToFal } from './fal-host-fetch.js';
10
10
  export { uploadToFalWithTransport } from './fal-transport.js';
@@ -1,15 +1,12 @@
1
1
  /**
2
2
  * 媒体文件上传相关工具(供应商官方上传服务封装):字段识别、上传策略、上传实现、
3
- * `data:` URI 解析、MIME 推断(任务 2.4 迁入)。
3
+ * `data:` URI 解析与 MIME 推断供宿主共享,避免重复实现媒体判定。
4
4
  */
5
5
  export { buildMediaSourceIndex, classifyMediaKey, inheritMediaKind, isLocalMediaSource, isRemoteHttpUrl, normalizeLocalSource, resolveMediaKind, } from './media-fields.js';
6
- // 任务 2.4 迁入:`data:` URI 解析 / MIME 推断 / 缺省文件名,宿主的 `MediaReader`
7
- // 实现(如 Electron 侧 sdk-runtime.ts)复用这里的实现,不再各自维护一份重复拷贝。
6
+ // 宿主的 MediaReader 共用解析规则,确保上传与本地读取的媒体类型一致。
8
7
  export { defaultFilename, inferMimeFromPath, parseDataUri } from './media-binary.js';
9
- // 任务 2.4 迁入:媒体上传主入口(识别请求体里的媒体字段、按供应商上传策略上传、回填 URL)。
10
8
  export { preprocessRequestBody } from './preprocess.js';
11
- // 任务 2.4 迁入:供应商官方上传服务封装(Fal/APIMart/KIE),以及不依赖 `Buffer` 的
12
- // base64 编解码(UXP/浏览器没有 Node 的 `Buffer`)。
9
+ // UXP 与浏览器没有 Node Buffer,公共上传工具只依赖可移植的二进制契约。
13
10
  export { fromBase64, toBase64, toDataUri, uploadToApiMart, uploadToKie, } from './providers.js';
14
- export { uploadToFal } from './fal-legacy.js';
11
+ export { uploadToFal } from './fal-host-fetch.js';
15
12
  export { uploadToFalWithTransport } from './fal-transport.js';
@@ -1,3 +1,3 @@
1
1
  import type { Transport } from '../runtime/Transport.js';
2
2
  import type { PreparedMediaBinary } from './prepared-media.js';
3
- export declare function uploadToKie(apiKey: string, prepared: PreparedMediaBinary, transport: Transport): Promise<string>;
3
+ export declare function uploadToKie(apiKey: string, prepared: PreparedMediaBinary, transport: Transport, signal?: AbortSignal): Promise<string>;
@@ -1,25 +1,47 @@
1
1
  import { fetchProvider } from '../providers/provider-fetch.js';
2
2
  import { readUploadJson, readUploadString } from './upload-response.js';
3
3
  import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
4
+ import { createDeadlineSignal } from './fal-transport.js';
4
5
  const KIE_UPLOAD_URL = 'https://kieai.redpandaai.co/api/file-stream-upload';
5
- export async function uploadToKie(apiKey, prepared, transport) {
6
+ const KIE_UPLOAD_TIMEOUT_MS = 120_000;
7
+ export async function uploadToKie(apiKey, prepared, transport, signal) {
8
+ if (signal?.aborted)
9
+ throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
6
10
  const form = new FormData();
7
11
  form.append('uploadPath', 'henji-uploads');
8
12
  form.append('file', new Blob([prepared.bytes], {
9
13
  type: inferUploadMime(prepared.filename),
10
14
  }), prepared.filename);
11
- const response = await fetchProvider('KIE upload', KIE_UPLOAD_URL, {
12
- method: 'POST',
13
- headers: { Authorization: `Bearer ${apiKey}` },
14
- body: form,
15
- }, { transport, retryPreconnectOnce: true });
16
- const payload = await readUploadJson(response, 'KIE upload');
17
- const fileUrl = readUploadString(payload, '/data/fileUrl')
18
- ?? readUploadString(payload, '/data/downloadUrl');
19
- if (!fileUrl) {
20
- throw new AiRuntimeError('upload_failed', `KIE upload missing file URL: ${JSON.stringify(payload)}`);
15
+ const deadline = createDeadlineSignal(signal, KIE_UPLOAD_TIMEOUT_MS);
16
+ try {
17
+ deadline.signal.throwIfAborted();
18
+ const response = await fetchProvider('KIE upload', KIE_UPLOAD_URL, {
19
+ method: 'POST',
20
+ headers: { Authorization: `Bearer ${apiKey}` },
21
+ body: form,
22
+ signal: deadline.signal,
23
+ }, { transport, retryPreconnectOnce: true });
24
+ const payload = await readUploadJson(response, 'KIE upload');
25
+ deadline.signal.throwIfAborted();
26
+ const fileUrl = readUploadString(payload, '/data/fileUrl')
27
+ ?? readUploadString(payload, '/data/downloadUrl');
28
+ if (!fileUrl) {
29
+ throw new AiRuntimeError('upload_failed', `KIE upload missing file URL: ${JSON.stringify(payload)}`);
30
+ }
31
+ return fileUrl;
32
+ }
33
+ catch (error) {
34
+ if (signal?.aborted)
35
+ throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
36
+ if (deadline.didTimeout())
37
+ throw new AiRuntimeError('upload_timeout', `KIE upload exceeded ${KIE_UPLOAD_TIMEOUT_MS}ms`);
38
+ if (error instanceof Error && error.name === 'AbortError')
39
+ throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
40
+ throw error;
41
+ }
42
+ finally {
43
+ deadline.dispose();
21
44
  }
22
- return fileUrl;
23
45
  }
24
46
  function inferUploadMime(filename) {
25
47
  const lower = filename.toLowerCase();
@@ -42,6 +42,7 @@ export function inferMimeFromPath(filePath, mediaKind = 'unknown') {
42
42
  case 'webm': return 'video/webm';
43
43
  case 'mov': return 'video/quicktime';
44
44
  case 'mp3': return 'audio/mpeg';
45
+ case 'aac': return 'audio/aac';
45
46
  case 'm4a': return 'audio/mp4';
46
47
  case 'wav': return 'audio/wav';
47
48
  case 'flac': return 'audio/flac';
@@ -40,7 +40,7 @@ const LOCAL_SOURCE_PREFIXES = [
40
40
  'http://asset.localhost/', 'https://asset.localhost/',
41
41
  'http://tauri.localhost/', 'https://tauri.localhost/',
42
42
  'asset://localhost/', 'tauri://localhost/',
43
- 'file://localhost/', 'file:///', 'file://',
43
+ 'file://localhost', 'file://',
44
44
  ];
45
45
  /**
46
46
  * 收集本次请求真实用到的本地媒体源,供按值识别使用。
@@ -106,7 +106,12 @@ export function classifyMediaKey(key) {
106
106
  export function normalizeLocalSource(source) {
107
107
  for (const prefix of LOCAL_SOURCE_PREFIXES) {
108
108
  if (source.startsWith(prefix)) {
109
- return stripWindowsDrivePrefix(safeDecodeURIComponent(source.slice(prefix.length)));
109
+ const decoded = safeDecodeURIComponent(source.slice(prefix.length));
110
+ // 受管引用是宿主标识,不是文件路径;其余协议只剥 scheme/host,保留 POSIX 根目录。
111
+ if (prefix === 'uxp://' || prefix === 'managed://')
112
+ return decoded;
113
+ const absolute = isLocalPath(decoded) ? decoded : `/${decoded}`;
114
+ return stripWindowsDrivePrefix(absolute);
110
115
  }
111
116
  }
112
117
  return isLocalPath(source) ? source : undefined;
@@ -21,6 +21,8 @@ export interface ProviderMediaRewriteInput {
21
21
  source: string;
22
22
  prepared: PreparedMediaBinary;
23
23
  params: JsonObject;
24
+ /** 正在预处理的整个请求体(只读);按模型申请上传凭证的供应商从这里取 model。 */
25
+ requestBody: JsonValue;
24
26
  requestId?: string;
25
27
  signal?: AbortSignal;
26
28
  runtime: ResolvedRuntimeContext;
@@ -10,6 +10,7 @@ export async function preprocessWithProviderStrategy(input, strategy) {
10
10
  providerId: input.providerId,
11
11
  route: input.route,
12
12
  params,
13
+ requestBody: body,
13
14
  mediaSources: buildMediaSourceIndex(params),
14
15
  mediaFields: new Map((input.constraints?.mediaFields ?? []).map(({ field, kind }) => [field, kind])),
15
16
  requestId: input.requestId,
@@ -77,6 +78,7 @@ async function rewriteMediaSource(context, mediaKind, fieldName, source) {
77
78
  source,
78
79
  prepared,
79
80
  params: context.params,
81
+ requestBody: context.requestBody,
80
82
  requestId: context.requestId,
81
83
  signal: context.signal,
82
84
  runtime: context.runtime,
@@ -5,4 +5,4 @@ import type { JsonObject, JsonValue } from '../types/runtime.js';
5
5
  * 默认全量入口的兼容组合层。真正的媒体遍历只有 `preprocess-core` 一份;按需 packs 则直接
6
6
  * 注入对应 provider-scoped 策略,不会静态带入其他供应商。
7
7
  */
8
- export declare function preprocessRequestBody(providerId: string, route: string, body: JsonValue, runtime: RuntimeContext, params?: JsonObject, constraints?: RuntimeConstraints, requestId?: string, signal?: AbortSignal): Promise<JsonValue>;
8
+ export declare function preprocessRequestBody(providerId: string, route: string, body: JsonValue, runtime: RuntimeContext, params?: JsonObject, constraints?: RuntimeConstraints, requestId?: string, signal?: AbortSignal, purpose?: 'generation' | 'llm'): Promise<JsonValue>;
@@ -1,16 +1,25 @@
1
1
  import { strategy as apimart } from './provider-preprocessors/apimart.js';
2
+ import { strategy as bailian } from './provider-preprocessors/bailian.js';
2
3
  import { strategy as dataUri } from './provider-preprocessors/data-uri.js';
3
4
  import { strategy as fal } from './provider-preprocessors/fal.js';
4
5
  import { preprocessProviderInput } from './provider-preprocessors/factory.js';
5
6
  import { strategy as kie } from './provider-preprocessors/kie.js';
6
7
  import { strategy as ppio } from './provider-preprocessors/ppio.js';
7
- const preprocessors = { apimart, fal, kie, modelscope: kie, ppio };
8
+ import { strategy as publicHost } from './provider-preprocessors/public-host.js';
9
+ import { strategy as volcengine } from './provider-preprocessors/volcengine.js';
10
+ const preprocessors = { apimart, bailian, fal, kie, modelscope: publicHost, ppio, volcengine };
11
+ /**
12
+ * 大语言模型对话的消息里,百炼、火山方舟的视频与音频直接收 Data URI;生成用的托管策略
13
+ * (百炼临时存储按生成模型签发凭证、方舟参考视频托管)不适用于对话接口。
14
+ */
15
+ const llmPreprocessors = { apimart, fal, kie, modelscope: kie, ppio };
8
16
  /**
9
17
  * 默认全量入口的兼容组合层。真正的媒体遍历只有 `preprocess-core` 一份;按需 packs 则直接
10
18
  * 注入对应 provider-scoped 策略,不会静态带入其他供应商。
11
19
  */
12
- export async function preprocessRequestBody(providerId, route, body, runtime, params = {}, constraints, requestId, signal) {
13
- const strategy = preprocessors[providerId] ?? dataUri;
20
+ export async function preprocessRequestBody(providerId, route, body, runtime, params = {}, constraints, requestId, signal, purpose = 'generation') {
21
+ const table = purpose === 'llm' ? llmPreprocessors : preprocessors;
22
+ const strategy = table[providerId] ?? dataUri;
14
23
  return await preprocessProviderInput(strategy, {
15
24
  providerId,
16
25
  route,
@@ -1,4 +1,4 @@
1
1
  export declare const strategy: {
2
- rewrite({ mediaKind, prepared, runtime, route, requestId }: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
2
+ rewrite(input: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
3
3
  };
4
4
  export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
@@ -1,11 +1,13 @@
1
1
  import { AiRuntimeError } from '../../runtime/AiRuntimeError.js';
2
2
  import { uploadToApiMart } from '../apimart-upload.js';
3
+ import { uploadToPublicHost } from '../public-host-upload.js';
3
4
  import { createGenerationPreprocessor } from './factory.js';
4
5
  export const strategy = {
5
- async rewrite({ mediaKind, prepared, runtime, route, requestId }) {
6
- if (mediaKind !== 'image') {
7
- throw new AiRuntimeError('public_media_url_required', `APIMart 没有通用的${mediaKind === 'video' ? '视频' : (mediaKind === 'audio' ? '音频' : '文件')}上传端点。`);
8
- }
6
+ async rewrite(input) {
7
+ const { mediaKind, prepared, runtime, route, requestId, signal } = input;
8
+ // APIMart 只有图片上传端点;参考视频、音频经通用文件上传服务(KIE / Fal)托管成公网地址。
9
+ if (mediaKind !== 'image')
10
+ return await uploadToPublicHost(input, 'APIMart');
9
11
  const apiKey = await runtime.credentials.get('generation', 'apimart');
10
12
  if (!apiKey) {
11
13
  throw new AiRuntimeError('missing_api_key', 'APIMart 本地图片必须先上传,请先在设置中配置 APIMart API Key。');
@@ -18,7 +20,7 @@ export const strategy = {
18
20
  context,
19
21
  });
20
22
  try {
21
- const url = await uploadToApiMart(apiKey, prepared, runtime.transport);
23
+ const url = await uploadToApiMart(apiKey, prepared, runtime.transport, signal);
22
24
  runtime.logger.info('APIMart 本地图片上传完成', {
23
25
  event: 'ai_runtime.upload.apimart_completed',
24
26
  requestId,
@@ -28,6 +30,12 @@ export const strategy = {
28
30
  return url;
29
31
  }
30
32
  catch (error) {
33
+ if (signal?.aborted || (error instanceof AiRuntimeError && error.code === 'cancelled') || (error instanceof Error && error.name === 'AbortError')) {
34
+ runtime.logger.info('APIMart 本地图片上传已取消', {
35
+ event: 'ai_runtime.upload.apimart_cancelled', requestId, providerId: 'apimart', context,
36
+ });
37
+ throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
38
+ }
31
39
  runtime.logger.error('APIMart 本地图片上传失败', {
32
40
  event: 'ai_runtime.upload.apimart_failed',
33
41
  requestId,
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 百炼图片收 Data URI;视频、音频只收公网 URL 或 oss://,本地文件传到百炼免费临时存储。
3
+ * 上传凭证按模型签发,所以从请求体的 model 申请;带 oss:// 的请求由供应商层加上解析头。
4
+ */
5
+ export declare const strategy: {
6
+ rewrite(input: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
7
+ };
8
+ export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
@@ -0,0 +1,45 @@
1
+ import { AiRuntimeError } from '../../runtime/AiRuntimeError.js';
2
+ import { getPointer } from '../../providers/helpers.js';
3
+ import { toDataUri } from '../base64.js';
4
+ import { uploadBytesToBailianOss } from '../bailian-oss-upload.js';
5
+ import { createGenerationPreprocessor } from './factory.js';
6
+ /**
7
+ * 百炼图片收 Data URI;视频、音频只收公网 URL 或 oss://,本地文件传到百炼免费临时存储。
8
+ * 上传凭证按模型签发,所以从请求体的 model 申请;带 oss:// 的请求由供应商层加上解析头。
9
+ */
10
+ export const strategy = {
11
+ async rewrite(input) {
12
+ if (input.mediaKind === 'image')
13
+ return toDataUri(input.prepared.bytes, input.prepared.mimeType);
14
+ const apiKey = await input.runtime.credentials.get('generation', 'bailian');
15
+ if (!apiKey)
16
+ throw new AiRuntimeError('missing_api_key', '百炼本地视频、音频需要先上传,请先在设置中配置百炼 API Key。');
17
+ const modelId = getPointer(input.requestBody, '/model');
18
+ if (typeof modelId !== 'string' || !modelId)
19
+ throw new AiRuntimeError('invalid_request', '百炼请求缺少 model,无法申请上传凭证');
20
+ const context = { route: input.route, modelId, mediaKind: input.mediaKind, bytes: input.prepared.bytes.byteLength };
21
+ input.runtime.logger.info('百炼临时存储上传开始', {
22
+ event: 'ai_runtime.upload.bailian_oss_started', requestId: input.requestId, providerId: 'bailian', context,
23
+ });
24
+ try {
25
+ const url = await uploadBytesToBailianOss({
26
+ transport: input.runtime.transport, apiKey, modelId,
27
+ objectName: `${input.requestId ?? 'henji'}-${Date.now()}-${input.prepared.filename}`,
28
+ bytes: input.prepared.bytes, mimeType: input.prepared.mimeType, filename: input.prepared.filename, signal: input.signal,
29
+ });
30
+ input.runtime.logger.info('百炼临时存储上传完成', {
31
+ event: 'ai_runtime.upload.bailian_oss_completed', requestId: input.requestId, providerId: 'bailian', context,
32
+ });
33
+ return url;
34
+ }
35
+ catch (error) {
36
+ if (input.signal?.aborted || (error instanceof Error && error.name === 'AbortError'))
37
+ throw new AiRuntimeError('cancelled', '百炼上传已取消');
38
+ input.runtime.logger.error('百炼临时存储上传失败', {
39
+ event: 'ai_runtime.upload.bailian_oss_failed', requestId: input.requestId, providerId: 'bailian', context, error,
40
+ });
41
+ throw error;
42
+ }
43
+ },
44
+ };
45
+ export const preprocess = createGenerationPreprocessor(strategy);
@@ -1,4 +1,4 @@
1
1
  export declare const strategy: {
2
- rewrite({ prepared, runtime }: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
2
+ rewrite({ prepared, runtime, route, requestId, providerId, signal }: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
3
3
  };
4
4
  export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
@@ -1,18 +1,35 @@
1
- import { toDataUri } from '../base64.js';
1
+ import { AiRuntimeError } from '../../runtime/AiRuntimeError.js';
2
2
  import { uploadToKie } from '../kie-upload.js';
3
3
  import { createGenerationPreprocessor } from './factory.js';
4
4
  export const strategy = {
5
- async rewrite({ prepared, runtime }) {
5
+ async rewrite({ prepared, runtime, route, requestId, providerId, signal }) {
6
6
  const apiKey = await runtime.credentials.get('generation', 'kie');
7
- if (apiKey) {
8
- try {
9
- return await uploadToKie(apiKey, prepared, runtime.transport);
10
- }
11
- catch {
12
- // 保持旧行为:KIE 托管上传失败时退回 data URI,由生成端点给出最终协议结论。
7
+ if (!apiKey) {
8
+ throw new AiRuntimeError('missing_api_key', 'KIE 本地文件必须先上传,请先在设置中配置 KIE API Key。');
9
+ }
10
+ const context = { route, mimeType: prepared.mimeType, bytes: prepared.bytes.byteLength };
11
+ runtime.logger.info('开始上传 KIE 本地文件', {
12
+ event: 'ai_runtime.upload.kie_started', requestId, providerId, context,
13
+ });
14
+ try {
15
+ const url = await uploadToKie(apiKey, prepared, runtime.transport, signal);
16
+ runtime.logger.info('KIE 本地文件上传完成', {
17
+ event: 'ai_runtime.upload.kie_completed', requestId, providerId, context,
18
+ });
19
+ return url;
20
+ }
21
+ catch (error) {
22
+ if (signal?.aborted || (error instanceof AiRuntimeError && error.code === 'cancelled') || (error instanceof Error && error.name === 'AbortError')) {
23
+ runtime.logger.info('KIE 本地文件上传已取消', {
24
+ event: 'ai_runtime.upload.kie_cancelled', requestId, providerId, context,
25
+ });
26
+ throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
13
27
  }
28
+ runtime.logger.error('KIE 本地文件上传失败', {
29
+ event: 'ai_runtime.upload.kie_failed', requestId, providerId, context, error,
30
+ });
31
+ throw error;
14
32
  }
15
- return toDataUri(prepared.bytes, prepared.mimeType);
16
33
  },
17
34
  };
18
35
  export const preprocess = createGenerationPreprocessor(strategy);
@@ -1,6 +1,5 @@
1
- import type { ProviderMediaRewriteInput } from '../preprocess-core.js';
2
1
  export declare const strategy: {
3
- rewrite(input: ProviderMediaRewriteInput): Promise<string>;
2
+ rewrite(input: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
4
3
  preprocessObject({ route, object, rewrite }: import("../preprocess-core.js").ProviderObjectPreprocessInput): Promise<void>;
5
4
  };
6
5
  export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;