@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.
Files changed (244) hide show
  1. package/CHANGELOG.md +157 -141
  2. package/README.md +497 -455
  3. package/dist/capabilities/embedding/bailian.d.ts +23 -0
  4. package/dist/capabilities/embedding/bailian.js +10 -0
  5. package/dist/capabilities/embedding/bigmodel.d.ts +9 -0
  6. package/dist/capabilities/embedding/bigmodel.js +5 -0
  7. package/dist/capabilities/embedding/index.d.ts +1 -0
  8. package/dist/capabilities/embedding/index.js +1 -0
  9. package/dist/capabilities/embedding/ppio.d.ts +7 -0
  10. package/dist/capabilities/embedding/ppio.js +5 -0
  11. package/dist/capabilities/embedding/siliconflow.d.ts +21 -0
  12. package/dist/capabilities/embedding/siliconflow.js +10 -0
  13. package/dist/capabilities/embedding/volcengine.d.ts +10 -0
  14. package/dist/capabilities/embedding/volcengine.js +6 -0
  15. package/dist/capabilities/rerank/bailian.d.ts +21 -0
  16. package/dist/capabilities/rerank/bailian.js +14 -0
  17. package/dist/capabilities/rerank/bigmodel.d.ts +9 -0
  18. package/dist/capabilities/rerank/bigmodel.js +5 -0
  19. package/dist/capabilities/rerank/index.d.ts +1 -0
  20. package/dist/capabilities/rerank/index.js +1 -0
  21. package/dist/capabilities/rerank/ppio.d.ts +7 -0
  22. package/dist/capabilities/rerank/ppio.js +5 -0
  23. package/dist/capabilities/rerank/siliconflow.d.ts +21 -0
  24. package/dist/capabilities/rerank/siliconflow.js +10 -0
  25. package/dist/capabilities/retrieval/http.d.ts +3 -0
  26. package/dist/capabilities/retrieval/http.js +48 -0
  27. package/dist/capabilities/retrieval/module.d.ts +11 -0
  28. package/dist/capabilities/retrieval/module.js +110 -0
  29. package/dist/capabilities/retrieval/types.d.ts +54 -0
  30. package/dist/capabilities/retrieval/types.js +1 -0
  31. package/dist/capabilities/retrieval/validation.d.ts +10 -0
  32. package/dist/capabilities/retrieval/validation.js +65 -0
  33. package/dist/capabilities/types.d.ts +1 -1
  34. package/dist/catalog/apimart/gpt-image-2.5.model.d.ts +2 -0
  35. package/dist/catalog/apimart/gpt-image-2.5.model.js +51 -0
  36. package/dist/catalog/fal/gpt-image-2.5.model.d.ts +2 -0
  37. package/dist/catalog/fal/gpt-image-2.5.model.js +53 -0
  38. package/dist/catalog/fal/ic-light-v2.model.js +9 -13
  39. package/dist/catalog/grsai/gpt-image-2.5.model.d.ts +2 -0
  40. package/dist/catalog/grsai/gpt-image-2.5.model.js +54 -0
  41. package/dist/catalog/grsai/gptImage25Sizes.d.ts +1 -0
  42. package/dist/catalog/grsai/gptImage25Sizes.js +76 -0
  43. package/dist/catalog/index.js +112 -104
  44. package/dist/catalog/kie/gpt-image-2.5.model.d.ts +2 -0
  45. package/dist/catalog/kie/gpt-image-2.5.model.js +38 -0
  46. package/dist/catalog/shared/gptImage25.d.ts +16 -0
  47. package/dist/catalog/shared/gptImage25.js +48 -0
  48. package/dist/catalog/shared/gptImage25Pricing.d.ts +12 -0
  49. package/dist/catalog/shared/gptImage25Pricing.js +508 -0
  50. package/dist/llm/defaults.d.ts +1 -1
  51. package/dist/llm/defaults.js +1 -1
  52. package/dist/llm/discovery.d.ts +2 -0
  53. package/dist/llm/discovery.js +16 -5
  54. package/dist/llm/modelCatalogEntries.js +32 -0
  55. package/dist/llm/providerPresets.d.ts +3 -1
  56. package/dist/llm/providerPresets.js +6 -3
  57. package/dist/llm/providerReasoningRequest.js +14 -1
  58. package/dist/llm/siliconflow/index.d.ts +21 -0
  59. package/dist/llm/siliconflow/index.js +32 -0
  60. package/dist/llm/siliconflow/preset.d.ts +6 -0
  61. package/dist/llm/siliconflow/preset.js +33 -0
  62. package/dist/packs/models/apimart/gpt-image-2.5.d.ts +6 -0
  63. package/dist/packs/models/apimart/gpt-image-2.5.js +7 -0
  64. package/dist/packs/models/fal/gpt-image-2.5.d.ts +6 -0
  65. package/dist/packs/models/fal/gpt-image-2.5.js +7 -0
  66. package/dist/packs/models/grsai/gpt-image-2.5.d.ts +6 -0
  67. package/dist/packs/models/grsai/gpt-image-2.5.js +7 -0
  68. package/dist/packs/models/kie/gpt-image-2.5.d.ts +6 -0
  69. package/dist/packs/models/kie/gpt-image-2.5.js +7 -0
  70. package/dist/packs/provider-packs/apimart.d.ts +1 -1
  71. package/dist/packs/provider-packs/apimart.js +21 -20
  72. package/dist/packs/provider-packs/fal.d.ts +1 -1
  73. package/dist/packs/provider-packs/fal.js +37 -36
  74. package/dist/packs/provider-packs/grsai.d.ts +1 -1
  75. package/dist/packs/provider-packs/grsai.js +6 -5
  76. package/dist/packs/provider-packs/kie.d.ts +1 -1
  77. package/dist/packs/provider-packs/kie.js +28 -27
  78. package/dist/packs/tool-models/fal/{qwen-image-edit-2509-multiple-angles.d.ts → qwen-image-edit-2511-multiple-angles.d.ts} +1 -1
  79. package/dist/packs/tool-models/fal/{qwen-image-edit-2509-multiple-angles.js → qwen-image-edit-2511-multiple-angles.js} +1 -1
  80. package/dist/packs/tool-packs/fal-multi-angle-tools.js +1 -1
  81. package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2511-multiple-angles.model.d.ts +2 -0
  82. 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
  83. package/docs/README.md +26 -26
  84. package/docs/consumers.md +56 -48
  85. package/docs/llm-adaptation/README.md +139 -137
  86. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/DeepSeek.md +103 -91
  87. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/Kimi.md +75 -75
  88. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206/MiniMax.md +84 -84
  89. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//345/260/217/347/261/263MiMo.md +85 -85
  90. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//346/231/272/350/260/261GLM.md +232 -232
  91. 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
  92. package/docs/llm-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274Qwen.md +84 -84
  93. 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
  94. package/docs/model-adaptation/Bria-Eraser/Bria-Eraser_Fal.md +32 -32
  95. 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
  96. package/docs/model-adaptation/ControlLight/ControlLight_Fal.md +85 -85
  97. 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
  98. package/docs/model-adaptation/Finegrain-Eraser/Finegrain-Eraser_Fal.md +31 -31
  99. package/docs/model-adaptation/Flux-Pro-Erase/Flux-Pro-Erase_Fal.md +34 -34
  100. package/docs/model-adaptation/Fun-ASR/Fun-ASR_/347/231/276/347/202/274.md +43 -43
  101. 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
  102. package/docs/model-adaptation/Fun-ASR-Realtime/Fun-ASR-Realtime_/347/231/276/347/202/274.md +37 -37
  103. 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
  104. package/docs/model-adaptation/GLM-5.3-Flash/GLM-5.3-Flash_/346/231/272/350/260/261.md +207 -207
  105. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_APIMart.md +173 -173
  106. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Fal.md +94 -94
  107. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_Grsai.md +137 -137
  108. package/docs/model-adaptation/GPT-Image-2/GPT-Image-2_KIE.md +93 -93
  109. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_APIMart.md +66 -0
  110. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Fal.md +55 -0
  111. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_Grsai.md +53 -0
  112. package/docs/model-adaptation/GPT-Image-2.5/GPT-Image-2.5_KIE.md +55 -0
  113. package/docs/model-adaptation/GPT-OSS-20B/GPT-OSS-20B_Groq.md +62 -62
  114. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +124 -124
  115. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_Fal.md +84 -84
  116. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +129 -129
  117. package/docs/model-adaptation/Grok-Imagine/Grok-Imagine_KIE.md +36 -36
  118. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_APIMart.md +250 -250
  119. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_Fal.md +84 -84
  120. package/docs/model-adaptation/Grok-Imagine-2.0/Grok-Imagine-2.0_KIE.md +105 -105
  121. package/docs/model-adaptation/Hailuo-02/Hailuo-02_Fal.md +93 -93
  122. package/docs/model-adaptation/Hailuo-02/Hailuo-02_KIE.md +56 -56
  123. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_Fal.md +88 -88
  124. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_KIE.md +51 -51
  125. package/docs/model-adaptation/Hailuo-2.3/Hailuo-2.3_/346/264/276/346/254/247/344/272/221.md +70 -70
  126. package/docs/model-adaptation/IC-Light-v2/IC-Light-v2_Fal.md +97 -94
  127. 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
  128. 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
  129. 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
  130. 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
  131. 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
  132. package/docs/model-adaptation/Kling-3.0/Kling-3.0_APIMart.md +112 -112
  133. package/docs/model-adaptation/Kling-3.0/Kling-3.0_Fal.md +89 -89
  134. package/docs/model-adaptation/Kling-3.0/Kling-3.0_KIE.md +106 -106
  135. package/docs/model-adaptation/Kling-3.0/Kling-3.0_/346/264/276/346/254/247/344/272/221.md +119 -119
  136. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_APIMart.md +125 -125
  137. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_Fal.md +107 -107
  138. package/docs/model-adaptation/Kling-3.0-Omni/Kling-3.0-Omni_KIE.md +143 -143
  139. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_APIMart.md +85 -85
  140. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_Fal.md +83 -83
  141. package/docs/model-adaptation/Kling-3.0-Turbo/Kling-3.0-Turbo_KIE.md +84 -84
  142. package/docs/model-adaptation/Midjourney/Midjourney_APIMart.md +396 -396
  143. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_APIMart.md +234 -234
  144. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_Fal.md +108 -108
  145. package/docs/model-adaptation/MiniMax-H3/MiniMax-H3_KIE.md +111 -111
  146. package/docs/model-adaptation/MiniMax-Speech/MiniMax-Speech_/346/264/276/346/254/247/344/272/221.md +170 -170
  147. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_APIMart.md +89 -89
  148. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Fal.md +99 -99
  149. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_Grsai.md +82 -82
  150. package/docs/model-adaptation/Nano-Banana-2/Nano-Banana-2_KIE.md +70 -70
  151. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_APIMart.md +79 -79
  152. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md +65 -65
  153. package/docs/model-adaptation/Nano-Banana-2-Lite/Nano-Banana-2-Lite_KIE.md +64 -64
  154. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_APIMart.md +83 -83
  155. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Fal.md +89 -89
  156. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md +82 -82
  157. package/docs/model-adaptation/Nano-Banana-Pro/Nano-Banana-Pro_KIE.md +64 -64
  158. 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
  159. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_APIMart.md +117 -117
  160. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_Fal.md +84 -84
  161. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_KIE.md +103 -103
  162. package/docs/model-adaptation/Qwen-Image-3.0/Qwen-Image-3.0_/347/231/276/347/202/274.md +138 -138
  163. 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
  164. package/docs/model-adaptation/Qwen-MT-Flash/Qwen-MT-Flash_/347/231/276/347/202/274.md +47 -47
  165. package/docs/model-adaptation/Qwen-MT-Lite/Qwen-MT-Lite_/347/231/276/347/202/274.md +39 -39
  166. package/docs/model-adaptation/Qwen-MT-Plus/Qwen-MT-Plus_/347/231/276/347/202/274.md +39 -39
  167. package/docs/model-adaptation/Qwen3-ASR-Flash/Qwen3-ASR-Flash_/347/231/276/347/202/274.md +40 -40
  168. 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
  169. package/docs/model-adaptation/Qwen3-ASR-Flash-Filetrans/Qwen3-ASR-Flash-Filetrans_/347/231/276/347/202/274.md +41 -41
  170. package/docs/model-adaptation/Qwen3-ASR-Flash-Realtime/Qwen3-ASR-Flash-Realtime_/347/231/276/347/202/274.md +35 -35
  171. 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
  172. package/docs/model-adaptation/README.md +313 -295
  173. 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
  174. 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
  175. 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
  176. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_APIMart.md +121 -121
  177. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_Fal.md +97 -97
  178. package/docs/model-adaptation/Seedance-2.0/Seedance-2.0_KIE.md +86 -86
  179. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_APIMart.md +89 -89
  180. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_Fal.md +95 -95
  181. package/docs/model-adaptation/Seedance-2.0-Fast/Seedance-2.0-Fast_KIE.md +78 -78
  182. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_APIMart.md +89 -89
  183. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_Fal.md +96 -96
  184. package/docs/model-adaptation/Seedance-2.0-Mini/Seedance-2.0-Mini_KIE.md +78 -78
  185. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_APIMart.md +212 -212
  186. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_Fal.md +94 -94
  187. package/docs/model-adaptation/Seedance-2.5/Seedance-2.5_KIE.md +89 -89
  188. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_APIMart.md +106 -106
  189. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_Fal.md +91 -91
  190. package/docs/model-adaptation/Seedream-5.0-Lite/Seedream-5.0-Lite_KIE.md +89 -89
  191. 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
  192. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_APIMart.md +194 -194
  193. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_Fal.md +100 -100
  194. package/docs/model-adaptation/Seedream-5.0-Pro/Seedream-5.0-Pro_KIE.md +141 -141
  195. 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
  196. package/docs/model-adaptation/SenseVoiceSmall/SenseVoiceSmall_/347/241/205/345/237/272/346/265/201/345/212/250.md +69 -69
  197. package/docs/model-adaptation/TeleSpeechASR/TeleSpeechASR_/347/241/205/345/237/272/346/265/201/345/212/250.md +72 -72
  198. 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
  199. 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
  200. package/docs/model-adaptation/Wan-2.5-Preview/Wan-2.5-Preview_/346/264/276/346/254/247/344/272/221.md +82 -82
  201. package/docs/model-adaptation/Wan-2.6/Wan-2.6_/346/264/276/346/254/247/344/272/221.md +84 -84
  202. package/docs/model-adaptation/Wan-2.7/Wan-2.7_/346/264/276/346/254/247/344/272/221.md +122 -122
  203. package/docs/model-adaptation/Whisper-Large-v3/Whisper-Large-v3_Groq.md +76 -76
  204. package/docs/model-adaptation/Whisper-Large-v3-Turbo/Whisper-Large-v3-Turbo_Groq.md +75 -75
  205. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_APIMart.md +88 -88
  206. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_Fal.md +95 -95
  207. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_KIE.md +71 -71
  208. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/347/231/276/347/202/274.md +122 -122
  209. package/docs/model-adaptation/Z-Image-Turbo/Z-Image-Turbo_/351/255/224/346/220/255.md +97 -97
  210. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/APIMart.md +238 -238
  211. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Fal.md +172 -172
  212. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Groq.md +121 -121
  213. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/Grsai.md +217 -217
  214. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206/KIE.md +131 -131
  215. 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
  216. 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
  217. 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
  218. 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
  219. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +237 -227
  220. 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
  221. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//351/255/224/346/220/255.md +207 -207
  222. 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
  223. 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
  224. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Electron.md +77 -77
  225. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/Tauri.md +81 -81
  226. package/docs//346/216/245/345/205/245/346/214/207/345/215/227/UXP.md +169 -169
  227. 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
  228. 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
  229. package/examples/form-renderer/README.md +17 -17
  230. package/examples/form-renderer/cli.ts +32 -32
  231. package/examples/form-renderer/index.ts +144 -144
  232. package/examples/form-renderer/package.json +16 -16
  233. package/examples/form-renderer/tsconfig.json +14 -14
  234. package/examples/llm-chat/README.md +32 -32
  235. package/examples/llm-chat/index.ts +100 -100
  236. package/examples/llm-chat/package.json +19 -19
  237. package/examples/llm-chat/tsconfig.json +14 -14
  238. package/examples/minimal-node/README.md +31 -31
  239. package/examples/minimal-node/index.ts +138 -138
  240. package/examples/minimal-node/package.json +17 -17
  241. package/examples/minimal-node/tsconfig.json +14 -14
  242. package/package.json +255 -195
  243. package/dist/tool-packs/fal-multi-angle/models/qwen-image-edit-2509-multiple-angles.model.d.ts +0 -2
  244. 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,238 +1,238 @@
