@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
@@ -81,14 +81,12 @@ async function executeFunShort(preset, input, apiKey, apiBaseUrl, context) {
81
81
  const parameters = { format: formatFrom(input, options) };
82
82
  if (options.sampleRateHz !== undefined)
83
83
  parameters.sample_rate = String(options.sampleRateHz);
84
- if (preset.modelId === 'qwen-audio-3.1-asr-flash') {
85
- if (options.keepDialect !== undefined)
86
- parameters.keep_dialect = options.keepDialect;
87
- if (options.diarizationEnabled !== undefined)
88
- parameters.speaker_diarization_enabled = options.diarizationEnabled;
89
- if (options.vocabulary !== undefined)
90
- parameters.vocabulary = options.vocabulary;
91
- }
84
+ if (preset.supports?.keepDialect && options.keepDialect !== undefined)
85
+ parameters.keep_dialect = options.keepDialect;
86
+ if (preset.supports?.speakerDiarization && options.diarizationEnabled !== undefined)
87
+ parameters.speaker_diarization_enabled = options.diarizationEnabled;
88
+ if (preset.supports?.vocabulary && options.vocabulary !== undefined)
89
+ parameters.vocabulary = options.vocabulary;
92
90
  if (options.vocabularyId)
93
91
  parameters.vocabulary_id = options.vocabularyId;
94
92
  const languageHints = [...new Set([...(input.hints ?? []), ...(input.language ? [input.language] : [])]
@@ -151,10 +149,8 @@ function asyncParameters(preset, input, options) {
151
149
  ...(options.speakerCount !== undefined ? { speaker_count: options.speakerCount } : {}),
152
150
  ...(options.channelId !== undefined ? { channel_id: [options.channelId] } : {}),
153
151
  ...(options.specialWordFilter ? { special_word_filter: options.specialWordFilter } : {}),
154
- ...(preset.modelId === 'qwen-audio-3.1-asr-flash-filetrans' ? {
155
- ...(options.keepDialect !== undefined ? { keep_dialect: options.keepDialect } : {}),
156
- ...(options.vocabulary !== undefined ? { vocabulary: options.vocabulary } : {}),
157
- } : {}),
152
+ ...(preset.supports?.keepDialect && options.keepDialect !== undefined ? { keep_dialect: options.keepDialect } : {}),
153
+ ...(preset.supports?.vocabulary && options.vocabulary !== undefined ? { vocabulary: options.vocabulary } : {}),
158
154
  };
159
155
  }
160
156
  async function wait(ms, context) {
@@ -172,19 +168,35 @@ async function wait(ms, context) {
172
168
  });
173
169
  }
174
170
  async function executeFile(preset, input, apiKey, apiBaseUrl, uploadBaseUrl, config, context) {
175
- const audio = await resolveAsyncAudioUrl(input.audio, preset.modelId, apiKey, uploadBaseUrl, context);
176
- const asyncInput = preset.asyncInputField === 'file_urls' ? { file_urls: [audio.url] } : { file_url: audio.url };
177
- const headers = {
178
- Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'X-DashScope-Async': 'enable',
179
- };
180
- if (audio.usesOss)
181
- headers['X-DashScope-OssResourceResolve'] = 'enable';
182
- const submitResponse = await context.runtime.transport.fetch(`${apiBaseUrl}/services/audio/asr/transcription`, {
183
- method: 'POST', headers,
184
- body: JSON.stringify({ model: preset.modelId, input: asyncInput, parameters: asyncParameters(preset, input, providerOptions(input)) }),
185
- signal: context.signal,
186
- });
187
- const submitted = parseTaskState(await responseJson(submitResponse, 'file ASR submit'));
171
+ const resumeTaskId = providerOptions(input).resumeTaskId;
172
+ let submitted;
173
+ if (resumeTaskId !== undefined) {
174
+ if (typeof resumeTaskId !== 'string' || !/^[a-zA-Z0-9_-]{1,256}$/.test(resumeTaskId))
175
+ throw new AiRuntimeError('invalid_parameter', 'Invalid ASR resume task ID');
176
+ const response = await context.runtime.transport.fetch(`${apiBaseUrl}/tasks/${encodeURIComponent(resumeTaskId)}`, { headers: { Authorization: `Bearer ${apiKey}` }, signal: context.signal });
177
+ submitted = parseTaskState(await responseJson(response, 'file ASR resume'));
178
+ if (submitted.taskId && submitted.taskId !== resumeTaskId)
179
+ throw new AiRuntimeError('invalid_response', 'ASR resume returned a different task');
180
+ submitted = { ...submitted, taskId: resumeTaskId };
181
+ }
182
+ else {
183
+ const audio = await resolveAsyncAudioUrl(input.audio, preset.modelId, apiKey, uploadBaseUrl, context).catch((error) => {
184
+ // Upload/policy failures precede paid ASR submission. Do not infer this for submit/poll failures.
185
+ throw new AiRuntimeError(error instanceof AiRuntimeError ? error.code : 'audio_upload_failed', error instanceof AiRuntimeError ? error.message.replace(`[${error.code}] `, '') : error instanceof Error ? error.message : String(error), { ...(error instanceof AiRuntimeError ? error.details : {}), retryable: false, billing: 'not_charged', execution: { notExecuted: true } });
186
+ });
187
+ const asyncInput = preset.asyncInputField === 'file_urls' ? { file_urls: [audio.url] } : { file_url: audio.url };
188
+ const headers = {
189
+ Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json', 'X-DashScope-Async': 'enable',
190
+ };
191
+ if (audio.usesOss)
192
+ headers['X-DashScope-OssResourceResolve'] = 'enable';
193
+ const submitResponse = await context.runtime.transport.fetch(`${apiBaseUrl}/services/audio/asr/transcription`, {
194
+ method: 'POST', headers,
195
+ body: JSON.stringify({ model: preset.modelId, input: asyncInput, parameters: asyncParameters(preset, input, providerOptions(input)) }),
196
+ signal: context.signal,
197
+ });
198
+ submitted = parseTaskState(await responseJson(submitResponse, 'file ASR submit'));
199
+ }
188
200
  const taskId = submitted.taskId;
189
201
  if (!taskId)
190
202
  throw new AiRuntimeError('invalid_response', 'Bailian file ASR submit response has no task_id');
@@ -223,9 +235,11 @@ export function createBailianAsrModule(preset, options = {}) {
223
235
  maxPollingMs: options.maxPollingMs ?? 30 * 60_000,
224
236
  };
225
237
  return {
226
- descriptor: preset.descriptor,
238
+ descriptor: preset.protocol === 'fun-short-sse' || preset.protocol === 'qwen-short' ? preset.descriptor : { ...preset.descriptor, features: [...preset.descriptor.features ?? [], 'resume-task'] },
227
239
  execute: async (input, context) => {
228
240
  checkAbort(context);
241
+ if (providerOptions(input).resumeTaskId !== undefined && (preset.protocol === 'fun-short-sse' || preset.protocol === 'qwen-short'))
242
+ throw new AiRuntimeError('unsupported_operation', 'Short ASR cannot resume a file task');
229
243
  const apiKey = await credential(context);
230
244
  if (preset.protocol === 'fun-short-sse') {
231
245
  return await executeFunShort(preset, input, apiKey, apiBaseUrl, context);
@@ -56,6 +56,7 @@ export function parseFunShortSse(payload) {
56
56
  const segments = [];
57
57
  let latestText = '';
58
58
  let durationMs;
59
+ let usage;
59
60
  for (const line of payload.split(/\r?\n/)) {
60
61
  const trimmed = line.trim();
61
62
  if (!trimmed.startsWith('data:'))
@@ -75,9 +76,15 @@ export function parseFunShortSse(payload) {
75
76
  throw new AiRuntimeError('provider_task_failed', text(root?.message) ?? String(root?.code));
76
77
  const output = record(root?.output);
77
78
  latestText = text(output?.text) ?? latestText;
78
- const durationSeconds = numberValue(record(root?.usage)?.duration);
79
+ const usageRecord = record(root?.usage);
80
+ const durationSeconds = numberValue(usageRecord?.duration);
79
81
  if (durationSeconds !== undefined)
80
82
  durationMs = durationSeconds * 1_000;
83
+ // 只有 qwen-audio-3.1-asr-flash 返回 token 用量(按 token 计费);随句末结果给出,以最后一次为准。
84
+ const inputTokens = numberValue(usageRecord?.input_tokens);
85
+ const outputTokens = numberValue(usageRecord?.output_tokens);
86
+ if (inputTokens !== undefined || outputTokens !== undefined)
87
+ usage = { inputTokens, outputTokens };
81
88
  for (const sentence of recordsOrOne(output?.sentences ?? output?.sentence)) {
82
89
  if (sentence.sentence_end !== true)
83
90
  continue;
@@ -103,7 +110,7 @@ export function parseFunShortSse(payload) {
103
110
  const finalText = combined || latestText;
104
111
  if (!finalText)
105
112
  throw new AiRuntimeError('invalid_response', 'Bailian Fun-ASR response has no transcript');
106
- return { text: finalText, durationMs, segments, providerMetadata: { protocol: 'fun-short-sse' } };
113
+ return { text: finalText, durationMs, segments, ...(usage ? { usage } : {}), providerMetadata: { protocol: 'fun-short-sse' } };
107
114
  }
108
115
  export function parseQwenShortResponse(payload) {
109
116
  const root = record(payload);
@@ -8,6 +8,12 @@ export interface BailianAsrPreset {
8
8
  /** Data URI 路径的原始音频上限;更大文件应走远端 URL 或异步文件转写。 */
9
9
  maxInlineBytes?: number;
10
10
  asyncInputField?: 'file_urls' | 'file_url';
11
+ /** Qwen-Audio-ASR 接口里按模型开放的参数:即时热词 vocabulary、方言保留 keep_dialect、短音频说话人分离。 */
12
+ supports?: {
13
+ vocabulary?: true;
14
+ keepDialect?: true;
15
+ speakerDiarization?: true;
16
+ };
11
17
  }
12
18
  export declare const bailianFunAsrFlash20260615: BailianAsrPreset;
13
19
  export declare const bailianQwen3AsrFlash: BailianAsrPreset;
@@ -16,4 +22,6 @@ export declare const bailianFunAsr: BailianAsrPreset;
16
22
  export declare const bailianQwen3AsrFlashFiletrans: BailianAsrPreset;
17
23
  export declare const bailianQwenAudio31AsrFlash: BailianAsrPreset;
18
24
  export declare const bailianQwenAudio31AsrFlashFiletrans: BailianAsrPreset;
19
- export declare const bailianNonRealtimeAsrPresets: readonly [BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset];
25
+ export declare const bailianQwenAudio30AsrFlash: BailianAsrPreset;
26
+ export declare const bailianQwenAudio30AsrFlashFiletrans: BailianAsrPreset;
27
+ export declare const bailianNonRealtimeAsrPresets: readonly [BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset, BailianAsrPreset];
@@ -46,8 +46,11 @@ export const bailianQwen3AsrFlashFiletrans = definePreset({
46
46
  protocol: 'file-async',
47
47
  asyncInputField: 'file_url',
48
48
  });
49
- export const bailianQwenAudio31AsrFlash = definePreset({ modelId: 'qwen-audio-3.1-asr-flash', protocol: 'fun-short-sse', maxInlineBytes: 7_500_000 });
50
- export const bailianQwenAudio31AsrFlashFiletrans = definePreset({ modelId: 'qwen-audio-3.1-asr-flash-filetrans', protocol: 'file-async', asyncInputField: 'file_urls' });
49
+ export const bailianQwenAudio31AsrFlash = definePreset({ modelId: 'qwen-audio-3.1-asr-flash', protocol: 'fun-short-sse', maxInlineBytes: 7_500_000, supports: { vocabulary: true, keepDialect: true, speakerDiarization: true } });
50
+ export const bailianQwenAudio31AsrFlashFiletrans = definePreset({ modelId: 'qwen-audio-3.1-asr-flash-filetrans', protocol: 'file-async', asyncInputField: 'file_urls', supports: { vocabulary: true, keepDialect: true } });
51
+ // 3.0 与 3.1 是同一套 Qwen-Audio-ASR 接口;3.0 按音频秒数计费,3.1 按 token 计费。官方标注方言保留与短音频说话人分离仅 3.1 支持。
52
+ export const bailianQwenAudio30AsrFlash = definePreset({ modelId: 'qwen-audio-3.0-asr-flash', protocol: 'fun-short-sse', maxInlineBytes: 7_500_000, supports: { vocabulary: true } });
53
+ export const bailianQwenAudio30AsrFlashFiletrans = definePreset({ modelId: 'qwen-audio-3.0-asr-flash-filetrans', protocol: 'file-async', asyncInputField: 'file_urls', supports: { vocabulary: true } });
51
54
  export const bailianNonRealtimeAsrPresets = [
52
55
  bailianFunAsrFlash20260615,
53
56
  bailianQwen3AsrFlash,
@@ -56,4 +59,6 @@ export const bailianNonRealtimeAsrPresets = [
56
59
  bailianQwen3AsrFlashFiletrans,
57
60
  bailianQwenAudio31AsrFlash,
58
61
  bailianQwenAudio31AsrFlashFiletrans,
62
+ bailianQwenAudio30AsrFlash,
63
+ bailianQwenAudio30AsrFlashFiletrans,
59
64
  ];
@@ -11,4 +11,5 @@ export declare const bailianFunAsrRealtime20260228: BailianRealtimeAsrPreset;
11
11
  export declare const bailianQwen3AsrFlashRealtime: BailianRealtimeAsrPreset;
12
12
  export declare const bailianQwen3AsrFlashRealtime20260210: BailianRealtimeAsrPreset;
13
13
  export declare const bailianQwenAudio31AsrFlashStreaming: BailianRealtimeAsrPreset;
14
- export declare const bailianRealtimeAsrPresets: readonly [BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset];
14
+ export declare const bailianQwenAudio30AsrFlashStreaming: BailianRealtimeAsrPreset;
15
+ export declare const bailianRealtimeAsrPresets: readonly [BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset, BailianRealtimeAsrPreset];
@@ -25,10 +25,12 @@ export const bailianFunAsrRealtime20260228 = definePreset('fun-asr-realtime-2026
25
25
  export const bailianQwen3AsrFlashRealtime = definePreset('qwen3-asr-flash-realtime', 'qwen-realtime');
26
26
  export const bailianQwen3AsrFlashRealtime20260210 = definePreset('qwen3-asr-flash-realtime-2026-02-10', 'qwen-realtime');
27
27
  export const bailianQwenAudio31AsrFlashStreaming = definePreset('qwen-audio-3.1-asr-flash-streaming', 'fun-duplex');
28
+ export const bailianQwenAudio30AsrFlashStreaming = definePreset('qwen-audio-3.0-asr-flash-streaming', 'fun-duplex');
28
29
  export const bailianRealtimeAsrPresets = [
29
30
  bailianFunAsrRealtime,
30
31
  bailianFunAsrRealtime20260228,
31
32
  bailianQwen3AsrFlashRealtime,
32
33
  bailianQwen3AsrFlashRealtime20260210,
33
34
  bailianQwenAudio31AsrFlashStreaming,
35
+ bailianQwenAudio30AsrFlashStreaming,
34
36
  ];
@@ -1,4 +1,6 @@
1
1
  export interface BailianAsrOptions {
2
+ /** Resume polling an existing file task without reading/uploading/submitting audio. */
3
+ resumeTaskId?: string;
2
4
  format?: string;
3
5
  sampleRateHz?: number;
4
6
  enableItn?: boolean;
@@ -1,30 +1,7 @@
1
1
  import { readCapabilityMediaSource } from '../../media.js';
2
2
  import { assertMediaSize, rethrowMediaError } from '../../../runtime/MediaReader.js';
3
3
  import { AiRuntimeError } from '../../../runtime/AiRuntimeError.js';
4
- function asRecord(value) {
5
- return value !== null && typeof value === 'object' && !Array.isArray(value)
6
- ? value
7
- : undefined;
8
- }
9
- function requiredString(record, key) {
10
- const value = record?.[key];
11
- if (typeof value !== 'string' || !value) {
12
- throw new AiRuntimeError('invalid_response', `Bailian upload policy has no ${key}`);
13
- }
14
- return value;
15
- }
16
- async function json(response, operation) {
17
- const body = await response.text();
18
- if (!response.ok) {
19
- throw new AiRuntimeError('provider_http_error', `Bailian ${operation} failed with HTTP ${response.status}`);
20
- }
21
- try {
22
- return JSON.parse(body);
23
- }
24
- catch {
25
- throw new AiRuntimeError('invalid_response', `Bailian ${operation} returned invalid JSON`);
26
- }
27
- }
4
+ import { requestBailianUploadTarget } from '../../../upload/bailian-oss-upload.js';
28
5
  export async function resolveAsyncAudioUrl(source, modelId, apiKey, apiBaseUrl, context) {
29
6
  if (source.kind === 'remote-url') {
30
7
  const value = source.url.trim();
@@ -43,45 +20,21 @@ export async function resolveAsyncAudioUrl(source, modelId, apiKey, apiBaseUrl,
43
20
  return { url: parsed.toString(), usesOss: false };
44
21
  }
45
22
  if (source.kind === 'media-ref' && !context.runtime.transport.uploadFile) {
46
- throw new AiRuntimeError('native_upload_unsupported', '长音频上传需要宿主接入原生文件直传;请升级宿主适配器');
47
- }
48
- const policyResponse = await context.runtime.transport.fetch(`${apiBaseUrl}/uploads?action=getPolicy&model=${encodeURIComponent(modelId)}`, { headers: { Authorization: `Bearer ${apiKey}` }, signal: context.signal });
49
- const policyPayload = asRecord(await json(policyResponse, 'upload policy'));
50
- const policy = asRecord(policyPayload?.data);
51
- const uploadHost = requiredString(policy, 'upload_host');
52
- let host;
53
- try {
54
- host = new URL(uploadHost);
55
- }
56
- catch {
57
- throw new AiRuntimeError('invalid_response', 'Bailian upload_host is invalid');
58
- }
59
- if (host.protocol !== 'https:')
60
- throw new AiRuntimeError('invalid_response', 'Bailian upload_host must use HTTPS');
61
- const uploadDir = requiredString(policy, 'upload_dir').replace(/^\/+|\/+$/g, '');
62
- const rawLimit = policy?.max_file_size_mb;
63
- const maxFileSizeMb = typeof rawLimit === 'number' || typeof rawLimit === 'string' ? Number(rawLimit) : NaN;
64
- if (!Number.isFinite(maxFileSizeMb) || maxFileSizeMb <= 0) {
65
- throw new AiRuntimeError('invalid_response', 'Bailian upload policy has invalid max_file_size_mb');
23
+ throw new AiRuntimeError('native_upload_unsupported', '宿主未提供本地文件直传;请升级宿主适配器', {
24
+ retryable: false, billing: 'not_charged', execution: { notExecuted: true },
25
+ });
66
26
  }
67
- // Official temporary storage ceiling is 1 GB; use decimal bytes conservatively.
68
- const maxBytes = Math.min(1_000_000_000, Math.floor(maxFileSizeMb * 1_000_000));
69
- const objectKey = `${uploadDir}/${context.requestId.replace(/[^A-Za-z0-9._-]/g, '_')}-${Date.now()}-audio`;
70
- const fields = [];
71
- const form = { append: (key, value) => { fields.push([key, value]); } };
72
- form.append('OSSAccessKeyId', requiredString(policy, 'oss_access_key_id'));
73
- form.append('Signature', requiredString(policy, 'signature'));
74
- form.append('policy', requiredString(policy, 'policy'));
75
- form.append('x-oss-object-acl', requiredString(policy, 'x_oss_object_acl'));
76
- form.append('x-oss-forbid-overwrite', requiredString(policy, 'x_oss_forbid_overwrite'));
77
- form.append('key', objectKey);
78
- form.append('success_action_status', '200');
27
+ const target = await requestBailianUploadTarget({
28
+ transport: context.runtime.transport, apiKey, modelId, apiBaseUrl,
29
+ objectName: `${context.requestId}-${Date.now()}-audio`, signal: context.signal,
30
+ });
31
+ const { fields, maxBytes, objectKey } = target;
79
32
  context.runtime.logger.info('百炼音频上传开始', {
80
33
  event: 'capability.bailian_asr.upload.start', requestId: context.requestId, providerId: 'bailian', modelId,
81
34
  });
82
35
  let uploadResponse;
83
36
  if (source.kind === 'media-ref') {
84
- uploadResponse = await context.runtime.transport.uploadFile(host.toString(), {
37
+ uploadResponse = await context.runtime.transport.uploadFile(target.uploadUrl, {
85
38
  ref: source.ref, fields, fileField: 'file', maxBytes, signal: context.signal,
86
39
  }).catch(rethrowMediaError);
87
40
  }
@@ -92,7 +45,7 @@ export async function resolveAsyncAudioUrl(source, modelId, apiKey, apiBaseUrl,
92
45
  for (const [key, value] of fields)
93
46
  multipart.append(key, value);
94
47
  multipart.append('file', new Blob([new Uint8Array(media.bytes)], { type: media.mimeType }), media.filename);
95
- uploadResponse = await context.runtime.transport.fetch(host.toString(), {
48
+ uploadResponse = await context.runtime.transport.fetch(target.uploadUrl, {
96
49
  method: 'POST', body: multipart, signal: context.signal,
97
50
  });
98
51
  }
@@ -28,6 +28,11 @@ export interface SpeechRecognitionOutput {
28
28
  language?: string;
29
29
  durationMs?: number;
30
30
  segments?: readonly SpeechRecognitionSegment[];
31
+ /** 按 token 计费的模型返回的用量;按音频时长计费的模型不返回。 */
32
+ usage?: {
33
+ inputTokens?: number;
34
+ outputTokens?: number;
35
+ };
31
36
  providerMetadata?: unknown;
32
37
  }
33
38
  export type SpeechRecognitionEvent = {
@@ -1,9 +1,8 @@
1
1
  import { defineSpeechRecognitionDescriptor } from '../index.js';
2
2
  export interface SiliconFlowAsrPreset {
3
3
  id: string;
4
- modelId: 'FunAudioLLM/SenseVoiceSmall' | 'TeleAI/TeleSpeechASR';
4
+ modelId: 'FunAudioLLM/SenseVoiceSmall';
5
5
  descriptor: ReturnType<typeof defineSpeechRecognitionDescriptor>;
6
6
  }
7
7
  export declare const siliconFlowSenseVoiceSmall: SiliconFlowAsrPreset;
8
- export declare const siliconFlowTeleSpeechAsr: SiliconFlowAsrPreset;
9
- export declare const siliconFlowAsrPresets: readonly [SiliconFlowAsrPreset, SiliconFlowAsrPreset];
8
+ export declare const siliconFlowAsrPresets: readonly [SiliconFlowAsrPreset];
@@ -16,8 +16,6 @@ function definePreset(modelId) {
16
16
  };
17
17
  }
18
18
  export const siliconFlowSenseVoiceSmall = definePreset('FunAudioLLM/SenseVoiceSmall');
19
- export const siliconFlowTeleSpeechAsr = definePreset('TeleAI/TeleSpeechASR');
20
19
  export const siliconFlowAsrPresets = [
21
20
  siliconFlowSenseVoiceSmall,
22
- siliconFlowTeleSpeechAsr,
23
21
  ];
@@ -1,9 +1,12 @@
1
+ import { type TokenListPricing } from '../../../pricing/tokenPricing.js';
1
2
  export type BailianQwenMtModelId = 'qwen-mt-flash' | 'qwen-mt-plus' | 'qwen-mt-lite';
2
3
  export type BailianQwenMtStreamingContent = 'incremental' | 'cumulative';
3
4
  export interface BailianQwenMtPreset {
4
5
  moduleId: string;
5
6
  modelId: BailianQwenMtModelId;
6
7
  streamingContent: BailianQwenMtStreamingContent;
8
+ /** 华北2(北京)原价,不含限时免费额度。 */
9
+ pricing: TokenListPricing;
7
10
  }
8
11
  export declare const BAILIAN_QWEN_MT_PRESETS: {
9
12
  readonly flash: BailianQwenMtPreset;
@@ -1,13 +1,15 @@
1
- function defineQwenMtPreset(modelId, streamingContent) {
1
+ import { tokenListPrice } from '../../../pricing/tokenPricing.js';
2
+ function defineQwenMtPreset(modelId, streamingContent, pricing) {
2
3
  return {
3
4
  moduleId: `bailian.translation.${modelId}`,
4
5
  modelId,
5
6
  streamingContent,
7
+ pricing,
6
8
  };
7
9
  }
8
10
  export const BAILIAN_QWEN_MT_PRESETS = {
9
- flash: defineQwenMtPreset('qwen-mt-flash', 'incremental'),
10
- plus: defineQwenMtPreset('qwen-mt-plus', 'cumulative'),
11
- lite: defineQwenMtPreset('qwen-mt-lite', 'incremental'),
11
+ flash: defineQwenMtPreset('qwen-mt-flash', 'incremental', tokenListPrice('CNY', 0.7, 1.95)),
12
+ plus: defineQwenMtPreset('qwen-mt-plus', 'cumulative', tokenListPrice('CNY', 1.8, 5.4)),
13
+ lite: defineQwenMtPreset('qwen-mt-lite', 'incremental', tokenListPrice('CNY', 0.6, 1.6)),
12
14
  };
13
15
  export const DEFAULT_BAILIAN_QWEN_MT_ENDPOINT = 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions';
@@ -0,0 +1,3 @@
1
+ /** APIMart FLUX 3 Image 与 FLUX 3 Image Klein 统一模型(运行时契约) */
2
+ export declare const apimartFlux3ImageModel: import("../../index.js").ModelRuntimeDefinition;
3
+ export default apimartFlux3ImageModel;
@@ -0,0 +1,62 @@
1
+ /** APIMart FLUX 3 Image 与 FLUX 3 Image Klein 统一模型(运行时契约) */
2
+ import { defineModel } from '../defineModel.js';
3
+ import { hasUploadedImage, resolveUploadedImageSources } from '../shared/mediaPresence.js';
4
+ const RATIOS = ['21:9', '2:1', '16:9', '3:2', '7:5', '4:3', '5:4', '1:1', '4:5', '3:4', '5:7', '2:3', '9:16', '1:2', '9:21'];
5
+ const RESOLUTIONS = ['768sq', '1k', '1.5k', '2k', '4k'];
6
+ const PRICES = {
7
+ standard: { '768sq': 0.0328, '1k': 0.0384, '1.5k': 0.056, '2k': 0.08, '4k': 0.4856 },
8
+ klein: { '768sq': 0.0064, '1k': 0.0072, '1.5k': 0.0088, '2k': 0.0112, '4k': 0.0288 },
9
+ };
10
+ function resolution(params) {
11
+ return RESOLUTIONS.includes(String(params.apimartFlux3Resolution)) ? String(params.apimartFlux3Resolution) : '1k';
12
+ }
13
+ function ratio(params) {
14
+ const raw = String(params.apimartFlux3AspectRatio || 'smart');
15
+ if (RATIOS.includes(raw))
16
+ return raw;
17
+ const hint = hasUploadedImage(params) && typeof params.__firstImageRatio === 'number'
18
+ && Number.isFinite(params.__firstImageRatio) && params.__firstImageRatio > 0 ? params.__firstImageRatio : 1;
19
+ const numeric = (value) => { const [w, h] = value.split(':').map(Number); return w / h; };
20
+ return RATIOS.reduce((best, next) => Math.abs(numeric(next) - hint) < Math.abs(numeric(best) - hint) ? next : best, '1:1');
21
+ }
22
+ export const apimartFlux3ImageModel = defineModel({
23
+ meta: {
24
+ id: 'apimart-flux-3-image', canonicalModelId: 'flux-3', seriesId: 'flux', seriesRank: 3,
25
+ provider: 'apimart', type: 'image',
26
+ tags: ['text-to-image', 'image-to-image'],
27
+ polling: { interval: 3000, maxAttempts: 200, expectedAttempts: 30 },
28
+ },
29
+ inputLimits: { images: { max: 10 }, videos: { max: 0 } },
30
+ params: [
31
+ { id: 'apimartFlux3Variant', type: 'dropdown', order: 1, default: 'standard', options: [{ value: 'standard' }, { value: 'klein' }] },
32
+ { id: 'apimartFlux3AspectRatio', type: 'dropdown', order: 2, default: 'smart', options: [{ value: 'smart' }, ...RATIOS.map(value => ({ value }))] },
33
+ { id: 'apimartFlux3Resolution', type: 'dropdown', order: 3, default: '1k', options: RESOLUTIONS.map(value => ({ value })) },
34
+ ],
35
+ endpoints: '/v1/images/generations',
36
+ request: {
37
+ builder: (params) => {
38
+ const prompt = typeof params.prompt === 'string' ? params.prompt.trim() : '';
39
+ if (!prompt)
40
+ throw new Error('请输入 FLUX 3 Image 提示词');
41
+ const images = resolveUploadedImageSources(params);
42
+ if (images.length > 10)
43
+ throw new Error('FLUX 3 Image 最多支持 10 张参考图');
44
+ const body = {
45
+ model: params.apimartFlux3Variant === 'klein' ? 'flux-3-image-klein' : 'flux-3-image',
46
+ prompt,
47
+ aspect_ratio: ratio(params),
48
+ resolution: resolution(params),
49
+ n: 1,
50
+ };
51
+ if (images.length > 0)
52
+ body.image_urls = images;
53
+ return body;
54
+ },
55
+ },
56
+ pricing: {
57
+ currency: '$',
58
+ calculator: (params) => PRICES[params.apimartFlux3Variant === 'klein' ? 'klein' : 'standard'][resolution(params)],
59
+ description: 'FLUX 3 Image 每张 768sq $0.0328、1k $0.0384、1.5k $0.056、2k $0.08、4k $0.4856;Klein 每张 768sq $0.0064、1k $0.0072、1.5k $0.0088、2k $0.0112、4k $0.0288;参考图不另收费',
60
+ },
61
+ });
62
+ export default apimartFlux3ImageModel;
@@ -0,0 +1,3 @@
1
+ /** APIMart FLUX 3 Video 统一模型(运行时契约) */
2
+ export declare const apimartFlux3VideoModel: import("../../index.js").ModelRuntimeDefinition;
3
+ export default apimartFlux3VideoModel;
@@ -0,0 +1,120 @@
1
+ /** APIMart FLUX 3 Video 统一模型(运行时契约) */
2
+ import { readContinuation } from '../continuation.js';
3
+ import { defineModel } from '../defineModel.js';
4
+ import { hasUploadedImage, resolveUploadedImageSources, resolveUploadedVideoSources } from '../shared/mediaPresence.js';
5
+ // 字段、限制与价格来源:docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_APIMart.md(2026-11-07 读取)。
6
+ const RATIOS = ['21:9', '2:1', '16:9', '4:3', '1:1', '3:4', '9:16'];
7
+ const RATES = {
8
+ generate: { hd: 0.136, fhd: 0.232 },
9
+ extend: { hd: 0.328, fhd: 0.424 },
10
+ };
11
+ // 草稿只出 hd,单价不分档。
12
+ const DRAFT_RATES = { generate: 0.048, extend: 0.096 };
13
+ const FINALIZE_DRAFT = 'finalize-draft';
14
+ function isExtend(params) {
15
+ return params.apimartFlux3VideoMode === 'extend';
16
+ }
17
+ function isDraft(params) {
18
+ return params.apimartFlux3VideoDraft === true;
19
+ }
20
+ function resolution(params) {
21
+ return params.apimartFlux3VideoResolution === 'fhd' ? 'fhd' : 'hd';
22
+ }
23
+ function duration(params) {
24
+ const value = Number(params.apimartFlux3VideoDuration ?? 5);
25
+ return Number.isFinite(value) ? Math.min(20, Math.max(5, Math.round(value))) : 5;
26
+ }
27
+ function draftTaskId(params) {
28
+ const taskId = readContinuation(params, FINALIZE_DRAFT)?.reference.taskId;
29
+ return typeof taskId === 'string' && taskId.trim() ? taskId.trim() : null;
30
+ }
31
+ export const apimartFlux3VideoModel = defineModel({
32
+ meta: {
33
+ id: 'apimart-flux-3-video', canonicalModelId: 'flux-3-video', seriesId: 'flux', seriesRank: 3,
34
+ provider: 'apimart', type: 'video',
35
+ tags: ['text-to-video', 'image-to-video', 'start-end-frame', 'video-extension'],
36
+ polling: { interval: 5000, maxAttempts: 180, expectedAttempts: 12 },
37
+ },
38
+ // 转正片只认草稿任务,不收素材;续写模式的“需要 1 段视频”在转正片时不适用。
39
+ inputLimits: (params) => readContinuation(params, FINALIZE_DRAFT)
40
+ ? { images: { max: 0 }, videos: { max: 0 } }
41
+ : params.apimartFlux3VideoMode === 'extend'
42
+ ? { images: { max: 0 }, videos: { exact: 1 } }
43
+ : { images: { max: 10 }, videos: { max: 0 } },
44
+ params: [
45
+ { id: 'apimartFlux3VideoMode', type: 'dropdown', order: 1, default: 'text-image-to-video', options: [{ value: 'text-image-to-video' }, { value: 'extend' }] },
46
+ {
47
+ id: 'apimartFlux3VideoAspectRatio', type: 'dropdown', order: 2, default: 'smart',
48
+ visible: { condition: (params) => !isExtend(params) && !hasUploadedImage(params) },
49
+ options: [{ value: 'smart' }, ...RATIOS.map(value => ({ value }))],
50
+ },
51
+ // 草稿固定 hd;开草稿时这里是转正片时的分辨率,转正片只允许改它。
52
+ { id: 'apimartFlux3VideoResolution', type: 'dropdown', order: 3, default: 'hd', options: [{ value: 'hd' }, { value: 'fhd' }] },
53
+ { id: 'apimartFlux3VideoDuration', type: 'number', order: 4, default: 5, min: 5, max: 20, step: 1 },
54
+ { id: 'apimartFlux3VideoAudio', type: 'switch', order: 5, default: true },
55
+ { id: 'apimartFlux3VideoDraft', type: 'switch', order: 6, default: false },
56
+ ],
57
+ continuations: [{
58
+ id: FINALIZE_DRAFT,
59
+ available: isDraft,
60
+ capture: ({ taskId }) => taskId ? { taskId } : null,
61
+ params: source => ({ ...source, apimartFlux3VideoDraft: false }),
62
+ submit: 'direct',
63
+ }],
64
+ endpoints: '/v1/videos/generations',
65
+ request: {
66
+ builder: (params) => {
67
+ // 转正片沿用草稿保存的模式、提示词、时长与素材,官方只允许再改分辨率,传 prompt 会被拒绝。
68
+ const fromDraft = draftTaskId(params);
69
+ if (fromDraft)
70
+ return { model: 'flux-3-video', draft_from_task_id: fromDraft, resolution: resolution(params) };
71
+ const prompt = typeof params.prompt === 'string' ? params.prompt.trim() : '';
72
+ if (!prompt)
73
+ throw new Error('请输入 FLUX 3 Video 提示词');
74
+ const images = resolveUploadedImageSources(params);
75
+ const videos = resolveUploadedVideoSources(params);
76
+ const body = {
77
+ model: 'flux-3-video',
78
+ prompt,
79
+ duration: duration(params),
80
+ resolution: isDraft(params) ? 'hd' : resolution(params),
81
+ audio: params.apimartFlux3VideoAudio !== false,
82
+ };
83
+ if (isDraft(params))
84
+ body.draft = true;
85
+ // 显式 mode 优先级最高,避免平台在“同时有图和视频”时按续写处理而静默丢图。
86
+ if (isExtend(params)) {
87
+ if (videos.length !== 1)
88
+ throw new Error('FLUX 3 Video 视频续写需要 1 段视频');
89
+ body.mode = 'v2v';
90
+ body.video_url = videos[0];
91
+ }
92
+ else if (images.length > 0) {
93
+ if (images.length > 10)
94
+ throw new Error('FLUX 3 Video 最多支持 10 张关键帧');
95
+ body.mode = 'i2v';
96
+ // 顺序即语义:首张起始帧、末张结束帧,中间均匀分布。
97
+ body.image_urls = images;
98
+ }
99
+ else {
100
+ body.mode = 't2v';
101
+ }
102
+ const raw = String(params.apimartFlux3VideoAspectRatio || 'smart');
103
+ // 有图或续写时比例选项已隐藏,残留的取值也不能发,交给平台按素材选比例;纯文生视频回退 16:9。
104
+ body.aspect_ratio = body.mode !== 't2v' ? 'auto' : RATIOS.includes(raw) ? raw : '16:9';
105
+ return body;
106
+ },
107
+ },
108
+ pricing: {
109
+ currency: '$',
110
+ // 转正片按正片全价计费、草稿费用不抵扣;时长与模式沿用草稿的参数。
111
+ calculator: (params) => {
112
+ const kind = isExtend(params) ? 'extend' : 'generate';
113
+ if (isDraft(params) && !draftTaskId(params))
114
+ return DRAFT_RATES[kind] * duration(params);
115
+ return RATES[kind][resolution(params)] * duration(params);
116
+ },
117
+ description: '文/图生视频每秒 HD $0.136、FHD $0.232;视频续写每秒 HD $0.328、FHD $0.424;草稿每秒 $0.048(续写草稿 $0.096),转正片按正片全价另计;关闭音频不降价,续写实际时长偏短时按实际退还差额',
118
+ },
119
+ });
120
+ export default apimartFlux3VideoModel;
@@ -0,0 +1,3 @@
1
+ /** APIMart Gemini Omni 1.2 Flash 官方与 Ext 渠道统一模型(运行时契约) */
2
+ export declare const apimartGeminiOmni12FlashModel: import("../../index.js").ModelRuntimeDefinition;
3
+ export default apimartGeminiOmni12FlashModel;