@henjicc/ai-sdk 0.9.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 (694) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +580 -577
  3. package/dist/capabilities/speech-recognition/bailian/module.js +12 -13
  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/upload.js +11 -58
  10. package/dist/capabilities/speech-recognition/index.d.ts +5 -0
  11. package/dist/capabilities/speech-recognition/siliconflow/presets.d.ts +2 -3
  12. package/dist/capabilities/speech-recognition/siliconflow/presets.js +0 -2
  13. package/dist/capabilities/translation/bailian/types.d.ts +3 -0
  14. package/dist/capabilities/translation/bailian/types.js +6 -4
  15. package/dist/catalog/apimart/flux-3-image.model.d.ts +3 -0
  16. package/dist/catalog/apimart/flux-3-image.model.js +62 -0
  17. package/dist/catalog/apimart/flux-3-video.model.d.ts +3 -0
  18. package/dist/catalog/apimart/flux-3-video.model.js +120 -0
  19. package/dist/catalog/apimart/gemini-omni-1.2-flash.model.d.ts +3 -0
  20. package/dist/catalog/apimart/gemini-omni-1.2-flash.model.js +175 -0
  21. package/dist/catalog/apimart/gemini-omni-flash.model.js +27 -23
  22. package/dist/catalog/apimart/gpt-image-2.5.model.js +1 -1
  23. package/dist/catalog/apimart/gpt-image-2.6.model.d.ts +3 -0
  24. package/dist/catalog/apimart/gpt-image-2.6.model.js +103 -0
  25. package/dist/catalog/apimart/gpt-image-2.model.js +1 -1
  26. package/dist/catalog/apimart/grok-imagine-2.0.model.js +1 -1
  27. package/dist/catalog/apimart/grok-imagine-video-1.5.model.d.ts +3 -0
  28. package/dist/catalog/apimart/grok-imagine-video-1.5.model.js +85 -0
  29. package/dist/catalog/apimart/happyhorse-1.1.model.d.ts +3 -0
  30. package/dist/catalog/apimart/happyhorse-1.1.model.js +78 -0
  31. package/dist/catalog/apimart/kling-3.0-omni.model.js +12 -2
  32. package/dist/catalog/apimart/kling-3.0-turbo.model.js +5 -2
  33. package/dist/catalog/apimart/kling-3.0.model.js +1 -1
  34. package/dist/catalog/apimart/kling-4.0.model.d.ts +3 -0
  35. package/dist/catalog/apimart/kling-4.0.model.js +149 -0
  36. package/dist/catalog/apimart/midjourney-video.model.js +31 -32
  37. package/dist/catalog/apimart/midjourney.model.js +11 -1
  38. package/dist/catalog/apimart/minimax-h3-max.model.d.ts +3 -0
  39. package/dist/catalog/apimart/minimax-h3-max.model.js +101 -0
  40. package/dist/catalog/apimart/minimax-h3.model.js +8 -3
  41. package/dist/catalog/apimart/nano-banana-2-lite.model.js +1 -1
  42. package/dist/catalog/apimart/nano-banana-2.1.model.d.ts +2 -0
  43. package/dist/catalog/apimart/nano-banana-2.1.model.js +49 -0
  44. package/dist/catalog/apimart/nano-banana-2.model.js +1 -1
  45. package/dist/catalog/apimart/nano-banana-pro.model.js +1 -1
  46. package/dist/catalog/apimart/qwen-image-3.0.model.js +1 -1
  47. package/dist/catalog/apimart/seedance-2.0-fast.model.js +1 -1
  48. package/dist/catalog/apimart/seedance-2.0-mini.model.js +4 -4
  49. package/dist/catalog/apimart/seedance-2.0.model.js +1 -1
  50. package/dist/catalog/apimart/seedance-2.5.model.js +27 -5
  51. package/dist/catalog/apimart/seedream-5.0-flash.model.d.ts +3 -0
  52. package/dist/catalog/apimart/seedream-5.0-flash.model.js +52 -0
  53. package/dist/catalog/apimart/seedream-5.0-lite.model.js +4 -4
  54. package/dist/catalog/apimart/seedream-5.0-pro.model.js +1 -1
  55. package/dist/catalog/apimart/veo-3.1.model.d.ts +3 -0
  56. package/dist/catalog/apimart/veo-3.1.model.js +132 -0
  57. package/dist/catalog/apimart/wan-2.7-image.model.d.ts +3 -0
  58. package/dist/catalog/apimart/wan-2.7-image.model.js +80 -0
  59. package/dist/catalog/apimart/wan-3.0.model.d.ts +3 -0
  60. package/dist/catalog/apimart/wan-3.0.model.js +101 -0
  61. package/dist/catalog/apimart/z-image-turbo.model.js +1 -1
  62. package/dist/catalog/audio/tts-common.d.ts +2 -1
  63. package/dist/catalog/audio/tts-common.js +5 -1
  64. package/dist/catalog/bailian/cosyvoice-v3.5.model.js +1 -1
  65. package/dist/catalog/bailian/minimax-h3.model.d.ts +3 -0
  66. package/dist/catalog/bailian/minimax-h3.model.js +95 -0
  67. package/dist/catalog/bailian/minimax-speech-2.8.model.js +1 -1
  68. package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.js +14 -3
  69. package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.d.ts +2 -0
  70. package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.js +44 -0
  71. package/dist/catalog/bailian/qwen-image-3.0.model.js +1 -1
  72. package/dist/catalog/bailian/wan-3.0.model.d.ts +3 -0
  73. package/dist/catalog/bailian/wan-3.0.model.js +104 -0
  74. package/dist/catalog/bailian/z-image-turbo.model.js +1 -1
  75. package/dist/catalog/consumer-contract.d.ts +16 -1
  76. package/dist/catalog/consumer-contract.js +31 -0
  77. package/dist/catalog/continuation.d.ts +20 -0
  78. package/dist/catalog/continuation.js +41 -0
  79. package/dist/catalog/fal/bria-creative-upscale.model.js +1 -1
  80. package/dist/catalog/fal/eleven-v3-tts.model.js +1 -1
  81. package/dist/catalog/fal/eleven-v4-tts.model.d.ts +2 -0
  82. package/dist/catalog/fal/eleven-v4-tts.model.js +38 -0
  83. package/dist/catalog/fal/flux-3-video.model.d.ts +2 -0
  84. package/dist/catalog/fal/flux-3-video.model.js +187 -0
  85. package/dist/catalog/fal/flux-3.model.d.ts +2 -0
  86. package/dist/catalog/fal/flux-3.model.js +69 -0
  87. package/dist/catalog/fal/gemini-omni-1.2-flash.model.d.ts +2 -0
  88. package/dist/catalog/fal/gemini-omni-1.2-flash.model.js +129 -0
  89. package/dist/catalog/fal/gemini-omni-flash.model.js +1 -1
  90. package/dist/catalog/fal/gpt-image-2.5.model.js +1 -1
  91. package/dist/catalog/fal/gpt-image-2.6.model.d.ts +2 -0
  92. package/dist/catalog/fal/gpt-image-2.6.model.js +97 -0
  93. package/dist/catalog/fal/gpt-image-2.model.js +1 -1
  94. package/dist/catalog/fal/grok-imagine-2.0.model.js +1 -1
  95. package/dist/catalog/fal/grok-imagine-video-1.5.model.d.ts +2 -0
  96. package/dist/catalog/fal/grok-imagine-video-1.5.model.js +121 -0
  97. package/dist/catalog/fal/hailuo-02.model.js +8 -4
  98. package/dist/catalog/fal/hailuo-2.3.model.js +1 -1
  99. package/dist/catalog/fal/ic-light-v2.model.js +1 -1
  100. package/dist/catalog/fal/ideogram-upscale.model.js +1 -1
  101. package/dist/catalog/fal/kling-3.0-omni.model.js +1 -1
  102. package/dist/catalog/fal/kling-3.0-turbo.model.js +5 -2
  103. package/dist/catalog/fal/kling-3.0.model.js +4 -1
  104. package/dist/catalog/fal/kling-4.0-flash.model.d.ts +2 -0
  105. package/dist/catalog/fal/kling-4.0-flash.model.js +132 -0
  106. package/dist/catalog/fal/kling-4.0.model.d.ts +2 -0
  107. package/dist/catalog/fal/kling-4.0.model.js +169 -0
  108. package/dist/catalog/fal/kling-image-o1.model.js +1 -1
  109. package/dist/catalog/fal/kling-video-o1.model.js +18 -7
  110. package/dist/catalog/fal/kling-video-v2.6-pro.model.js +3 -2
  111. package/dist/catalog/fal/ltx-2.3.model.d.ts +2 -0
  112. package/dist/catalog/fal/ltx-2.3.model.js +223 -0
  113. package/dist/catalog/fal/ltx-2.model.js +2 -1
  114. package/dist/catalog/fal/minimax-h3-max.model.d.ts +2 -0
  115. package/dist/catalog/fal/minimax-h3-max.model.js +132 -0
  116. package/dist/catalog/fal/minimax-h3.model.js +3 -4
  117. package/dist/catalog/fal/minimax-speech-2.8.model.js +1 -1
  118. package/dist/catalog/fal/nano-banana-2.1.model.d.ts +2 -0
  119. package/dist/catalog/fal/nano-banana-2.1.model.js +68 -0
  120. package/dist/catalog/fal/nano-banana-2.model.js +1 -1
  121. package/dist/catalog/fal/nano-banana-pro.model.js +1 -1
  122. package/dist/catalog/fal/nano-banana.model.js +1 -1
  123. package/dist/catalog/fal/pixverse-v5.5.model.js +9 -4
  124. package/dist/catalog/fal/qwen-image-3.0.model.js +2 -2
  125. package/dist/catalog/fal/qwen3-tts-1.7b.model.js +4 -3
  126. package/dist/catalog/fal/seedance-2.0-fast.model.js +1 -1
  127. package/dist/catalog/fal/seedance-2.0-mini.model.js +1 -1
  128. package/dist/catalog/fal/seedance-2.0.model.js +1 -1
  129. package/dist/catalog/fal/seedance-2.5.model.js +5 -2
  130. package/dist/catalog/fal/seedance.model.js +3 -2
  131. package/dist/catalog/fal/seedream-5.0-lite.model.js +1 -1
  132. package/dist/catalog/fal/seedream-5.0-pro.model.js +1 -1
  133. package/dist/catalog/fal/seedream-v4.5.model.js +1 -1
  134. package/dist/catalog/fal/seedream-v4.model.js +1 -1
  135. package/dist/catalog/fal/seedvr2-image-upscale.model.js +1 -1
  136. package/dist/catalog/fal/topaz-image-upscale.model.js +1 -1
  137. package/dist/catalog/fal/topaz-transparent-upscale.model.js +1 -1
  138. package/dist/catalog/fal/utils/klingV4.d.ts +17 -0
  139. package/dist/catalog/fal/utils/klingV4.js +33 -0
  140. package/dist/catalog/fal/veo-3.1.model.js +5 -2
  141. package/dist/catalog/fal/vidu-q2.model.js +20 -8
  142. package/dist/catalog/fal/wan-2.5-preview.model.js +4 -1
  143. package/dist/catalog/fal/wan-3.0.model.d.ts +2 -0
  144. package/dist/catalog/fal/wan-3.0.model.js +135 -0
  145. package/dist/catalog/fal/z-image-turbo.model.js +10 -9
  146. package/dist/catalog/grsai/gpt-image-2.5.model.js +13 -31
  147. package/dist/catalog/grsai/gpt-image-2.6.model.d.ts +2 -0
  148. package/dist/catalog/grsai/gpt-image-2.6.model.js +37 -0
  149. package/dist/catalog/grsai/gpt-image-2.model.js +5 -2
  150. package/dist/catalog/grsai/nano-banana-2-lite.model.js +1 -1
  151. package/dist/catalog/grsai/nano-banana-2.1.model.d.ts +2 -0
  152. package/dist/catalog/grsai/nano-banana-2.1.model.js +29 -0
  153. package/dist/catalog/grsai/nano-banana-2.model.js +1 -1
  154. package/dist/catalog/grsai/nano-banana-pro.model.js +1 -1
  155. package/dist/catalog/grsai/wan-3.0.model.d.ts +2 -0
  156. package/dist/catalog/grsai/wan-3.0.model.js +78 -0
  157. package/dist/catalog/index.d.ts +1 -0
  158. package/dist/catalog/index.js +205 -124
  159. package/dist/catalog/kie/eleven-v3-dialogue.model.js +1 -1
  160. package/dist/catalog/kie/flux-3-klein.model.d.ts +2 -0
  161. package/dist/catalog/kie/flux-3-klein.model.js +58 -0
  162. package/dist/catalog/kie/gemini-3.1-flash-tts.model.js +7 -4
  163. package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.d.ts +2 -0
  164. package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.js +11 -0
  165. package/dist/catalog/kie/gemini-3.8-flash-tts.model.d.ts +2 -0
  166. package/dist/catalog/kie/gemini-3.8-flash-tts.model.js +11 -0
  167. package/dist/catalog/kie/gemini-omni-video.model.js +3 -4
  168. package/dist/catalog/kie/gemini38Tts.d.ts +3 -0
  169. package/dist/catalog/kie/gemini38Tts.js +40 -0
  170. package/dist/catalog/kie/gpt-image-2.5.model.js +1 -1
  171. package/dist/catalog/kie/gpt-image-2.6.model.d.ts +2 -0
  172. package/dist/catalog/kie/gpt-image-2.6.model.js +87 -0
  173. package/dist/catalog/kie/gpt-image-2.model.js +8 -12
  174. package/dist/catalog/kie/grok-imagine-2.0.model.js +1 -1
  175. package/dist/catalog/kie/grok-imagine-video-1.5.model.d.ts +2 -0
  176. package/dist/catalog/kie/grok-imagine-video-1.5.model.js +52 -0
  177. package/dist/catalog/kie/grok-imagine-video.model.js +7 -3
  178. package/dist/catalog/kie/grok-imagine.model.js +4 -2
  179. package/dist/catalog/kie/hailuo-02.model.js +6 -4
  180. package/dist/catalog/kie/hailuo-2-3.model.js +1 -1
  181. package/dist/catalog/kie/happyhorse-1.1.model.js +5 -2
  182. package/dist/catalog/kie/kling-3.0-omni.model.js +51 -23
  183. package/dist/catalog/kie/kling-3.0-turbo.model.js +1 -1
  184. package/dist/catalog/kie/kling-3.0.model.js +1 -8
  185. package/dist/catalog/kie/kling-4.0-flash.model.d.ts +2 -0
  186. package/dist/catalog/kie/kling-4.0-flash.model.js +16 -0
  187. package/dist/catalog/kie/kling-4.0.model.d.ts +2 -0
  188. package/dist/catalog/kie/kling-4.0.model.js +17 -0
  189. package/dist/catalog/kie/kling-v2-6.model.js +1 -1
  190. package/dist/catalog/kie/kling40.d.ts +21 -0
  191. package/dist/catalog/kie/kling40.js +129 -0
  192. package/dist/catalog/kie/minimax-h3.model.js +16 -21
  193. package/dist/catalog/kie/nano-banana-2-lite.model.js +1 -1
  194. package/dist/catalog/kie/nano-banana-2.1.model.d.ts +2 -0
  195. package/dist/catalog/kie/nano-banana-2.1.model.js +34 -0
  196. package/dist/catalog/kie/nano-banana-2.model.js +2 -2
  197. package/dist/catalog/kie/nano-banana-pro.model.js +1 -1
  198. package/dist/catalog/kie/qwen-image-3.0.model.js +2 -10
  199. package/dist/catalog/kie/seedance-1.5-pro.model.js +2 -1
  200. package/dist/catalog/kie/seedance-2.0-fast.model.js +5 -1
  201. package/dist/catalog/kie/seedance-2.0-mini.model.js +5 -1
  202. package/dist/catalog/kie/seedance-2.0.model.js +5 -1
  203. package/dist/catalog/kie/seedance-2.5.model.js +10 -20
  204. package/dist/catalog/kie/seedance-v1.model.js +8 -4
  205. package/dist/catalog/kie/seedream-4.0.model.js +1 -1
  206. package/dist/catalog/kie/seedream-4.5.model.js +1 -1
  207. package/dist/catalog/kie/seedream-5.0-lite.model.js +1 -1
  208. package/dist/catalog/kie/seedream-5.0-pro.model.js +1 -1
  209. package/dist/catalog/kie/wan-3.0-prime.model.d.ts +2 -0
  210. package/dist/catalog/kie/wan-3.0-prime.model.js +15 -0
  211. package/dist/catalog/kie/wan-3.0.model.d.ts +2 -0
  212. package/dist/catalog/kie/wan-3.0.model.js +15 -0
  213. package/dist/catalog/kie/wan30.d.ts +10 -0
  214. package/dist/catalog/kie/wan30.js +78 -0
  215. package/dist/catalog/kie/z-image.model.js +1 -1
  216. package/dist/catalog/modelscope/flux-1-krea-dev.model.js +4 -2
  217. package/dist/catalog/modelscope/majicmix-realistic.model.js +3 -2
  218. package/dist/catalog/modelscope/modelscope-custom.model.js +3 -2
  219. package/dist/catalog/modelscope/qwen-image-2512.model.d.ts +5 -0
  220. package/dist/catalog/modelscope/{qwen-image.model.js → qwen-image-2512.model.js} +11 -8
  221. package/dist/catalog/modelscope/qwen-image-edit-2511.model.d.ts +5 -0
  222. package/dist/catalog/modelscope/{qwen-image-edit-2509.model.js → qwen-image-edit-2511.model.js} +9 -7
  223. package/dist/catalog/modelscope/sdxl-14-ckpt.model.js +3 -2
  224. package/dist/catalog/modelscope/utils.js +2 -2
  225. package/dist/catalog/modelscope/z-image-turbo.model.js +3 -2
  226. package/dist/catalog/ppio/kling-3.0.model.js +4 -1
  227. package/dist/catalog/ppio/minimax-speech.model.js +2 -1
  228. package/dist/catalog/shared/mediaPresence.d.ts +8 -1
  229. package/dist/catalog/shared/mediaPresence.js +21 -1
  230. package/dist/catalog/shared/nanoBanana21.d.ts +11 -0
  231. package/dist/catalog/shared/nanoBanana21.js +30 -0
  232. package/dist/catalog/shared/shotList.d.ts +31 -0
  233. package/dist/catalog/shared/shotList.js +48 -0
  234. package/dist/catalog/shared/subjectElements.d.ts +36 -0
  235. package/dist/catalog/shared/subjectElements.js +93 -0
  236. package/dist/catalog/siliconflow/moss-ttsd-0.5.model.js +1 -1
  237. package/dist/catalog/validate.js +14 -1
  238. package/dist/catalog/volcengine/seedance-2.0-fast.model.d.ts +2 -0
  239. package/dist/catalog/volcengine/seedance-2.0-fast.model.js +11 -0
  240. package/dist/catalog/volcengine/seedance-2.0-mini.model.d.ts +2 -0
  241. package/dist/catalog/volcengine/seedance-2.0-mini.model.js +11 -0
  242. package/dist/catalog/volcengine/seedance-2.0.model.d.ts +2 -0
  243. package/dist/catalog/volcengine/seedance-2.0.model.js +11 -0
  244. package/dist/catalog/volcengine/seedance-2.5.model.d.ts +2 -0
  245. package/dist/catalog/volcengine/seedance-2.5.model.js +11 -0
  246. package/dist/catalog/volcengine/seedance.d.ts +17 -0
  247. package/dist/catalog/volcengine/seedance.js +192 -0
  248. package/dist/catalog/volcengine/seedream-5.0-lite.model.js +2 -1
  249. package/dist/catalog/volcengine/seedream-5.0.js +1 -1
  250. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +2 -2
  251. package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +2 -2
  252. package/dist/discovery/index.js +13 -6
  253. package/dist/index.d.ts +3 -0
  254. package/dist/index.js +2 -0
  255. package/dist/llm/bigmodel/preset.js +2 -1
  256. package/dist/llm/bigmodel/profiles.js +0 -6
  257. package/dist/llm/chat.d.ts +8 -0
  258. package/dist/llm/chat.js +18 -2
  259. package/dist/llm/chatTypes.d.ts +6 -0
  260. package/dist/llm/defaults.d.ts +2 -2
  261. package/dist/llm/defaults.js +3 -3
  262. package/dist/llm/groq/preset.js +18 -2
  263. package/dist/llm/modelCatalog.d.ts +9 -2
  264. package/dist/llm/modelCatalog.js +17 -4
  265. package/dist/llm/modelCatalogEntries.d.ts +2 -0
  266. package/dist/llm/modelCatalogEntries.js +197 -42
  267. package/dist/llm/providerPresets.d.ts +3 -0
  268. package/dist/llm/providerPresets.js +145 -32
  269. package/dist/llm/providerReasoningRequest.js +28 -11
  270. package/dist/llm/siliconflow/index.js +1 -1
  271. package/dist/llm/siliconflow/preset.js +30 -0
  272. package/dist/llm/types.d.ts +6 -0
  273. package/dist/packs/models/{ppio/wan-2.5-preview.d.ts → apimart/flux-3-image.d.ts} +1 -1
  274. package/dist/packs/models/apimart/flux-3-image.js +7 -0
  275. package/dist/packs/models/apimart/flux-3-video.d.ts +6 -0
  276. package/dist/packs/models/apimart/flux-3-video.js +7 -0
  277. package/dist/packs/models/apimart/gemini-omni-1.2-flash.d.ts +6 -0
  278. package/dist/packs/models/apimart/gemini-omni-1.2-flash.js +7 -0
  279. package/dist/packs/models/{modelscope/qwen-image.d.ts → apimart/gpt-image-2.6.d.ts} +1 -1
  280. package/dist/packs/models/apimart/gpt-image-2.6.js +7 -0
  281. package/dist/packs/models/apimart/grok-imagine-video-1.5.d.ts +6 -0
  282. package/dist/packs/models/apimart/grok-imagine-video-1.5.js +7 -0
  283. package/dist/packs/models/apimart/happyhorse-1.1.d.ts +6 -0
  284. package/dist/packs/models/apimart/happyhorse-1.1.js +7 -0
  285. package/dist/packs/models/apimart/kling-4.0.d.ts +6 -0
  286. package/dist/packs/models/apimart/kling-4.0.js +7 -0
  287. package/dist/packs/models/apimart/minimax-h3-max.d.ts +6 -0
  288. package/dist/packs/models/apimart/minimax-h3-max.js +7 -0
  289. package/dist/packs/models/{ppio/minimax-hailuo-2.3.d.ts → apimart/nano-banana-2.1.d.ts} +1 -1
  290. package/dist/packs/models/{ppio/minimax-hailuo-2.3.js → apimart/nano-banana-2.1.js} +4 -4
  291. package/dist/packs/models/apimart/seedream-5.0-flash.d.ts +6 -0
  292. package/dist/packs/models/apimart/seedream-5.0-flash.js +7 -0
  293. package/dist/packs/models/apimart/veo-3.1.d.ts +6 -0
  294. package/dist/packs/models/apimart/veo-3.1.js +7 -0
  295. package/dist/packs/models/apimart/wan-2.7-image.d.ts +6 -0
  296. package/dist/packs/models/apimart/wan-2.7-image.js +7 -0
  297. package/dist/packs/models/apimart/wan-3.0.d.ts +6 -0
  298. package/dist/packs/models/apimart/wan-3.0.js +7 -0
  299. package/dist/packs/models/bailian/cosyvoice-v3.5.js +1 -1
  300. package/dist/packs/models/bailian/minimax-h3.d.ts +6 -0
  301. package/dist/packs/models/bailian/minimax-h3.js +7 -0
  302. package/dist/packs/models/bailian/minimax-speech-2.8.js +1 -1
  303. package/dist/packs/models/bailian/qwen-audio-3.1-tts-flash.js +1 -1
  304. package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.d.ts +6 -0
  305. package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.js +7 -0
  306. package/dist/packs/models/bailian/qwen-image-3.0.js +1 -1
  307. package/dist/packs/models/bailian/wan-3.0.d.ts +6 -0
  308. package/dist/packs/models/bailian/wan-3.0.js +7 -0
  309. package/dist/packs/models/bailian/z-image-turbo.js +1 -1
  310. package/dist/packs/models/fal/eleven-v4-tts.d.ts +6 -0
  311. package/dist/packs/models/{ppio/wan-2.5-preview.js → fal/eleven-v4-tts.js} +4 -4
  312. package/dist/packs/models/fal/flux-3-video.d.ts +6 -0
  313. package/dist/packs/models/fal/flux-3-video.js +7 -0
  314. package/dist/packs/models/{ppio/wan-2.6.d.ts → fal/flux-3.d.ts} +1 -1
  315. package/dist/packs/models/{ppio/wan-2.6.js → fal/flux-3.js} +4 -4
  316. package/dist/packs/models/fal/gemini-omni-1.2-flash.d.ts +6 -0
  317. package/dist/packs/models/fal/gemini-omni-1.2-flash.js +7 -0
  318. package/dist/packs/models/fal/gpt-image-2.6.d.ts +6 -0
  319. package/dist/packs/models/fal/gpt-image-2.6.js +7 -0
  320. package/dist/packs/models/fal/grok-imagine-video-1.5.d.ts +6 -0
  321. package/dist/packs/models/fal/grok-imagine-video-1.5.js +7 -0
  322. package/dist/packs/models/fal/kling-4.0-flash.d.ts +6 -0
  323. package/dist/packs/models/fal/kling-4.0-flash.js +7 -0
  324. package/dist/packs/models/fal/kling-4.0.d.ts +6 -0
  325. package/dist/packs/models/{ppio/wan-2.7.js → fal/kling-4.0.js} +4 -4
  326. package/dist/packs/models/{ppio/wan-2.7.d.ts → fal/ltx-2.3.d.ts} +1 -1
  327. package/dist/packs/models/fal/ltx-2.3.js +7 -0
  328. package/dist/packs/models/fal/minimax-h3-max.d.ts +6 -0
  329. package/dist/packs/models/fal/minimax-h3-max.js +7 -0
  330. package/dist/packs/models/fal/nano-banana-2.1.d.ts +6 -0
  331. package/dist/packs/models/fal/nano-banana-2.1.js +7 -0
  332. package/dist/packs/models/fal/wan-3.0.d.ts +6 -0
  333. package/dist/packs/models/fal/wan-3.0.js +7 -0
  334. package/dist/packs/models/grsai/gpt-image-2.6.d.ts +6 -0
  335. package/dist/packs/models/grsai/gpt-image-2.6.js +7 -0
  336. package/dist/packs/models/grsai/nano-banana-2.1.d.ts +6 -0
  337. package/dist/packs/models/grsai/nano-banana-2.1.js +7 -0
  338. package/dist/packs/models/grsai/wan-3.0.d.ts +6 -0
  339. package/dist/packs/models/grsai/wan-3.0.js +7 -0
  340. package/dist/packs/models/kie/flux-3-klein.d.ts +6 -0
  341. package/dist/packs/models/kie/flux-3-klein.js +7 -0
  342. package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.d.ts +6 -0
  343. package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.js +7 -0
  344. package/dist/packs/models/kie/{eleven-turbo-2.5-tts.d.ts → gemini-3.8-flash-tts.d.ts} +1 -1
  345. package/dist/packs/models/kie/{eleven-turbo-2.5-tts.js → gemini-3.8-flash-tts.js} +1 -1
  346. package/dist/packs/models/kie/gpt-image-2.6.d.ts +6 -0
  347. package/dist/packs/models/kie/gpt-image-2.6.js +7 -0
  348. package/dist/packs/models/kie/grok-imagine-video-1.5.d.ts +6 -0
  349. package/dist/packs/models/kie/grok-imagine-video-1.5.js +7 -0
  350. package/dist/packs/models/kie/kling-4.0-flash.d.ts +6 -0
  351. package/dist/packs/models/kie/kling-4.0-flash.js +7 -0
  352. package/dist/packs/models/kie/kling-4.0.d.ts +6 -0
  353. package/dist/packs/models/kie/kling-4.0.js +7 -0
  354. package/dist/packs/models/kie/nano-banana-2.1.d.ts +6 -0
  355. package/dist/packs/models/kie/nano-banana-2.1.js +7 -0
  356. package/dist/packs/models/kie/wan-3.0-prime.d.ts +6 -0
  357. package/dist/packs/models/kie/wan-3.0-prime.js +7 -0
  358. package/dist/packs/models/kie/wan-3.0.d.ts +6 -0
  359. package/dist/packs/models/kie/wan-3.0.js +7 -0
  360. package/dist/packs/models/modelscope/flux-1-krea-dev.js +1 -1
  361. package/dist/packs/models/modelscope/majicmix-realistic.js +1 -1
  362. package/dist/packs/models/modelscope/modelscope-custom.js +1 -1
  363. package/dist/packs/models/modelscope/qwen-image-2512.d.ts +6 -0
  364. package/dist/packs/models/modelscope/{qwen-image.js → qwen-image-2512.js} +2 -2
  365. package/dist/packs/models/modelscope/{qwen-image-edit-2509.d.ts → qwen-image-edit-2511.d.ts} +1 -1
  366. package/dist/packs/models/modelscope/{qwen-image-edit-2509.js → qwen-image-edit-2511.js} +2 -2
  367. package/dist/packs/models/modelscope/sdxl-14-ckpt.js +1 -1
  368. package/dist/packs/models/modelscope/z-image-turbo.js +1 -1
  369. package/dist/packs/models/volcengine/seedance-2.0-fast.d.ts +6 -0
  370. package/dist/packs/models/volcengine/seedance-2.0-fast.js +7 -0
  371. package/dist/packs/models/volcengine/seedance-2.0-mini.d.ts +6 -0
  372. package/dist/packs/models/volcengine/seedance-2.0-mini.js +7 -0
  373. package/dist/packs/models/volcengine/seedance-2.0.d.ts +6 -0
  374. package/dist/packs/models/volcengine/seedance-2.0.js +7 -0
  375. package/dist/packs/models/volcengine/seedance-2.5.d.ts +6 -0
  376. package/dist/packs/models/volcengine/seedance-2.5.js +7 -0
  377. package/dist/packs/models/volcengine/seedream-5.0-flash.js +1 -1
  378. package/dist/packs/models/volcengine/seedream-5.0-lite.js +1 -1
  379. package/dist/packs/models/volcengine/seedream-5.0-pro.js +1 -1
  380. package/dist/packs/provider-adapters/bailian.js +1 -1
  381. package/dist/packs/provider-adapters/modelscope.js +1 -1
  382. package/dist/packs/provider-adapters/volcengine.js +1 -1
  383. package/dist/packs/provider-packs/apimart.d.ts +1 -1
  384. package/dist/packs/provider-packs/apimart.js +35 -22
  385. package/dist/packs/provider-packs/bailian.d.ts +1 -1
  386. package/dist/packs/provider-packs/bailian.js +8 -5
  387. package/dist/packs/provider-packs/fal.d.ts +1 -1
  388. package/dist/packs/provider-packs/fal.js +52 -40
  389. package/dist/packs/provider-packs/grsai.d.ts +1 -1
  390. package/dist/packs/provider-packs/grsai.js +8 -5
  391. package/dist/packs/provider-packs/kie.d.ts +1 -1
  392. package/dist/packs/provider-packs/kie.js +41 -32
  393. package/dist/packs/provider-packs/modelscope.js +2 -2
  394. package/dist/packs/provider-packs/ppio.d.ts +1 -1
  395. package/dist/packs/provider-packs/ppio.js +2 -6
  396. package/dist/packs/provider-packs/volcengine.d.ts +1 -1
  397. package/dist/packs/provider-packs/volcengine.js +8 -4
  398. package/dist/pricing/index.d.ts +1 -0
  399. package/dist/pricing/index.js +1 -0
  400. package/dist/pricing/mediaContext.d.ts +6 -1
  401. package/dist/pricing/mediaContext.js +12 -5
  402. package/dist/pricing/tokenPricing.d.ts +36 -0
  403. package/dist/pricing/tokenPricing.js +26 -0
  404. package/dist/providers/bailian.d.ts +1 -1
  405. package/dist/providers/bailian.js +71 -4
  406. package/dist/providers/fal.js +11 -1
  407. package/dist/providers/helpers.d.ts +1 -1
  408. package/dist/providers/helpers.js +17 -5
  409. package/dist/providers/kie.js +16 -5
  410. package/dist/providers/metadata.js +2 -2
  411. package/dist/providers/openai-speech.d.ts +6 -0
  412. package/dist/providers/openai-speech.js +31 -0
  413. package/dist/providers/providerAccessErrors.d.ts +3 -0
  414. package/dist/providers/providerAccessErrors.js +73 -0
  415. package/dist/providers/siliconflow.js +2 -27
  416. package/dist/providers/volcengine-speech.js +22 -5
  417. package/dist/providers/volcengine-voice-clone.js +13 -4
  418. package/dist/providers/volcengine.d.ts +1 -1
  419. package/dist/providers/volcengine.js +89 -11
  420. package/dist/runtime/retry.js +3 -0
  421. package/dist/tool-packs/fal-erase/models/bria-eraser.model.js +1 -1
  422. package/dist/tool-packs/fal-erase/models/finegrain-eraser.model.js +1 -1
  423. package/dist/tool-packs/fal-erase/models/flux-pro-erase.model.js +1 -1
  424. package/dist/tool-packs/fal-image-utilities/models/control-light.model.js +1 -1
  425. package/dist/tool-packs/fal-image-utilities/models/outpaint.model.js +1 -1
  426. package/dist/tool-packs/fal-image-utilities/models/photo-restoration.model.js +1 -1
  427. package/dist/tool-packs/fal-image-utilities/models/pixelcut-background-removal.model.js +1 -1
  428. package/dist/tool-packs/fal-image-utilities/models/product-photography.model.js +1 -1
  429. package/dist/tool-packs/fal-image-utilities/models/relighting.model.js +1 -1
  430. package/dist/tool-packs/fal-multi-angle/models/flux-2-multiple-angles.model.js +1 -1
  431. package/dist/tool-packs/fal-multi-angle/models/perspective-change.model.js +1 -1
  432. package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2511-multiple-angles.model.js +1 -1
  433. package/dist/types/model.d.ts +68 -12
  434. package/dist/types/model.js +3 -0
  435. package/dist/types/modelTags.d.ts +142 -0
  436. package/dist/types/modelTags.js +44 -0
  437. package/dist/types/speechTimings.d.ts +15 -0
  438. package/dist/types/speechTimings.js +1 -0
  439. package/dist/upload/apimart-upload.d.ts +1 -1
  440. package/dist/upload/apimart-upload.js +37 -15
  441. package/dist/upload/bailian-oss-upload.d.ts +32 -0
  442. package/dist/upload/bailian-oss-upload.js +74 -0
  443. package/dist/upload/{fal-legacy.js → fal-host-fetch.js} +2 -2
  444. package/dist/upload/fal-transport.d.ts +6 -0
  445. package/dist/upload/fal-transport.js +2 -1
  446. package/dist/upload/index.d.ts +2 -2
  447. package/dist/upload/index.js +4 -7
  448. package/dist/upload/kie-upload.d.ts +1 -1
  449. package/dist/upload/kie-upload.js +34 -12
  450. package/dist/upload/media-fields.js +7 -2
  451. package/dist/upload/preprocess-core.d.ts +2 -0
  452. package/dist/upload/preprocess-core.js +2 -0
  453. package/dist/upload/preprocess.d.ts +1 -1
  454. package/dist/upload/preprocess.js +12 -3
  455. package/dist/upload/provider-preprocessors/apimart.d.ts +1 -1
  456. package/dist/upload/provider-preprocessors/apimart.js +13 -5
  457. package/dist/upload/provider-preprocessors/bailian.d.ts +8 -0
  458. package/dist/upload/provider-preprocessors/bailian.js +45 -0
  459. package/dist/upload/provider-preprocessors/kie.d.ts +1 -1
  460. package/dist/upload/provider-preprocessors/kie.js +26 -9
  461. package/dist/upload/provider-preprocessors/ppio.d.ts +1 -2
  462. package/dist/upload/provider-preprocessors/ppio.js +2 -29
  463. package/dist/upload/provider-preprocessors/public-host.d.ts +5 -0
  464. package/dist/upload/provider-preprocessors/public-host.js +7 -0
  465. package/dist/upload/provider-preprocessors/volcengine.d.ts +5 -0
  466. package/dist/upload/provider-preprocessors/volcengine.js +10 -0
  467. package/dist/upload/public-host-upload.d.ts +7 -0
  468. package/dist/upload/public-host-upload.js +55 -0
  469. package/dist/upload/upload-response.js +12 -7
  470. package/docs/README.md +26 -26
  471. package/docs/consumers.md +156 -148
  472. package/docs/llm-adaptation/README.md +180 -166
  473. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +108 -104
  474. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +94 -76
  475. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/MiniMax.md +89 -84
  476. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +126 -126
  477. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +238 -234
  478. 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
  479. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274Qwen.md +112 -84
  480. 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
  481. package/docs/model-adaptation/Bria-Eraser/Bria-Eraser_Fal.md +32 -32
  482. 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
  483. package/docs/model-adaptation/ControlLight/ControlLight_Fal.md +85 -85
  484. package/docs/model-adaptation/Eleven-v4/Eleven-v4_Fal.md +49 -0
  485. 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
  486. package/docs/model-adaptation/FLUX-3/FLUX-3_APIMart.md +65 -0
  487. package/docs/model-adaptation/FLUX-3/FLUX-3_Fal.md +48 -0
  488. package/docs/model-adaptation/FLUX-3-Klein/FLUX-3-Klein_KIE.md +38 -0
  489. package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_APIMart.md +84 -0
  490. package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_Fal.md +80 -0
  491. package/docs/model-adaptation/Finegrain-Eraser/Finegrain-Eraser_Fal.md +31 -31
  492. package/docs/model-adaptation/Flux-Pro-Erase/Flux-Pro-Erase_Fal.md +34 -34
  493. package/docs/model-adaptation/Fun-ASR/Fun-ASR_/347/231/276/347/202/274.md +47 -47
  494. 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
  495. package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +57 -57
  496. 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
  497. package/docs/model-adaptation/GLM-5.3-Flash/GLM-5.3-Flash_/346/231/272/350/260/261.md +217 -213
  498. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_APIMart.md +173 -173
  499. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Fal.md +94 -94
  500. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Grsai.md +138 -137
  501. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_KIE.md +97 -93
  502. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -66
  503. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -55
  504. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +59 -53
  505. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -55
  506. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_APIMart.md +101 -0
  507. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Fal.md +55 -0
  508. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Grsai.md +32 -0
  509. package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_KIE.md +51 -0
  510. package/docs/model-adaptation/GPT-OSS-20B/GPT-OSS-20B_Groq.md +62 -62
  511. package/docs/model-adaptation/Gemini-3.8-Flash-Lite-TTS/Gemini-3.8-Flash-Lite-TTS_KIE.md +22 -0
  512. package/docs/model-adaptation/Gemini-3.8-Flash-TTS/Gemini-3.8-Flash-TTS_KIE.md +38 -0
  513. package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_APIMart.md +79 -0
  514. package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_Fal.md +60 -0
  515. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +131 -125
  516. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_Fal.md +84 -84
  517. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +132 -130
  518. package/docs/model-adaptation/Grok-Imagine/Grok-Imagine_KIE.md +38 -36
  519. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_APIMart.md +250 -250
  520. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_Fal.md +84 -84
  521. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_KIE.md +105 -105
  522. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_APIMart.md +68 -0
  523. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_Fal.md +47 -0
  524. package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_KIE.md +37 -0
  525. package/docs/model-adaptation/Hailuo-02/Hailuo-02_Fal.md +95 -93
  526. package/docs/model-adaptation/Hailuo-02/Hailuo-02_KIE.md +58 -56
  527. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_Fal.md +88 -88
  528. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_KIE.md +51 -51
  529. package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_APIMart.md +66 -0
  530. package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_KIE.md +31 -27
  531. package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +99 -99
  532. 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
  533. 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
  534. 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
  535. 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
  536. 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
  537. package/docs/model-adaptation/Kling-3.0/Kling-3.0_APIMart.md +112 -112
  538. package/docs/model-adaptation/Kling-3.0/Kling-3.0_Fal.md +91 -89
  539. package/docs/model-adaptation/Kling-3.0/Kling-3.0_KIE.md +106 -106
  540. package/docs/model-adaptation/Kling-3.0/Kling-3.0_/346/264/276/346/254/247/344/272/221.md +120 -119
  541. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_APIMart.md +130 -125
  542. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_Fal.md +107 -107
  543. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_KIE.md +148 -143
  544. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_APIMart.md +88 -85
  545. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_Fal.md +86 -83
  546. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_KIE.md +84 -84
  547. package/docs/model-adaptation/Kling-4.0/Kling-4.0_APIMart.md +76 -0
  548. package/docs/model-adaptation/Kling-4.0/Kling-4.0_Fal.md +115 -0
  549. package/docs/model-adaptation/Kling-4.0/Kling-4.0_KIE.md +61 -0
  550. package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_Fal.md +55 -0
  551. package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_KIE.md +33 -0
  552. package/docs/model-adaptation/LTX-2.3/LTX-2.3_Fal.md +121 -0
  553. package/docs/model-adaptation/Midjourney/Midjourney_APIMart.md +402 -396
  554. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_APIMart.md +237 -234
  555. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_Fal.md +112 -108
  556. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_KIE.md +118 -111
  557. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_/347/231/276/347/202/274.md +65 -0
  558. package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_APIMart.md +78 -0
  559. package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_Fal.md +62 -0
  560. package/docs/model-adaptation/MiniMax-Speech/MiniMax-Speech_/346/264/276/346/254/247/344/272/221.md +170 -170
  561. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_APIMart.md +89 -89
  562. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Fal.md +99 -99
  563. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Grsai.md +82 -82
  564. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_KIE.md +72 -70
  565. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_APIMart.md +79 -79
  566. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md +65 -65
  567. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_KIE.md +64 -64
  568. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_APIMart.md +35 -0
  569. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Fal.md +37 -0
  570. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Grsai.md +35 -0
  571. package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_KIE.md +36 -0
  572. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_APIMart.md +83 -83
  573. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Fal.md +89 -89
  574. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md +82 -82
  575. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_KIE.md +64 -64
  576. 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
  577. 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
  578. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_APIMart.md +117 -117
  579. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_Fal.md +85 -84
  580. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_KIE.md +103 -103
  581. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_/347/231/276/347/202/274.md +138 -138
  582. 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
  583. package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +68 -68
  584. package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +40 -40
  585. package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +40 -40
  586. package/docs/model-adaptation/Qwen3-ASR-Flash/Qwen3-ASR-Flash_/347/231/276/347/202/274.md +44 -44
  587. 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
  588. package/docs/model-adaptation/Qwen3-ASR-Flash-Filetrans/Qwen3-ASR-Flash-Filetrans_/347/231/276/347/202/274.md +45 -45
  589. package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +58 -58
  590. 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
  591. package/docs/model-adaptation/README.md +379 -338
  592. 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 -65
  593. 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
  594. 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
  595. 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
  596. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_APIMart.md +121 -121
  597. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_Fal.md +97 -97
  598. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_KIE.md +87 -86
  599. 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
  600. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_APIMart.md +89 -89
  601. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_Fal.md +95 -95
  602. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_KIE.md +79 -78
  603. 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
  604. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_APIMart.md +93 -89
  605. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_Fal.md +96 -96
  606. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_KIE.md +79 -78
  607. 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
  608. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_APIMart.md +217 -212
  609. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_Fal.md +98 -94
  610. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_KIE.md +94 -89
  611. 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
  612. package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_APIMart.md +64 -0
  613. 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
  614. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_APIMart.md +113 -106
  615. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_Fal.md +91 -91
  616. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_KIE.md +89 -89
  617. 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
  618. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_APIMart.md +194 -194
  619. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_Fal.md +100 -100
  620. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_KIE.md +141 -141
  621. 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
  622. package/docs/model-adaptation/SenseVoiceSmall/SenseVoiceSmall_/347/241/205/345/237/272/346/265/201/345/212/250.md +73 -73
  623. package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +115 -69
  624. package/docs/model-adaptation/TTS-/346/227/266/351/227/264/346/210/263-2026-10.md +36 -0
  625. 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
  626. 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
  627. package/docs/model-adaptation/Veo-3.1/Veo-3.1_APIMart.md +90 -0
  628. package/docs/model-adaptation/Wan-2.7-Image/Wan-2.7-Image_APIMart.md +81 -0
  629. package/docs/model-adaptation/Wan-3.0/Wan-3.0_APIMart.md +74 -0
  630. package/docs/model-adaptation/Wan-3.0/Wan-3.0_Fal.md +60 -0
  631. package/docs/model-adaptation/Wan-3.0/Wan-3.0_Grsai.md +35 -0
  632. package/docs/model-adaptation/Wan-3.0/Wan-3.0_KIE.md +38 -0
  633. package/docs/model-adaptation/Wan-3.0/Wan-3.0_/347/231/276/347/202/274.md +96 -0
  634. package/docs/model-adaptation/Wan-3.0-Prime/Wan-3.0-Prime_KIE.md +20 -0
  635. package/docs/model-adaptation/Whisper-Large-v3/Whisper-Large-v3_Groq.md +80 -80
  636. package/docs/model-adaptation/Whisper-Large-v3-Turbo/Whisper-Large-v3-Turbo_Groq.md +79 -79
  637. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_APIMart.md +88 -88
  638. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_Fal.md +103 -95
  639. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_KIE.md +71 -71
  640. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/347/231/276/347/202/274.md +122 -122
  641. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/351/255/224/346/220/255.md +99 -97
  642. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/APIMart.md +240 -240
  643. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Fal.md +190 -172
  644. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Groq.md +136 -121
  645. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Grsai.md +217 -217
  646. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/KIE.md +159 -131
  647. 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
  648. 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
  649. 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
  650. 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
  651. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +339 -288
  652. 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
  653. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//351/255/224/346/220/255.md +205 -207
  654. package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +339 -339
  655. 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
  656. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Electron.md +77 -77
  657. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Tauri.md +81 -81
  658. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/UXP.md +169 -169
  659. 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
  660. 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
  661. package/examples/form-renderer/README.md +17 -17
  662. package/examples/form-renderer/cli.ts +32 -32
  663. package/examples/form-renderer/index.ts +144 -144
  664. package/examples/form-renderer/package.json +16 -16
  665. package/examples/form-renderer/tsconfig.json +14 -14
  666. package/examples/llm-chat/README.md +38 -38
  667. package/examples/llm-chat/index.ts +100 -100
  668. package/examples/llm-chat/package.json +19 -19
  669. package/examples/llm-chat/tsconfig.json +14 -14
  670. package/examples/minimal-node/README.md +31 -31
  671. package/examples/minimal-node/index.ts +138 -138
  672. package/examples/minimal-node/package.json +17 -17
  673. package/examples/minimal-node/tsconfig.json +14 -14
  674. package/package.json +259 -258
  675. package/dist/catalog/grsai/gptImage25Sizes.d.ts +0 -1
  676. package/dist/catalog/grsai/gptImage25Sizes.js +0 -76
  677. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.d.ts +0 -2
  678. package/dist/catalog/kie/eleven-turbo-2.5-tts.model.js +0 -29
  679. package/dist/catalog/modelscope/qwen-image-edit-2509.model.d.ts +0 -5
  680. package/dist/catalog/modelscope/qwen-image.model.d.ts +0 -5
  681. package/dist/catalog/ppio/minimax-hailuo-2.3.model.d.ts +0 -7
  682. package/dist/catalog/ppio/minimax-hailuo-2.3.model.js +0 -114
  683. package/dist/catalog/ppio/wan-2.5-preview.model.d.ts +0 -7
  684. package/dist/catalog/ppio/wan-2.5-preview.model.js +0 -198
  685. package/dist/catalog/ppio/wan-2.6.model.d.ts +0 -7
  686. package/dist/catalog/ppio/wan-2.6.model.js +0 -206
  687. package/dist/catalog/ppio/wan-2.7.model.d.ts +0 -2
  688. package/dist/catalog/ppio/wan-2.7.model.js +0 -373
  689. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_/346/264/276/346/254/247/344/272/221.md +0 -70
  690. package/docs/model-adaptation/TeleSpeechASR/TeleSpeechASR_/347/241/205/345/237/272/346/265/201/345/212/250.md +0 -76
  691. package/docs/model-adaptation/Wan-2.5-Preview/Wan-2.5-Preview_/346/264/276/346/254/247/344/272/221.md +0 -82
  692. package/docs/model-adaptation/Wan-2.6/Wan-2.6_/346/264/276/346/254/247/344/272/221.md +0 -84
  693. package/docs/model-adaptation/Wan-2.7/Wan-2.7_/346/264/276/346/254/247/344/272/221.md +0 -122
  694. /package/dist/upload/{fal-legacy.d.ts → fal-host-fetch.d.ts} +0 -0