1
- # APIMart · 供应商基础文档
2
-
3
- | 项目 | 内容 |
4
- |---|---|
5
- | 最后更新 | 2026-08-28 |
6
- | 供应商类型 | 聚合中转(非模型原厂) |
7
- | 项目内 providerId | `apimart` |
8
- | 主域名 | `apimart.ai`(海外主站) |
9
- | 中国大陆友好域名 | `apib.ai` / `aiuxu.com` / `aishuch.com`(**本目录中唯一提供大陆备用线路的供应商**) |
10
- | 鉴权 | `Authorization: Bearer <API Key>` |
11
- | 任务模型 | 异步为主(提交拿 `task_id` → 轮询 / Webhook) |
12
- | 文档可见性 | 公开,无需登录 |
13
- | 价格可见性 | 公开,无需登录 |
14
-
15
- ## 1. 端点
16
-
17
- ### 1.1 Base URL 与备用域名
18
-
19
- 官方文档只写了一个地址:
20
-
21
- ```
22
- https://api.apimart.ai
23
- ```
24
-
25
- 但 APIMart 站点在登录页顶部提供了**备用访问域名**面板,原文:「网络访问受限时,请使用支持中国大陆的域名,建议收藏备用。」
26
-
27
- | 站点域名 | 定位 | API 端点 | 上传端点 | 文档站 |
28
- |---|---|---|---|---|
29
- | `apimart.ai` | 海外主站 | `https://api.apimart.ai` | `https://upload.apimart.ai` | `https://docs.apimart.ai` |
30
- | `apib.ai` | 中国大陆可用 | `https://api.apib.ai` | `https://upload.apib.ai` | `https://docs.apib.ai` |
31
- | `aiuxu.com` | 中国大陆可用 | `https://api.aiuxu.com` | `https://upload.aiuxu.com` | `https://docs.aiuxu.com` |
32
- | `aishuch.com` | 中国大陆可用 | `https://api.aishuch.com` | `https://upload.aishuch.com` | `https://docs.aishuch.com` |
33
-
34
- **实测结论(2026-08-22,未登录 curl)**:四个 `api.*` 主机对 `GET /v1/models` 均返回 `401 {"error":{"message":"API key is required ...","type":"apimart_error"}}`,即**四条线路都是同一套 API,仅域名不同,路径与协议完全一致**;四个 `upload.*` 主机均返回 200。
35
-
36
- > 适配含义:Base URL 应当**可配置或有受控备用线路**,而不是只硬编码 `api.apimart.ai`,否则大陆用户在主线路不可达时无法自救。当前代码状态见第 9 节(连通性探测 + 进程内记忆,不做地理位置判断)。
37
- >
38
- > 注意:生成结果 URL 与上传返回 URL 用的是**请求时那条线路的 `upload.*` 域名**,切换线路后旧结果链接是否仍可访问未验证,转存时按原域名下载。
39
-
40
- ### 1.2 API 端点一览
41
-
42
- | 用途 | 方法与路径 | 说明 |
43
- |---|---|---|
44
- | 图片生成 | `POST /v1/images/generations` | 统一图片入口,模型由 body 的 `model` 决定 |
45
- | 视频生成 | `POST /v1/videos/generations` | 统一视频入口 |
46
- | Midjourney 专用 | `POST /v1/midjourney/{action}` | 18 个端点,见 [Midjourney_APIMart.md](../Midjourney/Midjourney_APIMart.md) |
47
- | 查询任务 | `GET /v1/tasks/{task_id}?language=zh` | 统一任务查询 |
48
- | MJ 风格查询 | `GET /v1/midjourney/{task_id}` | 额外返回 `buttons[].customId` |
49
- | 上传图片 | `POST /v1/uploads/images` | multipart |
50
- | 令牌余额 | `GET /v1/balance`(别名 `GET /balance`) | 单个 API Key 维度 |
51
- | 用户余额 | `GET /v1/user/balance`(别名 `GET /user/balance`) | 主账号维度 |
52
- | 模型列表 | `GET /v1/models`(带 `expand` 可返回参数 schema) | 文本模型元数据为主 |
53
- | 文本模型定价 | `GET /api/pricing/model` | 只对 TokenPricingV2 文本模型有效,**图片/视频模型不走这个** |
54
-
55
- ## 2. 鉴权
56
-
57
- ```
58
- Authorization: Bearer <API Key>
59
- Content-Type: application/json
60
- ```
61
-
62
- API Key 在 https://apimart.ai/keys 创建(**需登录**),可设置额度上限、模型权限白名单、IP 白名单。
63
-
64
- ## 3. 提交与查询
65
-
66
- ### 3.1 提交
67
-
68
- 同步返回 `task_id`,实际生成异步进行。本项目当前额外下发两个请求头(见 `providers/apimart.ts`):
69
-
70
- - `Idempotency-Key: <requestId>`:APIMart 支持幂等键,重放不会重复计费
71
- - `X-APIMart-Response-Version: 2026-07-27`:锁定响应结构版本,避免上游改结构导致解析失效
72
-
73
- > 当前公开快速开始、开发指南和 API 参考中未找到这两个 Header 的稳定契约说明。文档将它们标记为“项目已有行为”,不把它们当作新客户端必须复制的公开协议。
74
-
75
- ### 3.2 轮询
76
-
77
- `GET /v1/tasks/{task_id}?language=zh`
78
-
79
- ```json
80
- {
81
- "code": 200,
82
- "data": {
83
- "id": "task_01KA040M0HP1GJWBJYZMKX1XS1",
84
- "status": "completed",
85
- "cost": 0.15,
86
- "credits_cost": 1.5,
87
- "progress": 100,
88
- "result": { "images": [{ "url": ["https://upload.apimart.ai/f/image/...png"], "expires_at": 1763174708 }] },
89
- "created": 1763088289,
90
- "completed": 1763088308,
91
- "estimated_time": 60,
92
- "actual_time": 19
93
- }
94
- }
95
- ```
96
-
97
- | 字段 | 说明 |
98
- |---|---|
99
- | `status` | `pending` / `processing` / `completed` / `failed` / `cancelled` |
100
- | `cost` | 本次任务扣费金额(美元) |
101
- | `credits_cost` | 本次任务扣费积分 |
102
- | `progress` | 0–100 |
103
- | `estimated_time` / `actual_time` | 预计 / 实际耗时(秒) |
104
- | `error` | 仅 `failed` 时存在,含 `code` / `message` / `type` |
105
-
106
- **结果字段**:图片在 `data.result.images[]`,视频在 `data.result.videos[]`,音频在 `data.result.audios[]`。
107
- **注意 `images[].url` 可能是数组**(一次出多张时),解析必须兼容 string 与 string[]。
108
-
109
- Midjourney 有一套额外的 MJ 风格状态(`NOT_START` / `SUBMITTED` / `IN_PROGRESS` / `MODAL` / `SUCCESS` / `FAILURE`),其中 `MODAL` 是合法的非终态。
110
-
111
- ### 3.3 Webhook(可替代轮询)
112
-
113
- 提交时在 body 里加 `webhook` 字段(**基础地址**,服务端会自动拼 `/callback`):
114
-
115
- | 你填的 `webhook` | 实际 POST 到 |
116
- |---|---|
117
- | `https://your-server.com` | `https://your-server.com/callback` |
118
- | `https://your-server.com/api` | `https://your-server.com/api/callback` |
119
-
120
- - 推送内容与 `GET /v1/tasks/{id}` 完全一致,可复用同一套解析
121
- - 只在终态(`completed` / `failed`)推送,处理中不推
122
- - 未在 ~10 秒内返回 `2xx` 或返回 `5xx` → 自动重试 **3 次**,间隔约 10s / 30s / 60s;返回 `4xx` 直接放弃
123
- - 极端情况可能重复推送,**必须按 `id` 做幂等去重**
124
- - 地址要求:公网可访问(内网地址被拒)、标准端口(80/443)、不能指向 APIMart 自己的域名
125
-
126
- > 桌面端没有公网回调地址,本项目用轮询,不使用 Webhook。这里记录是为了说明 `webhook` 字段存在且**不应注册为用户可见参数**。
127
-
128
- ## 4. 上传文件
129
-
130
- `POST /v1/uploads/images`,`multipart/form-data`,字段名 `file`。
131
-
132
- | 项目 | 值 |
133
- |---|---|
134
- | 支持格式 | JPEG / PNG / WebP / GIF |
135
- | 最大体积 | 20 MB |
136
- | 有效期 | **72 小时** |
137
- | 返回 | `{ "url", "filename", "content_type", "bytes", "created_at" }` |
138
- | 返回 URL 形态 | `https://upload.apimart.ai/f/image/<id>-<uuid>-<name>.jpg` |
139
-
140
- ```bash
141
- curl -X POST https://api.apimart.ai/v1/uploads/images \
142
- -H "Authorization: Bearer $APIMART_KEY" \
143
- -F 'file=@/path/to/image.jpg'
144
- ```
145
-
146
- 错误:`400` 缺文件字段 / 格式不支持,`413` 超过 20 MB,`429` 频率限制,`500` 上传失败。
147
-
148
- **⚠️ 文档明确写了重要变更**:「为了更好的性能和成本控制,我们不再支持在生成接口中直接传入 base64 图片数据。请使用本接口上传图片,获取 URL 后再调用生成接口。」
149
-
150
- 本项目已在公共媒体预处理层接入该接口(见第 9 节):本地图片和 data URI 图片会先上传,再把公网 URL 交给生成接口。
151
-
152
- **没有通用的视频/音频上传接口**:只有 Suno、Flow Music 等模型自带的专用上传端点。视频类输入只能传公网 URL。
153
-
154
- ## 5. 获取结果
155
-
156
- - 结果 URL 由 `upload.<域名>` 提供,公开可访问,无需鉴权
157
- - 有效期由 `result.images[].expires_at`(Unix 时间戳)给出,多数模型 24 小时,Seedream 5.0 系列 72 小时
158
- - 无二次签名接口,**必须在有效期内转存**
159
-
160
- ## 6. 计价查询
161
-
162
- | 方式 | 位置 | 说明 |
163
- |---|---|---|
164
- | 定价中心(权威) | https://apimart.ai/zh/pricing | 公开无需登录,图片/视频模型价格以此为准 |
165
- | 任务返回值 | `data.cost`(美元)、`data.credits_cost`(积分) | **实际扣费**,最可信 |
166
- | 文档正文价格 | 各模型 API 文档页 | **经常过期**,与定价中心冲突时以定价中心为准(例:Seedream 5.0 Pro 文档写 $0.045/$0.09,定价中心是 $0.02928/$0.05856) |
167
- | 定价 API | `GET /api/pricing/model` | **仅文本模型**,图片/视频用不上 |
168
-
169
- Nano Banana 2 / Lite / Pro 在同一产品模型内各有「常规 EXT」与「官方」两条渠道,路由和 body schema 相同,以 `model` 精确 ID 区分;前者按张、后者按 token。SDK 以第一顺位 `role: 'channel'` 参数表达,默认常规渠道以保持 0.1.5 兼容,估价必须随渠道同步切换。
170
-
171
- ## 7. 余额查询
172
-
173
- 两个端点,返回结构几乎一致:
174
-
175
- ```bash
176
- curl https://api.apimart.ai/v1/balance -H "Authorization: Bearer $KEY" # 令牌维度
177
- curl https://api.apimart.ai/v1/user/balance -H "Authorization: Bearer $KEY" # 用户维度
178
- ```
179
-
180
- ```json
181
- { "success": true, "remain_balance": 10.5, "remain_credits": 105,
182
- "used_balance": 2.3, "used_credits": 23, "unlimited_quota": false }
183
- ```
184
-
185
- - 无限额度令牌:`unlimited_quota: true`,且 `remain_balance` / `remain_credits` 返回 `-1`
186
- - 失败时仍返回 HTTP 200,靠 `success: false` + `message` 判断
187
- - 余额单位取决于系统配置(USD 或积分)
188
-
189
- ## 8. 错误码
190
-
191
- | HTTP | 含义 | 处理 |
192
- |---|---|---|
193
- | 400 | 请求参数错误 | 不重试,修参数 |
194
- | 401 | 认证失败 | 不重试 |
195
- | 402 | 余额不足 | 不重试,提示充值 |
196
- | 403 | 无权限 | 不重试 |
197
- | 429 | 频率限制 | 退避重试 |
198
- | 500 | 服务器错误 | 退避重试 |
199
- | 502 | 网关错误 | 退避重试 |
200
-
201
- 响应体统一为 `{"error": {"code", "message", "type"}}`,`type` 取值如 `invalid_request_error` / `authentication_error` / `payment_required` / `permission_error` / `rate_limit_error` / `server_error` / `bad_gateway`。
202
-
203
- ## 9. 本项目当前实现与差异
204
-
205
- | 项目 | 位置 |
206
- |---|---|
207
- | 请求执行 | [src/providers/apimart.ts](../../../src/providers/apimart.ts) |
208
- | 连接检测 / 余额 | [src/providers/connection.ts](../../../src/providers/connection.ts) → `GET /v1/balance` |
209
- | 上传改写 | [src/upload/preprocess.ts](../../../src/upload/preprocess.ts) → APIMart 图片走 `uploadToApiMart` |
210
- | 上传实现 | [src/upload/providers.ts](../../../src/upload/providers.ts) → `POST /v1/uploads/images` |
211
- | Key / 链接配置 | [src/core/config/providers.ts](../../../../../src/core/config/providers.ts) |
212
-
213
- 已知差异:
214
-
215
- 1. Base URL 默认顺序是 `api.apimart.ai` → `api.apib.ai` → `api.aiuxu.com` → `api.aishuch.com`;仅在能证明尚未建立连接的网络故障下受控切换下一个域名,不对已建立连接的失败重放计费请求。不做地理位置判断,改用**连通性探测 + 进程内记忆**:任意一次请求成功命中某个域名后(含应用启动时的后台预热探测),该域名会被记为本次进程运行期间的优先域名,后续请求直接从它开始尝试,其余域名仍留作 fallback;缓存只在内存中,不持久化,应用重启后重新判断。实现见 [src/providers/endpoints/apimart.ts](../../../src/providers/endpoints/apimart.ts),启动预热调用见 [electron/main/index.ts](../../../../../electron/main/index.ts)(仅在已配置 APIMart Key 时触发,不阻塞启动)
216
- 2. 图片已经接入 `/v1/uploads/images`;APIMart 没有通用视频 / 音频上传端点,公共预处理层会明确拒绝这两类本地文件并提示改用公网 URL,具体模型有专用上传协议时再单独接入
217
- 3. `extractUrls` 已处理 `images[].url` 为数组的情况(`collectDeepUrls` 深挖),无需改
218
- 4. 未使用 Webhook(桌面端合理),不需要改
219
-
220
- ## 10. 原始链接索引
221
-
222
- | 信息 | 链接 | 是否需登录 |
223
- |---|---|---|
224
- | 文档总索引(llms.txt) | https://docs.apimart.ai/llms.txt | 否 |
225
- | 快速开始(Base URL、示例) | https://docs.apimart.ai/cn/quickstart | 否 |
226
- | 开发指南(轮询、错误码) | https://docs.apimart.ai/cn/development | 否 |
227
- | 连接与使用问题(端点地址确认) | https://docs.apimart.ai/cn/faqs/connection-usage | 否 |
228
- | 上传图片 | https://docs.apimart.ai/cn/api-reference/uploads/images | 否 |
229
- | 获取任务状态 | https://docs.apimart.ai/cn/api-reference/tasks/status | 否 |
230
- | 任务完成回调(Webhook) | https://docs.apimart.ai/cn/api-reference/tasks/webhook | 否 |
231
- | 查询令牌余额 | https://docs.apimart.ai/cn/api-reference/account/token-balance | 否 |
232
- | 查询用户余额 | https://docs.apimart.ai/cn/api-reference/account/user-balance | 否 |
233
- | 定价中心 | https://apimart.ai/zh/pricing | 否 |
234
- | **备用访问域名面板**(`apib.ai` / `aiuxu.com` / `aishuch.com`) | https://apimart.ai/zh/login | 否(面板在登录页,但页面本身无需登录即可看到) |
235
- | API Key 管理 | https://apimart.ai/keys | **是** |
236
- | 控制台 | https://apimart.ai/overview | **是** |
237
-
238
- > 文档站所有页面在 URL 末尾加 `.md` 可直接拿到原始 Markdown,例如 `https://docs.apimart.ai/cn/quickstart.md`。
1
+ # APIMart · 供应商基础文档
2
+
3
+ | 项目 | 内容 |
4
+ |---|---|
5
+ | 最后更新 | 2026-08-28 |
6
+ | 供应商类型 | 聚合中转(非模型原厂) |
7
+ | 项目内 providerId | `apimart` |
8
+ | 主域名 | `apimart.ai`(海外主站) |
9
+ | 中国大陆友好域名 | `apib.ai` / `aiuxu.com` / `aishuch.com`(**本目录中唯一提供大陆备用线路的供应商**) |
10
+ | 鉴权 | `Authorization: Bearer <API Key>` |
11
+ | 任务模型 | 异步为主(提交拿 `task_id` → 轮询 / Webhook) |
12
+ | 文档可见性 | 公开,无需登录 |
13
+ | 价格可见性 | 公开,无需登录 |
14
+
15
+ ## 1. 端点
16
+
17
+ ### 1.1 Base URL 与备用域名
18
+
19
+ 官方文档只写了一个地址:
20
+
21
+ ```
22
+ https://api.apimart.ai
23
+ ```
24
+
25
+ 但 APIMart 站点在登录页顶部提供了**备用访问域名**面板,原文:「网络访问受限时,请使用支持中国大陆的域名,建议收藏备用。」
26
+
27
+ | 站点域名 | 定位 | API 端点 | 上传端点 | 文档站 |
28
+ |---|---|---|---|---|
29
+ | `apimart.ai` | 海外主站 | `https://api.apimart.ai` | `https://upload.apimart.ai` | `https://docs.apimart.ai` |
30
+ | `apib.ai` | 中国大陆可用 | `https://api.apib.ai` | `https://upload.apib.ai` | `https://docs.apib.ai` |
31
+ | `aiuxu.com` | 中国大陆可用 | `https://api.aiuxu.com` | `https://upload.aiuxu.com` | `https://docs.aiuxu.com` |
32
+ | `aishuch.com` | 中国大陆可用 | `https://api.aishuch.com` | `https://upload.aishuch.com` | `https://docs.aishuch.com` |
33
+
34
+ **实测结论(2026-08-22,未登录 curl)**:四个 `api.*` 主机对 `GET /v1/models` 均返回 `401 {"error":{"message":"API key is required ...","type":"apimart_error"}}`,即**四条线路都是同一套 API,仅域名不同,路径与协议完全一致**;四个 `upload.*` 主机均返回 200。
35
+
36
+ > 适配含义:Base URL 应当**可配置或有受控备用线路**,而不是只硬编码 `api.apimart.ai`,否则大陆用户在主线路不可达时无法自救。当前代码状态见第 9 节(连通性探测 + 进程内记忆,不做地理位置判断)。
37
+ >
38
+ > 注意:生成结果 URL 与上传返回 URL 用的是**请求时那条线路的 `upload.*` 域名**,切换线路后旧结果链接是否仍可访问未验证,转存时按原域名下载。
39
+
40
+ ### 1.2 API 端点一览
41
+
42
+ | 用途 | 方法与路径 | 说明 |
43
+ |---|---|---|
44
+ | 图片生成 | `POST /v1/images/generations` | 统一图片入口,模型由 body 的 `model` 决定 |
45
+ | 视频生成 | `POST /v1/videos/generations` | 统一视频入口 |
46
+ | Midjourney 专用 | `POST /v1/midjourney/{action}` | 18 个端点,见 [Midjourney_APIMart.md](../Midjourney/Midjourney_APIMart.md) |
47
+ | 查询任务 | `GET /v1/tasks/{task_id}?language=zh` | 统一任务查询 |
48
+ | MJ 风格查询 | `GET /v1/midjourney/{task_id}` | 额外返回 `buttons[].customId` |
49
+ | 上传图片 | `POST /v1/uploads/images` | multipart |
50
+ | 令牌余额 | `GET /v1/balance`(别名 `GET /balance`) | 单个 API Key 维度 |
51
+ | 用户余额 | `GET /v1/user/balance`(别名 `GET /user/balance`) | 主账号维度 |
52
+ | 模型列表 | `GET /v1/models`(带 `expand` 可返回参数 schema) | 文本模型元数据为主 |
53
+ | 文本模型定价 | `GET /api/pricing/model` | 只对 TokenPricingV2 文本模型有效,**图片/视频模型不走这个** |
54
+
55
+ ## 2. 鉴权
56
+
57
+ ```
58
+ Authorization: Bearer <API Key>
59
+ Content-Type: application/json
60
+ ```
61
+
62
+ API Key 在 https://apimart.ai/keys 创建(**需登录**),可设置额度上限、模型权限白名单、IP 白名单。
63
+
64
+ ## 3. 提交与查询
65
+
66
+ ### 3.1 提交
67
+
68
+ 同步返回 `task_id`,实际生成异步进行。本项目当前额外下发两个请求头(见 `providers/apimart.ts`):
69
+
70
+ - `Idempotency-Key: <requestId>`:APIMart 支持幂等键,重放不会重复计费
71
+ - `X-APIMart-Response-Version: 2026-07-27`:锁定响应结构版本,避免上游改结构导致解析失效
72
+
73
+ > 当前公开快速开始、开发指南和 API 参考中未找到这两个 Header 的稳定契约说明。文档将它们标记为“项目已有行为”,不把它们当作新客户端必须复制的公开协议。
74
+
75
+ ### 3.2 轮询
76
+
77
+ `GET /v1/tasks/{task_id}?language=zh`
78
+
79
+ ```json
80
+ {
81
+ "code": 200,
82
+ "data": {
83
+ "id": "task_01KA040M0HP1GJWBJYZMKX1XS1",
84
+ "status": "completed",
85
+ "cost": 0.15,
86
+ "credits_cost": 1.5,
87
+ "progress": 100,
88
+ "result": { "images": [{ "url": ["https://upload.apimart.ai/f/image/...png"], "expires_at": 1763174708 }] },
89
+ "created": 1763088289,
90
+ "completed": 1763088308,
91
+ "estimated_time": 60,
92
+ "actual_time": 19
93
+ }
94
+ }
95
+ ```
96
+
97
+ | 字段 | 说明 |
98
+ |---|---|
99
+ | `status` | `pending` / `processing` / `completed` / `failed` / `cancelled` |
100
+ | `cost` | 本次任务扣费金额(美元) |
101
+ | `credits_cost` | 本次任务扣费积分 |
102
+ | `progress` | 0–100 |
103
+ | `estimated_time` / `actual_time` | 预计 / 实际耗时(秒) |
104
+ | `error` | 仅 `failed` 时存在,含 `code` / `message` / `type` |
105
+
106
+ **结果字段**:图片在 `data.result.images[]`,视频在 `data.result.videos[]`,音频在 `data.result.audios[]`。
107
+ **注意 `images[].url` 可能是数组**(一次出多张时),解析必须兼容 string 与 string[]。
108
+
109
+ Midjourney 有一套额外的 MJ 风格状态(`NOT_START` / `SUBMITTED` / `IN_PROGRESS` / `MODAL` / `SUCCESS` / `FAILURE`),其中 `MODAL` 是合法的非终态。
110
+
111
+ ### 3.3 Webhook(可替代轮询)
112
+
113
+ 提交时在 body 里加 `webhook` 字段(**基础地址**,服务端会自动拼 `/callback`):
114
+
115
+ | 你填的 `webhook` | 实际 POST 到 |
116
+ |---|---|
117
+ | `https://your-server.com` | `https://your-server.com/callback` |
118
+ | `https://your-server.com/api` | `https://your-server.com/api/callback` |
119
+
120
+ - 推送内容与 `GET /v1/tasks/{id}` 完全一致,可复用同一套解析
121
+ - 只在终态(`completed` / `failed`)推送,处理中不推
122
+ - 未在 ~10 秒内返回 `2xx` 或返回 `5xx` → 自动重试 **3 次**,间隔约 10s / 30s / 60s;返回 `4xx` 直接放弃
123
+ - 极端情况可能重复推送,**必须按 `id` 做幂等去重**
124
+ - 地址要求:公网可访问(内网地址被拒)、标准端口(80/443)、不能指向 APIMart 自己的域名
125
+
126
+ > 桌面端没有公网回调地址,本项目用轮询,不使用 Webhook。这里记录是为了说明 `webhook` 字段存在且**不应注册为用户可见参数**。
127
+
128
+ ## 4. 上传文件
129
+
130
+ `POST /v1/uploads/images`,`multipart/form-data`,字段名 `file`。
131
+
132
+ | 项目 | 值 |
133
+ |---|---|
134
+ | 支持格式 | JPEG / PNG / WebP / GIF |
135
+ | 最大体积 | 20 MB |
136
+ | 有效期 | **72 小时** |
137
+ | 返回 | `{ "url", "filename", "content_type", "bytes", "created_at" }` |
138
+ | 返回 URL 形态 | `https://upload.apimart.ai/f/image/<id>-<uuid>-<name>.jpg` |
139
+
140
+ ```bash
141
+ curl -X POST https://api.apimart.ai/v1/uploads/images \
142
+ -H "Authorization: Bearer $APIMART_KEY" \
143
+ -F 'file=@/path/to/image.jpg'
144
+ ```
145
+
146
+ 错误:`400` 缺文件字段 / 格式不支持,`413` 超过 20 MB,`429` 频率限制,`500` 上传失败。
147
+
148
+ **⚠️ 文档明确写了重要变更**:「为了更好的性能和成本控制,我们不再支持在生成接口中直接传入 base64 图片数据。请使用本接口上传图片,获取 URL 后再调用生成接口。」
149
+
150
+ 本项目已在公共媒体预处理层接入该接口(见第 9 节):本地图片和 data URI 图片会先上传,再把公网 URL 交给生成接口。
151
+
152
+ **没有通用的视频/音频上传接口**:只有 Suno、Flow Music 等模型自带的专用上传端点。视频类输入只能传公网 URL。
153
+
154
+ ## 5. 获取结果
155
+
156
+ - 结果 URL 由 `upload.<域名>` 提供,公开可访问,无需鉴权
157
+ - 有效期由 `result.images[].expires_at`(Unix 时间戳)给出,多数模型 24 小时,Seedream 5.0 系列 72 小时
158
+ - 无二次签名接口,**必须在有效期内转存**
159
+
160
+ ## 6. 计价查询
161
+
162
+ | 方式 | 位置 | 说明 |
163
+ |---|---|---|
164
+ | 定价中心(权威) | https://apimart.ai/zh/pricing | 公开无需登录,图片/视频模型价格以此为准 |
165
+ | 任务返回值 | `data.cost`(美元)、`data.credits_cost`(积分) | **实际扣费**,最可信 |
166
+ | 文档正文价格 | 各模型 API 文档页 | **经常过期**,与定价中心冲突时以定价中心为准(例:Seedream 5.0 Pro 文档写 $0.045/$0.09,定价中心是 $0.02928/$0.05856) |
167
+ | 定价 API | `GET /api/pricing/model` | **仅文本模型**,图片/视频用不上 |
168
+
169
+ Nano Banana 2 / Lite / Pro 在同一产品模型内各有「常规 EXT」与「官方」两条渠道,路由和 body schema 相同,以 `model` 精确 ID 区分;前者按张、后者按 token。SDK 以第一顺位 `role: 'channel'` 参数表达,默认常规渠道以保持 0.1.5 兼容,估价必须随渠道同步切换。
170
+
171
+ ## 7. 余额查询
172
+
173
+ 两个端点,返回结构几乎一致:
174
+
175
+ ```bash
176
+ curl https://api.apimart.ai/v1/balance -H "Authorization: Bearer $KEY" # 令牌维度
177
+ curl https://api.apimart.ai/v1/user/balance -H "Authorization: Bearer $KEY" # 用户维度
178
+ ```
179
+
180
+ ```json
181
+ { "success": true, "remain_balance": 10.5, "remain_credits": 105,
182
+ "used_balance": 2.3, "used_credits": 23, "unlimited_quota": false }
183
+ ```
184
+
185
+ - 无限额度令牌:`unlimited_quota: true`,且 `remain_balance` / `remain_credits` 返回 `-1`
186
+ - 失败时仍返回 HTTP 200,靠 `success: false` + `message` 判断
187
+ - 余额单位取决于系统配置(USD 或积分)
188
+
189
+ ## 8. 错误码
190
+
191
+ | HTTP | 含义 | 处理 |
192
+ |---|---|---|
193
+ | 400 | 请求参数错误 | 不重试,修参数 |
194
+ | 401 | 认证失败 | 不重试 |
195
+ | 402 | 余额不足 | 不重试,提示充值 |
196
+ | 403 | 无权限 | 不重试 |
197
+ | 429 | 频率限制 | 退避重试 |
198
+ | 500 | 服务器错误 | 退避重试 |
199
+ | 502 | 网关错误 | 退避重试 |
200
+
201
+ 响应体统一为 `{"error": {"code", "message", "type"}}`,`type` 取值如 `invalid_request_error` / `authentication_error` / `payment_required` / `permission_error` / `rate_limit_error` / `server_error` / `bad_gateway`。
202
+
203
+ ## 9. 本项目当前实现与差异
204
+
205
+ | 项目 | 位置 |
206
+ |---|---|
207
+ | 请求执行 | [src/providers/apimart.ts](../../../src/providers/apimart.ts) |
208
+ | 连接检测 / 余额 | [src/providers/connection.ts](../../../src/providers/connection.ts) → `GET /v1/balance` |
209
+ | 上传改写 | [src/upload/preprocess.ts](../../../src/upload/preprocess.ts) → APIMart 图片走 `uploadToApiMart` |
210
+ | 上传实现 | [src/upload/providers.ts](../../../src/upload/providers.ts) → `POST /v1/uploads/images` |
211
+ | Key / 链接配置 | [src/core/config/providers.ts](../../../../../src/core/config/providers.ts) |
212
+
213
+ 已知差异:
214
+
215
+ 1. Base URL 默认顺序是 `api.apimart.ai` → `api.apib.ai` → `api.aiuxu.com` → `api.aishuch.com`;仅在能证明尚未建立连接的网络故障下受控切换下一个域名,不对已建立连接的失败重放计费请求。不做地理位置判断,改用**连通性探测 + 进程内记忆**:任意一次请求成功命中某个域名后(含应用启动时的后台预热探测),该域名会被记为本次进程运行期间的优先域名,后续请求直接从它开始尝试,其余域名仍留作 fallback;缓存只在内存中,不持久化,应用重启后重新判断。实现见 [src/providers/endpoints/apimart.ts](../../../src/providers/endpoints/apimart.ts),启动预热调用见 [electron/main/index.ts](../../../../../electron/main/index.ts)(仅在已配置 APIMart Key 时触发,不阻塞启动)
216
+ 2. 图片已经接入 `/v1/uploads/images`;APIMart 没有通用视频 / 音频上传端点,公共预处理层会明确拒绝这两类本地文件并提示改用公网 URL,具体模型有专用上传协议时再单独接入
217
+ 3. `extractUrls` 已处理 `images[].url` 为数组的情况(`collectDeepUrls` 深挖),无需改
218
+ 4. 未使用 Webhook(桌面端合理),不需要改
219
+
220
+ ## 10. 原始链接索引
221
+
222
+ | 信息 | 链接 | 是否需登录 |
223
+ |---|---|---|
224
+ | 文档总索引(llms.txt) | https://docs.apimart.ai/llms.txt | 否 |
225
+ | 快速开始(Base URL、示例) | https://docs.apimart.ai/cn/quickstart | 否 |
226
+ | 开发指南(轮询、错误码) | https://docs.apimart.ai/cn/development | 否 |
227
+ | 连接与使用问题(端点地址确认) | https://docs.apimart.ai/cn/faqs/connection-usage | 否 |
228
+ | 上传图片 | https://docs.apimart.ai/cn/api-reference/uploads/images | 否 |
229
+ | 获取任务状态 | https://docs.apimart.ai/cn/api-reference/tasks/status | 否 |
230
+ | 任务完成回调(Webhook) | https://docs.apimart.ai/cn/api-reference/tasks/webhook | 否 |
231
+ | 查询令牌余额 | https://docs.apimart.ai/cn/api-reference/account/token-balance | 否 |
232
+ | 查询用户余额 | https://docs.apimart.ai/cn/api-reference/account/user-balance | 否 |
233
+ | 定价中心 | https://apimart.ai/zh/pricing | 否 |
234
+ | **备用访问域名面板**(`apib.ai` / `aiuxu.com` / `aishuch.com`) | https://apimart.ai/zh/login | 否(面板在登录页,但页面本身无需登录即可看到) |
235
+ | API Key 管理 | https://apimart.ai/keys | **是** |
236
+ | 控制台 | https://apimart.ai/overview | **是** |
237
+
238
+ > 文档站所有页面在 URL 末尾加 `.md` 可直接拿到原始 Markdown,例如 `https://docs.apimart.ai/cn/quickstart.md`。