@henjicc/ai-sdk 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/README.md +580 -577
- package/dist/capabilities/speech-recognition/bailian/module.js +12 -13
- 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/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 +27 -23
- 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 +3 -4
- 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.js +2 -2
- package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +2 -2
- package/dist/discovery/index.js +13 -6
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -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.js +22 -5
- package/dist/providers/volcengine-voice-clone.js +13 -4
- 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/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-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 +156 -148
- 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 -125
- 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 -130
- 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 +379 -338
- package/docs/model-adaptation/Seed-ICL-2.0/Seed-ICL-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +65 -65
- 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 +115 -69
- 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 -288
- 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 -339
- 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
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成模型能力标签词表:标签只回答“这个模型能做什么事”,一件事只有一个标签。
|
|
3
|
+
*
|
|
4
|
+
* 两层判断标准:
|
|
5
|
+
* - 形态(form):按“输入什么、输出什么”判断,模型能做就打。
|
|
6
|
+
* - 专项(specialty):模型为这件事提供了专门的参数或接口才打;通用编辑模型只靠写提示词也能做到的不打。
|
|
7
|
+
*
|
|
8
|
+
* 能从模型配置读出的事实(供应商、类型、能传几张图、分辨率档位、出图数量、提示词语言)不做标签。
|
|
9
|
+
* 展示名属于宿主的产品文案,不放在 SDK。
|
|
10
|
+
*/
|
|
11
|
+
export declare const MODEL_TAG_DEFINITIONS: readonly [{
|
|
12
|
+
readonly id: "text-to-image";
|
|
13
|
+
readonly layer: "form";
|
|
14
|
+
readonly mediaType: "image";
|
|
15
|
+
readonly criterion: "不给图,只凭文字出图";
|
|
16
|
+
}, {
|
|
17
|
+
readonly id: "image-to-image";
|
|
18
|
+
readonly layer: "form";
|
|
19
|
+
readonly mediaType: "image";
|
|
20
|
+
readonly criterion: "给图,按提示词改图或据此生成新图(参考、融合也算)";
|
|
21
|
+
}, {
|
|
22
|
+
readonly id: "text-to-video";
|
|
23
|
+
readonly layer: "form";
|
|
24
|
+
readonly mediaType: "video";
|
|
25
|
+
readonly criterion: "不给图或视频,只凭文字出视频";
|
|
26
|
+
}, {
|
|
27
|
+
readonly id: "image-to-video";
|
|
28
|
+
readonly layer: "form";
|
|
29
|
+
readonly mediaType: "video";
|
|
30
|
+
readonly criterion: "给一张图作首帧生成视频";
|
|
31
|
+
}, {
|
|
32
|
+
readonly id: "start-end-frame";
|
|
33
|
+
readonly layer: "form";
|
|
34
|
+
readonly mediaType: "video";
|
|
35
|
+
readonly criterion: "同时给首帧和尾帧生成中间过程;必须同时具备图生视频";
|
|
36
|
+
}, {
|
|
37
|
+
readonly id: "reference-mode";
|
|
38
|
+
readonly layer: "form";
|
|
39
|
+
readonly mediaType: "video";
|
|
40
|
+
readonly criterion: "图片或视频只作参考生成新片段,不锁定首帧,也不保证在原视频上改或接在其后";
|
|
41
|
+
}, {
|
|
42
|
+
readonly id: "video-to-video";
|
|
43
|
+
readonly layer: "form";
|
|
44
|
+
readonly mediaType: "video";
|
|
45
|
+
readonly criterion: "输入一段视频,在原时间轴上改内容";
|
|
46
|
+
}, {
|
|
47
|
+
readonly id: "video-extension";
|
|
48
|
+
readonly layer: "form";
|
|
49
|
+
readonly mediaType: "video";
|
|
50
|
+
readonly criterion: "接在输入视频之后继续生成";
|
|
51
|
+
}, {
|
|
52
|
+
readonly id: "motion-control";
|
|
53
|
+
readonly layer: "form";
|
|
54
|
+
readonly mediaType: "video";
|
|
55
|
+
readonly criterion: "用一段视频的动作驱动图里的主体";
|
|
56
|
+
}, {
|
|
57
|
+
readonly id: "audio-to-video";
|
|
58
|
+
readonly layer: "form";
|
|
59
|
+
readonly mediaType: "video";
|
|
60
|
+
readonly criterion: "输入一段音频,生成与之同步、等长的视频";
|
|
61
|
+
}, {
|
|
62
|
+
readonly id: "text-to-audio";
|
|
63
|
+
readonly layer: "form";
|
|
64
|
+
readonly mediaType: "audio";
|
|
65
|
+
readonly criterion: "文字转语音";
|
|
66
|
+
}, {
|
|
67
|
+
readonly id: "voice-clone";
|
|
68
|
+
readonly layer: "form";
|
|
69
|
+
readonly mediaType: "audio";
|
|
70
|
+
readonly criterion: "用一段声音生成可复用的音色";
|
|
71
|
+
}, {
|
|
72
|
+
readonly id: "inpainting";
|
|
73
|
+
readonly layer: "specialty";
|
|
74
|
+
readonly mediaType: "image";
|
|
75
|
+
readonly criterion: "有遮罩输入,按提示词只改遮罩内的区域";
|
|
76
|
+
}, {
|
|
77
|
+
readonly id: "erase";
|
|
78
|
+
readonly layer: "specialty";
|
|
79
|
+
readonly mediaType: "image";
|
|
80
|
+
readonly criterion: "有遮罩输入,不需要提示词,把遮罩内的东西去掉";
|
|
81
|
+
}, {
|
|
82
|
+
readonly id: "relighting";
|
|
83
|
+
readonly layer: "specialty";
|
|
84
|
+
readonly mediaType: "image";
|
|
85
|
+
readonly criterion: "有光源方向、强度或光照预设等专门参数";
|
|
86
|
+
}, {
|
|
87
|
+
readonly id: "multi-angle";
|
|
88
|
+
readonly layer: "specialty";
|
|
89
|
+
readonly mediaType: "image";
|
|
90
|
+
readonly criterion: "有镜头角度、视角预设等专门参数";
|
|
91
|
+
}, {
|
|
92
|
+
readonly id: "outpainting";
|
|
93
|
+
readonly layer: "specialty";
|
|
94
|
+
readonly mediaType: "image";
|
|
95
|
+
readonly criterion: "有扩展方向、边距等专门参数";
|
|
96
|
+
}, {
|
|
97
|
+
readonly id: "upscaling";
|
|
98
|
+
readonly layer: "specialty";
|
|
99
|
+
readonly mediaType: "image";
|
|
100
|
+
readonly criterion: "专门提高分辨率,有放大倍数或目标尺寸参数";
|
|
101
|
+
}, {
|
|
102
|
+
readonly id: "photo-restoration";
|
|
103
|
+
readonly layer: "specialty";
|
|
104
|
+
readonly mediaType: "image";
|
|
105
|
+
readonly criterion: "专门修复老照片的划痕、褪色、模糊";
|
|
106
|
+
}, {
|
|
107
|
+
readonly id: "layer-decomposition";
|
|
108
|
+
readonly layer: "specialty";
|
|
109
|
+
readonly mediaType: "image";
|
|
110
|
+
readonly criterion: "把一张图拆成多张分层图";
|
|
111
|
+
}, {
|
|
112
|
+
readonly id: "transparent-background";
|
|
113
|
+
readonly layer: "specialty";
|
|
114
|
+
readonly mediaType: "image";
|
|
115
|
+
readonly criterion: "能输出带透明通道的图(抠图、保留透明、透明背景参数)";
|
|
116
|
+
}, {
|
|
117
|
+
readonly id: "low-light-enhancement";
|
|
118
|
+
readonly layer: "specialty";
|
|
119
|
+
readonly mediaType: "image";
|
|
120
|
+
readonly criterion: "专门提亮暗光照片";
|
|
121
|
+
}, {
|
|
122
|
+
readonly id: "product-photography";
|
|
123
|
+
readonly layer: "specialty";
|
|
124
|
+
readonly mediaType: "image";
|
|
125
|
+
readonly criterion: "专门给商品图生成新的背景与场景";
|
|
126
|
+
}, {
|
|
127
|
+
readonly id: "multi-speaker-dialogue";
|
|
128
|
+
readonly layer: "specialty";
|
|
129
|
+
readonly mediaType: "audio";
|
|
130
|
+
readonly criterion: "一段脚本里多个说话人,一次合成整段对话";
|
|
131
|
+
}, {
|
|
132
|
+
readonly id: "timestamps";
|
|
133
|
+
readonly layer: "specialty";
|
|
134
|
+
readonly mediaType: "audio";
|
|
135
|
+
readonly criterion: "合成结果附带逐字或逐词的时间";
|
|
136
|
+
}];
|
|
137
|
+
export type ModelTagDefinition = (typeof MODEL_TAG_DEFINITIONS)[number];
|
|
138
|
+
export type ModelTag = ModelTagDefinition['id'];
|
|
139
|
+
export type ModelTagLayer = ModelTagDefinition['layer'];
|
|
140
|
+
export declare const MODEL_TAGS: readonly ModelTag[];
|
|
141
|
+
export declare function isModelTag(value: string): value is ModelTag;
|
|
142
|
+
export declare function getModelTagDefinition(tag: ModelTag): ModelTagDefinition;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 生成模型能力标签词表:标签只回答“这个模型能做什么事”,一件事只有一个标签。
|
|
3
|
+
*
|
|
4
|
+
* 两层判断标准:
|
|
5
|
+
* - 形态(form):按“输入什么、输出什么”判断,模型能做就打。
|
|
6
|
+
* - 专项(specialty):模型为这件事提供了专门的参数或接口才打;通用编辑模型只靠写提示词也能做到的不打。
|
|
7
|
+
*
|
|
8
|
+
* 能从模型配置读出的事实(供应商、类型、能传几张图、分辨率档位、出图数量、提示词语言)不做标签。
|
|
9
|
+
* 展示名属于宿主的产品文案,不放在 SDK。
|
|
10
|
+
*/
|
|
11
|
+
export const MODEL_TAG_DEFINITIONS = [
|
|
12
|
+
{ id: 'text-to-image', layer: 'form', mediaType: 'image', criterion: '不给图,只凭文字出图' },
|
|
13
|
+
{ id: 'image-to-image', layer: 'form', mediaType: 'image', criterion: '给图,按提示词改图或据此生成新图(参考、融合也算)' },
|
|
14
|
+
{ id: 'text-to-video', layer: 'form', mediaType: 'video', criterion: '不给图或视频,只凭文字出视频' },
|
|
15
|
+
{ id: 'image-to-video', layer: 'form', mediaType: 'video', criterion: '给一张图作首帧生成视频' },
|
|
16
|
+
{ id: 'start-end-frame', layer: 'form', mediaType: 'video', criterion: '同时给首帧和尾帧生成中间过程;必须同时具备图生视频' },
|
|
17
|
+
{ id: 'reference-mode', layer: 'form', mediaType: 'video', criterion: '图片或视频只作参考生成新片段,不锁定首帧,也不保证在原视频上改或接在其后' },
|
|
18
|
+
{ id: 'video-to-video', layer: 'form', mediaType: 'video', criterion: '输入一段视频,在原时间轴上改内容' },
|
|
19
|
+
{ id: 'video-extension', layer: 'form', mediaType: 'video', criterion: '接在输入视频之后继续生成' },
|
|
20
|
+
{ id: 'motion-control', layer: 'form', mediaType: 'video', criterion: '用一段视频的动作驱动图里的主体' },
|
|
21
|
+
{ id: 'audio-to-video', layer: 'form', mediaType: 'video', criterion: '输入一段音频,生成与之同步、等长的视频' },
|
|
22
|
+
{ id: 'text-to-audio', layer: 'form', mediaType: 'audio', criterion: '文字转语音' },
|
|
23
|
+
{ id: 'voice-clone', layer: 'form', mediaType: 'audio', criterion: '用一段声音生成可复用的音色' },
|
|
24
|
+
{ id: 'inpainting', layer: 'specialty', mediaType: 'image', criterion: '有遮罩输入,按提示词只改遮罩内的区域' },
|
|
25
|
+
{ id: 'erase', layer: 'specialty', mediaType: 'image', criterion: '有遮罩输入,不需要提示词,把遮罩内的东西去掉' },
|
|
26
|
+
{ id: 'relighting', layer: 'specialty', mediaType: 'image', criterion: '有光源方向、强度或光照预设等专门参数' },
|
|
27
|
+
{ id: 'multi-angle', layer: 'specialty', mediaType: 'image', criterion: '有镜头角度、视角预设等专门参数' },
|
|
28
|
+
{ id: 'outpainting', layer: 'specialty', mediaType: 'image', criterion: '有扩展方向、边距等专门参数' },
|
|
29
|
+
{ id: 'upscaling', layer: 'specialty', mediaType: 'image', criterion: '专门提高分辨率,有放大倍数或目标尺寸参数' },
|
|
30
|
+
{ id: 'photo-restoration', layer: 'specialty', mediaType: 'image', criterion: '专门修复老照片的划痕、褪色、模糊' },
|
|
31
|
+
{ id: 'layer-decomposition', layer: 'specialty', mediaType: 'image', criterion: '把一张图拆成多张分层图' },
|
|
32
|
+
{ id: 'transparent-background', layer: 'specialty', mediaType: 'image', criterion: '能输出带透明通道的图(抠图、保留透明、透明背景参数)' },
|
|
33
|
+
{ id: 'low-light-enhancement', layer: 'specialty', mediaType: 'image', criterion: '专门提亮暗光照片' },
|
|
34
|
+
{ id: 'product-photography', layer: 'specialty', mediaType: 'image', criterion: '专门给商品图生成新的背景与场景' },
|
|
35
|
+
{ id: 'multi-speaker-dialogue', layer: 'specialty', mediaType: 'audio', criterion: '一段脚本里多个说话人,一次合成整段对话' },
|
|
36
|
+
{ id: 'timestamps', layer: 'specialty', mediaType: 'audio', criterion: '合成结果附带逐字或逐词的时间' },
|
|
37
|
+
];
|
|
38
|
+
export const MODEL_TAGS = MODEL_TAG_DEFINITIONS.map((definition) => definition.id);
|
|
39
|
+
export function isModelTag(value) {
|
|
40
|
+
return MODEL_TAGS.includes(value);
|
|
41
|
+
}
|
|
42
|
+
export function getModelTagDefinition(tag) {
|
|
43
|
+
return MODEL_TAG_DEFINITIONS.find((definition) => definition.id === tag);
|
|
44
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Source audio clock, milliseconds. An output index addresses the corresponding generated audio. */
|
|
2
|
+
export type SpeechTimings = {
|
|
3
|
+
granularity: 'char' | 'word' | 'sentence';
|
|
4
|
+
items: Array<{
|
|
5
|
+
text: string;
|
|
6
|
+
startMs: number;
|
|
7
|
+
endMs: number;
|
|
8
|
+
confidence?: number;
|
|
9
|
+
}>;
|
|
10
|
+
};
|
|
11
|
+
/** Stored in generation metadata.outputTimings; absent means the provider supplied no timestamps. */
|
|
12
|
+
export type GenerationOutputTimings = Array<{
|
|
13
|
+
outputIndex: number;
|
|
14
|
+
timings: SpeechTimings;
|
|
15
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -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();
|
|
@@ -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;
|