@@ -2,8 +2,8 @@
2
2
  import model1 from '../../catalog/modelscope/flux-1-krea-dev.model.js';
3
3
  import model2 from '../../catalog/modelscope/majicmix-realistic.model.js';
4
4
  import model3 from '../../catalog/modelscope/modelscope-custom.model.js';
5
- import model4 from '../../catalog/modelscope/qwen-image-edit-2509.model.js';
6
- import model5 from '../../catalog/modelscope/qwen-image.model.js';
5
+ import model4 from '../../catalog/modelscope/qwen-image-2512.model.js';
6
+ import model5 from '../../catalog/modelscope/qwen-image-edit-2511.model.js';
7
7
  import model6 from '../../catalog/modelscope/sdxl-14-ckpt.model.js';
8
8
  import model7 from '../../catalog/modelscope/z-image-turbo.model.js';
9
9
  import { provider } from '../provider-adapters/modelscope.js';
@@ -1,4 +1,4 @@
1
1
  import type { GenerationPack } from '../../generation/core.js';
2
- export declare const models: readonly [import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition];
2
+ export declare const models: readonly [import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition];
3
3
  export declare const pack: GenerationPack;
4
4
  export default pack;
@@ -1,11 +1,7 @@
1
1
  /** 由 scripts/generate-catalog-index.cjs 自动生成;只聚合当前供应商的真实模型文件。 */
