@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,217 +1,217 @@
1
- # Grsai · 供应商基础文档
2
-
3
- | 项目 | 内容 |
4
- |---|---|
5
- | 最后更新 | 2026-08-26 |
6
- | 供应商类型 | 聚合中转(转发 Google Nano Banana 系列、OpenAI GPT Image 系列等第三方模型,非模型原厂) |
7
- | 项目内 providerId | `grsai` |
8
- | 控制台域名 | `grsai.ai` 与 `grsai.com` 两个域名,页面结构、数据、API 域名完全一致(互为镜像,可视为同一站点) |
9
- | API 域名 | 全球节点 `grsaiapi.com`;国内直连节点 `grsai.dakka.com.cn`,已接入连通性探测 + 自动切换 |
10
- | 鉴权 | `Authorization: Bearer <API Key>` |
11
- | 任务模型 | 提交接口按 `replyType` 三选一:`json`(同步返回结果)/ `stream`(SSE 流)/ `async`(返回 `task_id`,另起轮询)。本项目在发送边界统一强制 `async`,走轮询模式 |
12
- | 文档可见性 | 公开,无需登录(Apifox 文档站与 dashboard「模型列表」页均可匿名访问) |
13
- | 价格可见性 | 公开,无需登录(dashboard「模型列表」页直接给出每个模型的价格区间) |
14
- | 项目当前状态 | **已接入 SDK runtime**([src/providers/grsai.ts](../../../src/providers/grsai.ts)),已适配 GPT-Image-2 / Nano Banana 2 / Nano Banana 2 Lite / Nano Banana Pro 四个模型的全部渠道,见第 9 节「项目对照」 |
15
-
16
- > Grsai 的核心特点是**同一个模型家族在其内部又拆成多个「渠道」**(官方叫法,如 `-cl`、`-vip`、`-vt`、`-lite` 后缀),渠道之间价格差异可达 10 倍以上,越便宜的渠道官方公告历史上出现过越多次限流 / 维护 / 降级事件(见第 8 节)。接入时建议把「渠道」做成模型内的顶层可选参数,而不是把每个渠道拆成独立模型卡片——具体取舍见各模型文档「适配要点」。**本项目只适配 Nano Banana 第 2 代与 Nano Banana Pro 两个家族,初代 Nano Banana 相关的平台模型名已被明确排除,见第 7 节。**
17
-
18
- ## 1. 端点
19
-
20
- ### 1.1 Base URL 与节点
21
-
22
- 官方文档在每个接口页面都重复给出两条节点:
23
-
24
- | 节点 | 地址 | 定位 |
25
- |---|---|---|
26
- | 全球节点 | `https://grsaiapi.com` | 海外访问 |
27
- | 国内节点 | `https://grsai.dakka.com.cn` | 国内直连 |
28
-
29
- 与 APIMart 的「主线路 + 大陆备用域名」不同,Grsai 官方文档没有说明这两条线路是否共享同一套账号 / 任务数据、是否只在故障时切换——**两条线路的关系未实测确认**,接入前需要用同一个 API Key 分别探测两条线路的可用性与数据一致性,再决定是走 APIMart 式「连通性探测 + 记忆」还是简单固定一条。
30
-
31
- ### 1.2 API 端点一览
32
-
33
- **新版统一接口(Apifox 文档站给出,官方在公告中标注为「新文档」,推荐新对接使用)**
34
-
35
- | 用途 | 方法与路径 | 说明 |
36
- |---|---|---|
37
- | 生成 | `POST /v1/api/generate` | 图片(文档目录标注含视频,但当前 dashboard 定价列表未见任何视频模型,见第 8 节)统一生成入口,`model` 字段决定具体模型与渠道 |
38
- | 查询结果 | `GET /v1/api/result?id=<task_id>` | 统一异步结果查询,返回结构与生成接口一致 |
39
-
40
- **旧版分模型接口(官方声明「永久有效」,字段集合与新接口不完全一致,见第 3.5 节差异)**
41
-
42
- | 用途 | 方法与路径 | 说明 |
43
- |---|---|---|
44
- | Nano Banana 系列生成 | `POST /v1/draw/nano-banana` | 早于统一接口的专用入口 |
45
- | GPT Image 系列生成 | `POST /v1/draw/completions` | 多一个新接口没有的 `quality` 参数,见第 3.5 节 |
46
- | Veo3 视频生成 | `POST /v1/video/veo` | 仅在 dashboard 文档导航「Veo API」下出现,未见于「模型大全」定价列表,可用性 / 计费未知,见第 8 节 |
47
- | 旧接口统一结果查询 | `POST /v1/draw/result` | 与 `/v1/api/result` 平行存在,两套接口不要混用 |
48
-
49
- **OpenAI 兼容接口(面向能直接换 `base_url` 接入的客户端,文档未详细展开字段,仅作为备选记录)**
50
-
51
- | 用途 | 方法与路径 | 说明 |
52
- |---|---|---|
53
- | 对话 / 多模态 | `POST /v1/chat/completions` | 文档写「支持所有模型」;示例模型为纯文本 LLM(`gemini-3.1-pro` 等),不在本项目图片/视频/音频生成范围内 |
54
- | 图片生成 | `POST /v1/images/generations` | 文档写「支持所有图片生成模型」,`model` 传 `gpt-image-2` 等即可,参数与新版统一接口的 `aspectRatio`/`imageSize` 近似但字段名不同(`image`/`size`/`response_format`) |
55
-
56
- **账户与状态接口(旧版,路径不带 `base_url` 前缀,直接挂在控制台域名下)**
57
-
58
- | 用途 | 方法与路径 | 说明 |
59
- |---|---|---|
60
- | 查询 API Key 积分余额 | `POST /client/openapi/getAPIKeyCredits` | 返回 `data.credits`;文档正文未列出请求体字段,**鉴权方式未确认**(是否走 `Authorization: Bearer` 还是账户登录 `token`),接入前需登录控制台用「生成代码」示例核实 |
61
- | 查询账户积分余额 | `POST /client/openapi/getCredits` | 同上,字段与鉴权方式待确认 |
62
- | 查询模型状态 | `GET /client/common/getModelStatus?model=<modelName>` | 返回 `data.status`(布尔)与 `data.error`(异常时的说明文本) |
63
-
64
- ## 2. 鉴权
65
-
66
- ```
67
- Authorization: Bearer <API Key>
68
- ```
69
-
70
- 生成与查询接口的 `Authorization` 头在 OpenAPI 定义里标了 `required: false`,但示例与说明都指向「不带 Key 用不了」,按必填处理。API Key 在 https://grsai.ai/zh/dashboard/api-keys 创建(**需登录**)。
71
-
72
- ## 3. 提交、轮询与结果(新版统一接口)
73
-
74
- ### 3.1 提交 `POST /v1/api/generate`
75
-
76
- 请求体(图片,具体 `model` 枚举见各模型文档):
77
-
78
- | 字段 | 类型 | 必填 | 说明 |
79
- |---|---|---|---|
80
- | `model` | string | 必填 | 模型名(含渠道后缀,如 `nano-banana-2-cl`) |
81
- | `prompt` | string | 必填 | 提示词 |
82
- | `images` | array\<string\> | 可选 | 参考图,**支持 base64 与 URL 混填,没有独立上传接口**——图片直接以 base64 或已公开 URL 塞进请求体即可 |
83
- | `aspectRatio` | string | 可选 | 比例,取值集合因模型而异,见各模型文档 |
84
- | `imageSize` | string | 可选 | `1K` / `2K` / `4K`,是否可用取决于渠道,见各模型文档 |
85
- | `replyType` | string | 可选 | `json`(同步等待结果)/ `stream`(SSE 流)/ `async`(立即返回 `task_id`,走轮询)。本项目按 Electron 轮询模式,接入时固定传 `async` |
86
-
87
- ### 3.2 响应(`json` / `async` 首包共用结构)
88
-
89
- ```json
90
- {
91
- "id": "14-5f3cf761-a4bb-486a-8016-77f490998f80",
92
- "status": "succeeded",
93
- "progress": 100,
94
- "results": [{ "url": "https://file1.aitohumanize.com/file/....png" }],
95
- "error": null
96
- }
97
- ```
98
-
99
- | 字段 | 说明 |
100
- |---|---|
101
- | `id` | 任务 id,`async` 模式下用它调 `/v1/api/result` |
102
- | `status` | `running`(进行中)/ `violation`(违规,独立终态)/ `succeeded`(成功)/ `failed`(失败) |
103
- | `progress` | 0–100 |
104
- | `results[].url` | 图片 / 视频链接 |
105
- | `error` | 仅失败 / 违规时出现的报错信息 |
106
-
107
- `violation` 是与 `failed` 平级的独立终态(内容审核不通过),轮询逻辑要把它当终态处理,不能只判断 `succeeded`/`failed` 两种。公告原文提到「当生成失败时,会返还积分」,`violation` 是否同样返还未在文档中写明。
108
-
109
- ### 3.3 轮询 `GET /v1/api/result?id=<id>`
110
-
111
- 参数只有 `id`(query)与 `Authorization`(header),响应结构与 3.2 完全一致,`400` 时同样返回 `{id, status, error}`。
112
-
113
- ### 3.4 结果链接有效期
114
-
115
- 新版接口文档未写有效期。旧版 GPT Image 专用接口(`/v1/draw/completions`)文档明确写「结果图片的 URL(有效期为 2 小时)」。两套接口是否共用同一套文件存储、有效期是否一致未验证——**建议按 2 小时保守处理,接入前用真实任务实测确认**。
116
-
117
- ### 3.5 新旧接口字段差异
118
-
119
- | 差异点 | 新版 `/v1/api/generate` | 旧版 `/v1/draw/completions`(仅 GPT Image) |
120
- |---|---|---|
121
- | `quality` 参数 | **没有** | 有:`auto` / `low` / `medium` / `high` |
122
- | `webHook` 回调 | 文档未提及 | 有:不轮询时可用 `webHook` 收异步回调,传 `"-1"` 则立即返回 `id` 转轮询 |
123
- | `shutProgress` | 无 | 有:关闭进度中间态,只回最终结果 |
124
- | 结果字段 `url` | 只在 `results[]` 数组里 | 额外在顶层保留 `url`(等价 `results[0].url`,标注「旧参数,不会废弃」) |
125
-
126
- 桌面端没有公网回调地址,`webHook` 用不上;`quality` 的缺失是新接口一个实打实的能力缺口,若后续要接 GPT Image 的画质档位,需要用旧接口或等新接口补齐,**接入前需二次确认**。
127
-
128
- ## 4. 文件上传
129
-
130
- **没有独立的图片上传接口。** 生成请求的 `images`(新接口)/ `urls`(旧接口)参数直接接受 base64 编码字符串或已公开的 URL,由 Grsai 服务端自己处理,不需要供应商级别的预上传步骤。这点与 APIMart / KIE 都不同,接入时公共媒体预处理层对 Grsai 可以走「本地图转 base64 直接塞进请求体」,不必调用上传 API。
131
-
132
- ## 5. 计价与余额
133
-
134
- ### 5.1 积分与充值折扣
135
-
136
- Grsai 用积分计费,dashboard「充值」页给出六档套餐(¥10 起,最高¥999),充值金额越大赠送比例越高:
137
-
138
- | 充值金额 | 到账积分(含赠送) |
139
- |---|---|
140
- | ¥10 | 100,000(送 25%) |
141
- | ¥20 | 250,000(送 50%) |
142
- | ¥49 | 750,000(送 60%) |
143
- | ¥99 | 1,600,000(送 80%) |
144
- | ¥499 | 9,000,000(送 100%) |
145
- | ¥999 | 20,000,000 |
146
-
147
- 据此换算,积分单价区间约为 **¥0.0001/积分(无优惠,小额充值)到 ¥0.00005/积分(¥999 档,约 5 折)**。dashboard「模型列表」页给每个模型标注的价格区间(如 gpt-image-2 的「¥0.03~¥0.06/次」)就是「积分消耗 × 积分单价区间」算出来的,是最权威的价格来源,本轮各模型文档的价格表都来自这里(2026-08-26 实测,未登录可见)。
148
-
149
- ### 5.2 余额查询
150
-
151
- `POST /client/openapi/getAPIKeyCredits` 返回 `{ code, msg, data: { credits } }`;请求体字段与鉴权方式文档正文未写全,**接入前需要登录控制台核实**(见第 1.2 节表格备注)。
152
-
153
- ## 6. 错误与状态
154
-
155
- - 任务状态枚举:`running` / `violation` / `succeeded` / `failed`
156
- - 错误信息在 `error` 字段(string),没有结构化的 `code` / `type` 分类
157
- - 部分接口在失败时返回 HTTP `400`,body 结构与 200 成功响应类似(`{id, status, error}`)
158
- - 文档未提供限流(429)相关说明
159
-
160
- ## 7. 明确排除的模型(不适配,容易与在售渠道混淆)
161
-
162
- | 平台模型名 | 状态 | 排除原因 |
163
- |---|---|---|
164
- | `nano-banana` | 已下架(2026-07-01 公告:谷歌官方下架其底层模型 `gemini-2.5-flash-image`,Grsai 随即下架该模型名) | 属于最早期的「香蕉 1」世代,官方已停售,本来就没有可适配的意义 |
165
- | `nano-banana-fast` | 当前 dashboard「模型列表」页仍在售,**本项目不适配** | 同属「香蕉 1」世代衍生出的命名,2026-07-01 公告显示它在 `nano-banana` 下架后「切换底层模型」,此后实际跑在新的 Gemini 3.1 Lite 底层上。它的积分消耗(440/次)、价格区间(¥0.022~¥0.044/次)与 `nano-banana-2-lite` **完全相同**,两个名字长得像、报价一样,极易在选型或写 schema 时混进来 |
166
-
167
- 本项目适配范围只有 **Nano Banana 2**([Nano-Banana-2_Grsai.md](../Nano-Banana-2/Nano-Banana-2_Grsai.md))、**Nano Banana 2 Lite**([Nano-Banana-2-Lite_Grsai.md](../Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md))、**Nano Banana Pro**([Nano-Banana-Pro_Grsai.md](../Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md))三个家族,`nano-banana` 与 `nano-banana-fast` 不在其中,不要在渠道枚举、价格对照或 schema 里出现这两个名字。以后如果 Grsai dashboard 上出现新的「香蕉 1」世代衍生渠道(例如再切换底层模型后改个新名字),按同样理由排除,不需要重新讨论。
168
-
169
- ## 8. 已知不确定项
170
-
171
- 以下几项在真机核实前仍是假设,不代表官方已确认;代码里已按标注的方式处理,未来发现假设不成立时优先改文档、再改代码。
172
-
173
- 1. **国内节点与全球节点的关系**:是同账号双活线路,还是各自独立环境,未实测。**处理方式**:已实现连通性探测 + 进程内记忆([endpoints/grsai.ts](../../../src/providers/endpoints/grsai.ts),与 APIMart 同款策略),只在能证明尚未建立连接时切换,不重放已建立连接后的失败;底层数据是否互通仍未验证。
174
- 2. **新版接口结果 URL 有效期**:旧接口写 2 小时,新接口未写,两者是否一致未知。**处理方式**:项目在任务完成时立即把结果下载转存到本地(`saveMediaFromUrl`),不依赖长期持有远程链接,实际风险已被规避。
175
- 3. **`replyType: async` 首包与轮询响应字段是否完全一致**:示例数据看起来一致,但没有逐字段的官方说明。**处理方式**:`execute()` 对提交响应做了防御性判断——如果 `status` 已经是 `succeeded` 且带 `results`,直接按完成态返回,不强制走一次多余的轮询。
176
- 4. **`getAPIKeyCredits` / `getCredits` 的鉴权方式**:走生成用的 `Authorization: Bearer`,还是账户登录 `token` 字段,文档正文没写清楚。**处理方式**:本轮**没有**接入余额探测(`provider-connection.ts` 的 `PROVIDER_PROBES` 里没有 `grsai` 条目),保持"已保存未校验",避免拿不确定契约误判用户 Key 状态;接口方法也对不上(余额是 POST,探测框架统一用 GET)。
177
- 5. **Veo3(`veo3.1-fast`)是否可用**:只出现在「在线体验/文档」导航的「Veo API」旧版文档里,**没有出现在 dashboard「模型列表」的定价清单中**,说明它可能是未正式计价 / 未上线 / 已下线的状态,不作为可接入模型,仅存档以免下次调研重复发现。
178
- 6. **`violation`(违规)终态是否返还积分**:公告只写了 `failed` 会返还,`violation` 未提及,不影响本项目实现(两种状态在轮询里都按终止性失败处理)。
179
-
180
- ## 9. 项目对照
181
-
182
- | 层级 | 位置 |
183
- |---|---|
184
- | 生成执行 / 轮询 | [src/providers/grsai.ts](../../../src/providers/grsai.ts) |
185
- | 双线路探测 | [src/providers/endpoints/grsai.ts](../../../src/providers/endpoints/grsai.ts) |
186
- | Provider 分发注册 | [src/providers/index.ts](../../../src/providers/index.ts) |
187
- | Key 存储 | [electron/main/services/keystore.ts](../../../../../electron/main/services/keystore.ts) → `KNOWN_AI_PROVIDER_IDS` |
188
- | 启动预热 | [electron/main/index.ts](../../../../../electron/main/index.ts)(仅在已配置 Key 时触发,不阻塞启动) |
189
- | 前端 Key 元信息 | [src/core/config/providers.ts](../../../../../src/core/config/providers.ts) |
190
- | 本地图片上传策略 | [src/upload/preprocess.ts](../../../src/upload/preprocess.ts)(内联 base64,无独立上传接口) |
191
- | 模型定义 | `packages/ai-sdk/src/catalog/grsai/{gpt-image-2,nano-banana-2,nano-banana-2-lite,nano-banana-pro}.model.ts` |
192
- | 国际化 | `src/i18n/locales/{zh-CN,en-US}/models-grsai.json`、`settings.json` 的 `apiKeys.providers.grsai` |
193
- | 测试 | `packages/ai-sdk/tests/providers/endpoints/grsai.test.ts`、`packages/ai-sdk/tests/providers/grsai.test.ts`、`packages/ai-sdk/tests/catalog/grsai.test.ts` |
194
-
195
- 已知欠账(记录在案,不阻塞当前交付):
196
-
197
- - 余额查询未接入(见第 8 节第 4 项),设置页无法显示 Grsai 账户余额,只能显示"已保存"状态。
198
- - 未做真实 API Key 下的端到端联调(本地没有可用的 Grsai Key),当前实现完全基于文档与单元测试验证,接入前建议先用真实任务跑一轮 `npm run assistant:cli` 或手动生成核实请求/响应字段。
199
-
200
- ## 10. 原始链接索引
201
-
202
- | 信息 | 链接 | 是否需登录 |
203
- |---|---|---|
204
- | Apifox 文档总索引(llms.txt) | https://qmy27nhsd9.apifox.cn/llms.txt | 否 |
205
- | nano-banana 接口(新版统一生成,含全部图片模型枚举) | https://qmy27nhsd9.apifox.cn/452392911e0 | 否 |
206
- | gpt-image-2 接口(新版统一生成) | https://qmy27nhsd9.apifox.cn/452409160e0 | 否 |
207
- | 异步生成结果查询接口 | https://qmy27nhsd9.apifox.cn/452409577e0 | 否 |
208
- | OpenAI 兼容 `/v1/chat/completions` | https://qmy27nhsd9.apifox.cn/452418916e0 | 否 |
209
- | OpenAI 兼容 `/v1/images/generations` | https://qmy27nhsd9.apifox.cn/452417029e0 | 否 |
210
- | dashboard 公告(渠道调价 / 模型上下架历史) | https://grsai.com/zh/dashboard/announcements | 否 |
211
- | dashboard 模型大全(当前权威价格与可用性) | https://grsai.com/zh/dashboard/models(同 `grsai.ai/zh/dashboard/models`) | 否 |
212
- | dashboard 充值套餐(积分折扣档位) | https://grsai.com/zh/dashboard/billing | 否 |
213
- | Nano Banana API 旧版文档(`/v1/draw/nano-banana`) | https://grsai.ai/zh/dashboard/documents/nano-banana | 否 |
214
- | GPT Image API 旧版文档(`/v1/draw/completions`,含 `quality` 参数) | https://grsai.ai/zh/dashboard/documents/gpt-image | 否 |
215
- | Veo API 旧版文档(`veo3.1-fast`,未出现在定价列表) | https://grsai.ai/zh/dashboard/documents/veo | 否 |
216
- | 其他接口(账户 / API Key 管理,含余额与模型状态查询) | https://grsai.ai/zh/dashboard/documents/other | 否 |
217
- | API Key 管理 | https://grsai.ai/zh/dashboard/api-keys | **是** |
1
+ # Grsai · 供应商基础文档
2
+
3
+ | 项目 | 内容 |
4
+ |---|---|
5
+ | 最后更新 | 2026-08-26 |
6
+ | 供应商类型 | 聚合中转(转发 Google Nano Banana 系列、OpenAI GPT Image 系列等第三方模型,非模型原厂) |
7
+ | 项目内 providerId | `grsai` |
8
+ | 控制台域名 | `grsai.ai` 与 `grsai.com` 两个域名,页面结构、数据、API 域名完全一致(互为镜像,可视为同一站点) |
9
+ | API 域名 | 全球节点 `grsaiapi.com`;国内直连节点 `grsai.dakka.com.cn`,已接入连通性探测 + 自动切换 |
10
+ | 鉴权 | `Authorization: Bearer <API Key>` |
11
+ | 任务模型 | 提交接口按 `replyType` 三选一:`json`(同步返回结果)/ `stream`(SSE 流)/ `async`(返回 `task_id`,另起轮询)。本项目在发送边界统一强制 `async`,走轮询模式 |
12
+ | 文档可见性 | 公开,无需登录(Apifox 文档站与 dashboard「模型列表」页均可匿名访问) |
13
+ | 价格可见性 | 公开,无需登录(dashboard「模型列表」页直接给出每个模型的价格区间) |
14
+ | 项目当前状态 | **已接入 SDK runtime**([src/providers/grsai.ts](../../../src/providers/grsai.ts)),已适配 GPT-Image-2 / Nano Banana 2 / Nano Banana 2 Lite / Nano Banana Pro 四个模型的全部渠道,见第 9 节「项目对照」 |
15
+
16
+ > Grsai 的核心特点是**同一个模型家族在其内部又拆成多个「渠道」**(官方叫法,如 `-cl`、`-vip`、`-vt`、`-lite` 后缀),渠道之间价格差异可达 10 倍以上,越便宜的渠道官方公告历史上出现过越多次限流 / 维护 / 降级事件(见第 8 节)。接入时建议把「渠道」做成模型内的顶层可选参数,而不是把每个渠道拆成独立模型卡片——具体取舍见各模型文档「适配要点」。**本项目只适配 Nano Banana 第 2 代与 Nano Banana Pro 两个家族,初代 Nano Banana 相关的平台模型名已被明确排除,见第 7 节。**
17
+
18
+ ## 1. 端点
19
+
20
+ ### 1.1 Base URL 与节点
21
+
22
+ 官方文档在每个接口页面都重复给出两条节点:
23
+
24
+ | 节点 | 地址 | 定位 |
25
+ |---|---|---|
26
+ | 全球节点 | `https://grsaiapi.com` | 海外访问 |
27
+ | 国内节点 | `https://grsai.dakka.com.cn` | 国内直连 |
28
+
29
+ 与 APIMart 的「主线路 + 大陆备用域名」不同,Grsai 官方文档没有说明这两条线路是否共享同一套账号 / 任务数据、是否只在故障时切换——**两条线路的关系未实测确认**,接入前需要用同一个 API Key 分别探测两条线路的可用性与数据一致性,再决定是走 APIMart 式「连通性探测 + 记忆」还是简单固定一条。
30
+
31
+ ### 1.2 API 端点一览
32
+
33
+ **新版统一接口(Apifox 文档站给出,官方在公告中标注为「新文档」,推荐新对接使用)**
34
+
35
+ | 用途 | 方法与路径 | 说明 |
36
+ |---|---|---|
37
+ | 生成 | `POST /v1/api/generate` | 图片(文档目录标注含视频,但当前 dashboard 定价列表未见任何视频模型,见第 8 节)统一生成入口,`model` 字段决定具体模型与渠道 |
38
+ | 查询结果 | `GET /v1/api/result?id=<task_id>` | 统一异步结果查询,返回结构与生成接口一致 |
39
+
40
+ **旧版分模型接口(官方声明「永久有效」,字段集合与新接口不完全一致,见第 3.5 节差异)**
41
+
42
+ | 用途 | 方法与路径 | 说明 |
43
+ |---|---|---|
44
+ | Nano Banana 系列生成 | `POST /v1/draw/nano-banana` | 早于统一接口的专用入口 |
45
+ | GPT Image 系列生成 | `POST /v1/draw/completions` | 多一个新接口没有的 `quality` 参数,见第 3.5 节 |
46
+ | Veo3 视频生成 | `POST /v1/video/veo` | 仅在 dashboard 文档导航「Veo API」下出现,未见于「模型大全」定价列表,可用性 / 计费未知,见第 8 节 |
47
+ | 旧接口统一结果查询 | `POST /v1/draw/result` | 与 `/v1/api/result` 平行存在,两套接口不要混用 |
48
+
49
+ **OpenAI 兼容接口(面向能直接换 `base_url` 接入的客户端,文档未详细展开字段,仅作为备选记录)**
50
+
51
+ | 用途 | 方法与路径 | 说明 |
52
+ |---|---|---|
53
+ | 对话 / 多模态 | `POST /v1/chat/completions` | 文档写「支持所有模型」;示例模型为纯文本 LLM(`gemini-3.1-pro` 等),不在本项目图片/视频/音频生成范围内 |
54
+ | 图片生成 | `POST /v1/images/generations` | 文档写「支持所有图片生成模型」,`model` 传 `gpt-image-2` 等即可,参数与新版统一接口的 `aspectRatio`/`imageSize` 近似但字段名不同(`image`/`size`/`response_format`) |
55
+
56
+ **账户与状态接口(旧版,路径不带 `base_url` 前缀,直接挂在控制台域名下)**
57
+
58
+ | 用途 | 方法与路径 | 说明 |
59
+ |---|---|---|
60
+ | 查询 API Key 积分余额 | `POST /client/openapi/getAPIKeyCredits` | 返回 `data.credits`;文档正文未列出请求体字段,**鉴权方式未确认**(是否走 `Authorization: Bearer` 还是账户登录 `token`),接入前需登录控制台用「生成代码」示例核实 |
61
+ | 查询账户积分余额 | `POST /client/openapi/getCredits` | 同上,字段与鉴权方式待确认 |
62
+ | 查询模型状态 | `GET /client/common/getModelStatus?model=<modelName>` | 返回 `data.status`(布尔)与 `data.error`(异常时的说明文本) |
63
+
64
+ ## 2. 鉴权
65
+
66
+ ```
67
+ Authorization: Bearer <API Key>
68
+ ```
69
+
70
+ 生成与查询接口的 `Authorization` 头在 OpenAPI 定义里标了 `required: false`,但示例与说明都指向「不带 Key 用不了」,按必填处理。API Key 在 https://grsai.ai/zh/dashboard/api-keys 创建(**需登录**)。
71
+
72
+ ## 3. 提交、轮询与结果(新版统一接口)
73
+
74
+ ### 3.1 提交 `POST /v1/api/generate`
75
+
76
+ 请求体(图片,具体 `model` 枚举见各模型文档):
77
+
78
+ | 字段 | 类型 | 必填 | 说明 |
79
+ |---|---|---|---|
80
+ | `model` | string | 必填 | 模型名(含渠道后缀,如 `nano-banana-2-cl`) |
81
+ | `prompt` | string | 必填 | 提示词 |
82
+ | `images` | array\<string\> | 可选 | 参考图,**支持 base64 与 URL 混填,没有独立上传接口**——图片直接以 base64 或已公开 URL 塞进请求体即可 |
83
+ | `aspectRatio` | string | 可选 | 比例,取值集合因模型而异,见各模型文档 |
84
+ | `imageSize` | string | 可选 | `1K` / `2K` / `4K`,是否可用取决于渠道,见各模型文档 |
85
+ | `replyType` | string | 可选 | `json`(同步等待结果)/ `stream`(SSE 流)/ `async`(立即返回 `task_id`,走轮询)。本项目按 Electron 轮询模式,接入时固定传 `async` |
86
+
87
+ ### 3.2 响应(`json` / `async` 首包共用结构)
88
+
89
+ ```json
90
+ {
91
+ "id": "14-5f3cf761-a4bb-486a-8016-77f490998f80",
92
+ "status": "succeeded",
93
+ "progress": 100,
94
+ "results": [{ "url": "https://file1.aitohumanize.com/file/....png" }],
95
+ "error": null
96
+ }
97
+ ```
98
+
99
+ | 字段 | 说明 |
100
+ |---|---|
101
+ | `id` | 任务 id,`async` 模式下用它调 `/v1/api/result` |
102
+ | `status` | `running`(进行中)/ `violation`(违规,独立终态)/ `succeeded`(成功)/ `failed`(失败) |
103
+ | `progress` | 0–100 |
104
+ | `results[].url` | 图片 / 视频链接 |
105
+ | `error` | 仅失败 / 违规时出现的报错信息 |
106
+
107
+ `violation` 是与 `failed` 平级的独立终态(内容审核不通过),轮询逻辑要把它当终态处理,不能只判断 `succeeded`/`failed` 两种。公告原文提到「当生成失败时,会返还积分」,`violation` 是否同样返还未在文档中写明。
108
+
109
+ ### 3.3 轮询 `GET /v1/api/result?id=<id>`
110
+
111
+ 参数只有 `id`(query)与 `Authorization`(header),响应结构与 3.2 完全一致,`400` 时同样返回 `{id, status, error}`。
112
+
113
+ ### 3.4 结果链接有效期
114
+
115
+ 新版接口文档未写有效期。旧版 GPT Image 专用接口(`/v1/draw/completions`)文档明确写「结果图片的 URL(有效期为 2 小时)」。两套接口是否共用同一套文件存储、有效期是否一致未验证——**建议按 2 小时保守处理,接入前用真实任务实测确认**。
116
+
117
+ ### 3.5 新旧接口字段差异
118
+
119
+ | 差异点 | 新版 `/v1/api/generate` | 旧版 `/v1/draw/completions`(仅 GPT Image) |
120
+ |---|---|---|
121
+ | `quality` 参数 | **没有** | 有:`auto` / `low` / `medium` / `high` |
122
+ | `webHook` 回调 | 文档未提及 | 有:不轮询时可用 `webHook` 收异步回调,传 `"-1"` 则立即返回 `id` 转轮询 |
123
+ | `shutProgress` | 无 | 有:关闭进度中间态,只回最终结果 |
124
+ | 结果字段 `url` | 只在 `results[]` 数组里 | 额外在顶层保留 `url`(等价 `results[0].url`,标注「旧参数,不会废弃」) |
125
+
126
+ 桌面端没有公网回调地址,`webHook` 用不上;`quality` 的缺失是新接口一个实打实的能力缺口,若后续要接 GPT Image 的画质档位,需要用旧接口或等新接口补齐,**接入前需二次确认**。
127
+
128
+ ## 4. 文件上传
129
+
130
+ **没有独立的图片上传接口。** 生成请求的 `images`(新接口)/ `urls`(旧接口)参数直接接受 base64 编码字符串或已公开的 URL,由 Grsai 服务端自己处理,不需要供应商级别的预上传步骤。这点与 APIMart / KIE 都不同,接入时公共媒体预处理层对 Grsai 可以走「本地图转 base64 直接塞进请求体」,不必调用上传 API。
131
+
132
+ ## 5. 计价与余额
133
+
134
+ ### 5.1 积分与充值折扣
135
+
136
+ Grsai 用积分计费,dashboard「充值」页给出六档套餐(¥10 起,最高¥999),充值金额越大赠送比例越高:
137
+
138
+ | 充值金额 | 到账积分(含赠送) |
139
+ |---|---|
140
+ | ¥10 | 100,000(送 25%) |
141
+ | ¥20 | 250,000(送 50%) |
142
+ | ¥49 | 750,000(送 60%) |
143
+ | ¥99 | 1,600,000(送 80%) |
144
+ | ¥499 | 9,000,000(送 100%) |
145
+ | ¥999 | 20,000,000 |
146
+
147
+ 据此换算,积分单价区间约为 **¥0.0001/积分(无优惠,小额充值)到 ¥0.00005/积分(¥999 档,约 5 折)**。dashboard「模型列表」页给每个模型标注的价格区间(如 gpt-image-2 的「¥0.03~¥0.06/次」)就是「积分消耗 × 积分单价区间」算出来的,是最权威的价格来源,本轮各模型文档的价格表都来自这里(2026-08-26 实测,未登录可见)。
148
+
149
+ ### 5.2 余额查询
150
+
151
+ `POST /client/openapi/getAPIKeyCredits` 返回 `{ code, msg, data: { credits } }`;请求体字段与鉴权方式文档正文未写全,**接入前需要登录控制台核实**(见第 1.2 节表格备注)。
152
+
153
+ ## 6. 错误与状态
154
+
155
+ - 任务状态枚举:`running` / `violation` / `succeeded` / `failed`
156
+ - 错误信息在 `error` 字段(string),没有结构化的 `code` / `type` 分类
157
+ - 部分接口在失败时返回 HTTP `400`,body 结构与 200 成功响应类似(`{id, status, error}`)
158
+ - 文档未提供限流(429)相关说明
159
+
160
+ ## 7. 明确排除的模型(不适配,容易与在售渠道混淆)
161
+
162
+ | 平台模型名 | 状态 | 排除原因 |
163
+ |---|---|---|
164
+ | `nano-banana` | 已下架(2026-07-01 公告:谷歌官方下架其底层模型 `gemini-2.5-flash-image`,Grsai 随即下架该模型名) | 属于最早期的「香蕉 1」世代,官方已停售,本来就没有可适配的意义 |
165
+ | `nano-banana-fast` | 当前 dashboard「模型列表」页仍在售,**本项目不适配** | 同属「香蕉 1」世代衍生出的命名,2026-07-01 公告显示它在 `nano-banana` 下架后「切换底层模型」,此后实际跑在新的 Gemini 3.1 Lite 底层上。它的积分消耗(440/次)、价格区间(¥0.022~¥0.044/次)与 `nano-banana-2-lite` **完全相同**,两个名字长得像、报价一样,极易在选型或写 schema 时混进来 |
166
+
167
+ 本项目适配范围只有 **Nano Banana 2**([Nano-Banana-2_Grsai.md](../Nano-Banana-2/Nano-Banana-2_Grsai.md))、**Nano Banana 2 Lite**([Nano-Banana-2-Lite_Grsai.md](../Nano-Banana-2-Lite/Nano-Banana-2-Lite_Grsai.md))、**Nano Banana Pro**([Nano-Banana-Pro_Grsai.md](../Nano-Banana-Pro/Nano-Banana-Pro_Grsai.md))三个家族,`nano-banana` 与 `nano-banana-fast` 不在其中,不要在渠道枚举、价格对照或 schema 里出现这两个名字。以后如果 Grsai dashboard 上出现新的「香蕉 1」世代衍生渠道(例如再切换底层模型后改个新名字),按同样理由排除,不需要重新讨论。
168
+
169
+ ## 8. 已知不确定项
170
+
171
+ 以下几项在真机核实前仍是假设,不代表官方已确认;代码里已按标注的方式处理,未来发现假设不成立时优先改文档、再改代码。
172
+
173
+ 1. **国内节点与全球节点的关系**:是同账号双活线路,还是各自独立环境,未实测。**处理方式**:已实现连通性探测 + 进程内记忆([endpoints/grsai.ts](../../../src/providers/endpoints/grsai.ts),与 APIMart 同款策略),只在能证明尚未建立连接时切换,不重放已建立连接后的失败;底层数据是否互通仍未验证。
174
+ 2. **新版接口结果 URL 有效期**:旧接口写 2 小时,新接口未写,两者是否一致未知。**处理方式**:项目在任务完成时立即把结果下载转存到本地(`saveMediaFromUrl`),不依赖长期持有远程链接,实际风险已被规避。
175
+ 3. **`replyType: async` 首包与轮询响应字段是否完全一致**:示例数据看起来一致,但没有逐字段的官方说明。**处理方式**:`execute()` 对提交响应做了防御性判断——如果 `status` 已经是 `succeeded` 且带 `results`,直接按完成态返回,不强制走一次多余的轮询。
176
+ 4. **`getAPIKeyCredits` / `getCredits` 的鉴权方式**:走生成用的 `Authorization: Bearer`,还是账户登录 `token` 字段,文档正文没写清楚。**处理方式**:本轮**没有**接入余额探测(`provider-connection.ts` 的 `PROVIDER_PROBES` 里没有 `grsai` 条目),保持"已保存未校验",避免拿不确定契约误判用户 Key 状态;接口方法也对不上(余额是 POST,探测框架统一用 GET)。
177
+ 5. **Veo3(`veo3.1-fast`)是否可用**:只出现在「在线体验/文档」导航的「Veo API」旧版文档里,**没有出现在 dashboard「模型列表」的定价清单中**,说明它可能是未正式计价 / 未上线 / 已下线的状态,不作为可接入模型,仅存档以免下次调研重复发现。
178
+ 6. **`violation`(违规)终态是否返还积分**:公告只写了 `failed` 会返还,`violation` 未提及,不影响本项目实现(两种状态在轮询里都按终止性失败处理)。
179
+
180
+ ## 9. 项目对照
181
+
182
+ | 层级 | 位置 |
183
+ |---|---|
184
+ | 生成执行 / 轮询 | [src/providers/grsai.ts](../../../src/providers/grsai.ts) |
185
+ | 双线路探测 | [src/providers/endpoints/grsai.ts](../../../src/providers/endpoints/grsai.ts) |
186
+ | Provider 分发注册 | [src/providers/index.ts](../../../src/providers/index.ts) |
187
+ | Key 存储 | [electron/main/services/keystore.ts](../../../../../electron/main/services/keystore.ts) → `KNOWN_AI_PROVIDER_IDS` |
188
+ | 启动预热 | [electron/main/index.ts](../../../../../electron/main/index.ts)(仅在已配置 Key 时触发,不阻塞启动) |
189
+ | 前端 Key 元信息 | [src/core/config/providers.ts](../../../../../src/core/config/providers.ts) |
190
+ | 本地图片上传策略 | [src/upload/preprocess.ts](../../../src/upload/preprocess.ts)(内联 base64,无独立上传接口) |
191
+ | 模型定义 | `packages/ai-sdk/src/catalog/grsai/{gpt-image-2,nano-banana-2,nano-banana-2-lite,nano-banana-pro}.model.ts` |
192
+ | 国际化 | `src/i18n/locales/{zh-CN,en-US}/models-grsai.json`、`settings.json` 的 `apiKeys.providers.grsai` |
193
+ | 测试 | `packages/ai-sdk/tests/providers/endpoints/grsai.test.ts`、`packages/ai-sdk/tests/providers/grsai.test.ts`、`packages/ai-sdk/tests/catalog/grsai.test.ts` |
194
+
195
+ 已知欠账(记录在案,不阻塞当前交付):
196
+
197
+ - 余额查询未接入(见第 8 节第 4 项),设置页无法显示 Grsai 账户余额,只能显示"已保存"状态。
198
+ - 未做真实 API Key 下的端到端联调(本地没有可用的 Grsai Key),当前实现完全基于文档与单元测试验证,接入前建议先用真实任务跑一轮 `npm run assistant:cli` 或手动生成核实请求/响应字段。
199
+
200
+ ## 10. 原始链接索引
201
+
202
+ | 信息 | 链接 | 是否需登录 |
203
+ |---|---|---|
204
+ | Apifox 文档总索引(llms.txt) | https://qmy27nhsd9.apifox.cn/llms.txt | 否 |
205
+ | nano-banana 接口(新版统一生成,含全部图片模型枚举) | https://qmy27nhsd9.apifox.cn/452392911e0 | 否 |
206
+ | gpt-image-2 接口(新版统一生成) | https://qmy27nhsd9.apifox.cn/452409160e0 | 否 |
207
+ | 异步生成结果查询接口 | https://qmy27nhsd9.apifox.cn/452409577e0 | 否 |
208
+ | OpenAI 兼容 `/v1/chat/completions` | https://qmy27nhsd9.apifox.cn/452418916e0 | 否 |
209
+ | OpenAI 兼容 `/v1/images/generations` | https://qmy27nhsd9.apifox.cn/452417029e0 | 否 |
210
+ | dashboard 公告(渠道调价 / 模型上下架历史) | https://grsai.com/zh/dashboard/announcements | 否 |
211
+ | dashboard 模型大全(当前权威价格与可用性) | https://grsai.com/zh/dashboard/models(同 `grsai.ai/zh/dashboard/models`) | 否 |
212
+ | dashboard 充值套餐(积分折扣档位) | https://grsai.com/zh/dashboard/billing | 否 |
213
+ | Nano Banana API 旧版文档(`/v1/draw/nano-banana`) | https://grsai.ai/zh/dashboard/documents/nano-banana | 否 |
214
+ | GPT Image API 旧版文档(`/v1/draw/completions`,含 `quality` 参数) | https://grsai.ai/zh/dashboard/documents/gpt-image | 否 |
215
+ | Veo API 旧版文档(`veo3.1-fast`,未出现在定价列表) | https://grsai.ai/zh/dashboard/documents/veo | 否 |
216
+ | 其他接口(账户 / API Key 管理,含余额与模型状态查询) | https://grsai.ai/zh/dashboard/documents/other | 否 |
217
+ | API Key 管理 | https://grsai.ai/zh/dashboard/api-keys | **是** |