@henjicc/ai-sdk 0.2.8 → 0.4.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 +157 -141
- package/README.md +497 -455
- package/dist/capabilities/embedding/bailian.d.ts +23 -0
- package/dist/capabilities/embedding/bailian.js +10 -0
- package/dist/capabilities/embedding/bigmodel.d.ts +9 -0
- package/dist/capabilities/embedding/bigmodel.js +5 -0
- package/dist/capabilities/embedding/index.d.ts +1 -0
- package/dist/capabilities/embedding/index.js +1 -0
- package/dist/capabilities/embedding/ppio.d.ts +7 -0
- package/dist/capabilities/embedding/ppio.js +5 -0
- package/dist/capabilities/embedding/siliconflow.d.ts +21 -0
- package/dist/capabilities/embedding/siliconflow.js +10 -0
- package/dist/capabilities/embedding/volcengine.d.ts +10 -0
- package/dist/capabilities/embedding/volcengine.js +6 -0
- package/dist/capabilities/rerank/bailian.d.ts +21 -0
- package/dist/capabilities/rerank/bailian.js +14 -0
- package/dist/capabilities/rerank/bigmodel.d.ts +9 -0
- package/dist/capabilities/rerank/bigmodel.js +5 -0
- package/dist/capabilities/rerank/index.d.ts +1 -0
- package/dist/capabilities/rerank/index.js +1 -0
- package/dist/capabilities/rerank/ppio.d.ts +7 -0
- package/dist/capabilities/rerank/ppio.js +5 -0
- package/dist/capabilities/rerank/siliconflow.d.ts +21 -0
- package/dist/capabilities/rerank/siliconflow.js +10 -0
- package/dist/capabilities/retrieval/http.d.ts +3 -0
- package/dist/capabilities/retrieval/http.js +48 -0
- package/dist/capabilities/retrieval/module.d.ts +11 -0
- package/dist/capabilities/retrieval/module.js +110 -0
- package/dist/capabilities/retrieval/types.d.ts +54 -0
- package/dist/capabilities/retrieval/types.js +1 -0
- package/dist/capabilities/retrieval/validation.d.ts +10 -0
- package/dist/capabilities/retrieval/validation.js +65 -0
- package/dist/capabilities/types.d.ts +1 -1
- package/dist/catalog/apimart/gpt-image-2.5.model.d.ts +2 -0
- package/dist/catalog/apimart/gpt-image-2.5.model.js +51 -0
- package/dist/catalog/fal/gpt-image-2.5.model.d.ts +2 -0
- package/dist/catalog/fal/gpt-image-2.5.model.js +53 -0
- package/dist/catalog/fal/ic-light-v2.model.js +9 -13
- package/dist/catalog/grsai/gpt-image-2.5.model.d.ts +2 -0
- package/dist/catalog/grsai/gpt-image-2.5.model.js +54 -0
- package/dist/catalog/grsai/gptImage25Sizes.d.ts +1 -0
- package/dist/catalog/grsai/gptImage25Sizes.js +76 -0
- package/dist/catalog/index.js +112 -104
- package/dist/catalog/kie/gpt-image-2.5.model.d.ts +2 -0
- package/dist/catalog/kie/gpt-image-2.5.model.js +38 -0
- package/dist/catalog/shared/gptImage25.d.ts +16 -0
- package/dist/catalog/shared/gptImage25.js +48 -0
- package/dist/catalog/shared/gptImage25Pricing.d.ts +12 -0
- package/dist/catalog/shared/gptImage25Pricing.js +508 -0
- package/dist/llm/defaults.d.ts +1 -1
- package/dist/llm/defaults.js +1 -1
- package/dist/llm/discovery.d.ts +2 -0
- package/dist/llm/discovery.js +16 -5
- package/dist/llm/modelCatalogEntries.js +32 -0
- package/dist/llm/providerPresets.d.ts +3 -1
- package/dist/llm/providerPresets.js +6 -3
- package/dist/llm/providerReasoningRequest.js +14 -1
- package/dist/llm/siliconflow/index.d.ts +21 -0
- package/dist/llm/siliconflow/index.js +32 -0
- package/dist/llm/siliconflow/preset.d.ts +6 -0
- package/dist/llm/siliconflow/preset.js +33 -0
- package/dist/packs/models/apimart/gpt-image-2.5.d.ts +6 -0
- package/dist/packs/models/apimart/gpt-image-2.5.js +7 -0
- package/dist/packs/models/fal/gpt-image-2.5.d.ts +6 -0
- package/dist/packs/models/fal/gpt-image-2.5.js +7 -0
- package/dist/packs/models/grsai/gpt-image-2.5.d.ts +6 -0
- package/dist/packs/models/grsai/gpt-image-2.5.js +7 -0
- package/dist/packs/models/kie/gpt-image-2.5.d.ts +6 -0
- package/dist/packs/models/kie/gpt-image-2.5.js +7 -0
- package/dist/packs/provider-packs/apimart.d.ts +1 -1
- package/dist/packs/provider-packs/apimart.js +21 -20
- package/dist/packs/provider-packs/fal.d.ts +1 -1
- package/dist/packs/provider-packs/fal.js +37 -36
- package/dist/packs/provider-packs/grsai.d.ts +1 -1
- package/dist/packs/provider-packs/grsai.js +6 -5
- package/dist/packs/provider-packs/kie.d.ts +1 -1
- package/dist/packs/provider-packs/kie.js +28 -27
- package/dist/packs/tool-models/fal/{qwen-image-edit-2509-multiple-angles.d.ts → qwen-image-edit-2511-multiple-angles.d.ts} +1 -1
- package/dist/packs/tool-models/fal/{qwen-image-edit-2509-multiple-angles.js → qwen-image-edit-2511-multiple-angles.js} +1 -1
- package/dist/packs/tool-packs/fal-multi-angle-tools.js +1 -1
- package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2511-multiple-angles.model.d.ts +2 -0
- package/dist/tool-packs/fal-multi-angle/models/{qwen-image-edit-2509-multiple-angles.model.js → qwen-image-edit-2511-multiple-angles.model.js} +20 -17
- package/docs/README.md +26 -26
- package/docs/consumers.md +56 -48
- package/docs/llm-adaptation/README.md +139 -137
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +103 -91
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +75 -75
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/MiniMax.md +84 -84
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +85 -85
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +232 -232
- 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 +87 -87
- package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274Qwen.md +84 -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/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/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 +43 -43
- package/docs/model-adaptation/Fun-ASR-Flash-2026-06-15/Fun-ASR-Flash-2026-06-15_/347/231/276/347/202/274.md +41 -41
- package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +37 -37
- 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 +207 -207
- 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 +137 -137
- package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_KIE.md +93 -93
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -0
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -0
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +53 -0
- package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -0
- package/docs/model-adaptation/GPT-OSS-20B/GPT-OSS-20B_Groq.md +62 -62
- package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +124 -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 +129 -129
- package/docs/model-adaptation/Grok-Imagine/Grok-Imagine_KIE.md +36 -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/Hailuo-02/Hailuo-02_Fal.md +93 -93
- package/docs/model-adaptation/Hailuo-02/Hailuo-02_KIE.md +56 -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/Hailuo-2.3/Hailuo-2.3_/346/264/276/346/254/247/344/272/221.md +70 -70
- package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +97 -94
- 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 +89 -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 +119 -119
- package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_APIMart.md +125 -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 +143 -143
- package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_APIMart.md +85 -85
- package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_Fal.md +83 -83
- package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_KIE.md +84 -84
- package/docs/model-adaptation/Midjourney/Midjourney_APIMart.md +396 -396
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_APIMart.md +234 -234
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_Fal.md +108 -108
- package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_KIE.md +111 -111
- 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 +70 -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-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-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 +84 -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 -0
- package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +47 -47
- package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +39 -39
- package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +39 -39
- package/docs/model-adaptation/Qwen3-ASR-Flash/Qwen3-ASR-Flash_/347/231/276/347/202/274.md +40 -40
- package/docs/model-adaptation/Qwen3-ASR-Flash-2026-02-10/Qwen3-ASR-Flash-2026-02-10_/347/231/276/347/202/274.md +33 -33
- package/docs/model-adaptation/Qwen3-ASR-Flash-Filetrans/Qwen3-ASR-Flash-Filetrans_/347/231/276/347/202/274.md +41 -41
- package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +35 -35
- 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 +313 -295
- 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 +143 -143
- 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 +86 -86
- 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 +78 -78
- package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_APIMart.md +89 -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 +78 -78
- package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_APIMart.md +212 -212
- package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_Fal.md +94 -94
- package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_KIE.md +89 -89
- package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_APIMart.md +106 -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 +108 -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 +69 -69
- package/docs/model-adaptation/TeleSpeechASR/TeleSpeechASR_/347/241/205/345/237/272/346/265/201/345/212/250.md +72 -72
- 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/Wan-2.5-Preview/Wan-2.5-Preview_/346/264/276/346/254/247/344/272/221.md +82 -82
- package/docs/model-adaptation/Wan-2.6/Wan-2.6_/346/264/276/346/254/247/344/272/221.md +84 -84
- package/docs/model-adaptation/Wan-2.7/Wan-2.7_/346/264/276/346/254/247/344/272/221.md +122 -122
- package/docs/model-adaptation/Whisper-Large-v3/Whisper-Large-v3_Groq.md +76 -76
- package/docs/model-adaptation/Whisper-Large-v3-Turbo/Whisper-Large-v3-Turbo_Groq.md +75 -75
- 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 +95 -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 +97 -97
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/APIMart.md +238 -238
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Fal.md +172 -172
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Groq.md +121 -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 +131 -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 +147 -138
- 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 +181 -171
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +237 -227
- 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 +140 -75
- package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//351/255/224/346/220/255.md +207 -207
- package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +338 -311
- 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 +32 -32
- 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 +255 -195
- package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2509-multiple-angles.model.d.ts +0 -2
- package/docs/model-adaptation/Qwen-Image-Edit-2509-/345/244/232/350/247/222/345/272/246/Qwen-Image-Edit-2509-/345/244/232/350/247/222/345/272/246_Fal.md +0 -116
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
# llm-chat
|
|
2
|
-
|
|
3
|
-
用 `@henjicc/ai-sdk@0.
|
|
4
|
-
不会把 generation、BigModel preset/models/pricing、Groq 或 LLM modules 打进示例 bundle;
|
|
5
|
-
通用端点身份解析所需的 BigModel profiles 仍会保留。默认目标是
|
|
6
|
-
DeepSeek `deepseek-v4-flash`,提示词要求只回复 `SDK OK`,并限制最多 16 tokens。示例显式传入
|
|
7
|
-
`reasoning: { enabled: false, effort: 'high' }`,避免短输出预算被供应商默认思考过程占用;若流结束后
|
|
8
|
-
没有任何文本 token,示例会明确失败。
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
npm install
|
|
12
|
-
npm run dry-run
|
|
13
|
-
npm run check:bundle
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
`dry-run` 使用本地 SSE fixture,不访问网络。真实调用前先确认供应商、模型、Base URL 和价格:
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
LLM_API_KEY='你的密钥' \
|
|
20
|
-
LLM_PROVIDER_ID='deepseek' \
|
|
21
|
-
LLM_MODEL_ID='deepseek-v4-flash' \
|
|
22
|
-
LLM_BASE_URL='https://api.deepseek.com' \
|
|
23
|
-
npm start
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
DeepSeek Flash 当前资料价为缓存未命中输入 ¥1.5/百万 tokens(闲时)或 ¥3/百万(高峰),输出
|
|
27
|
-
¥4.5/百万(闲时)或 ¥9/百万(高峰)。示例按高峰价、并把字符数保守当 token 数输出粗估;实际账单
|
|
28
|
-
以供应商 usage 和账单为准。
|
|
29
|
-
|
|
30
|
-
示例对 `/chat/completions` 的 POST 设置单次外网闸门,进程内第二次付费请求会在本地被拒绝。
|
|
31
|
-
要取消流式请求,保存 `resolveLlmTaskId(request)` 返回的 `taskId`,再调用
|
|
32
|
-
`cancelLlmChatTask(taskId)`。按需流式入口没有需要宿主释放的客户端实例。
|
|
1
|
+
# llm-chat
|
|
2
|
+
|
|
3
|
+
用 `@henjicc/ai-sdk@0.4.0` 的 `llm/streaming` 按需入口走 OpenAI-compatible SSE 流式对话,
|
|
4
|
+
不会把 generation、BigModel preset/models/pricing、Groq 或 LLM modules 打进示例 bundle;
|
|
5
|
+
通用端点身份解析所需的 BigModel profiles 仍会保留。默认目标是
|
|
6
|
+
DeepSeek `deepseek-v4-flash`,提示词要求只回复 `SDK OK`,并限制最多 16 tokens。示例显式传入
|
|
7
|
+
`reasoning: { enabled: false, effort: 'high' }`,避免短输出预算被供应商默认思考过程占用;若流结束后
|
|
8
|
+
没有任何文本 token,示例会明确失败。
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install
|
|
12
|
+
npm run dry-run
|
|
13
|
+
npm run check:bundle
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`dry-run` 使用本地 SSE fixture,不访问网络。真实调用前先确认供应商、模型、Base URL 和价格:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
LLM_API_KEY='你的密钥' \
|
|
20
|
+
LLM_PROVIDER_ID='deepseek' \
|
|
21
|
+
LLM_MODEL_ID='deepseek-v4-flash' \
|
|
22
|
+
LLM_BASE_URL='https://api.deepseek.com' \
|
|
23
|
+
npm start
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
DeepSeek Flash 当前资料价为缓存未命中输入 ¥1.5/百万 tokens(闲时)或 ¥3/百万(高峰),输出
|
|
27
|
+
¥4.5/百万(闲时)或 ¥9/百万(高峰)。示例按高峰价、并把字符数保守当 token 数输出粗估;实际账单
|
|
28
|
+
以供应商 usage 和账单为准。
|
|
29
|
+
|
|
30
|
+
示例对 `/chat/completions` 的 POST 设置单次外网闸门,进程内第二次付费请求会在本地被拒绝。
|
|
31
|
+
要取消流式请求,保存 `resolveLlmTaskId(request)` 返回的 `taskId`,再调用
|
|
32
|
+
`cancelLlmChatTask(taskId)`。按需流式入口没有需要宿主释放的客户端实例。
|
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
resolveLlmTaskId,
|
|
3
|
-
runLlmChatStream,
|
|
4
|
-
type LlmChatRequestDto,
|
|
5
|
-
type MediaReader,
|
|
6
|
-
type RuntimeContext,
|
|
7
|
-
type Transport,
|
|
8
|
-
} from '@henjicc/ai-sdk/llm/streaming'
|
|
9
|
-
|
|
10
|
-
const live = process.argv.includes('--live')
|
|
11
|
-
const providerId = process.env.LLM_PROVIDER_ID?.trim() || 'deepseek'
|
|
12
|
-
const modelId = process.env.LLM_MODEL_ID?.trim() || 'deepseek-v4-flash'
|
|
13
|
-
const baseUrl = process.env.LLM_BASE_URL?.trim() || 'https://api.deepseek.com'
|
|
14
|
-
|
|
15
|
-
class SingleChatTransport implements Transport {
|
|
16
|
-
private paidRequests = 0
|
|
17
|
-
|
|
18
|
-
async fetch(url: string, init?: RequestInit): Promise<Response> {
|
|
19
|
-
if ((init?.method ?? 'GET').toUpperCase() === 'POST' && new URL(url).pathname.endsWith('/chat/completions')) {
|
|
20
|
-
this.paidRequests += 1
|
|
21
|
-
if (this.paidRequests > 1) throw new Error('Blocked a repeated paid LLM request')
|
|
22
|
-
}
|
|
23
|
-
return await fetch(url, init)
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
class DryRunTransport implements Transport {
|
|
28
|
-
calls = 0
|
|
29
|
-
|
|
30
|
-
async fetch(): Promise<Response> {
|
|
31
|
-
this.calls += 1
|
|
32
|
-
return new Response(
|
|
33
|
-
'data: {"choices":[{"delta":{"content":"SDK OK"}}]}\n\ndata: [DONE]\n\n',
|
|
34
|
-
{ status: 200, headers: { 'Content-Type': 'text/event-stream' } },
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const unusedMedia: MediaReader = {
|
|
40
|
-
async read() {
|
|
41
|
-
throw new Error('This text-only example does not read media')
|
|
42
|
-
},
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async function main(): Promise<void> {
|
|
46
|
-
const dryTransport = new DryRunTransport()
|
|
47
|
-
const apiKey = live ? process.env.LLM_API_KEY?.trim() : 'dry-run-not-a-secret'
|
|
48
|
-
if (!apiKey) throw new Error('Missing LLM_API_KEY')
|
|
49
|
-
|
|
50
|
-
const runtime: RuntimeContext = {
|
|
51
|
-
transport: live ? new SingleChatTransport() : dryTransport,
|
|
52
|
-
credentials: {
|
|
53
|
-
get: (scope, requestedProviderId) => scope === 'llm' && requestedProviderId === providerId
|
|
54
|
-
? apiKey
|
|
55
|
-
: undefined,
|
|
56
|
-
},
|
|
57
|
-
media: unusedMedia,
|
|
58
|
-
}
|
|
59
|
-
const prompt = '只回复两个英文单词:SDK OK'
|
|
60
|
-
const request: LlmChatRequestDto = {
|
|
61
|
-
requestId: live ? `example-llm-${Date.now()}` : 'example-llm-dry-run',
|
|
62
|
-
providerId,
|
|
63
|
-
modelId,
|
|
64
|
-
adapter: providerId === 'deepseek' ? 'deepseek' : 'openai',
|
|
65
|
-
baseUrl,
|
|
66
|
-
messages: [{ role: 'user', content: prompt }],
|
|
67
|
-
capabilities: { reasoning: providerId === 'deepseek' },
|
|
68
|
-
reasoning: providerId === 'deepseek'
|
|
69
|
-
? { enabled: false, effort: 'high' }
|
|
70
|
-
: undefined,
|
|
71
|
-
policy: { max_tokens: 16 },
|
|
72
|
-
}
|
|
73
|
-
const taskId = resolveLlmTaskId(request)
|
|
74
|
-
let output = ''
|
|
75
|
-
|
|
76
|
-
const outcome = await runLlmChatStream(request, taskId, (event) => {
|
|
77
|
-
if (event.type === 'Token') output += event.data
|
|
78
|
-
}, runtime)
|
|
79
|
-
|
|
80
|
-
if (!output.trim()) {
|
|
81
|
-
throw new Error('LLM completed without a text token')
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const conservativeCny = ((outcome.inputChars * 3) + (outcome.outputChars * 9)) / 1_000_000
|
|
85
|
-
console.log(JSON.stringify({
|
|
86
|
-
mode: live ? 'live' : 'dry-run',
|
|
87
|
-
networkCalls: live ? 1 : 0,
|
|
88
|
-
interceptedRequests: live ? undefined : dryTransport.calls,
|
|
89
|
-
providerId,
|
|
90
|
-
modelId,
|
|
91
|
-
output,
|
|
92
|
-
elapsedMs: outcome.elapsedMs,
|
|
93
|
-
conservativeCnyEstimate: Number(conservativeCny.toFixed(6)),
|
|
94
|
-
}))
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
void main().catch((error: unknown) => {
|
|
98
|
-
console.error(error instanceof Error ? error.message : String(error))
|
|
99
|
-
process.exitCode = 1
|
|
100
|
-
})
|
|
1
|
+
import {
|
|
2
|
+
resolveLlmTaskId,
|
|
3
|
+
runLlmChatStream,
|
|
4
|
+
type LlmChatRequestDto,
|
|
5
|
+
type MediaReader,
|
|
6
|
+
type RuntimeContext,
|
|
7
|
+
type Transport,
|
|
8
|
+
} from '@henjicc/ai-sdk/llm/streaming'
|
|
9
|
+
|
|
10
|
+
const live = process.argv.includes('--live')
|
|
11
|
+
const providerId = process.env.LLM_PROVIDER_ID?.trim() || 'deepseek'
|
|
12
|
+
const modelId = process.env.LLM_MODEL_ID?.trim() || 'deepseek-v4-flash'
|
|
13
|
+
const baseUrl = process.env.LLM_BASE_URL?.trim() || 'https://api.deepseek.com'
|
|
14
|
+
|
|
15
|
+
class SingleChatTransport implements Transport {
|
|
16
|
+
private paidRequests = 0
|
|
17
|
+
|
|
18
|
+
async fetch(url: string, init?: RequestInit): Promise<Response> {
|
|
19
|
+
if ((init?.method ?? 'GET').toUpperCase() === 'POST' && new URL(url).pathname.endsWith('/chat/completions')) {
|
|
20
|
+
this.paidRequests += 1
|
|
21
|
+
if (this.paidRequests > 1) throw new Error('Blocked a repeated paid LLM request')
|
|
22
|
+
}
|
|
23
|
+
return await fetch(url, init)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class DryRunTransport implements Transport {
|
|
28
|
+
calls = 0
|
|
29
|
+
|
|
30
|
+
async fetch(): Promise<Response> {
|
|
31
|
+
this.calls += 1
|
|
32
|
+
return new Response(
|
|
33
|
+
'data: {"choices":[{"delta":{"content":"SDK OK"}}]}\n\ndata: [DONE]\n\n',
|
|
34
|
+
{ status: 200, headers: { 'Content-Type': 'text/event-stream' } },
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const unusedMedia: MediaReader = {
|
|
40
|
+
async read() {
|
|
41
|
+
throw new Error('This text-only example does not read media')
|
|
42
|
+
},
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function main(): Promise<void> {
|
|
46
|
+
const dryTransport = new DryRunTransport()
|
|
47
|
+
const apiKey = live ? process.env.LLM_API_KEY?.trim() : 'dry-run-not-a-secret'
|
|
48
|
+
if (!apiKey) throw new Error('Missing LLM_API_KEY')
|
|
49
|
+
|
|
50
|
+
const runtime: RuntimeContext = {
|
|
51
|
+
transport: live ? new SingleChatTransport() : dryTransport,
|
|
52
|
+
credentials: {
|
|
53
|
+
get: (scope, requestedProviderId) => scope === 'llm' && requestedProviderId === providerId
|
|
54
|
+
? apiKey
|
|
55
|
+
: undefined,
|
|
56
|
+
},
|
|
57
|
+
media: unusedMedia,
|
|
58
|
+
}
|
|
59
|
+
const prompt = '只回复两个英文单词:SDK OK'
|
|
60
|
+
const request: LlmChatRequestDto = {
|
|
61
|
+
requestId: live ? `example-llm-${Date.now()}` : 'example-llm-dry-run',
|
|
62
|
+
providerId,
|
|
63
|
+
modelId,
|
|
64
|
+
adapter: providerId === 'deepseek' ? 'deepseek' : 'openai',
|
|
65
|
+
baseUrl,
|
|
66
|
+
messages: [{ role: 'user', content: prompt }],
|
|
67
|
+
capabilities: { reasoning: providerId === 'deepseek' },
|
|
68
|
+
reasoning: providerId === 'deepseek'
|
|
69
|
+
? { enabled: false, effort: 'high' }
|
|
70
|
+
: undefined,
|
|
71
|
+
policy: { max_tokens: 16 },
|
|
72
|
+
}
|
|
73
|
+
const taskId = resolveLlmTaskId(request)
|
|
74
|
+
let output = ''
|
|
75
|
+
|
|
76
|
+
const outcome = await runLlmChatStream(request, taskId, (event) => {
|
|
77
|
+
if (event.type === 'Token') output += event.data
|
|
78
|
+
}, runtime)
|
|
79
|
+
|
|
80
|
+
if (!output.trim()) {
|
|
81
|
+
throw new Error('LLM completed without a text token')
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const conservativeCny = ((outcome.inputChars * 3) + (outcome.outputChars * 9)) / 1_000_000
|
|
85
|
+
console.log(JSON.stringify({
|
|
86
|
+
mode: live ? 'live' : 'dry-run',
|
|
87
|
+
networkCalls: live ? 1 : 0,
|
|
88
|
+
interceptedRequests: live ? undefined : dryTransport.calls,
|
|
89
|
+
providerId,
|
|
90
|
+
modelId,
|
|
91
|
+
output,
|
|
92
|
+
elapsedMs: outcome.elapsedMs,
|
|
93
|
+
conservativeCnyEstimate: Number(conservativeCny.toFixed(6)),
|
|
94
|
+
}))
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void main().catch((error: unknown) => {
|
|
98
|
+
console.error(error instanceof Error ? error.message : String(error))
|
|
99
|
+
process.exitCode = 1
|
|
100
|
+
})
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@henjicc/ai-sdk-example-llm-chat",
|
|
3
|
-
"private": true,
|
|
4
|
-
"type": "module",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"build": "tsc -p tsconfig.json",
|
|
7
|
-
"dry-run": "npm run build && node dist/index.js --dry-run",
|
|
8
|
-
"check:bundle": "node scripts/check-bundle.mjs",
|
|
9
|
-
"start": "npm run build && node dist/index.js --live"
|
|
10
|
-
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"@henjicc/ai-sdk": "0.
|
|
13
|
-
},
|
|
14
|
-
"devDependencies": {
|
|
15
|
-
"@types/node": "^24.0.0",
|
|
16
|
-
"esbuild": "^0.25.9",
|
|
17
|
-
"typescript": "^5.9.2"
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@henjicc/ai-sdk-example-llm-chat",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"build": "tsc -p tsconfig.json",
|
|
7
|
+
"dry-run": "npm run build && node dist/index.js --dry-run",
|
|
8
|
+
"check:bundle": "node scripts/check-bundle.mjs",
|
|
9
|
+
"start": "npm run build && node dist/index.js --live"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@henjicc/ai-sdk": "0.4.0"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@types/node": "^24.0.0",
|
|
16
|
+
"esbuild": "^0.25.9",
|
|
17
|
+
"typescript": "^5.9.2"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"lib": ["ES2022", "DOM"],
|
|
5
|
-
"module": "NodeNext",
|
|
6
|
-
"moduleResolution": "NodeNext",
|
|
7
|
-
"strict": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"outDir": "dist",
|
|
10
|
-
"rootDir": ".",
|
|
11
|
-
"types": ["node"]
|
|
12
|
-
},
|
|
13
|
-
"include": ["index.ts"]
|
|
14
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["ES2022", "DOM"],
|
|
5
|
+
"module": "NodeNext",
|
|
6
|
+
"moduleResolution": "NodeNext",
|
|
7
|
+
"strict": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"outDir": "dist",
|
|
10
|
+
"rootDir": ".",
|
|
11
|
+
"types": ["node"]
|
|
12
|
+
},
|
|
13
|
+
"include": ["index.ts"]
|
|
14
|
+
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# minimal-node
|
|
2
|
-
|
|
3
|
-
用 `@henjicc/ai-sdk@0.
|
|
4
|
-
它保留完整 generation catalog,但不会带入 LLM/BigModel。示例不会下载结果文件;成功后只输出供应商返回的 URL。
|
|
5
|
-
|
|
6
|
-
## 安装
|
|
7
|
-
|
|
8
|
-
SDK 公开发布在 npm,无需配置 registry 或访问令牌。
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
npm install
|
|
12
|
-
npm run dry-run
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
`dry-run` 会走真实 catalog、builder、预处理和 KIE provider,但用本地 `Response` 截住请求,
|
|
16
|
-
输出中的 `networkCalls` 必须是 `0`。
|
|
17
|
-
|
|
18
|
-
## 一次真实调用
|
|
19
|
-
|
|
20
|
-
当前模型目录估价是 **$0.004/张**。确认账户有余额后,仅在当前终端注入密钥:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
KIE_API_KEY='你的密钥' npm start
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
示例在付费创建端点前有一次性闸门:即使 SDK 的“安全预连接重试”判断被触发,也会在第二次 POST
|
|
27
|
-
到达网络前本地拒绝,因此一次进程最多发出一个 KIE 创建请求。状态轮询是只读 GET,不会重复创建任务。
|
|
28
|
-
|
|
29
|
-
`generate()` 返回 `pending + taskId` 时,示例继续调用 `continuePolling()` 直到得到 URL;SDK 不负责把
|
|
30
|
-
URL 下载到磁盘。取消时应保留本次 `requestId` 或供应商 `taskId`,调用
|
|
31
|
-
`client.cancel({ namespace: 'generation', taskId })`。
|
|
1
|
+
# minimal-node
|
|
2
|
+
|
|
3
|
+
用 `@henjicc/ai-sdk@0.4.0` 的 `generation` 与 `runtime` 按需入口调用 KIE `z-image`。
|
|
4
|
+
它保留完整 generation catalog,但不会带入 LLM/BigModel。示例不会下载结果文件;成功后只输出供应商返回的 URL。
|
|
5
|
+
|
|
6
|
+
## 安装
|
|
7
|
+
|
|
8
|
+
SDK 公开发布在 npm,无需配置 registry 或访问令牌。
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install
|
|
12
|
+
npm run dry-run
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
`dry-run` 会走真实 catalog、builder、预处理和 KIE provider,但用本地 `Response` 截住请求,
|
|
16
|
+
输出中的 `networkCalls` 必须是 `0`。
|
|
17
|
+
|
|
18
|
+
## 一次真实调用
|
|
19
|
+
|
|
20
|
+
当前模型目录估价是 **$0.004/张**。确认账户有余额后,仅在当前终端注入密钥:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
KIE_API_KEY='你的密钥' npm start
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
示例在付费创建端点前有一次性闸门:即使 SDK 的“安全预连接重试”判断被触发,也会在第二次 POST
|
|
27
|
+
到达网络前本地拒绝,因此一次进程最多发出一个 KIE 创建请求。状态轮询是只读 GET,不会重复创建任务。
|
|
28
|
+
|
|
29
|
+
`generate()` 返回 `pending + taskId` 时,示例继续调用 `continuePolling()` 直到得到 URL;SDK 不负责把
|
|
30
|
+
URL 下载到磁盘。取消时应保留本次 `requestId` 或供应商 `taskId`,调用
|
|
31
|
+
`client.cancel({ namespace: 'generation', taskId })`。
|