2
2
  import model1 from '../../catalog/ppio/kling-3.0.model.js';
3
- import model2 from '../../catalog/ppio/minimax-hailuo-2.3.model.js';
4
- import model3 from '../../catalog/ppio/minimax-speech.model.js';
5
- import model4 from '../../catalog/ppio/wan-2.5-preview.model.js';
6
- import model5 from '../../catalog/ppio/wan-2.6.model.js';
7
- import model6 from '../../catalog/ppio/wan-2.7.model.js';
3
+ import model2 from '../../catalog/ppio/minimax-speech.model.js';
8
4
  import { provider } from '../provider-adapters/ppio.js';
9
- export const models = [model1, model2, model3, model4, model5, model6];
5
+ export const models = [model1, model2];
10
6
  export const pack = { models, providers: [provider] };
11
7
  export default pack;
@@ -1,4 +1,4 @@
1
1
  import type { GenerationPack } from '../../generation/core.js';
2
- export declare const models: readonly [import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition];
2
+ export declare const models: readonly [import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition, import("../../index.js").ModelRuntimeDefinition];
3
3
  export declare const pack: GenerationPack;
4
4
  export default pack;
@@ -1,8 +1,12 @@
1
1
  /** 由 scripts/generate-catalog-index.cjs 自动生成;只聚合当前供应商的真实模型文件。 */
