@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.
- package/CHANGELOG.md +275 -211
- package/README.md +580 -577
- package/dist/capabilities/speech-recognition/bailian/module.js +40 -26
- package/dist/capabilities/speech-recognition/bailian/parse.js +9 -2
- package/dist/capabilities/speech-recognition/bailian/presets.d.ts +9 -1
- package/dist/capabilities/speech-recognition/bailian/presets.js +7 -2
- package/dist/capabilities/speech-recognition/bailian/realtime/presets.d.ts +2 -1
- package/dist/capabilities/speech-recognition/bailian/realtime/presets.js +2 -0
- package/dist/capabilities/speech-recognition/bailian/types.d.ts +2 -0
- package/dist/capabilities/speech-recognition/bailian/upload.js +11 -58
- package/dist/capabilities/speech-recognition/index.d.ts +5 -0
- package/dist/capabilities/speech-recognition/siliconflow/presets.d.ts +2 -3
- package/dist/capabilities/speech-recognition/siliconflow/presets.js +0 -2
- package/dist/capabilities/translation/bailian/types.d.ts +3 -0
- package/dist/capabilities/translation/bailian/types.js +6 -4
- package/dist/catalog/apimart/flux-3-image.model.d.ts +3 -0
- package/dist/catalog/apimart/flux-3-image.model.js +62 -0
- package/dist/catalog/apimart/flux-3-video.model.d.ts +3 -0
- package/dist/catalog/apimart/flux-3-video.model.js +120 -0
- package/dist/catalog/apimart/gemini-omni-1.2-flash.model.d.ts +3 -0
- package/dist/catalog/apimart/gemini-omni-1.2-flash.model.js +175 -0
- package/dist/catalog/apimart/gemini-omni-flash.model.js +30 -37
- package/dist/catalog/apimart/gpt-image-2.5.model.js +1 -1
- package/dist/catalog/apimart/gpt-image-2.6.model.d.ts +3 -0
- package/dist/catalog/apimart/gpt-image-2.6.model.js +103 -0
- package/dist/catalog/apimart/gpt-image-2.model.js +1 -1
- package/dist/catalog/apimart/grok-imagine-2.0.model.js +1 -1
- package/dist/catalog/apimart/grok-imagine-video-1.5.model.d.ts +3 -0
- package/dist/catalog/apimart/grok-imagine-video-1.5.model.js +85 -0
- package/dist/catalog/apimart/happyhorse-1.1.model.d.ts +3 -0
- package/dist/catalog/apimart/happyhorse-1.1.model.js +78 -0
- package/dist/catalog/apimart/kling-3.0-omni.model.js +12 -2
- package/dist/catalog/apimart/kling-3.0-turbo.model.js +5 -2
- package/dist/catalog/apimart/kling-3.0.model.js +1 -1
- package/dist/catalog/apimart/kling-4.0.model.d.ts +3 -0
- package/dist/catalog/apimart/kling-4.0.model.js +149 -0
- package/dist/catalog/apimart/midjourney-video.model.js +31 -32
- package/dist/catalog/apimart/midjourney.model.js +11 -1
- package/dist/catalog/apimart/minimax-h3-max.model.d.ts +3 -0
- package/dist/catalog/apimart/minimax-h3-max.model.js +101 -0
- package/dist/catalog/apimart/minimax-h3.model.js +8 -3
- package/dist/catalog/apimart/nano-banana-2-lite.model.js +1 -1
- package/dist/catalog/apimart/nano-banana-2.1.model.d.ts +2 -0
- package/dist/catalog/apimart/nano-banana-2.1.model.js +49 -0
- package/dist/catalog/apimart/nano-banana-2.model.js +1 -1
- package/dist/catalog/apimart/nano-banana-pro.model.js +1 -1
- package/dist/catalog/apimart/qwen-image-3.0.model.js +1 -1
- package/dist/catalog/apimart/seedance-2.0-fast.model.js +1 -1
- package/dist/catalog/apimart/seedance-2.0-mini.model.js +4 -4
- package/dist/catalog/apimart/seedance-2.0.model.js +1 -1
- package/dist/catalog/apimart/seedance-2.5.model.js +27 -5
- package/dist/catalog/apimart/seedream-5.0-flash.model.d.ts +3 -0
- package/dist/catalog/apimart/seedream-5.0-flash.model.js +52 -0
- package/dist/catalog/apimart/seedream-5.0-lite.model.js +4 -4
- package/dist/catalog/apimart/seedream-5.0-pro.model.js +1 -1
- package/dist/catalog/apimart/veo-3.1.model.d.ts +3 -0
- package/dist/catalog/apimart/veo-3.1.model.js +132 -0
- package/dist/catalog/apimart/wan-2.7-image.model.d.ts +3 -0
- package/dist/catalog/apimart/wan-2.7-image.model.js +80 -0
- package/dist/catalog/apimart/wan-3.0.model.d.ts +3 -0
- package/dist/catalog/apimart/wan-3.0.model.js +101 -0
- package/dist/catalog/apimart/z-image-turbo.model.js +1 -1
- package/dist/catalog/audio/tts-common.d.ts +2 -1
- package/dist/catalog/audio/tts-common.js +5 -1
- package/dist/catalog/bailian/cosyvoice-v3.5.model.js +1 -1
- package/dist/catalog/bailian/minimax-h3.model.d.ts +3 -0
- package/dist/catalog/bailian/minimax-h3.model.js +95 -0
- package/dist/catalog/bailian/minimax-speech-2.8.model.js +1 -1
- package/dist/catalog/bailian/qwen-audio-3.1-tts-flash.model.js +14 -3
- package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.d.ts +2 -0
- package/dist/catalog/bailian/qwen-audio-3.1-tts-plus.model.js +44 -0
- package/dist/catalog/bailian/qwen-image-3.0.model.js +1 -1
- package/dist/catalog/bailian/wan-3.0.model.d.ts +3 -0
- package/dist/catalog/bailian/wan-3.0.model.js +104 -0
- package/dist/catalog/bailian/z-image-turbo.model.js +1 -1
- package/dist/catalog/consumer-contract.d.ts +16 -1
- package/dist/catalog/consumer-contract.js +31 -0
- package/dist/catalog/continuation.d.ts +20 -0
- package/dist/catalog/continuation.js +41 -0
- package/dist/catalog/fal/bria-creative-upscale.model.js +1 -1
- package/dist/catalog/fal/eleven-v3-tts.model.js +1 -1
- package/dist/catalog/fal/eleven-v4-tts.model.d.ts +2 -0
- package/dist/catalog/fal/eleven-v4-tts.model.js +38 -0
- package/dist/catalog/fal/flux-3-video.model.d.ts +2 -0
- package/dist/catalog/fal/flux-3-video.model.js +187 -0
- package/dist/catalog/fal/flux-3.model.d.ts +2 -0
- package/dist/catalog/fal/flux-3.model.js +69 -0
- package/dist/catalog/fal/gemini-omni-1.2-flash.model.d.ts +2 -0
- package/dist/catalog/fal/gemini-omni-1.2-flash.model.js +129 -0
- package/dist/catalog/fal/gemini-omni-flash.model.js +1 -1
- package/dist/catalog/fal/gpt-image-2.5.model.js +1 -1
- package/dist/catalog/fal/gpt-image-2.6.model.d.ts +2 -0
- package/dist/catalog/fal/gpt-image-2.6.model.js +97 -0
- package/dist/catalog/fal/gpt-image-2.model.js +1 -1
- package/dist/catalog/fal/grok-imagine-2.0.model.js +1 -1
- package/dist/catalog/fal/grok-imagine-video-1.5.model.d.ts +2 -0
- package/dist/catalog/fal/grok-imagine-video-1.5.model.js +121 -0
- package/dist/catalog/fal/hailuo-02.model.js +8 -4
- package/dist/catalog/fal/hailuo-2.3.model.js +1 -1
- package/dist/catalog/fal/ic-light-v2.model.js +1 -1
- package/dist/catalog/fal/ideogram-upscale.model.js +1 -1
- package/dist/catalog/fal/kling-3.0-omni.model.js +1 -1
- package/dist/catalog/fal/kling-3.0-turbo.model.js +5 -2
- package/dist/catalog/fal/kling-3.0.model.js +4 -1
- package/dist/catalog/fal/kling-4.0-flash.model.d.ts +2 -0
- package/dist/catalog/fal/kling-4.0-flash.model.js +132 -0
- package/dist/catalog/fal/kling-4.0.model.d.ts +2 -0
- package/dist/catalog/fal/kling-4.0.model.js +169 -0
- package/dist/catalog/fal/kling-image-o1.model.js +1 -1
- package/dist/catalog/fal/kling-video-o1.model.js +18 -7
- package/dist/catalog/fal/kling-video-v2.6-pro.model.js +3 -2
- package/dist/catalog/fal/ltx-2.3.model.d.ts +2 -0
- package/dist/catalog/fal/ltx-2.3.model.js +223 -0
- package/dist/catalog/fal/ltx-2.model.js +2 -1
- package/dist/catalog/fal/minimax-h3-max.model.d.ts +2 -0
- package/dist/catalog/fal/minimax-h3-max.model.js +132 -0
- package/dist/catalog/fal/minimax-h3.model.js +3 -4
- package/dist/catalog/fal/minimax-speech-2.8.model.js +1 -1
- package/dist/catalog/fal/nano-banana-2.1.model.d.ts +2 -0
- package/dist/catalog/fal/nano-banana-2.1.model.js +68 -0
- package/dist/catalog/fal/nano-banana-2.model.js +1 -1
- package/dist/catalog/fal/nano-banana-pro.model.js +1 -1
- package/dist/catalog/fal/nano-banana.model.js +1 -1
- package/dist/catalog/fal/pixverse-v5.5.model.js +9 -4
- package/dist/catalog/fal/qwen-image-3.0.model.js +2 -2
- package/dist/catalog/fal/qwen3-tts-1.7b.model.js +4 -3
- package/dist/catalog/fal/seedance-2.0-fast.model.js +1 -1
- package/dist/catalog/fal/seedance-2.0-mini.model.js +1 -1
- package/dist/catalog/fal/seedance-2.0.model.js +1 -1
- package/dist/catalog/fal/seedance-2.5.model.js +5 -2
- package/dist/catalog/fal/seedance.model.js +3 -2
- package/dist/catalog/fal/seedream-5.0-lite.model.js +1 -1
- package/dist/catalog/fal/seedream-5.0-pro.model.js +1 -1
- package/dist/catalog/fal/seedream-v4.5.model.js +1 -1
- package/dist/catalog/fal/seedream-v4.model.js +1 -1
- package/dist/catalog/fal/seedvr2-image-upscale.model.js +1 -1
- package/dist/catalog/fal/topaz-image-upscale.model.js +1 -1
- package/dist/catalog/fal/topaz-transparent-upscale.model.js +1 -1
- package/dist/catalog/fal/utils/klingV4.d.ts +17 -0
- package/dist/catalog/fal/utils/klingV4.js +33 -0
- package/dist/catalog/fal/veo-3.1.model.js +5 -2
- package/dist/catalog/fal/vidu-q2.model.js +20 -8
- package/dist/catalog/fal/wan-2.5-preview.model.js +4 -1
- package/dist/catalog/fal/wan-3.0.model.d.ts +2 -0
- package/dist/catalog/fal/wan-3.0.model.js +135 -0
- package/dist/catalog/fal/z-image-turbo.model.js +10 -9
- package/dist/catalog/grsai/gpt-image-2.5.model.js +13 -31
- package/dist/catalog/grsai/gpt-image-2.6.model.d.ts +2 -0
- package/dist/catalog/grsai/gpt-image-2.6.model.js +37 -0
- package/dist/catalog/grsai/gpt-image-2.model.js +5 -2
- package/dist/catalog/grsai/nano-banana-2-lite.model.js +1 -1
- package/dist/catalog/grsai/nano-banana-2.1.model.d.ts +2 -0
- package/dist/catalog/grsai/nano-banana-2.1.model.js +29 -0
- package/dist/catalog/grsai/nano-banana-2.model.js +1 -1
- package/dist/catalog/grsai/nano-banana-pro.model.js +1 -1
- package/dist/catalog/grsai/wan-3.0.model.d.ts +2 -0
- package/dist/catalog/grsai/wan-3.0.model.js +78 -0
- package/dist/catalog/index.d.ts +1 -0
- package/dist/catalog/index.js +205 -124
- package/dist/catalog/kie/eleven-v3-dialogue.model.js +1 -1
- package/dist/catalog/kie/flux-3-klein.model.d.ts +2 -0
- package/dist/catalog/kie/flux-3-klein.model.js +58 -0
- package/dist/catalog/kie/gemini-3.1-flash-tts.model.js +7 -4
- package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.d.ts +2 -0
- package/dist/catalog/kie/gemini-3.8-flash-lite-tts.model.js +11 -0
- package/dist/catalog/kie/gemini-3.8-flash-tts.model.d.ts +2 -0
- package/dist/catalog/kie/gemini-3.8-flash-tts.model.js +11 -0
- package/dist/catalog/kie/gemini-omni-video.model.js +8 -30
- package/dist/catalog/kie/gemini38Tts.d.ts +3 -0
- package/dist/catalog/kie/gemini38Tts.js +40 -0
- package/dist/catalog/kie/gpt-image-2.5.model.js +1 -1
- package/dist/catalog/kie/gpt-image-2.6.model.d.ts +2 -0
- package/dist/catalog/kie/gpt-image-2.6.model.js +87 -0
- package/dist/catalog/kie/gpt-image-2.model.js +8 -12
- package/dist/catalog/kie/grok-imagine-2.0.model.js +1 -1
- package/dist/catalog/kie/grok-imagine-video-1.5.model.d.ts +2 -0
- package/dist/catalog/kie/grok-imagine-video-1.5.model.js +52 -0
- package/dist/catalog/kie/grok-imagine-video.model.js +7 -3
- package/dist/catalog/kie/grok-imagine.model.js +4 -2
- package/dist/catalog/kie/hailuo-02.model.js +6 -4
- package/dist/catalog/kie/hailuo-2-3.model.js +1 -1
- package/dist/catalog/kie/happyhorse-1.1.model.js +5 -2
- package/dist/catalog/kie/kling-3.0-omni.model.js +51 -23
- package/dist/catalog/kie/kling-3.0-turbo.model.js +1 -1
- package/dist/catalog/kie/kling-3.0.model.js +1 -8
- package/dist/catalog/kie/kling-4.0-flash.model.d.ts +2 -0
- package/dist/catalog/kie/kling-4.0-flash.model.js +16 -0
- package/dist/catalog/kie/kling-4.0.model.d.ts +2 -0
- package/dist/catalog/kie/kling-4.0.model.js +17 -0
- package/dist/catalog/kie/kling-v2-6.model.js +1 -1
- package/dist/catalog/kie/kling40.d.ts +21 -0
- package/dist/catalog/kie/kling40.js +129 -0
- package/dist/catalog/kie/minimax-h3.model.js +16 -21
- package/dist/catalog/kie/nano-banana-2-lite.model.js +1 -1
- package/dist/catalog/kie/nano-banana-2.1.model.d.ts +2 -0
- package/dist/catalog/kie/nano-banana-2.1.model.js +34 -0
- package/dist/catalog/kie/nano-banana-2.model.js +2 -2
- package/dist/catalog/kie/nano-banana-pro.model.js +1 -1
- package/dist/catalog/kie/qwen-image-3.0.model.js +2 -10
- package/dist/catalog/kie/seedance-1.5-pro.model.js +2 -1
- package/dist/catalog/kie/seedance-2.0-fast.model.js +5 -1
- package/dist/catalog/kie/seedance-2.0-mini.model.js +5 -1
- package/dist/catalog/kie/seedance-2.0.model.js +5 -1
- package/dist/catalog/kie/seedance-2.5.model.js +10 -20
- package/dist/catalog/kie/seedance-v1.model.js +8 -4
- package/dist/catalog/kie/seedream-4.0.model.js +1 -1
- package/dist/catalog/kie/seedream-4.5.model.js +1 -1
- package/dist/catalog/kie/seedream-5.0-lite.model.js +1 -1
- package/dist/catalog/kie/seedream-5.0-pro.model.js +1 -1
- package/dist/catalog/kie/wan-3.0-prime.model.d.ts +2 -0
- package/dist/catalog/kie/wan-3.0-prime.model.js +15 -0
- package/dist/catalog/kie/wan-3.0.model.d.ts +2 -0
- package/dist/catalog/kie/wan-3.0.model.js +15 -0
- package/dist/catalog/kie/wan30.d.ts +10 -0
- package/dist/catalog/kie/wan30.js +78 -0
- package/dist/catalog/kie/z-image.model.js +1 -1
- package/dist/catalog/modelscope/flux-1-krea-dev.model.js +4 -2
- package/dist/catalog/modelscope/majicmix-realistic.model.js +3 -2
- package/dist/catalog/modelscope/modelscope-custom.model.js +3 -2
- package/dist/catalog/modelscope/qwen-image-2512.model.d.ts +5 -0
- package/dist/catalog/modelscope/{qwen-image.model.js → qwen-image-2512.model.js} +11 -8
- package/dist/catalog/modelscope/qwen-image-edit-2511.model.d.ts +5 -0
- package/dist/catalog/modelscope/{qwen-image-edit-2509.model.js → qwen-image-edit-2511.model.js} +9 -7
- package/dist/catalog/modelscope/sdxl-14-ckpt.model.js +3 -2
- package/dist/catalog/modelscope/utils.js +2 -2
- package/dist/catalog/modelscope/z-image-turbo.model.js +3 -2
- package/dist/catalog/ppio/kling-3.0.model.js +4 -1
- package/dist/catalog/ppio/minimax-speech.model.js +2 -1
- package/dist/catalog/shared/mediaPresence.d.ts +8 -1
- package/dist/catalog/shared/mediaPresence.js +21 -1
- package/dist/catalog/shared/nanoBanana21.d.ts +11 -0
- package/dist/catalog/shared/nanoBanana21.js +30 -0
- package/dist/catalog/shared/shotList.d.ts +31 -0
- package/dist/catalog/shared/shotList.js +48 -0
- package/dist/catalog/shared/subjectElements.d.ts +36 -0
- package/dist/catalog/shared/subjectElements.js +93 -0
- package/dist/catalog/siliconflow/moss-ttsd-0.5.model.js +1 -1
- package/dist/catalog/validate.js +14 -1
- package/dist/catalog/volcengine/seedance-2.0-fast.model.d.ts +2 -0
- package/dist/catalog/volcengine/seedance-2.0-fast.model.js +11 -0
- package/dist/catalog/volcengine/seedance-2.0-mini.model.d.ts +2 -0
- package/dist/catalog/volcengine/seedance-2.0-mini.model.js +11 -0
- package/dist/catalog/volcengine/seedance-2.0.model.d.ts +2 -0
- package/dist/catalog/volcengine/seedance-2.0.model.js +11 -0
- package/dist/catalog/volcengine/seedance-2.5.model.d.ts +2 -0
- package/dist/catalog/volcengine/seedance-2.5.model.js +11 -0
- package/dist/catalog/volcengine/seedance.d.ts +17 -0
- package/dist/catalog/volcengine/seedance.js +192 -0
- package/dist/catalog/volcengine/seedream-5.0-lite.model.js +2 -1
- package/dist/catalog/volcengine/seedream-5.0.js +1 -1
- package/dist/catalog/volcengine-speech/seed-icl-2.0.model.d.ts +1 -0
- package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +52 -10
- package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.d.ts +2 -0
- package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.js +438 -0
- package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +4 -4
- package/dist/discovery/index.js +13 -6
- package/dist/generation/core.d.ts +6 -0
- package/dist/generation/core.js +10 -2
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/llm/bigmodel/preset.js +2 -1
- package/dist/llm/bigmodel/profiles.js +0 -6
- package/dist/llm/chat.d.ts +8 -0
- package/dist/llm/chat.js +18 -2
- package/dist/llm/chatTypes.d.ts +6 -0
- package/dist/llm/defaults.d.ts +2 -2
- package/dist/llm/defaults.js +3 -3
- package/dist/llm/groq/preset.js +18 -2
- package/dist/llm/modelCatalog.d.ts +9 -2
- package/dist/llm/modelCatalog.js +17 -4
- package/dist/llm/modelCatalogEntries.d.ts +2 -0
- package/dist/llm/modelCatalogEntries.js +197 -42
- package/dist/llm/providerPresets.d.ts +3 -0
- package/dist/llm/providerPresets.js +145 -32
- package/dist/llm/providerReasoningRequest.js +28 -11
- package/dist/llm/siliconflow/index.js +1 -1
- package/dist/llm/siliconflow/preset.js +30 -0
- package/dist/llm/types.d.ts +6 -0
- package/dist/packs/models/{ppio/wan-2.5-preview.d.ts → apimart/flux-3-image.d.ts} +1 -1
- package/dist/packs/models/apimart/flux-3-image.js +7 -0
- package/dist/packs/models/apimart/flux-3-video.d.ts +6 -0
- package/dist/packs/models/apimart/flux-3-video.js +7 -0
- package/dist/packs/models/apimart/gemini-omni-1.2-flash.d.ts +6 -0
- package/dist/packs/models/apimart/gemini-omni-1.2-flash.js +7 -0
- package/dist/packs/models/{modelscope/qwen-image.d.ts → apimart/gpt-image-2.6.d.ts} +1 -1
- package/dist/packs/models/apimart/gpt-image-2.6.js +7 -0
- package/dist/packs/models/apimart/grok-imagine-video-1.5.d.ts +6 -0
- package/dist/packs/models/apimart/grok-imagine-video-1.5.js +7 -0
- package/dist/packs/models/apimart/happyhorse-1.1.d.ts +6 -0
- package/dist/packs/models/apimart/happyhorse-1.1.js +7 -0
- package/dist/packs/models/apimart/kling-4.0.d.ts +6 -0
- package/dist/packs/models/apimart/kling-4.0.js +7 -0
- package/dist/packs/models/apimart/minimax-h3-max.d.ts +6 -0
- package/dist/packs/models/apimart/minimax-h3-max.js +7 -0
- package/dist/packs/models/{ppio/minimax-hailuo-2.3.d.ts → apimart/nano-banana-2.1.d.ts} +1 -1
- package/dist/packs/models/{ppio/minimax-hailuo-2.3.js → apimart/nano-banana-2.1.js} +4 -4
- package/dist/packs/models/apimart/seedream-5.0-flash.d.ts +6 -0
- package/dist/packs/models/apimart/seedream-5.0-flash.js +7 -0
- package/dist/packs/models/apimart/veo-3.1.d.ts +6 -0
- package/dist/packs/models/apimart/veo-3.1.js +7 -0
- package/dist/packs/models/apimart/wan-2.7-image.d.ts +6 -0
- package/dist/packs/models/apimart/wan-2.7-image.js +7 -0
- package/dist/packs/models/apimart/wan-3.0.d.ts +6 -0
- package/dist/packs/models/apimart/wan-3.0.js +7 -0
- package/dist/packs/models/bailian/cosyvoice-v3.5.js +1 -1
- package/dist/packs/models/bailian/minimax-h3.d.ts +6 -0
- package/dist/packs/models/bailian/minimax-h3.js +7 -0
- package/dist/packs/models/bailian/minimax-speech-2.8.js +1 -1
- package/dist/packs/models/bailian/qwen-audio-3.1-tts-flash.js +1 -1
- package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.d.ts +6 -0
- package/dist/packs/models/bailian/qwen-audio-3.1-tts-plus.js +7 -0
- package/dist/packs/models/bailian/qwen-image-3.0.js +1 -1
- package/dist/packs/models/bailian/wan-3.0.d.ts +6 -0
- package/dist/packs/models/bailian/wan-3.0.js +7 -0
- package/dist/packs/models/bailian/z-image-turbo.js +1 -1
- package/dist/packs/models/fal/eleven-v4-tts.d.ts +6 -0
- package/dist/packs/models/{ppio/wan-2.5-preview.js → fal/eleven-v4-tts.js} +4 -4
- package/dist/packs/models/fal/flux-3-video.d.ts +6 -0
- package/dist/packs/models/fal/flux-3-video.js +7 -0
- package/dist/packs/models/{ppio/wan-2.6.d.ts → fal/flux-3.d.ts} +1 -1
- package/dist/packs/models/{ppio/wan-2.6.js → fal/flux-3.js} +4 -4
- package/dist/packs/models/fal/gemini-omni-1.2-flash.d.ts +6 -0
- package/dist/packs/models/fal/gemini-omni-1.2-flash.js +7 -0
- package/dist/packs/models/fal/gpt-image-2.6.d.ts +6 -0
- package/dist/packs/models/fal/gpt-image-2.6.js +7 -0
- package/dist/packs/models/fal/grok-imagine-video-1.5.d.ts +6 -0
- package/dist/packs/models/fal/grok-imagine-video-1.5.js +7 -0
- package/dist/packs/models/fal/kling-4.0-flash.d.ts +6 -0
- package/dist/packs/models/fal/kling-4.0-flash.js +7 -0
- package/dist/packs/models/fal/kling-4.0.d.ts +6 -0
- package/dist/packs/models/{ppio/wan-2.7.js → fal/kling-4.0.js} +4 -4
- package/dist/packs/models/{ppio/wan-2.7.d.ts → fal/ltx-2.3.d.ts} +1 -1
- package/dist/packs/models/fal/ltx-2.3.js +7 -0
- package/dist/packs/models/fal/minimax-h3-max.d.ts +6 -0
- package/dist/packs/models/fal/minimax-h3-max.js +7 -0
- package/dist/packs/models/fal/nano-banana-2.1.d.ts +6 -0
- package/dist/packs/models/fal/nano-banana-2.1.js +7 -0
- package/dist/packs/models/fal/wan-3.0.d.ts +6 -0
- package/dist/packs/models/fal/wan-3.0.js +7 -0
- package/dist/packs/models/grsai/gpt-image-2.6.d.ts +6 -0
- package/dist/packs/models/grsai/gpt-image-2.6.js +7 -0
- package/dist/packs/models/grsai/nano-banana-2.1.d.ts +6 -0
- package/dist/packs/models/grsai/nano-banana-2.1.js +7 -0
- package/dist/packs/models/grsai/wan-3.0.d.ts +6 -0
- package/dist/packs/models/grsai/wan-3.0.js +7 -0
- package/dist/packs/models/kie/flux-3-klein.d.ts +6 -0
- package/dist/packs/models/kie/flux-3-klein.js +7 -0
- package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.d.ts +6 -0
- package/dist/packs/models/kie/gemini-3.8-flash-lite-tts.js +7 -0
- package/dist/packs/models/kie/{eleven-turbo-2.5-tts.d.ts → gemini-3.8-flash-tts.d.ts} +1 -1
- package/dist/packs/models/kie/{eleven-turbo-2.5-tts.js → gemini-3.8-flash-tts.js} +1 -1
- package/dist/packs/models/kie/gpt-image-2.6.d.ts +6 -0
- package/dist/packs/models/kie/gpt-image-2.6.js +7 -0
- package/dist/packs/models/kie/grok-imagine-video-1.5.d.ts +6 -0
- package/dist/packs/models/kie/grok-imagine-video-1.5.js +7 -0
- package/dist/packs/models/kie/kling-4.0-flash.d.ts +6 -0
- package/dist/packs/models/kie/kling-4.0-flash.js +7 -0
- package/dist/packs/models/kie/kling-4.0.d.ts +6 -0
- package/dist/packs/models/kie/kling-4.0.js +7 -0
- package/dist/packs/models/kie/nano-banana-2.1.d.ts +6 -0
- package/dist/packs/models/kie/nano-banana-2.1.js +7 -0
- package/dist/packs/models/kie/wan-3.0-prime.d.ts +6 -0
- package/dist/packs/models/kie/wan-3.0-prime.js +7 -0
- package/dist/packs/models/kie/wan-3.0.d.ts +6 -0
- package/dist/packs/models/kie/wan-3.0.js +7 -0
- package/dist/packs/models/modelscope/flux-1-krea-dev.js +1 -1
- package/dist/packs/models/modelscope/majicmix-realistic.js +1 -1
- package/dist/packs/models/modelscope/modelscope-custom.js +1 -1
- package/dist/packs/models/modelscope/qwen-image-2512.d.ts +6 -0
- package/dist/packs/models/modelscope/{qwen-image.js → qwen-image-2512.js} +2 -2
- package/dist/packs/models/modelscope/{qwen-image-edit-2509.d.ts → qwen-image-edit-2511.d.ts} +1 -1
- package/dist/packs/models/modelscope/{qwen-image-edit-2509.js → qwen-image-edit-2511.js} +2 -2
- package/dist/packs/models/modelscope/sdxl-14-ckpt.js +1 -1
- package/dist/packs/models/modelscope/z-image-turbo.js +1 -1
- package/dist/packs/models/volcengine/seedance-2.0-fast.d.ts +6 -0
- package/dist/packs/models/volcengine/seedance-2.0-fast.js +7 -0
- package/dist/packs/models/volcengine/seedance-2.0-mini.d.ts +6 -0
- package/dist/packs/models/volcengine/seedance-2.0-mini.js +7 -0
- package/dist/packs/models/volcengine/seedance-2.0.d.ts +6 -0
- package/dist/packs/models/volcengine/seedance-2.0.js +7 -0
- package/dist/packs/models/volcengine/seedance-2.5.d.ts +6 -0
- package/dist/packs/models/volcengine/seedance-2.5.js +7 -0
- package/dist/packs/models/volcengine/seedream-5.0-flash.js +1 -1
- package/dist/packs/models/volcengine/seedream-5.0-lite.js +1 -1
- package/dist/packs/models/volcengine/seedream-5.0-pro.js +1 -1
- package/dist/packs/provider-adapters/bailian.js +1 -1
- package/dist/packs/provider-adapters/modelscope.js +1 -1
- package/dist/packs/provider-adapters/volcengine.js +1 -1
- package/dist/packs/provider-packs/apimart.d.ts +1 -1
- package/dist/packs/provider-packs/apimart.js +35 -22
- package/dist/packs/provider-packs/bailian.d.ts +1 -1
- package/dist/packs/provider-packs/bailian.js +8 -5
- package/dist/packs/provider-packs/fal.d.ts +1 -1
- package/dist/packs/provider-packs/fal.js +52 -40
- package/dist/packs/provider-packs/grsai.d.ts +1 -1
- package/dist/packs/provider-packs/grsai.js +8 -5
- package/dist/packs/provider-packs/kie.d.ts +1 -1
- package/dist/packs/provider-packs/kie.js +41 -32
- package/dist/packs/provider-packs/modelscope.js +2 -2
- package/dist/packs/provider-packs/ppio.d.ts +1 -1
- package/dist/packs/provider-packs/ppio.js +2 -6
- package/dist/packs/provider-packs/volcengine.d.ts +1 -1
- package/dist/packs/provider-packs/volcengine.js +8 -4
- package/dist/pricing/index.d.ts +1 -0
- package/dist/pricing/index.js +1 -0
- package/dist/pricing/mediaContext.d.ts +6 -1
- package/dist/pricing/mediaContext.js +12 -5
- package/dist/pricing/tokenPricing.d.ts +36 -0
- package/dist/pricing/tokenPricing.js +26 -0
- package/dist/providers/bailian.d.ts +1 -1
- package/dist/providers/bailian.js +71 -4
- package/dist/providers/fal.js +11 -1
- package/dist/providers/helpers.d.ts +1 -1
- package/dist/providers/helpers.js +17 -5
- package/dist/providers/kie.js +16 -5
- package/dist/providers/metadata.js +2 -2
- package/dist/providers/openai-speech.d.ts +6 -0
- package/dist/providers/openai-speech.js +31 -0
- package/dist/providers/providerAccessErrors.d.ts +3 -0
- package/dist/providers/providerAccessErrors.js +73 -0
- package/dist/providers/siliconflow.js +2 -27
- package/dist/providers/volcengine-speech.d.ts +1 -1
- package/dist/providers/volcengine-speech.js +31 -8
- package/dist/providers/volcengine-voice-clone.d.ts +3 -0
- package/dist/providers/volcengine-voice-clone.js +138 -0
- package/dist/providers/volcengine.d.ts +1 -1
- package/dist/providers/volcengine.js +89 -11
- package/dist/runtime/retry.js +3 -0
- package/dist/tool-packs/fal-erase/models/bria-eraser.model.js +1 -1
- package/dist/tool-packs/fal-erase/models/finegrain-eraser.model.js +1 -1
- package/dist/tool-packs/fal-erase/models/flux-pro-erase.model.js +1 -1
- package/dist/tool-packs/fal-image-utilities/models/control-light.model.js +1 -1
- package/dist/tool-packs/fal-image-utilities/models/outpaint.model.js +1 -1
- package/dist/tool-packs/fal-image-utilities/models/photo-restoration.model.js +1 -1
- package/dist/tool-packs/fal-image-utilities/models/pixelcut-background-removal.model.js +1 -1
- package/dist/tool-packs/fal-image-utilities/models/product-photography.model.js +1 -1
- package/dist/tool-packs/fal-image-utilities/models/relighting.model.js +1 -1
- package/dist/tool-packs/fal-multi-angle/models/flux-2-multiple-angles.model.js +1 -1
- package/dist/tool-packs/fal-multi-angle/models/perspective-change.model.js +1 -1
- package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2511-multiple-angles.model.js +1 -1
- package/dist/types/model.d.ts +68 -12
- package/dist/types/model.js +3 -0
- package/dist/types/modelTags.d.ts +142 -0
- package/dist/types/modelTags.js +44 -0
- package/dist/types/runtime.d.ts +3 -0
- package/dist/types/speechTimings.d.ts +15 -0
- package/dist/types/speechTimings.js +1 -0
- package/dist/upload/apimart-upload.d.ts +1 -1
- package/dist/upload/apimart-upload.js +37 -15
- package/dist/upload/bailian-oss-upload.d.ts +32 -0
- package/dist/upload/bailian-oss-upload.js +74 -0
- package/dist/upload/{fal-legacy.js → fal-host-fetch.js} +2 -2
- package/dist/upload/fal-transport.d.ts +6 -0
- package/dist/upload/fal-transport.js +2 -1
- package/dist/upload/index.d.ts +2 -2
- package/dist/upload/index.js +4 -7
- package/dist/upload/kie-upload.d.ts +1 -1
- package/dist/upload/kie-upload.js +34 -12
- package/dist/upload/media-binary.js +1 -0
- package/dist/upload/media-fields.js +7 -2
- package/dist/upload/preprocess-core.d.ts +2 -0
- package/dist/upload/preprocess-core.js +2 -0
- package/dist/upload/preprocess.d.ts +1 -1
- package/dist/upload/preprocess.js +12 -3
- package/dist/upload/provider-preprocessors/apimart.d.ts +1 -1
- package/dist/upload/provider-preprocessors/apimart.js +13 -5
- package/dist/upload/provider-preprocessors/bailian.d.ts +8 -0
- package/dist/upload/provider-preprocessors/bailian.js +45 -0
- package/dist/upload/provider-preprocessors/kie.d.ts +1 -1
- package/dist/upload/provider-preprocessors/kie.js +26 -9
- package/dist/upload/provider-preprocessors/ppio.d.ts +1 -2
- package/dist/upload/provider-preprocessors/ppio.js +2 -29
- package/dist/upload/provider-preprocessors/public-host.d.ts +5 -0
- package/dist/upload/provider-preprocessors/public-host.js +7 -0
- package/dist/upload/provider-preprocessors/volcengine.d.ts +5 -0
- package/dist/upload/provider-preprocessors/volcengine.js +10 -0
- package/dist/upload/public-host-upload.d.ts +7 -0
- package/dist/upload/public-host-upload.js +55 -0
- package/dist/upload/upload-response.js +12 -7
- package/docs/README.md +26 -26
- package/docs/consumers.md +150 -124
- package/docs/llm-adaptation/README.md +180 -166
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +108 -104
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +94 -76
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/MiniMax.md +89 -84
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +126 -126
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +238 -234
- 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
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274Qwen.md +112 -84
- 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
- package/docs/model-adaptation/Bria-Eraser/Bria-Eraser_Fal.md +32 -32
- 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
- package/docs/model-adaptation/ControlLight/ControlLight_Fal.md +85 -85
- package/docs/model-adaptation/Eleven-v4/Eleven-v4_Fal.md +49 -0
- 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
- package/docs/model-adaptation/FLUX-3/FLUX-3_APIMart.md +65 -0
- package/docs/model-adaptation/FLUX-3/FLUX-3_Fal.md +48 -0
- package/docs/model-adaptation/FLUX-3-Klein/FLUX-3-Klein_KIE.md +38 -0
- package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_APIMart.md +84 -0
- package/docs/model-adaptation/FLUX-3-Video/FLUX-3-Video_Fal.md +80 -0
- package/docs/model-adaptation/Finegrain-Eraser/Finegrain-Eraser_Fal.md +31 -31
- package/docs/model-adaptation/Flux-Pro-Erase/Flux-Pro-Erase_Fal.md +34 -34
- package/docs/model-adaptation/Fun-ASR/Fun-ASR_/347/231/276/347/202/274.md +47 -47
- 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
- package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +57 -57
- 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
- package/docs/model-adaptation/GLM-5.3-Flash/GLM-5.3-Flash_/346/231/272/350/260/261.md +217 -213
- package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_APIMart.md +173 -173
- package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Fal.md +94 -94
- package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Grsai.md +138 -137
- package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_KIE.md +97 -93
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -66
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -55
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +59 -53
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -55
- package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_APIMart.md +101 -0
- package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Fal.md +55 -0
- package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_Grsai.md +32 -0
- package/docs/model-adaptation/GPT-Image-2.6/GPT-Image-2.6_KIE.md +51 -0
- package/docs/model-adaptation/GPT-OSS-20B/GPT-OSS-20B_Groq.md +62 -62
- package/docs/model-adaptation/Gemini-3.8-Flash-Lite-TTS/Gemini-3.8-Flash-Lite-TTS_KIE.md +22 -0
- package/docs/model-adaptation/Gemini-3.8-Flash-TTS/Gemini-3.8-Flash-TTS_KIE.md +38 -0
- package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_APIMart.md +79 -0
- package/docs/model-adaptation/Gemini-Omni-1.2-Flash/Gemini-Omni-1.2-Flash_Fal.md +60 -0
- package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +131 -124
- package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_Fal.md +84 -84
- package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +132 -129
- package/docs/model-adaptation/Grok-Imagine/Grok-Imagine_KIE.md +38 -36
- package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_APIMart.md +250 -250
- package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_Fal.md +84 -84
- package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_KIE.md +105 -105
- package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_APIMart.md +68 -0
- package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_Fal.md +47 -0
- package/docs/model-adaptation/Grok-Imagine-Video-1.5/Grok-Imagine-Video-1.5_KIE.md +37 -0
- package/docs/model-adaptation/Hailuo-02/Hailuo-02_Fal.md +95 -93
- package/docs/model-adaptation/Hailuo-02/Hailuo-02_KIE.md +58 -56
- package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_Fal.md +88 -88
- package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_KIE.md +51 -51
- package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_APIMart.md +66 -0
- package/docs/model-adaptation/HappyHorse-1.1/HappyHorse-1.1_KIE.md +31 -27
- package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +99 -99
- 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
- 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
- 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
- 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
- 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
- package/docs/model-adaptation/Kling-3.0/Kling-3.0_APIMart.md +112 -112
- package/docs/model-adaptation/Kling-3.0/Kling-3.0_Fal.md +91 -89
- package/docs/model-adaptation/Kling-3.0/Kling-3.0_KIE.md +106 -106
- package/docs/model-adaptation/Kling-3.0/Kling-3.0_/346/264/276/346/254/247/344/272/221.md +120 -119
- package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_APIMart.md +130 -125
- package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_Fal.md +107 -107
- package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_KIE.md +148 -143
- package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_APIMart.md +88 -85
- package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_Fal.md +86 -83
- package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_KIE.md +84 -84
- package/docs/model-adaptation/Kling-4.0/Kling-4.0_APIMart.md +76 -0
- package/docs/model-adaptation/Kling-4.0/Kling-4.0_Fal.md +115 -0
- package/docs/model-adaptation/Kling-4.0/Kling-4.0_KIE.md +61 -0
- package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_Fal.md +55 -0
- package/docs/model-adaptation/Kling-4.0-Flash/Kling-4.0-Flash_KIE.md +33 -0
- package/docs/model-adaptation/LTX-2.3/LTX-2.3_Fal.md +121 -0
- package/docs/model-adaptation/Midjourney/Midjourney_APIMart.md +402 -396
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_APIMart.md +237 -234
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_Fal.md +112 -108
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_KIE.md +118 -111
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_/347/231/276/347/202/274.md +65 -0
- package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_APIMart.md +78 -0
- package/docs/model-adaptation/MiniMax-H3-Max/MiniMax-H3-Max_Fal.md +62 -0
- package/docs/model-adaptation/MiniMax-Speech/MiniMax-Speech_/346/264/276/346/254/247/344/272/221.md +170 -170
- package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_APIMart.md +89 -89
- package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Fal.md +99 -99
- package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Grsai.md +82 -82
- package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_KIE.md +72 -70
- package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_APIMart.md +79 -79
- package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md +65 -65
- package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_KIE.md +64 -64
- package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_APIMart.md +35 -0
- package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Fal.md +37 -0
- package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_Grsai.md +35 -0
- package/docs/model-adaptation/Nano-Banana-2.1/Nano-Banana-2.1_KIE.md +36 -0
- package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_APIMart.md +83 -83
- package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Fal.md +89 -89
- package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md +82 -82
- package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_KIE.md +64 -64
- 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
- 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
- package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_APIMart.md +117 -117
- package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_Fal.md +85 -84
- package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_KIE.md +103 -103
- package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_/347/231/276/347/202/274.md +138 -138
- 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
- package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +68 -68
- package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +40 -40
- package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +40 -40
- package/docs/model-adaptation/Qwen3-ASR-Flash/Qwen3-ASR-Flash_/347/231/276/347/202/274.md +44 -44
- 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
- package/docs/model-adaptation/Qwen3-ASR-Flash-Filetrans/Qwen3-ASR-Flash-Filetrans_/347/231/276/347/202/274.md +45 -45
- package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +58 -58
- 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
- package/docs/model-adaptation/README.md +371 -328
- 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
- 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
- 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
- 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
- package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_APIMart.md +121 -121
- package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_Fal.md +97 -97
- package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_KIE.md +87 -86
- 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
- package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_APIMart.md +89 -89
- package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_Fal.md +95 -95
- package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_KIE.md +79 -78
- 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
- package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_APIMart.md +93 -89
- package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_Fal.md +96 -96
- package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_KIE.md +79 -78
- 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
- package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_APIMart.md +217 -212
- package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_Fal.md +98 -94
- package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_KIE.md +94 -89
- 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
- package/docs/model-adaptation/Seedream-5.0-Flash/Seedream-5.0-Flash_APIMart.md +64 -0
- 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
- package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_APIMart.md +113 -106
- package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_Fal.md +91 -91
- package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_KIE.md +89 -89
- 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
- package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_APIMart.md +194 -194
- package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_Fal.md +100 -100
- package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_KIE.md +141 -141
- 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
- package/docs/model-adaptation/SenseVoiceSmall/SenseVoiceSmall_/347/241/205/345/237/272/346/265/201/345/212/250.md +73 -73
- package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +52 -6
- package/docs/model-adaptation/TTS-/346/227/266/351/227/264/346/210/263-2026-10.md +36 -0
- 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
- 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
- package/docs/model-adaptation/Veo-3.1/Veo-3.1_APIMart.md +90 -0
- package/docs/model-adaptation/Wan-2.7-Image/Wan-2.7-Image_APIMart.md +81 -0
- package/docs/model-adaptation/Wan-3.0/Wan-3.0_APIMart.md +74 -0
- package/docs/model-adaptation/Wan-3.0/Wan-3.0_Fal.md +60 -0
- package/docs/model-adaptation/Wan-3.0/Wan-3.0_Grsai.md +35 -0
- package/docs/model-adaptation/Wan-3.0/Wan-3.0_KIE.md +38 -0
- package/docs/model-adaptation/Wan-3.0/Wan-3.0_/347/231/276/347/202/274.md +96 -0
- package/docs/model-adaptation/Wan-3.0-Prime/Wan-3.0-Prime_KIE.md +20 -0
- package/docs/model-adaptation/Whisper-Large-v3/Whisper-Large-v3_Groq.md +80 -80
- package/docs/model-adaptation/Whisper-Large-v3-Turbo/Whisper-Large-v3-Turbo_Groq.md +79 -79
- package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_APIMart.md +88 -88
- package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_Fal.md +103 -95
- package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_KIE.md +71 -71
- package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/347/231/276/347/202/274.md +122 -122
- package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/351/255/224/346/220/255.md +99 -97
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/APIMart.md +240 -240
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Fal.md +190 -172
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Groq.md +136 -121
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Grsai.md +217 -217
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/KIE.md +159 -131
- 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
- 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
- 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
- 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
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +339 -282
- 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
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//351/255/224/346/220/255.md +205 -207
- 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
- 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
- package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Electron.md +77 -77
- package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Tauri.md +81 -81
- package/docs//346/216/245/345/205/245/346/214/207/345/215/227/UXP.md +169 -169
- 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
- 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
- package/examples/form-renderer/README.md +17 -17
- package/examples/form-renderer/cli.ts +32 -32
- package/examples/form-renderer/index.ts +144 -144
- package/examples/form-renderer/package.json +16 -16
- package/examples/form-renderer/tsconfig.json +14 -14
- package/examples/llm-chat/README.md +38 -38
- package/examples/llm-chat/index.ts +100 -100
- package/examples/llm-chat/package.json +19 -19
- package/examples/llm-chat/tsconfig.json +14 -14
- package/examples/minimal-node/README.md +31 -31
- package/examples/minimal-node/index.ts +138 -138
- package/examples/minimal-node/package.json +17 -17
- package/examples/minimal-node/tsconfig.json +14 -14
- package/package.json +259 -258
- package/dist/catalog/grsai/gptImage25Sizes.d.ts +0 -1
- package/dist/catalog/grsai/gptImage25Sizes.js +0 -76
- package/dist/catalog/kie/eleven-turbo-2.5-tts.model.d.ts +0 -2
- package/dist/catalog/kie/eleven-turbo-2.5-tts.model.js +0 -29
- package/dist/catalog/modelscope/qwen-image-edit-2509.model.d.ts +0 -5
- package/dist/catalog/modelscope/qwen-image.model.d.ts +0 -5
- package/dist/catalog/ppio/minimax-hailuo-2.3.model.d.ts +0 -7
- package/dist/catalog/ppio/minimax-hailuo-2.3.model.js +0 -114
- package/dist/catalog/ppio/wan-2.5-preview.model.d.ts +0 -7
- package/dist/catalog/ppio/wan-2.5-preview.model.js +0 -198
- package/dist/catalog/ppio/wan-2.6.model.d.ts +0 -7
- package/dist/catalog/ppio/wan-2.6.model.js +0 -206
- package/dist/catalog/ppio/wan-2.7.model.d.ts +0 -2
- package/dist/catalog/ppio/wan-2.7.model.js +0 -373
- package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_/346/264/276/346/254/247/344/272/221.md +0 -70
- package/docs/model-adaptation/TeleSpeechASR/TeleSpeechASR_/347/241/205/345/237/272/346/265/201/345/212/250.md +0 -76
- package/docs/model-adaptation/Wan-2.5-Preview/Wan-2.5-Preview_/346/264/276/346/254/247/344/272/221.md +0 -82
- package/docs/model-adaptation/Wan-2.6/Wan-2.6_/346/264/276/346/254/247/344/272/221.md +0 -84
- package/docs/model-adaptation/Wan-2.7/Wan-2.7_/346/264/276/346/254/247/344/272/221.md +0 -122
- /package/dist/upload/{fal-legacy.d.ts → fal-host-fetch.d.ts} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Transport } from '../runtime/Transport.js';
|
|
2
2
|
import type { PreparedMediaBinary } from './prepared-media.js';
|
|
3
|
-
export declare function uploadToApiMart(apiKey: string, prepared: PreparedMediaBinary, transport: Transport): Promise<string>;
|
|
3
|
+
export declare function uploadToApiMart(apiKey: string, prepared: PreparedMediaBinary, transport: Transport, signal?: AbortSignal): Promise<string>;
|
|
@@ -2,9 +2,13 @@ import { buildApiMartEndpoints } from '../providers/endpoints/apimart.js';
|
|
|
2
2
|
import { fetchProvider } from '../providers/provider-fetch.js';
|
|
3
3
|
import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
|
|
4
4
|
import { readUploadJson, readUploadString } from './upload-response.js';
|
|
5
|
+
import { createDeadlineSignal } from './fal-transport.js';
|
|
5
6
|
const APIMART_MAX_IMAGE_BYTES = 20 * 1024 * 1024;
|
|
7
|
+
const APIMART_UPLOAD_TIMEOUT_MS = 120_000;
|
|
6
8
|
const APIMART_IMAGE_MIME_TYPES = new Set(['image/jpeg', 'image/png', 'image/webp', 'image/gif']);
|
|
7
|
-
export async function uploadToApiMart(apiKey, prepared, transport) {
|
|
9
|
+
export async function uploadToApiMart(apiKey, prepared, transport, signal) {
|
|
10
|
+
if (signal?.aborted)
|
|
11
|
+
throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
|
|
8
12
|
if (!APIMART_IMAGE_MIME_TYPES.has(prepared.mimeType)) {
|
|
9
13
|
throw new AiRuntimeError('unsupported_media_type', `APIMart 图片上传仅支持 JPEG、PNG、WebP、GIF,当前类型为 ${prepared.mimeType}。`);
|
|
10
14
|
}
|
|
@@ -14,19 +18,37 @@ export async function uploadToApiMart(apiKey, prepared, transport) {
|
|
|
14
18
|
const form = new FormData();
|
|
15
19
|
form.append('file', new Blob([prepared.bytes], { type: prepared.mimeType }), prepared.filename);
|
|
16
20
|
const endpoints = buildApiMartEndpoints('/v1/uploads/images');
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
const deadline = createDeadlineSignal(signal, APIMART_UPLOAD_TIMEOUT_MS);
|
|
22
|
+
try {
|
|
23
|
+
deadline.signal.throwIfAborted();
|
|
24
|
+
const response = await fetchProvider('APIMart image upload', endpoints[0], {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
27
|
+
body: form,
|
|
28
|
+
signal: deadline.signal,
|
|
29
|
+
}, {
|
|
30
|
+
transport,
|
|
31
|
+
retryPreconnectOnce: true,
|
|
32
|
+
fallbackEndpoints: endpoints.slice(1),
|
|
33
|
+
});
|
|
34
|
+
const payload = await readUploadJson(response, 'APIMart image upload');
|
|
35
|
+
deadline.signal.throwIfAborted();
|
|
36
|
+
const fileUrl = readUploadString(payload, '/url') ?? readUploadString(payload, '/data/url');
|
|
37
|
+
if (!fileUrl) {
|
|
38
|
+
throw new AiRuntimeError('upload_failed', `APIMart image upload missing file URL: ${JSON.stringify(payload)}`);
|
|
39
|
+
}
|
|
40
|
+
return fileUrl;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (signal?.aborted)
|
|
44
|
+
throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
|
|
45
|
+
if (deadline.didTimeout())
|
|
46
|
+
throw new AiRuntimeError('upload_timeout', `APIMart upload exceeded ${APIMART_UPLOAD_TIMEOUT_MS}ms`);
|
|
47
|
+
if (error instanceof Error && error.name === 'AbortError')
|
|
48
|
+
throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
deadline.dispose();
|
|
30
53
|
}
|
|
31
|
-
return fileUrl;
|
|
32
54
|
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Transport } from '../runtime/Transport.js';
|
|
2
|
+
/** 百炼临时存储:凭证按模型签发、不能跨模型复用;对象 48 小时后过期,模型请求要带 X-DashScope-OssResourceResolve。 */
|
|
3
|
+
export declare const BAILIAN_DEFAULT_API_BASE_URL = "https://dashscope.aliyuncs.com/api/v1";
|
|
4
|
+
export interface BailianUploadTarget {
|
|
5
|
+
/** 表单直传地址(HTTPS) */
|
|
6
|
+
uploadUrl: string;
|
|
7
|
+
/** 按官方顺序排好的表单字段,文件字段名为 file */
|
|
8
|
+
fields: [string, string][];
|
|
9
|
+
objectKey: string;
|
|
10
|
+
maxBytes: number;
|
|
11
|
+
}
|
|
12
|
+
/** 申请一次上传凭证并算好对象路径;objectName 只用作文件名的可读部分。 */
|
|
13
|
+
export declare function requestBailianUploadTarget(input: {
|
|
14
|
+
transport: Transport;
|
|
15
|
+
apiKey: string;
|
|
16
|
+
modelId: string;
|
|
17
|
+
objectName: string;
|
|
18
|
+
apiBaseUrl?: string;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
}): Promise<BailianUploadTarget>;
|
|
21
|
+
/** 把内存里的字节传到临时存储,返回模型可用的 oss:// 地址。 */
|
|
22
|
+
export declare function uploadBytesToBailianOss(input: {
|
|
23
|
+
transport: Transport;
|
|
24
|
+
apiKey: string;
|
|
25
|
+
modelId: string;
|
|
26
|
+
objectName: string;
|
|
27
|
+
bytes: Uint8Array;
|
|
28
|
+
mimeType: string;
|
|
29
|
+
filename: string;
|
|
30
|
+
apiBaseUrl?: string;
|
|
31
|
+
signal?: AbortSignal;
|
|
32
|
+
}): Promise<string>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
|
|
2
|
+
import { assertMediaSize } from '../runtime/MediaReader.js';
|
|
3
|
+
/** 百炼临时存储:凭证按模型签发、不能跨模型复用;对象 48 小时后过期,模型请求要带 X-DashScope-OssResourceResolve。 */
|
|
4
|
+
export const BAILIAN_DEFAULT_API_BASE_URL = 'https://dashscope.aliyuncs.com/api/v1';
|
|
5
|
+
function asRecord(value) {
|
|
6
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
|
|
7
|
+
}
|
|
8
|
+
function requiredString(record, key) {
|
|
9
|
+
const value = record?.[key];
|
|
10
|
+
if (typeof value !== 'string' || !value)
|
|
11
|
+
throw new AiRuntimeError('invalid_response', `Bailian upload policy has no ${key}`);
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
/** 申请一次上传凭证并算好对象路径;objectName 只用作文件名的可读部分。 */
|
|
15
|
+
export async function requestBailianUploadTarget(input) {
|
|
16
|
+
const response = await input.transport.fetch(`${input.apiBaseUrl ?? BAILIAN_DEFAULT_API_BASE_URL}/uploads?action=getPolicy&model=${encodeURIComponent(input.modelId)}`, { headers: { Authorization: `Bearer ${input.apiKey}` }, signal: input.signal });
|
|
17
|
+
const text = await response.text();
|
|
18
|
+
if (!response.ok)
|
|
19
|
+
throw new AiRuntimeError('provider_http_error', `Bailian upload policy failed with HTTP ${response.status}`);
|
|
20
|
+
let payload;
|
|
21
|
+
try {
|
|
22
|
+
payload = JSON.parse(text);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
throw new AiRuntimeError('invalid_response', 'Bailian upload policy returned invalid JSON');
|
|
26
|
+
}
|
|
27
|
+
const policy = asRecord(asRecord(payload)?.data);
|
|
28
|
+
let host;
|
|
29
|
+
try {
|
|
30
|
+
host = new URL(requiredString(policy, 'upload_host'));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error instanceof AiRuntimeError)
|
|
34
|
+
throw error;
|
|
35
|
+
throw new AiRuntimeError('invalid_response', 'Bailian upload_host is invalid');
|
|
36
|
+
}
|
|
37
|
+
if (host.protocol !== 'https:')
|
|
38
|
+
throw new AiRuntimeError('invalid_response', 'Bailian upload_host must use HTTPS');
|
|
39
|
+
const uploadDir = requiredString(policy, 'upload_dir').replace(/^\/+|\/+$/g, '');
|
|
40
|
+
const rawLimit = policy?.max_file_size_mb;
|
|
41
|
+
const maxFileSizeMb = typeof rawLimit === 'number' || typeof rawLimit === 'string' ? Number(rawLimit) : NaN;
|
|
42
|
+
if (!Number.isFinite(maxFileSizeMb) || maxFileSizeMb <= 0) {
|
|
43
|
+
throw new AiRuntimeError('invalid_response', 'Bailian upload policy has invalid max_file_size_mb');
|
|
44
|
+
}
|
|
45
|
+
const objectKey = `${uploadDir}/${input.objectName.replace(/[^A-Za-z0-9._-]/g, '_')}`;
|
|
46
|
+
return {
|
|
47
|
+
uploadUrl: host.toString(),
|
|
48
|
+
fields: [
|
|
49
|
+
['OSSAccessKeyId', requiredString(policy, 'oss_access_key_id')],
|
|
50
|
+
['Signature', requiredString(policy, 'signature')],
|
|
51
|
+
['policy', requiredString(policy, 'policy')],
|
|
52
|
+
['x-oss-object-acl', requiredString(policy, 'x_oss_object_acl')],
|
|
53
|
+
['x-oss-forbid-overwrite', requiredString(policy, 'x_oss_forbid_overwrite')],
|
|
54
|
+
['key', objectKey],
|
|
55
|
+
['success_action_status', '200'],
|
|
56
|
+
],
|
|
57
|
+
objectKey,
|
|
58
|
+
// 官方临时存储单文件上限 1 GB,按十进制字节保守换算。
|
|
59
|
+
maxBytes: Math.min(1_000_000_000, Math.floor(maxFileSizeMb * 1_000_000)),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** 把内存里的字节传到临时存储,返回模型可用的 oss:// 地址。 */
|
|
63
|
+
export async function uploadBytesToBailianOss(input) {
|
|
64
|
+
const target = await requestBailianUploadTarget(input);
|
|
65
|
+
assertMediaSize({ size: input.bytes.byteLength, mimeType: input.mimeType, filename: input.filename }, target.maxBytes);
|
|
66
|
+
const form = new FormData();
|
|
67
|
+
for (const [key, value] of target.fields)
|
|
68
|
+
form.append(key, value);
|
|
69
|
+
form.append('file', new Blob([new Uint8Array(input.bytes)], { type: input.mimeType }), input.filename);
|
|
70
|
+
const response = await input.transport.fetch(target.uploadUrl, { method: 'POST', body: form, signal: input.signal });
|
|
71
|
+
if (!response.ok)
|
|
72
|
+
throw new AiRuntimeError('upload_failed', `Bailian OSS upload failed with HTTP ${response.status}`);
|
|
73
|
+
return `oss://${target.objectKey}`;
|
|
74
|
+
}
|
|
@@ -4,9 +4,9 @@ import { uploadToFalWithTransport } from './fal-transport.js';
|
|
|
4
4
|
* `uploadToFalWithTransport`。省略 transport 只为兼容 0.1.3 的两参数调用。
|
|
5
5
|
*/
|
|
6
6
|
export async function uploadToFal(apiKey, prepared, transport) {
|
|
7
|
-
return await uploadToFalWithTransport(apiKey, prepared, transport ??
|
|
7
|
+
return await uploadToFalWithTransport(apiKey, prepared, transport ?? createHostFetchTransport());
|
|
8
8
|
}
|
|
9
|
-
function
|
|
9
|
+
function createHostFetchTransport() {
|
|
10
10
|
return {
|
|
11
11
|
async fetch(url, init) {
|
|
12
12
|
const hostFetch = globalThis.fetch;
|
|
@@ -5,3 +5,9 @@ import type { PreparedMediaBinary } from './prepared-media.js';
|
|
|
5
5
|
* 都经宿主 Transport,且直接传递编码后的字节,不依赖 File/Blob 或全局 fetch。
|
|
6
6
|
*/
|
|
7
7
|
export declare function uploadToFalWithTransport(apiKey: string, prepared: PreparedMediaBinary, transport: Transport, signal?: AbortSignal): Promise<string>;
|
|
8
|
+
/** 上传共享期限:用户取消和超时联动到同一网络信号,调用方必须 finally dispose。 */
|
|
9
|
+
export declare function createDeadlineSignal(parent: AbortSignal | undefined, timeoutMs: number): {
|
|
10
|
+
signal: AbortSignal;
|
|
11
|
+
didTimeout(): boolean;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
};
|
|
@@ -81,7 +81,8 @@ function assertHttpsUrl(value, field) {
|
|
|
81
81
|
function isJsonObject(value) {
|
|
82
82
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
83
83
|
}
|
|
84
|
-
|
|
84
|
+
/** 上传共享期限:用户取消和超时联动到同一网络信号,调用方必须 finally dispose。 */
|
|
85
|
+
export function createDeadlineSignal(parent, timeoutMs) {
|
|
85
86
|
const controller = new AbortController();
|
|
86
87
|
let timedOut = false;
|
|
87
88
|
const abort = () => controller.abort();
|
package/dist/upload/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 媒体文件上传相关工具(供应商官方上传服务封装):字段识别、上传策略、上传实现、
|
|
3
|
-
* `data:` URI
|
|
3
|
+
* `data:` URI 解析与 MIME 推断供宿主共享,避免重复实现媒体判定。
|
|
4
4
|
*/
|
|
5
5
|
export { buildMediaSourceIndex, classifyMediaKey, inheritMediaKind, isLocalMediaSource, isRemoteHttpUrl, normalizeLocalSource, resolveMediaKind, type MediaKind, type MediaSourceIndex, type ResolvedMediaKind, } from './media-fields.js';
|
|
6
6
|
export { defaultFilename, inferMimeFromPath, parseDataUri, type ParsedDataUri } from './media-binary.js';
|
|
7
7
|
export { preprocessRequestBody } from './preprocess.js';
|
|
8
8
|
export { fromBase64, toBase64, toDataUri, uploadToApiMart, uploadToKie, type PreparedMediaBinary, } from './providers.js';
|
|
9
|
-
export { uploadToFal } from './fal-
|
|
9
|
+
export { uploadToFal } from './fal-host-fetch.js';
|
|
10
10
|
export { uploadToFalWithTransport } from './fal-transport.js';
|
package/dist/upload/index.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 媒体文件上传相关工具(供应商官方上传服务封装):字段识别、上传策略、上传实现、
|
|
3
|
-
* `data:` URI
|
|
3
|
+
* `data:` URI 解析与 MIME 推断供宿主共享,避免重复实现媒体判定。
|
|
4
4
|
*/
|
|
5
5
|
export { buildMediaSourceIndex, classifyMediaKey, inheritMediaKind, isLocalMediaSource, isRemoteHttpUrl, normalizeLocalSource, resolveMediaKind, } from './media-fields.js';
|
|
6
|
-
//
|
|
7
|
-
// 实现(如 Electron 侧 sdk-runtime.ts)复用这里的实现,不再各自维护一份重复拷贝。
|
|
6
|
+
// 宿主的 MediaReader 共用解析规则,确保上传与本地读取的媒体类型一致。
|
|
8
7
|
export { defaultFilename, inferMimeFromPath, parseDataUri } from './media-binary.js';
|
|
9
|
-
// 任务 2.4 迁入:媒体上传主入口(识别请求体里的媒体字段、按供应商上传策略上传、回填 URL)。
|
|
10
8
|
export { preprocessRequestBody } from './preprocess.js';
|
|
11
|
-
//
|
|
12
|
-
// base64 编解码(UXP/浏览器没有 Node 的 `Buffer`)。
|
|
9
|
+
// UXP 与浏览器没有 Node Buffer,公共上传工具只依赖可移植的二进制契约。
|
|
13
10
|
export { fromBase64, toBase64, toDataUri, uploadToApiMart, uploadToKie, } from './providers.js';
|
|
14
|
-
export { uploadToFal } from './fal-
|
|
11
|
+
export { uploadToFal } from './fal-host-fetch.js';
|
|
15
12
|
export { uploadToFalWithTransport } from './fal-transport.js';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Transport } from '../runtime/Transport.js';
|
|
2
2
|
import type { PreparedMediaBinary } from './prepared-media.js';
|
|
3
|
-
export declare function uploadToKie(apiKey: string, prepared: PreparedMediaBinary, transport: Transport): Promise<string>;
|
|
3
|
+
export declare function uploadToKie(apiKey: string, prepared: PreparedMediaBinary, transport: Transport, signal?: AbortSignal): Promise<string>;
|
|
@@ -1,25 +1,47 @@
|
|
|
1
1
|
import { fetchProvider } from '../providers/provider-fetch.js';
|
|
2
2
|
import { readUploadJson, readUploadString } from './upload-response.js';
|
|
3
3
|
import { AiRuntimeError } from '../runtime/AiRuntimeError.js';
|
|
4
|
+
import { createDeadlineSignal } from './fal-transport.js';
|
|
4
5
|
const KIE_UPLOAD_URL = 'https://kieai.redpandaai.co/api/file-stream-upload';
|
|
5
|
-
|
|
6
|
+
const KIE_UPLOAD_TIMEOUT_MS = 120_000;
|
|
7
|
+
export async function uploadToKie(apiKey, prepared, transport, signal) {
|
|
8
|
+
if (signal?.aborted)
|
|
9
|
+
throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
|
|
6
10
|
const form = new FormData();
|
|
7
11
|
form.append('uploadPath', 'henji-uploads');
|
|
8
12
|
form.append('file', new Blob([prepared.bytes], {
|
|
9
13
|
type: inferUploadMime(prepared.filename),
|
|
10
14
|
}), prepared.filename);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
const deadline = createDeadlineSignal(signal, KIE_UPLOAD_TIMEOUT_MS);
|
|
16
|
+
try {
|
|
17
|
+
deadline.signal.throwIfAborted();
|
|
18
|
+
const response = await fetchProvider('KIE upload', KIE_UPLOAD_URL, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
21
|
+
body: form,
|
|
22
|
+
signal: deadline.signal,
|
|
23
|
+
}, { transport, retryPreconnectOnce: true });
|
|
24
|
+
const payload = await readUploadJson(response, 'KIE upload');
|
|
25
|
+
deadline.signal.throwIfAborted();
|
|
26
|
+
const fileUrl = readUploadString(payload, '/data/fileUrl')
|
|
27
|
+
?? readUploadString(payload, '/data/downloadUrl');
|
|
28
|
+
if (!fileUrl) {
|
|
29
|
+
throw new AiRuntimeError('upload_failed', `KIE upload missing file URL: ${JSON.stringify(payload)}`);
|
|
30
|
+
}
|
|
31
|
+
return fileUrl;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (signal?.aborted)
|
|
35
|
+
throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
|
|
36
|
+
if (deadline.didTimeout())
|
|
37
|
+
throw new AiRuntimeError('upload_timeout', `KIE upload exceeded ${KIE_UPLOAD_TIMEOUT_MS}ms`);
|
|
38
|
+
if (error instanceof Error && error.name === 'AbortError')
|
|
39
|
+
throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
deadline.dispose();
|
|
21
44
|
}
|
|
22
|
-
return fileUrl;
|
|
23
45
|
}
|
|
24
46
|
function inferUploadMime(filename) {
|
|
25
47
|
const lower = filename.toLowerCase();
|
|
@@ -42,6 +42,7 @@ export function inferMimeFromPath(filePath, mediaKind = 'unknown') {
|
|
|
42
42
|
case 'webm': return 'video/webm';
|
|
43
43
|
case 'mov': return 'video/quicktime';
|
|
44
44
|
case 'mp3': return 'audio/mpeg';
|
|
45
|
+
case 'aac': return 'audio/aac';
|
|
45
46
|
case 'm4a': return 'audio/mp4';
|
|
46
47
|
case 'wav': return 'audio/wav';
|
|
47
48
|
case 'flac': return 'audio/flac';
|
|
@@ -40,7 +40,7 @@ const LOCAL_SOURCE_PREFIXES = [
|
|
|
40
40
|
'http://asset.localhost/', 'https://asset.localhost/',
|
|
41
41
|
'http://tauri.localhost/', 'https://tauri.localhost/',
|
|
42
42
|
'asset://localhost/', 'tauri://localhost/',
|
|
43
|
-
'file://localhost
|
|
43
|
+
'file://localhost', 'file://',
|
|
44
44
|
];
|
|
45
45
|
/**
|
|
46
46
|
* 收集本次请求真实用到的本地媒体源,供按值识别使用。
|
|
@@ -106,7 +106,12 @@ export function classifyMediaKey(key) {
|
|
|
106
106
|
export function normalizeLocalSource(source) {
|
|
107
107
|
for (const prefix of LOCAL_SOURCE_PREFIXES) {
|
|
108
108
|
if (source.startsWith(prefix)) {
|
|
109
|
-
|
|
109
|
+
const decoded = safeDecodeURIComponent(source.slice(prefix.length));
|
|
110
|
+
// 受管引用是宿主标识,不是文件路径;其余协议只剥 scheme/host,保留 POSIX 根目录。
|
|
111
|
+
if (prefix === 'uxp://' || prefix === 'managed://')
|
|
112
|
+
return decoded;
|
|
113
|
+
const absolute = isLocalPath(decoded) ? decoded : `/${decoded}`;
|
|
114
|
+
return stripWindowsDrivePrefix(absolute);
|
|
110
115
|
}
|
|
111
116
|
}
|
|
112
117
|
return isLocalPath(source) ? source : undefined;
|
|
@@ -21,6 +21,8 @@ export interface ProviderMediaRewriteInput {
|
|
|
21
21
|
source: string;
|
|
22
22
|
prepared: PreparedMediaBinary;
|
|
23
23
|
params: JsonObject;
|
|
24
|
+
/** 正在预处理的整个请求体(只读);按模型申请上传凭证的供应商从这里取 model。 */
|
|
25
|
+
requestBody: JsonValue;
|
|
24
26
|
requestId?: string;
|
|
25
27
|
signal?: AbortSignal;
|
|
26
28
|
runtime: ResolvedRuntimeContext;
|
|
@@ -10,6 +10,7 @@ export async function preprocessWithProviderStrategy(input, strategy) {
|
|
|
10
10
|
providerId: input.providerId,
|
|
11
11
|
route: input.route,
|
|
12
12
|
params,
|
|
13
|
+
requestBody: body,
|
|
13
14
|
mediaSources: buildMediaSourceIndex(params),
|
|
14
15
|
mediaFields: new Map((input.constraints?.mediaFields ?? []).map(({ field, kind }) => [field, kind])),
|
|
15
16
|
requestId: input.requestId,
|
|
@@ -77,6 +78,7 @@ async function rewriteMediaSource(context, mediaKind, fieldName, source) {
|
|
|
77
78
|
source,
|
|
78
79
|
prepared,
|
|
79
80
|
params: context.params,
|
|
81
|
+
requestBody: context.requestBody,
|
|
80
82
|
requestId: context.requestId,
|
|
81
83
|
signal: context.signal,
|
|
82
84
|
runtime: context.runtime,
|
|
@@ -5,4 +5,4 @@ import type { JsonObject, JsonValue } from '../types/runtime.js';
|
|
|
5
5
|
* 默认全量入口的兼容组合层。真正的媒体遍历只有 `preprocess-core` 一份;按需 packs 则直接
|
|
6
6
|
* 注入对应 provider-scoped 策略,不会静态带入其他供应商。
|
|
7
7
|
*/
|
|
8
|
-
export declare function preprocessRequestBody(providerId: string, route: string, body: JsonValue, runtime: RuntimeContext, params?: JsonObject, constraints?: RuntimeConstraints, requestId?: string, signal?: AbortSignal): Promise<JsonValue>;
|
|
8
|
+
export declare function preprocessRequestBody(providerId: string, route: string, body: JsonValue, runtime: RuntimeContext, params?: JsonObject, constraints?: RuntimeConstraints, requestId?: string, signal?: AbortSignal, purpose?: 'generation' | 'llm'): Promise<JsonValue>;
|
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
import { strategy as apimart } from './provider-preprocessors/apimart.js';
|
|
2
|
+
import { strategy as bailian } from './provider-preprocessors/bailian.js';
|
|
2
3
|
import { strategy as dataUri } from './provider-preprocessors/data-uri.js';
|
|
3
4
|
import { strategy as fal } from './provider-preprocessors/fal.js';
|
|
4
5
|
import { preprocessProviderInput } from './provider-preprocessors/factory.js';
|
|
5
6
|
import { strategy as kie } from './provider-preprocessors/kie.js';
|
|
6
7
|
import { strategy as ppio } from './provider-preprocessors/ppio.js';
|
|
7
|
-
|
|
8
|
+
import { strategy as publicHost } from './provider-preprocessors/public-host.js';
|
|
9
|
+
import { strategy as volcengine } from './provider-preprocessors/volcengine.js';
|
|
10
|
+
const preprocessors = { apimart, bailian, fal, kie, modelscope: publicHost, ppio, volcengine };
|
|
11
|
+
/**
|
|
12
|
+
* 大语言模型对话的消息里,百炼、火山方舟的视频与音频直接收 Data URI;生成用的托管策略
|
|
13
|
+
* (百炼临时存储按生成模型签发凭证、方舟参考视频托管)不适用于对话接口。
|
|
14
|
+
*/
|
|
15
|
+
const llmPreprocessors = { apimart, fal, kie, modelscope: kie, ppio };
|
|
8
16
|
/**
|
|
9
17
|
* 默认全量入口的兼容组合层。真正的媒体遍历只有 `preprocess-core` 一份;按需 packs 则直接
|
|
10
18
|
* 注入对应 provider-scoped 策略,不会静态带入其他供应商。
|
|
11
19
|
*/
|
|
12
|
-
export async function preprocessRequestBody(providerId, route, body, runtime, params = {}, constraints, requestId, signal) {
|
|
13
|
-
const
|
|
20
|
+
export async function preprocessRequestBody(providerId, route, body, runtime, params = {}, constraints, requestId, signal, purpose = 'generation') {
|
|
21
|
+
const table = purpose === 'llm' ? llmPreprocessors : preprocessors;
|
|
22
|
+
const strategy = table[providerId] ?? dataUri;
|
|
14
23
|
return await preprocessProviderInput(strategy, {
|
|
15
24
|
providerId,
|
|
16
25
|
route,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const strategy: {
|
|
2
|
-
rewrite(
|
|
2
|
+
rewrite(input: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
|
|
3
3
|
};
|
|
4
4
|
export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { AiRuntimeError } from '../../runtime/AiRuntimeError.js';
|
|
2
2
|
import { uploadToApiMart } from '../apimart-upload.js';
|
|
3
|
+
import { uploadToPublicHost } from '../public-host-upload.js';
|
|
3
4
|
import { createGenerationPreprocessor } from './factory.js';
|
|
4
5
|
export const strategy = {
|
|
5
|
-
async rewrite(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
async rewrite(input) {
|
|
7
|
+
const { mediaKind, prepared, runtime, route, requestId, signal } = input;
|
|
8
|
+
// APIMart 只有图片上传端点;参考视频、音频经通用文件上传服务(KIE / Fal)托管成公网地址。
|
|
9
|
+
if (mediaKind !== 'image')
|
|
10
|
+
return await uploadToPublicHost(input, 'APIMart');
|
|
9
11
|
const apiKey = await runtime.credentials.get('generation', 'apimart');
|
|
10
12
|
if (!apiKey) {
|
|
11
13
|
throw new AiRuntimeError('missing_api_key', 'APIMart 本地图片必须先上传,请先在设置中配置 APIMart API Key。');
|
|
@@ -18,7 +20,7 @@ export const strategy = {
|
|
|
18
20
|
context,
|
|
19
21
|
});
|
|
20
22
|
try {
|
|
21
|
-
const url = await uploadToApiMart(apiKey, prepared, runtime.transport);
|
|
23
|
+
const url = await uploadToApiMart(apiKey, prepared, runtime.transport, signal);
|
|
22
24
|
runtime.logger.info('APIMart 本地图片上传完成', {
|
|
23
25
|
event: 'ai_runtime.upload.apimart_completed',
|
|
24
26
|
requestId,
|
|
@@ -28,6 +30,12 @@ export const strategy = {
|
|
|
28
30
|
return url;
|
|
29
31
|
}
|
|
30
32
|
catch (error) {
|
|
33
|
+
if (signal?.aborted || (error instanceof AiRuntimeError && error.code === 'cancelled') || (error instanceof Error && error.name === 'AbortError')) {
|
|
34
|
+
runtime.logger.info('APIMart 本地图片上传已取消', {
|
|
35
|
+
event: 'ai_runtime.upload.apimart_cancelled', requestId, providerId: 'apimart', context,
|
|
36
|
+
});
|
|
37
|
+
throw new AiRuntimeError('cancelled', 'APIMart upload cancelled');
|
|
38
|
+
}
|
|
31
39
|
runtime.logger.error('APIMart 本地图片上传失败', {
|
|
32
40
|
event: 'ai_runtime.upload.apimart_failed',
|
|
33
41
|
requestId,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 百炼图片收 Data URI;视频、音频只收公网 URL 或 oss://,本地文件传到百炼免费临时存储。
|
|
3
|
+
* 上传凭证按模型签发,所以从请求体的 model 申请;带 oss:// 的请求由供应商层加上解析头。
|
|
4
|
+
*/
|
|
5
|
+
export declare const strategy: {
|
|
6
|
+
rewrite(input: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
|
|
7
|
+
};
|
|
8
|
+
export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AiRuntimeError } from '../../runtime/AiRuntimeError.js';
|
|
2
|
+
import { getPointer } from '../../providers/helpers.js';
|
|
3
|
+
import { toDataUri } from '../base64.js';
|
|
4
|
+
import { uploadBytesToBailianOss } from '../bailian-oss-upload.js';
|
|
5
|
+
import { createGenerationPreprocessor } from './factory.js';
|
|
6
|
+
/**
|
|
7
|
+
* 百炼图片收 Data URI;视频、音频只收公网 URL 或 oss://,本地文件传到百炼免费临时存储。
|
|
8
|
+
* 上传凭证按模型签发,所以从请求体的 model 申请;带 oss:// 的请求由供应商层加上解析头。
|
|
9
|
+
*/
|
|
10
|
+
export const strategy = {
|
|
11
|
+
async rewrite(input) {
|
|
12
|
+
if (input.mediaKind === 'image')
|
|
13
|
+
return toDataUri(input.prepared.bytes, input.prepared.mimeType);
|
|
14
|
+
const apiKey = await input.runtime.credentials.get('generation', 'bailian');
|
|
15
|
+
if (!apiKey)
|
|
16
|
+
throw new AiRuntimeError('missing_api_key', '百炼本地视频、音频需要先上传,请先在设置中配置百炼 API Key。');
|
|
17
|
+
const modelId = getPointer(input.requestBody, '/model');
|
|
18
|
+
if (typeof modelId !== 'string' || !modelId)
|
|
19
|
+
throw new AiRuntimeError('invalid_request', '百炼请求缺少 model,无法申请上传凭证');
|
|
20
|
+
const context = { route: input.route, modelId, mediaKind: input.mediaKind, bytes: input.prepared.bytes.byteLength };
|
|
21
|
+
input.runtime.logger.info('百炼临时存储上传开始', {
|
|
22
|
+
event: 'ai_runtime.upload.bailian_oss_started', requestId: input.requestId, providerId: 'bailian', context,
|
|
23
|
+
});
|
|
24
|
+
try {
|
|
25
|
+
const url = await uploadBytesToBailianOss({
|
|
26
|
+
transport: input.runtime.transport, apiKey, modelId,
|
|
27
|
+
objectName: `${input.requestId ?? 'henji'}-${Date.now()}-${input.prepared.filename}`,
|
|
28
|
+
bytes: input.prepared.bytes, mimeType: input.prepared.mimeType, filename: input.prepared.filename, signal: input.signal,
|
|
29
|
+
});
|
|
30
|
+
input.runtime.logger.info('百炼临时存储上传完成', {
|
|
31
|
+
event: 'ai_runtime.upload.bailian_oss_completed', requestId: input.requestId, providerId: 'bailian', context,
|
|
32
|
+
});
|
|
33
|
+
return url;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (input.signal?.aborted || (error instanceof Error && error.name === 'AbortError'))
|
|
37
|
+
throw new AiRuntimeError('cancelled', '百炼上传已取消');
|
|
38
|
+
input.runtime.logger.error('百炼临时存储上传失败', {
|
|
39
|
+
event: 'ai_runtime.upload.bailian_oss_failed', requestId: input.requestId, providerId: 'bailian', context, error,
|
|
40
|
+
});
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export const preprocess = createGenerationPreprocessor(strategy);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const strategy: {
|
|
2
|
-
rewrite({ prepared, runtime }: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
|
|
2
|
+
rewrite({ prepared, runtime, route, requestId, providerId, signal }: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
|
|
3
3
|
};
|
|
4
4
|
export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
|
|
@@ -1,18 +1,35 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AiRuntimeError } from '../../runtime/AiRuntimeError.js';
|
|
2
2
|
import { uploadToKie } from '../kie-upload.js';
|
|
3
3
|
import { createGenerationPreprocessor } from './factory.js';
|
|
4
4
|
export const strategy = {
|
|
5
|
-
async rewrite({ prepared, runtime }) {
|
|
5
|
+
async rewrite({ prepared, runtime, route, requestId, providerId, signal }) {
|
|
6
6
|
const apiKey = await runtime.credentials.get('generation', 'kie');
|
|
7
|
-
if (apiKey) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
throw new AiRuntimeError('missing_api_key', 'KIE 本地文件必须先上传,请先在设置中配置 KIE API Key。');
|
|
9
|
+
}
|
|
10
|
+
const context = { route, mimeType: prepared.mimeType, bytes: prepared.bytes.byteLength };
|
|
11
|
+
runtime.logger.info('开始上传 KIE 本地文件', {
|
|
12
|
+
event: 'ai_runtime.upload.kie_started', requestId, providerId, context,
|
|
13
|
+
});
|
|
14
|
+
try {
|
|
15
|
+
const url = await uploadToKie(apiKey, prepared, runtime.transport, signal);
|
|
16
|
+
runtime.logger.info('KIE 本地文件上传完成', {
|
|
17
|
+
event: 'ai_runtime.upload.kie_completed', requestId, providerId, context,
|
|
18
|
+
});
|
|
19
|
+
return url;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (signal?.aborted || (error instanceof AiRuntimeError && error.code === 'cancelled') || (error instanceof Error && error.name === 'AbortError')) {
|
|
23
|
+
runtime.logger.info('KIE 本地文件上传已取消', {
|
|
24
|
+
event: 'ai_runtime.upload.kie_cancelled', requestId, providerId, context,
|
|
25
|
+
});
|
|
26
|
+
throw new AiRuntimeError('cancelled', 'KIE upload cancelled');
|
|
13
27
|
}
|
|
28
|
+
runtime.logger.error('KIE 本地文件上传失败', {
|
|
29
|
+
event: 'ai_runtime.upload.kie_failed', requestId, providerId, context, error,
|
|
30
|
+
});
|
|
31
|
+
throw error;
|
|
14
32
|
}
|
|
15
|
-
return toDataUri(prepared.bytes, prepared.mimeType);
|
|
16
33
|
},
|
|
17
34
|
};
|
|
18
35
|
export const preprocess = createGenerationPreprocessor(strategy);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { ProviderMediaRewriteInput } from '../preprocess-core.js';
|
|
2
1
|
export declare const strategy: {
|
|
3
|
-
rewrite(input: ProviderMediaRewriteInput): Promise<string>;
|
|
2
|
+
rewrite(input: import("../preprocess-core.js").ProviderMediaRewriteInput): Promise<string>;
|
|
4
3
|
preprocessObject({ route, object, rewrite }: import("../preprocess-core.js").ProviderObjectPreprocessInput): Promise<void>;
|
|
5
4
|
};
|
|
6
5
|
export declare const preprocess: import("../../index.js").GenerationRequestPreprocessor;
|