2
- import model1 from '../../catalog/volcengine/seedream-5.0-flash.model.js';
3
- import model2 from '../../catalog/volcengine/seedream-5.0-lite.model.js';
4
- import model3 from '../../catalog/volcengine/seedream-5.0-pro.model.js';
2
+ import model1 from '../../catalog/volcengine/seedance-2.0-fast.model.js';
3
+ import model2 from '../../catalog/volcengine/seedance-2.0-mini.model.js';
4
+ import model3 from '../../catalog/volcengine/seedance-2.0.model.js';
5
+ import model4 from '../../catalog/volcengine/seedance-2.5.model.js';
6
+ import model5 from '../../catalog/volcengine/seedream-5.0-flash.model.js';
7
+ import model6 from '../../catalog/volcengine/seedream-5.0-lite.model.js';
8
+ import model7 from '../../catalog/volcengine/seedream-5.0-pro.model.js';
5
9
  import { provider } from '../provider-adapters/volcengine.js';
6
- export const models = [model1, model2, model3];
10
+ export const models = [model1, model2, model3, model4, model5, model6, model7];
7
11
  export const pack = { models, providers: [provider] };
8
12
  export default pack;
@@ -1 +1,2 @@
1
1
  export * from './mediaContext.js';
2
+ export * from './tokenPricing.js';
@@ -1 +1,2 @@
1
1
  export * from './mediaContext.js';
2
+ export * from './tokenPricing.js';
@@ -10,16 +10,21 @@ export interface PricingVideoMetadata {
10
10
  height: number;
11
11
  durationSeconds: number;
12
12
  }
13
+ export interface PricingAudioMetadata {
14
+ durationSeconds: number;
15
+ }
13
16
  export interface PricingMediaMetadataReaders {
14
17
  image: (source: string) => Promise<PricingImageMetadata>;
15
18
  video: (source: string) => Promise<PricingVideoMetadata>;
19
+ /** 可选:宿主没有音频探针时,按音频计价的指标记为缺失。 */
20
+ audio?: (source: string) => Promise<PricingAudioMetadata>;
16
21
  }
17
22
  export interface ResolvedPricingMediaContext {
18
23
  params: JsonObject;
19
24
  complete: boolean;
20
25
  missingTargets: string[];
21
26
  }
22
- export declare function resolvePricingMediaSources(mediaType: 'image' | 'video', params: JsonObject): string[];
27
+ export declare function resolvePricingMediaSources(mediaType: 'image' | 'video' | 'audio', params: JsonObject): string[];
23
28
  /**
24
29
  * 用宿主提供的媒体探针补齐 calculator 所需指标。函数不依赖 DOM、Node 或 Electron,
25
30
  * Web、桌面和插件宿主可以共用同一套来源优先级、聚合与倍率换算。
@@ -1,6 +1,7 @@
1
1
  const MEDIA_SOURCE_KEYS = {
2
2
  image: ['uploadedFilePaths', 'images', 'uploadedImages'],
3
3
  video: ['uploadedVideoFilePaths', 'videos', 'uploadedVideos'],
4
+ audio: ['uploadedAudioFilePaths', 'audios', 'uploadedAudios'],
4
5
  };
5
6
  function cachedRead(cache, source, reader) {
6
7
  const cached = cache.get(source);
@@ -28,7 +29,7 @@ export function resolvePricingMediaSources(mediaType, params) {
28
29
  }
29
30
  function readMetric(requirement, metadata) {
30
31
  if (requirement.metric === 'megapixels') {
31
- return metadata.width > 0 && metadata.height > 0
32
+ return 'width' in metadata && metadata.width > 0 && metadata.height > 0
32
33
  ? metadata.width * metadata.height / 1_000_000
33
34
  : null;
34
35
  }
@@ -61,8 +62,10 @@ async function resolveRequirement(requirement, params, readers) {
61
62
  try {
62
63
  const metadata = requirement.mediaType === 'image'
63
64
  ? await readers.image(source)
64
- : await readers.video(source);
65
- return readMetric(requirement, metadata);
65
+ : requirement.mediaType === 'video'
66
+ ? await readers.video(source)
67
+ : readers.audio ? await readers.audio(source) : null;
68
+ return metadata ? readMetric(requirement, metadata) : null;
66
69
  }
67
70
  catch {
68
71
  return null;
@@ -86,14 +89,18 @@ export async function resolvePricingMediaContext(requirements, params, readers)
86
89
  }
87
90
  const imageReads = new Map();
88
91
  const videoReads = new Map();
92
+ const audioReads = new Map();
93
+ const audioReader = readers.audio;
89
94
  const memoizedReaders = {
90
95
  image: (source) => cachedRead(imageReads, source, readers.image),
91
96
  video: (source) => cachedRead(videoReads, source, readers.video),
97
+ ...(audioReader ? { audio: (source) => cachedRead(audioReads, source, audioReader) } : {}),
92
98
  };
93
- const resolvedValues = await Promise.all(requirements.map((requirement) => resolveRequirement(requirement, params, memoizedReaders)));
99
+ const applicable = requirements.filter((requirement) => requirement.when?.(params) ?? true);
100
+ const resolvedValues = await Promise.all(applicable.map((requirement) => resolveRequirement(requirement, params, memoizedReaders)));
94
101
  const next = { ...params };
95
102
  const missingTargets = [];
96
- requirements.forEach((requirement, index) => {
103
+ applicable.forEach((requirement, index) => {
97
104
  const value = resolvedValues[index];
98
105
  if (value === null || !Number.isFinite(value) || value <= 0) {
99
106
  delete next[requirement.targetParam];
@@ -0,0 +1,36 @@
1
+ /** 每百万 tokens 的单价。 */
2
+ export interface TokenPrice {
3
+ inputPerMillionTokens: number;
4
+ outputPerMillionTokens: number;
5
+ /** 命中上下文缓存的输入单价;供应商未单列时省略。 */
6
+ cacheReadPerMillionTokens?: number;
7
+ }
8
+ /**
9
+ * 供应商公布的按量标准价:不含限时优惠、Batch 折扣与免费额度,只用于展示与参考估价,不代表账单。
10
+ * 价格随供应商走:同一模型在不同平台托管,单价各自登记。
11
+ */
12
+ export interface TokenListPricing extends TokenPrice {
13
+ currency: 'CNY' | 'USD';
14
+ /** 按单次请求的输入长度分档:输入超过 aboveInputTokens 时整次请求按该档结算;顶层是最低一档。 */
15
+ tiers?: ReadonlyArray<TokenPrice & {
16
+ aboveInputTokens: number;
17
+ }>;
18
+ /** 分时计价:顶层是高峰价(参考估价取保守值),offPeak 是其余时段的价格。 */
19
+ offPeak?: TokenPrice & {
20
+ peakHours: string;
21
+ };
22
+ }
23
+ /** 按“输入 / 输出 / 缓存命中”的顺序登记单价,和供应商价格表的列序一致,便于逐行对照。 */
24
+ export declare function tokenListPrice(currency: TokenListPricing['currency'], input: number, output: number, cacheRead?: number): TokenListPricing;
25
+ export declare function tokenPrice(input: number, output: number, cacheRead?: number): TokenPrice;
26
+ /** 每个汉字约折多少 token,附官方出处;用来把 token 单价换成“每万字”的参考价。 */
27
+ export interface TextTokenRatio {
28
+ tokensPerChineseChar: number;
29
+ source: string;
30
+ }
31
+ export declare function textTokenRatioFor(modelId: string): TextTokenRatio;
32
+ /** 按顶层单价(最低档、高峰时段)估算一段中文输入与输出的费用,币种同 pricing。 */
33
+ export declare function estimateChineseTextCost(pricing: TokenListPricing, ratio: TextTokenRatio, chars: {
34
+ input: number;
35
+ output: number;
36
+ }): number;
@@ -0,0 +1,26 @@
1
+ /** 按“输入 / 输出 / 缓存命中”的顺序登记单价,和供应商价格表的列序一致,便于逐行对照。 */
2
+ export function tokenListPrice(currency, input, output, cacheRead) {
3
+ return { currency, ...tokenPrice(input, output, cacheRead) };
4
+ }
5
+ export function tokenPrice(input, output, cacheRead) {
6
+ return { inputPerMillionTokens: input, outputPerMillionTokens: output, ...(cacheRead === undefined ? {} : { cacheReadPerMillionTokens: cacheRead }) };
7
+ }
8
+ /**
9
+ * 换算比例跟着模型的分词器走,不跟托管平台走:硅基流动、派欧云、百炼上的 DeepSeek 仍按 DeepSeek 的比例。
10
+ * 公布区间的取偏多一端,参考价宁可偏高。没有公布比例的模型(Qwen、豆包、MiMo、gpt-oss 等)用硅基流动对“典型中文模型”的说法,
11
+ * 1 token 约 1–2 个汉字,同样取 1 字 1 token。
12
+ */
13
+ const TEXT_TOKEN_RATIOS = [
14
+ { match: /deepseek/i, ratio: { tokensPerChineseChar: 0.6, source: 'https://api-docs.deepseek.com/zh-cn/quick_start/token_usage' } },
15
+ { match: /kimi|moonshot/i, ratio: { tokensPerChineseChar: 1 / 1.5, source: 'https://platform.kimi.com/docs/introduction' } },
16
+ { match: /glm/i, ratio: { tokensPerChineseChar: 1 / 1.6, source: 'https://docs.bigmodel.cn/cn/guide/start/introduction' } },
17
+ { match: /minimax/i, ratio: { tokensPerChineseChar: 1000 / 1600, source: 'https://platform.minimax.cn/docs/pricing/overview' } },
18
+ ];
19
+ const FALLBACK_TEXT_TOKEN_RATIO = { tokensPerChineseChar: 1, source: 'https://docs.siliconflow.com/en/faqs/billing-rules' };
20
+ export function textTokenRatioFor(modelId) {
21
+ return TEXT_TOKEN_RATIOS.find(item => item.match.test(modelId))?.ratio ?? FALLBACK_TEXT_TOKEN_RATIO;
22
+ }
23
+ /** 按顶层单价(最低档、高峰时段)估算一段中文输入与输出的费用,币种同 pricing。 */
24
+ export function estimateChineseTextCost(pricing, ratio, chars) {
25
+ return (chars.input * pricing.inputPerMillionTokens + chars.output * pricing.outputPerMillionTokens) * ratio.tokensPerChineseChar / 1_000_000;
26
+ }
@@ -1,3 +1,3 @@
1
1
  import type { ProviderContinuePollingInput, ProviderExecutionInput, ProviderExecutionResult } from '../types/runtime.js';
2
2
  export declare function execute(input: ProviderExecutionInput): Promise<ProviderExecutionResult>;
3
- export declare function continuePolling(_input: ProviderContinuePollingInput): Promise<ProviderExecutionResult>;
3
+ export declare function continuePolling(input: ProviderContinuePollingInput): Promise<ProviderExecutionResult>;
@@ -1,26 +1,60 @@
1
1
  import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
2
+ import { POLL_QUERY_FAILED, pollUntilResult } from '../protocols/polling.js';
2
3
  import { getPointer, isJsonObject, normalizeEndpoint, pushUniqueUrl, readJsonResponse, stringAt } from './helpers.js';
3
4
  import { fetchProvider } from './provider-fetch.js';
4
5
  import { hexAudioToDataUri } from './audio-data.js';
5
6
  const BAILIAN_BASE_URL = 'https://dashscope.aliyuncs.com';
7
+ /** 只支持异步调用的 DashScope 路由:提交必须带 `X-DashScope-Async: enable`,结果按 `/api/v1/tasks/{task_id}` 查询。 */
8
+ const ASYNC_ROUTES = new Set(['/api/v1/services/aigc/video-generation/video-synthesis']);
9
+ function isAsyncRoute(route) {
10
+ return ASYNC_ROUTES.has(route.replace(/\/+$/, ''));
11
+ }
12
+ async function readBailianJson(response, model) {
13
+ return await readJsonResponse(response, 'Bailian', (body) => {
14
+ const message = ['/message', '/error/message', '/output/base_resp/status_msg']
15
+ .map((pointer) => stringAt(body, pointer))
16
+ .find((value) => value && /product is not activated|model.*(?:not activated|not authorized)|产品未开通|模型未开通/i.test(value));
17
+ if (message) {
18
+ throw new AiRuntimeError('provider_product_not_activated', `百炼账号未开通该模型(${model ?? '当前模型'}),请到百炼控制台 https://bailian.console.aliyun.com/ 开通后重试;开通前不要重复提交。`, {
19
+ retryable: false, category: 'authentication', status: response.status,
20
+ providerCode: stringAt(body, '/code') ?? stringAt(body, '/error/code') ?? getPointer(body, '/output/base_resp/status_code'),
21
+ providerMessage: message,
22
+ });
23
+ }
24
+ });
25
+ }
6
26
  export async function execute(input) {
27
+ const asyncTask = isAsyncRoute(input.route);
28
+ const body = JSON.stringify(input.body);
7
29
  const response = await fetchProvider('Bailian', normalizeEndpoint(BAILIAN_BASE_URL, input.route), {
8
30
  method: input.method,
9
31
  headers: {
10
32
  Authorization: `Bearer ${input.apiKey}`,
11
33
  'Content-Type': 'application/json',
34
+ ...(asyncTask ? { 'X-DashScope-Async': 'enable' } : {}),
35
+ // 本地素材经临时存储上传成 oss:// 后,官方要求带这个头才会解析。
36
+ ...(body.includes('"oss://') ? { 'X-DashScope-OssResourceResolve': 'enable' } : {}),
12
37
  },
13
- body: JSON.stringify(input.body),
38
+ body,
14
39
  signal: input.signal,
15
40
  }, {
16
41
  transport: input.runtime.transport,
17
42
  retryPreconnectOnce: true,
18
43
  });
19
- const payload = await readJsonResponse(response, 'Bailian');
44
+ const payload = await readBailianJson(response, stringAt(input.body, '/model'));
20
45
  const errorCode = stringAt(payload, '/code');
21
46
  if (errorCode) {
22
47
  throw new AiRuntimeError('provider_task_failed', stringAt(payload, '/message') ?? errorCode);
23
48
  }
49
+ if (asyncTask) {
50
+ const taskStatus = stringAt(payload, '/output/task_status');
51
+ if (taskStatus === 'FAILED' || taskStatus === 'CANCELED')
52
+ throw taskFailure(payload, taskStatus);
53
+ const taskId = stringAt(payload, '/output/task_id')?.trim();
54
+ if (!taskId)
55
+ throw new AiRuntimeError('invalid_response', 'Bailian async task response has no task_id');
56
+ return { status: 'pending', url: '', taskId, metadata: payload };
57
+ }
24
58
  const speechStatus = getPointer(payload, '/output/base_resp/status_code');
25
59
  if (typeof speechStatus === 'number' && speechStatus !== 0) {
26
60
  throw new AiRuntimeError('provider_task_failed', stringAt(payload, '/output/base_resp/status_msg') ?? `MiniMax status ${speechStatus}`);
@@ -54,8 +88,41 @@ export async function execute(input) {
54
88
  }
55
89
  return { status: 'completed', url: urls.join('|||'), metadata: payload };
56
90
  }
57
- export async function continuePolling(_input) {
58
- throw new AiRuntimeError('unsupported_provider', 'Bailian official image models use synchronous generation');
91
+ export async function continuePolling(input) {
92
+ if (!isAsyncRoute(input.route)) {
93
+ throw new AiRuntimeError('unsupported_provider', 'Bailian official image models use synchronous generation');
94
+ }
95
+ const payload = await pollUntilResult(input, async () => {
96
+ const response = await fetchProvider('Bailian', `${BAILIAN_BASE_URL}/api/v1/tasks/${encodeURIComponent(input.taskId)}`, {
97
+ headers: { Authorization: `Bearer ${input.apiKey}` },
98
+ signal: input.signal,
99
+ }, {
100
+ transport: input.runtime.transport,
101
+ retryPreconnectOnce: true,
102
+ });
103
+ const result = await readBailianJson(response, undefined);
104
+ const status = stringAt(result, '/output/task_status');
105
+ if (status === 'SUCCEEDED')
106
+ return result;
107
+ if (status === 'PENDING' || status === 'RUNNING')
108
+ return undefined;
109
+ if (status === 'FAILED' || status === 'CANCELED')
110
+ throw taskFailure(result, status);
111
+ // UNKNOWN 表示任务不存在或已过 24 小时查询期;与缺状态一样计入连续查询失败,不立刻判死。
112
+ return POLL_QUERY_FAILED;
113
+ });
114
+ const videoUrl = stringAt(payload, '/output/video_url');
115
+ if (!videoUrl || !/^https?:\/\//i.test(videoUrl)) {
116
+ throw new AiRuntimeError('empty_result', `Bailian task has no video_url (task_id=${input.taskId})`);
117
+ }
118
+ return { status: 'completed', url: videoUrl, taskId: input.taskId, metadata: payload };
119
+ }
120
+ function taskFailure(payload, status) {
121
+ const code = stringAt(payload, '/output/code');
122
+ const message = stringAt(payload, '/output/message') ?? (status === 'CANCELED' ? '任务已取消' : 'Bailian task failed');
123
+ return new AiRuntimeError('provider_task_failed', code ? `${code}: ${message}` : message, {
124
+ providerCode: code, providerMessage: message,
125
+ });
59
126
  }
60
127
  function extractImageUrls(value) {
61
128
  const urls = [];
@@ -121,9 +121,19 @@ function requireFalQueueUrl(value, field) {
121
121
  }
122
122
  return parsed.toString();
123
123
  }
124
+ /**
125
+ * `draft_cache` 是 FLUX 3 草稿端点返回的加密缓存包,只用于转正片,不是生成结果;
126
+ * 收进媒体地址会被宿主当成第二段视频下载。它仍原样留在 metadata 里供续接读取。
127
+ */
124
128
  function extractUrls(payload) {
125
129
  const urls = [];
126
- collectDeepUrls(payload, urls);
130
+ if (isJsonObject(payload) && 'draft_cache' in payload) {
131
+ const { draft_cache: _draftCache, ...media } = payload;
132
+ collectDeepUrls(media, urls);
133
+ }
134
+ else {
135
+ collectDeepUrls(payload, urls);
136
+ }
127
137
  return urls;
128
138
  }
129
139
  function enrichRequestId(value, requestId) {
@@ -1,6 +1,6 @@
1
1
  import type { JsonObject, JsonValue } from '../types/runtime.js';
2
2
  export declare function normalizeEndpoint(base: string, route: string): string;
3
- export declare function readJsonResponse(response: Response, provider: string): Promise<JsonValue>;
3
+ export declare function readJsonResponse(response: Response, provider: string, inspect?: (payload: JsonValue) => void): Promise<JsonValue>;
4
4
  export declare function asObject(value: JsonValue): JsonObject;
5
5
  export declare function getPointer(value: JsonValue, pointer: string): JsonValue | undefined;
6
6
  export declare function stringAt(value: JsonValue, pointer: string): string | undefined;
@@ -1,4 +1,5 @@
1
1
  import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
2
+ import { assertProviderAccess } from './providerAccessErrors.js';
2
3
  export function normalizeEndpoint(base, route) {
3
4
  if (route.startsWith('http://') || route.startsWith('https://')) {
4
5
  return route;
@@ -8,13 +9,24 @@ export function normalizeEndpoint(base, route) {
8
9
  }
9
10
  return `${base}/${route}`;
10
11
  }
11
- export async function readJsonResponse(response, provider) {
12
- const payload = await response.json().catch((error) => {
12
+ export async function readJsonResponse(response, provider, inspect) {
13
+ const text = await response.text();
14
+ let payload;
15
+ try {
16
+ payload = JSON.parse(text);
17
+ }
18
+ catch (error) {
19
+ if (!response.ok) {
20
+ assertProviderAccess(provider, {}, response.status);
21
+ throw new AiRuntimeError('provider_http_error', `${provider} HTTP ${response.status}: ${text.slice(0, 500)}`, { status: response.status });
22
+ }
13
23
  const message = error instanceof Error ? error.message : String(error);
14
- throw new AiRuntimeError('invalid_json', message);
15
- });
24
+ throw new AiRuntimeError('invalid_json', message, { status: response.status });
25
+ }
26
+ inspect?.(payload);
27
+ assertProviderAccess(provider, payload, response.status);
16
28
  if (!response.ok) {
17
- throw new AiRuntimeError('provider_http_error', `${provider} HTTP ${response.status}: ${JSON.stringify(payload)}`);
29
+ throw new AiRuntimeError('provider_http_error', `${provider} HTTP ${response.status}: ${JSON.stringify(payload)}`, { status: response.status });
18
30
  }
19
31
  return payload;
20
32
  }
@@ -42,6 +42,7 @@ async function sendCreateTask(input, endpoint) {
42
42
  const code = getPointer(payload, '/code');
43
43
  const success = getPointer(payload, '/success');
44
44
  if ((typeof code === 'number' && code !== 200) || success === false) {
45
+ assertKieTaskFailure(code, stringAt(payload, '/msg') ?? '');
45
46
  throw new AiRuntimeError('provider_task_failed', stringAt(payload, '/msg') ?? 'KIE create task failed');
46
47
  }
47
48
  return payload;
@@ -58,16 +59,18 @@ async function pollTask(input) {
58
59
  });
59
60
  const payload = await readJsonResponse(response, 'KIE');
60
61
  const code = getPointer(payload, '/code');
61
- if (typeof code === 'number' && code !== 200) {
62
- // 查询本身没成功(含 taskId 已被清理的情况),不是"任务还在跑"
63
- return POLL_QUERY_FAILED;
62
+ if ((typeof code === 'number' && code !== 200) || getPointer(payload, '/success') === false) {
63
+ // 查询失败保留供应商事实;鉴权/余额错误已由 readJsonResponse 立即终止。
64
+ const message = stringAt(payload, '/msg') ?? stringAt(payload, '/message') ?? 'provider reported a non-success status';
65
+ throw new AiRuntimeError('provider_http_error', `KIE recordInfo code=${code ?? 'unknown'}: ${message}`, {
66
+ status: response.status, providerCode: code, providerMessage: message,
67
+ });
64
68
  }
65
- if (getPointer(payload, '/success') === false)
66
- return POLL_QUERY_FAILED;
67
69
  const state = (stringAt(payload, '/data/state') ?? '').trim().toLowerCase();
68
70
  if (state === 'success')
69
71
  return payload;
70
72
  if (state === 'fail') {
73
+ assertKieTaskFailure(getPointer(payload, '/data/failCode'), stringAt(payload, '/data/failMsg') ?? '');
71
74
  throw new AiRuntimeError('provider_task_failed', stringAt(payload, '/data/failMsg') ?? 'KIE task failed');
72
75
  }
73
76
  if (['waiting', 'queuing', 'generating'].includes(state))
@@ -75,6 +78,14 @@ async function pollTask(input) {
75
78
  return POLL_QUERY_FAILED;
76
79
  });
77
80
  }
81
+ function assertKieTaskFailure(code, message) {
82
+ if (/^Internal Error(?:,|\.|$)/i.test(message.trim())) {
83
+ throw new AiRuntimeError('provider_internal_error', 'KIE 服务内部错误,可稍后手动重试。', { retryable: true, terminal: true, providerCode: code, providerMessage: message });
84
+ }
85
+ if (String(code) === '422') {
86
+ throw new AiRuntimeError('provider_invalid_request', `KIE 拒绝了请求参数,请修改后重试:${message}`, { retryable: false, providerCode: code, providerMessage: message });
87
+ }
88
+ }
78
89
  function extractTaskId(payload) {
79
90
  return stringAt(payload, '/data/taskId');
80
91
  }
@@ -82,8 +82,8 @@ export const PROVIDER_METADATA = [
82
82
  {
83
83
  providerId: 'minimax',
84
84
  displayName: 'MiniMax',
85
- websiteUrl: 'https://platform.minimaxi.com/',
86
- apiKeyUrl: 'https://platform.minimaxi.com/console/access?tab=api-keys',
85
+ websiteUrl: 'https://platform.minimax.cn/',
86
+ apiKeyUrl: 'https://platform.minimax.cn/console/access?tab=api-keys',
87
87
  websiteUrlKind: 'official',
88
88
  docs: 'docs/llm-adaptation/供应商/MiniMax.md',
89
89
  },
@@ -0,0 +1,6 @@
1
+ import type { ProviderExecutionInput, ProviderExecutionResult } from '../types/runtime.js';
2
+ /**
3
+ * OpenAI 兼容 `/audio/speech`:同步返回音频二进制,错误时返回 JSON 错误体。
4
+ * 返回的音频转成 data URI,由宿主按普通媒体结果落盘。
5
+ */
6
+ export declare function executeOpenAiCompatibleSpeech(providerName: string, baseUrl: string, input: ProviderExecutionInput, defaultFormat: string): Promise<ProviderExecutionResult>;
@@ -0,0 +1,31 @@
1
+ import { audioBytesToDataUri } from './audio-data.js';
2
+ import { isJsonObject, normalizeEndpoint, readJsonResponse } from './helpers.js';
3
+ import { fetchProvider } from './provider-fetch.js';
4
+ /**
5
+ * OpenAI 兼容 `/audio/speech`:同步返回音频二进制,错误时返回 JSON 错误体。
6
+ * 返回的音频转成 data URI,由宿主按普通媒体结果落盘。
7
+ */
8
+ export async function executeOpenAiCompatibleSpeech(providerName, baseUrl, input, defaultFormat) {
9
+ const response = await fetchProvider(providerName, normalizeEndpoint(baseUrl, input.route), {
10
+ method: 'POST',
11
+ headers: {
12
+ Authorization: `Bearer ${input.apiKey}`,
13
+ 'Content-Type': 'application/json',
14
+ },
15
+ body: JSON.stringify(input.body),
16
+ signal: input.signal,
17
+ }, {
18
+ transport: input.runtime.transport,
19
+ retryPreconnectOnce: true,
20
+ });
21
+ if (!response.ok) {
22
+ await readJsonResponse(response, providerName);
23
+ }
24
+ const bytes = new Uint8Array(await response.arrayBuffer());
25
+ const format = isJsonObject(input.body) && typeof input.body.response_format === 'string' ? input.body.response_format : defaultFormat;
26
+ return {
27
+ status: 'completed',
28
+ url: audioBytesToDataUri(bytes, format),
29
+ metadata: { contentType: response.headers.get('content-type'), byteLength: bytes.byteLength },
30
+ };
31
+ }
@@ -0,0 +1,3 @@
1
+ import type { JsonValue } from '../types/runtime.js';
2
+ /** 仅按供应商官方错误契约识别;未知 403/500 保留原分类,禁止猜测余额或模型开通状态。 */
3
+ export declare function assertProviderAccess(provider: string, payload: JsonValue, status: number): void;
@@ -0,0 +1,73 @@
1
+ import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
2
+ const object = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : {};
3
+ /** 仅按供应商官方错误契约识别;未知 403/500 保留原分类,禁止猜测余额或模型开通状态。 */
4
+ export function assertProviderAccess(provider, payload, status) {
5
+ const body = object(payload);
6
+ const error = object(body.error ?? body.errors);
7
+ const code = String(error.code ?? body.code ?? '');
8
+ const providerMessage = String(error.message ?? body.message ?? body.msg ?? '');
9
+ if (provider === 'KIE' && (['401', '403'].includes(code) || status === 401 || status === 403)) {
10
+ throw new AiRuntimeError('provider_authentication_failed', 'KIE 鉴权失败,请检查 API Key 与账号权限。控制台:https://kie.ai/api-key', {
11
+ retryable: false, category: 'authentication', providerCode: code || String(status), status,
12
+ providerMessage: String(error.message ?? body.message ?? body.msg ?? ''),
13
+ });
14
+ }
15
+ let kind;
16
+ let accountNotVerified = false;
17
+ if (provider === 'Bailian') {
18
+ if (code === 'Arrearage')
19
+ kind = 'insufficient_balance';
20
+ else if (code === 'AccessDenied.Unpurchased')
21
+ kind = 'product_not_activated';
22
+ else if (code === 'Model.AccessDenied')
23
+ kind = 'model_access_denied';
24
+ }
25
+ else if (provider === 'KIE' && (code === '402' || status === 402))
26
+ kind = 'insufficient_balance';
27
+ else if (provider === 'PPIO') {
28
+ if (['BILLING_BALANCE_NOT_ENOUGH', 'NOT_ENOUGH_BALANCE'].includes(code))
29
+ kind = 'insufficient_balance';
30
+ else if (['API_NOT_ALLOWED', 'ACCESS_DENY'].includes(code))
31
+ kind = 'model_access_denied';
32
+ }
33
+ else if (provider === 'SiliconFlow') {
34
+ if (status === 402)
35
+ kind = 'insufficient_balance';
36
+ else if (status === 403)
37
+ kind = 'model_access_denied';
38
+ }
39
+ else if (provider === 'APIMart') {
40
+ if (code === '402' || status === 402)
41
+ kind = 'insufficient_balance';
42
+ else if (code === '403' || status === 403)
43
+ kind = 'model_access_denied';
44
+ }
45
+ else if (provider === 'ModelScope') {
46
+ // 魔搭 API 推理只对完成邮箱验证的账号开放;这个 403 只有英文 message,没有错误码。
47
+ if (status === 403 && /verified accounts|email verification/i.test(providerMessage)) {
48
+ kind = 'product_not_activated';
49
+ accountNotVerified = true;
50
+ }
51
+ }
52
+ else if (provider === 'Volcengine Ark') {
53
+ if (code === 'AccountOverdueError')
54
+ kind = 'insufficient_balance';
55
+ else if (['ModelNotOpen', 'OperationDenied.ServiceNotOpen'].includes(code))
56
+ kind = 'product_not_activated';
57
+ else if (['AccessDenied', 'OperationDenied.PermissionDenied'].includes(code))
58
+ kind = 'model_access_denied';
59
+ }
60
+ if (!kind)
61
+ return;
62
+ const name = provider === 'Bailian' ? '百炼' : provider === 'SiliconFlow' ? '硅基流动' : provider === 'Volcengine Ark' ? '火山方舟' : provider === 'ModelScope' ? '魔搭' : provider;
63
+ const destination = { Bailian: 'https://bailian.console.aliyun.com/', KIE: 'https://kie.ai/', PPIO: 'https://ppio.com/console', SiliconFlow: 'https://cloud.siliconflow.cn/', APIMart: 'https://apimart.ai/', 'Volcengine Ark': 'https://console.volcengine.com/ark/', ModelScope: 'https://modelscope.cn/my/settings/account' };
64
+ const action = accountNotVerified ? '账号需先完成邮箱验证才能调用 API 推理,请到账号设置完成验证后重试'
65
+ : kind === 'insufficient_balance' ? '账户余额不足或已欠费,请充值后重试'
66
+ : kind === 'product_not_activated' ? '账号未开通该模型,请先开通模型服务'
67
+ : '账号没有该模型的调用权限,请检查模型授权和实名认证';
68
+ throw new AiRuntimeError(`provider_${kind}`, `${name}${action}。控制台:${destination[provider]}`, {
69
+ retryable: false, category: 'authentication', providerCode: code, status,
70
+ providerMessage,
71
+ scope: kind === 'insufficient_balance' || accountNotVerified ? 'account' : 'model',
72
+ });
73
+ }
@@ -1,33 +1,8 @@
1
1
  import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
2
- import { audioBytesToDataUri } from './audio-data.js';
3
- import { normalizeEndpoint } from './helpers.js';
4
- import { isJsonObject } from './helpers.js';
5
- import { fetchProvider } from './provider-fetch.js';
2
+ import { executeOpenAiCompatibleSpeech } from './openai-speech.js';
6
3
  const BASE_URL = 'https://api.siliconflow.cn';
7
4
  export async function execute(input) {
8
- const response = await fetchProvider('SiliconFlow', normalizeEndpoint(BASE_URL, input.route), {
9
- method: 'POST',
10
- headers: {
11
- Authorization: `Bearer ${input.apiKey}`,
12
- 'Content-Type': 'application/json',
13
- },
14
- body: JSON.stringify(input.body),
15
- signal: input.signal,
16
- }, {
17
- transport: input.runtime.transport,
18
- retryPreconnectOnce: true,
19
- });
20
- if (!response.ok) {
21
- await response.body?.cancel().catch(() => undefined);
22
- throw new AiRuntimeError('provider_task_failed', `SiliconFlow speech request failed (HTTP ${response.status})`);
23
- }
24
- const bytes = new Uint8Array(await response.arrayBuffer());
25
- const requestedFormat = isJsonObject(input.body) && typeof input.body.response_format === 'string' ? input.body.response_format : 'mp3';
26
- const url = audioBytesToDataUri(bytes, requestedFormat);
27
- return {
28
- status: 'completed', url,
29
- metadata: { contentType: response.headers.get('content-type'), byteLength: bytes.byteLength },
30
- };
5
+ return executeOpenAiCompatibleSpeech('SiliconFlow', BASE_URL, input, 'mp3');
31
6
  }
32
7
  export async function continuePolling(_input) {
33
8
  throw new AiRuntimeError('unsupported_provider', 'SiliconFlow speech response is synchronous');