@aituber-onair/chat 0.50.0 → 0.52.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 (169) hide show
  1. package/README.ja.md +63 -35
  2. package/README.md +62 -36
  3. package/dist/cjs/backend.d.ts +20 -0
  4. package/dist/cjs/backend.d.ts.map +1 -0
  5. package/dist/cjs/backend.js +115 -0
  6. package/dist/cjs/backend.js.map +1 -0
  7. package/dist/cjs/constants/claude.d.ts +2 -0
  8. package/dist/cjs/constants/claude.d.ts.map +1 -1
  9. package/dist/cjs/constants/claude.js +13 -4
  10. package/dist/cjs/constants/claude.js.map +1 -1
  11. package/dist/cjs/constants/gemini.d.ts +1 -0
  12. package/dist/cjs/constants/gemini.d.ts.map +1 -1
  13. package/dist/cjs/constants/gemini.js +11 -1
  14. package/dist/cjs/constants/gemini.js.map +1 -1
  15. package/dist/cjs/constants/mistral.d.ts +2 -0
  16. package/dist/cjs/constants/mistral.d.ts.map +1 -1
  17. package/dist/cjs/constants/mistral.js +3 -3
  18. package/dist/cjs/constants/mistral.js.map +1 -1
  19. package/dist/cjs/constants/openrouter.d.ts +5 -0
  20. package/dist/cjs/constants/openrouter.d.ts.map +1 -1
  21. package/dist/cjs/constants/openrouter.js +39 -9
  22. package/dist/cjs/constants/openrouter.js.map +1 -1
  23. package/dist/cjs/constants/plamo.d.ts +2 -0
  24. package/dist/cjs/constants/plamo.d.ts.map +1 -1
  25. package/dist/cjs/constants/plamo.js +4 -5
  26. package/dist/cjs/constants/plamo.js.map +1 -1
  27. package/dist/cjs/constants/sakana.d.ts +3 -0
  28. package/dist/cjs/constants/sakana.d.ts.map +1 -1
  29. package/dist/cjs/constants/sakana.js +7 -3
  30. package/dist/cjs/constants/sakana.js.map +1 -1
  31. package/dist/cjs/constants/xai.d.ts +7 -1
  32. package/dist/cjs/constants/xai.d.ts.map +1 -1
  33. package/dist/cjs/constants/xai.js +35 -9
  34. package/dist/cjs/constants/xai.js.map +1 -1
  35. package/dist/cjs/constants/zai.d.ts +8 -0
  36. package/dist/cjs/constants/zai.d.ts.map +1 -1
  37. package/dist/cjs/constants/zai.js +38 -0
  38. package/dist/cjs/constants/zai.js.map +1 -1
  39. package/dist/cjs/index.d.ts +1 -0
  40. package/dist/cjs/index.d.ts.map +1 -1
  41. package/dist/cjs/index.js +1 -0
  42. package/dist/cjs/index.js.map +1 -1
  43. package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -1
  44. package/dist/cjs/services/ChatServiceFactory.js +22 -24
  45. package/dist/cjs/services/ChatServiceFactory.js.map +1 -1
  46. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +5 -1
  47. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  48. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts +2 -3
  49. package/dist/cjs/services/providers/claude/ClaudeChatService.d.ts.map +1 -1
  50. package/dist/cjs/services/providers/claude/ClaudeChatService.js +23 -15
  51. package/dist/cjs/services/providers/claude/ClaudeChatService.js.map +1 -1
  52. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  53. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js +1 -3
  54. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  55. package/dist/cjs/services/providers/gemini/GeminiChatService.d.ts.map +1 -1
  56. package/dist/cjs/services/providers/gemini/GeminiChatService.js +3 -0
  57. package/dist/cjs/services/providers/gemini/GeminiChatService.js.map +1 -1
  58. package/dist/cjs/services/providers/gemini/geminiMessageConverter.d.ts +5 -0
  59. package/dist/cjs/services/providers/gemini/geminiMessageConverter.d.ts.map +1 -1
  60. package/dist/cjs/services/providers/gemini/geminiMessageConverter.js +16 -0
  61. package/dist/cjs/services/providers/gemini/geminiMessageConverter.js.map +1 -1
  62. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  63. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +27 -5
  64. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  65. package/dist/cjs/services/providers/openai/responsesParser.d.ts.map +1 -1
  66. package/dist/cjs/services/providers/openai/responsesParser.js +71 -6
  67. package/dist/cjs/services/providers/openai/responsesParser.js.map +1 -1
  68. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +4 -4
  69. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  70. package/dist/cjs/services/providers/xai/XAIChatService.d.ts.map +1 -1
  71. package/dist/cjs/services/providers/xai/XAIChatService.js +1 -1
  72. package/dist/cjs/services/providers/xai/XAIChatService.js.map +1 -1
  73. package/dist/cjs/services/providers/xai/XAIChatServiceProvider.d.ts.map +1 -1
  74. package/dist/cjs/services/providers/xai/XAIChatServiceProvider.js +3 -4
  75. package/dist/cjs/services/providers/xai/XAIChatServiceProvider.js.map +1 -1
  76. package/dist/cjs/services/providers/zai/ZAIChatService.d.ts +3 -1
  77. package/dist/cjs/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  78. package/dist/cjs/services/providers/zai/ZAIChatService.js +5 -1
  79. package/dist/cjs/services/providers/zai/ZAIChatService.js.map +1 -1
  80. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  81. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js +27 -2
  82. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  83. package/dist/cjs/types/toolChat.d.ts +6 -0
  84. package/dist/cjs/types/toolChat.d.ts.map +1 -1
  85. package/dist/esm/backend.d.ts +20 -0
  86. package/dist/esm/backend.d.ts.map +1 -0
  87. package/dist/esm/backend.js +111 -0
  88. package/dist/esm/backend.js.map +1 -0
  89. package/dist/esm/constants/claude.d.ts +2 -0
  90. package/dist/esm/constants/claude.d.ts.map +1 -1
  91. package/dist/esm/constants/claude.js +12 -3
  92. package/dist/esm/constants/claude.js.map +1 -1
  93. package/dist/esm/constants/gemini.d.ts +1 -0
  94. package/dist/esm/constants/gemini.d.ts.map +1 -1
  95. package/dist/esm/constants/gemini.js +10 -0
  96. package/dist/esm/constants/gemini.js.map +1 -1
  97. package/dist/esm/constants/mistral.d.ts +2 -0
  98. package/dist/esm/constants/mistral.d.ts.map +1 -1
  99. package/dist/esm/constants/mistral.js +2 -2
  100. package/dist/esm/constants/mistral.js.map +1 -1
  101. package/dist/esm/constants/openrouter.d.ts +5 -0
  102. package/dist/esm/constants/openrouter.d.ts.map +1 -1
  103. package/dist/esm/constants/openrouter.js +37 -7
  104. package/dist/esm/constants/openrouter.js.map +1 -1
  105. package/dist/esm/constants/plamo.d.ts +2 -0
  106. package/dist/esm/constants/plamo.d.ts.map +1 -1
  107. package/dist/esm/constants/plamo.js +3 -4
  108. package/dist/esm/constants/plamo.js.map +1 -1
  109. package/dist/esm/constants/sakana.d.ts +3 -0
  110. package/dist/esm/constants/sakana.d.ts.map +1 -1
  111. package/dist/esm/constants/sakana.js +6 -2
  112. package/dist/esm/constants/sakana.js.map +1 -1
  113. package/dist/esm/constants/xai.d.ts +7 -1
  114. package/dist/esm/constants/xai.d.ts.map +1 -1
  115. package/dist/esm/constants/xai.js +33 -8
  116. package/dist/esm/constants/xai.js.map +1 -1
  117. package/dist/esm/constants/zai.d.ts +8 -0
  118. package/dist/esm/constants/zai.d.ts.map +1 -1
  119. package/dist/esm/constants/zai.js +34 -0
  120. package/dist/esm/constants/zai.js.map +1 -1
  121. package/dist/esm/index.d.ts +1 -0
  122. package/dist/esm/index.d.ts.map +1 -1
  123. package/dist/esm/index.js +1 -0
  124. package/dist/esm/index.js.map +1 -1
  125. package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -1
  126. package/dist/esm/services/ChatServiceFactory.js +22 -24
  127. package/dist/esm/services/ChatServiceFactory.js.map +1 -1
  128. package/dist/esm/services/providers/ChatServiceProvider.d.ts +5 -1
  129. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  130. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts +2 -3
  131. package/dist/esm/services/providers/claude/ClaudeChatService.d.ts.map +1 -1
  132. package/dist/esm/services/providers/claude/ClaudeChatService.js +23 -15
  133. package/dist/esm/services/providers/claude/ClaudeChatService.js.map +1 -1
  134. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  135. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js +2 -4
  136. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  137. package/dist/esm/services/providers/gemini/GeminiChatService.d.ts.map +1 -1
  138. package/dist/esm/services/providers/gemini/GeminiChatService.js +4 -1
  139. package/dist/esm/services/providers/gemini/GeminiChatService.js.map +1 -1
  140. package/dist/esm/services/providers/gemini/geminiMessageConverter.d.ts +5 -0
  141. package/dist/esm/services/providers/gemini/geminiMessageConverter.d.ts.map +1 -1
  142. package/dist/esm/services/providers/gemini/geminiMessageConverter.js +15 -0
  143. package/dist/esm/services/providers/gemini/geminiMessageConverter.js.map +1 -1
  144. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  145. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +27 -5
  146. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  147. package/dist/esm/services/providers/openai/responsesParser.d.ts.map +1 -1
  148. package/dist/esm/services/providers/openai/responsesParser.js +71 -6
  149. package/dist/esm/services/providers/openai/responsesParser.js.map +1 -1
  150. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +5 -5
  151. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  152. package/dist/esm/services/providers/xai/XAIChatService.d.ts.map +1 -1
  153. package/dist/esm/services/providers/xai/XAIChatService.js +2 -2
  154. package/dist/esm/services/providers/xai/XAIChatService.js.map +1 -1
  155. package/dist/esm/services/providers/xai/XAIChatServiceProvider.d.ts.map +1 -1
  156. package/dist/esm/services/providers/xai/XAIChatServiceProvider.js +4 -5
  157. package/dist/esm/services/providers/xai/XAIChatServiceProvider.js.map +1 -1
  158. package/dist/esm/services/providers/zai/ZAIChatService.d.ts +3 -1
  159. package/dist/esm/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  160. package/dist/esm/services/providers/zai/ZAIChatService.js +5 -1
  161. package/dist/esm/services/providers/zai/ZAIChatService.js.map +1 -1
  162. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  163. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js +28 -3
  164. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  165. package/dist/esm/types/toolChat.d.ts +6 -0
  166. package/dist/esm/types/toolChat.d.ts.map +1 -1
  167. package/dist/umd/aituber-onair-chat.js +432 -83
  168. package/dist/umd/aituber-onair-chat.min.js +9 -9
  169. package/package.json +6 -1
@@ -22,6 +22,7 @@ var AITuberOnAirChat = (() => {
22
22
  var index_exports = {};
23
23
  __export(index_exports, {
24
24
  CHAT_RESPONSE_LENGTH: () => CHAT_RESPONSE_LENGTH,
25
+ CLAUDE_DEPRECATED_MODELS: () => CLAUDE_DEPRECATED_MODELS,
25
26
  CLAUDE_VISION_SUPPORTED_MODELS: () => CLAUDE_VISION_SUPPORTED_MODELS,
26
27
  ChatServiceFactory: () => ChatServiceFactory,
27
28
  ChatServiceHttpClient: () => ChatServiceHttpClient,
@@ -67,12 +68,14 @@ var AITuberOnAirChat = (() => {
67
68
  KimiChatServiceProvider: () => KimiChatServiceProvider,
68
69
  MAX_TOKENS_BY_LENGTH: () => MAX_TOKENS_BY_LENGTH,
69
70
  MISTRAL_API_BASE_URL: () => MISTRAL_API_BASE_URL,
71
+ MISTRAL_DEPRECATED_MODELS: () => MISTRAL_DEPRECATED_MODELS,
70
72
  MISTRAL_REASONING_EFFORT_SUPPORTED_MODELS: () => MISTRAL_REASONING_EFFORT_SUPPORTED_MODELS,
71
73
  MISTRAL_SUPPORTED_MODELS: () => MISTRAL_SUPPORTED_MODELS,
72
74
  MISTRAL_VISION_SUPPORTED_MODELS: () => MISTRAL_VISION_SUPPORTED_MODELS,
73
75
  MODEL_ANTHROPIC_CLAUDE_3_5_SONNET: () => MODEL_ANTHROPIC_CLAUDE_3_5_SONNET,
74
76
  MODEL_ANTHROPIC_CLAUDE_3_7_SONNET: () => MODEL_ANTHROPIC_CLAUDE_3_7_SONNET,
75
77
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU: () => MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
78
+ MODEL_ANTHROPIC_CLAUDE_FABLE_5: () => MODEL_ANTHROPIC_CLAUDE_FABLE_5,
76
79
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST: () => MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
77
80
  MODEL_ANTHROPIC_CLAUDE_OPUS_4: () => MODEL_ANTHROPIC_CLAUDE_OPUS_4,
78
81
  MODEL_ANTHROPIC_CLAUDE_OPUS_5: () => MODEL_ANTHROPIC_CLAUDE_OPUS_5,
@@ -91,6 +94,7 @@ var AITuberOnAirChat = (() => {
91
94
  MODEL_CLAUDE_4_8_OPUS: () => MODEL_CLAUDE_4_8_OPUS,
92
95
  MODEL_CLAUDE_4_OPUS: () => MODEL_CLAUDE_4_OPUS,
93
96
  MODEL_CLAUDE_4_SONNET: () => MODEL_CLAUDE_4_SONNET,
97
+ MODEL_CLAUDE_5_FABLE: () => MODEL_CLAUDE_5_FABLE,
94
98
  MODEL_CLAUDE_5_OPUS: () => MODEL_CLAUDE_5_OPUS,
95
99
  MODEL_CLAUDE_5_SONNET: () => MODEL_CLAUDE_5_SONNET,
96
100
  MODEL_DEEPSEEK_CHAT: () => MODEL_DEEPSEEK_CHAT,
@@ -100,6 +104,7 @@ var AITuberOnAirChat = (() => {
100
104
  MODEL_FUGU: () => MODEL_FUGU,
101
105
  MODEL_FUGU_ULTRA: () => MODEL_FUGU_ULTRA,
102
106
  MODEL_FUGU_ULTRA_20260615: () => MODEL_FUGU_ULTRA_20260615,
107
+ MODEL_FUGU_ULTRA_V1_1: () => MODEL_FUGU_ULTRA_V1_1,
103
108
  MODEL_GEMINI_2_5_FLASH: () => MODEL_GEMINI_2_5_FLASH,
104
109
  MODEL_GEMINI_2_5_FLASH_LITE: () => MODEL_GEMINI_2_5_FLASH_LITE,
105
110
  MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17: () => MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17,
@@ -110,6 +115,7 @@ var AITuberOnAirChat = (() => {
110
115
  MODEL_GEMINI_3_5_FLASH: () => MODEL_GEMINI_3_5_FLASH,
111
116
  MODEL_GEMINI_3_5_FLASH_LITE: () => MODEL_GEMINI_3_5_FLASH_LITE,
112
117
  MODEL_GEMINI_3_6_FLASH: () => MODEL_GEMINI_3_6_FLASH,
118
+ MODEL_GEMINI_3_7_FLASH: () => MODEL_GEMINI_3_7_FLASH,
113
119
  MODEL_GEMINI_3_FLASH_PREVIEW: () => MODEL_GEMINI_3_FLASH_PREVIEW,
114
120
  MODEL_GEMINI_3_PRO_PREVIEW: () => MODEL_GEMINI_3_PRO_PREVIEW,
115
121
  MODEL_GEMINI_NANO: () => MODEL_GEMINI_NANO,
@@ -132,6 +138,7 @@ var AITuberOnAirChat = (() => {
132
138
  MODEL_GOOGLE_GEMINI_2_5_PRO: () => MODEL_GOOGLE_GEMINI_2_5_PRO,
133
139
  MODEL_GOOGLE_GEMINI_3_5_FLASH_LITE: () => MODEL_GOOGLE_GEMINI_3_5_FLASH_LITE,
134
140
  MODEL_GOOGLE_GEMINI_3_6_FLASH: () => MODEL_GOOGLE_GEMINI_3_6_FLASH,
141
+ MODEL_GOOGLE_GEMINI_3_7_FLASH: () => MODEL_GOOGLE_GEMINI_3_7_FLASH,
135
142
  MODEL_GOOGLE_GEMINI_FLASH_LATEST: () => MODEL_GOOGLE_GEMINI_FLASH_LATEST,
136
143
  MODEL_GOOGLE_GEMINI_PRO_LATEST: () => MODEL_GOOGLE_GEMINI_PRO_LATEST,
137
144
  MODEL_GPT_4O: () => MODEL_GPT_4O,
@@ -159,6 +166,7 @@ var AITuberOnAirChat = (() => {
159
166
  MODEL_GROK_4_20_REASONING: () => MODEL_GROK_4_20_REASONING,
160
167
  MODEL_GROK_4_3: () => MODEL_GROK_4_3,
161
168
  MODEL_GROK_4_5: () => MODEL_GROK_4_5,
169
+ MODEL_GROK_4_6: () => MODEL_GROK_4_6,
162
170
  MODEL_KIMI_K2_5: () => MODEL_KIMI_K2_5,
163
171
  MODEL_KIMI_K2_6: () => MODEL_KIMI_K2_6,
164
172
  MODEL_KIMI_K2_7_CODE: () => MODEL_KIMI_K2_7_CODE,
@@ -200,10 +208,12 @@ var AITuberOnAirChat = (() => {
200
208
  MODEL_OPENROUTER_AUTO_BETA: () => MODEL_OPENROUTER_AUTO_BETA,
201
209
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH,
202
210
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731,
211
+ MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813: () => MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813,
203
212
  MODEL_OPENROUTER_FUSION: () => MODEL_OPENROUTER_FUSION,
204
213
  MODEL_PLAMO_2_2_PRIME: () => MODEL_PLAMO_2_2_PRIME,
205
214
  MODEL_PLAMO_3_0_PRIME: () => MODEL_PLAMO_3_0_PRIME,
206
215
  MODEL_XAI_GROK_4_5: () => MODEL_XAI_GROK_4_5,
216
+ MODEL_XAI_GROK_4_6: () => MODEL_XAI_GROK_4_6,
207
217
  MODEL_XAI_GROK_LATEST: () => MODEL_XAI_GROK_LATEST,
208
218
  MODEL_ZAI_GLM_4_5_AIR: () => MODEL_ZAI_GLM_4_5_AIR,
209
219
  MODEL_ZAI_GLM_4_5_AIR_FREE: () => MODEL_ZAI_GLM_4_5_AIR_FREE,
@@ -212,6 +222,7 @@ var AITuberOnAirChat = (() => {
212
222
  MistralChatService: () => MistralChatService,
213
223
  MistralChatServiceProvider: () => MistralChatServiceProvider,
214
224
  OPENROUTER_CREDITS_THRESHOLD: () => OPENROUTER_CREDITS_THRESHOLD,
225
+ OPENROUTER_DEPRECATED_MODELS: () => OPENROUTER_DEPRECATED_MODELS,
215
226
  OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS: () => OPENROUTER_FREE_DAILY_LIMIT_HIGH_CREDITS,
216
227
  OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS: () => OPENROUTER_FREE_DAILY_LIMIT_LOW_CREDITS,
217
228
  OPENROUTER_FREE_MODELS: () => OPENROUTER_FREE_MODELS,
@@ -223,10 +234,12 @@ var AITuberOnAirChat = (() => {
223
234
  OpenRouterChatService: () => OpenRouterChatService,
224
235
  OpenRouterChatServiceProvider: () => OpenRouterChatServiceProvider,
225
236
  PLAMO_API_BASE_URL: () => PLAMO_API_BASE_URL,
237
+ PLAMO_DEPRECATED_MODELS: () => PLAMO_DEPRECATED_MODELS,
226
238
  PLAMO_SUPPORTED_MODELS: () => PLAMO_SUPPORTED_MODELS,
227
239
  PlamoChatService: () => PlamoChatService,
228
240
  PlamoChatServiceProvider: () => PlamoChatServiceProvider,
229
241
  SAKANA_API_BASE_URL: () => SAKANA_API_BASE_URL,
242
+ SAKANA_COMPATIBILITY_MODELS: () => SAKANA_COMPATIBILITY_MODELS,
230
243
  SAKANA_SUPPORTED_MODELS: () => SAKANA_SUPPORTED_MODELS,
231
244
  SakanaChatService: () => SakanaChatService,
232
245
  SakanaChatServiceProvider: () => SakanaChatServiceProvider,
@@ -234,6 +247,7 @@ var AITuberOnAirChat = (() => {
234
247
  VISION_SUPPORTED_MODELS: () => VISION_SUPPORTED_MODELS,
235
248
  XAIChatService: () => XAIChatService,
236
249
  XAIChatServiceProvider: () => XAIChatServiceProvider,
250
+ XAI_DEPRECATED_MODELS: () => XAI_DEPRECATED_MODELS,
237
251
  XAI_VISION_SUPPORTED_MODELS: () => XAI_VISION_SUPPORTED_MODELS,
238
252
  ZAIChatService: () => ZAIChatService,
239
253
  ZAIChatServiceProvider: () => ZAIChatServiceProvider,
@@ -244,6 +258,8 @@ var AITuberOnAirChat = (() => {
244
258
  allowsReasoningNone: () => allowsReasoningNone,
245
259
  allowsReasoningXHigh: () => allowsReasoningXHigh,
246
260
  buildOpenAICompatibleTools: () => buildOpenAICompatibleTools,
261
+ buildToolContinuationMessages: () => buildToolContinuationMessages,
262
+ getChatBackendProviderCapabilities: () => getChatBackendProviderCapabilities,
247
263
  getClaudeSupportedReasoningEfforts: () => getClaudeSupportedReasoningEfforts,
248
264
  getDeepSeekSupportedReasoningEfforts: () => getDeepSeekSupportedReasoningEfforts,
249
265
  getDefaultClaudeReasoningEffort: () => getDefaultClaudeReasoningEffort,
@@ -253,10 +269,13 @@ var AITuberOnAirChat = (() => {
253
269
  getDefaultOpenRouterReasoningEffort: () => getDefaultOpenRouterReasoningEffort,
254
270
  getDefaultReasoningEffortForGPT5Model: () => getDefaultReasoningEffortForGPT5Model,
255
271
  getDefaultXaiReasoningEffort: () => getDefaultXaiReasoningEffort,
272
+ getDefaultZaiReasoningEffort: () => getDefaultZaiReasoningEffort,
256
273
  getGeminiSupportedReasoningEfforts: () => getGeminiSupportedReasoningEfforts,
257
274
  getKimiSupportedReasoningEfforts: () => getKimiSupportedReasoningEfforts,
258
275
  getMaxTokensForResponseLength: () => getMaxTokensForResponseLength,
259
276
  getOpenRouterSupportedReasoningEfforts: () => getOpenRouterSupportedReasoningEfforts,
277
+ getXaiSupportedReasoningEfforts: () => getXaiSupportedReasoningEfforts,
278
+ getZaiSupportedReasoningEfforts: () => getZaiSupportedReasoningEfforts,
260
279
  installGASFetch: () => installGASFetch,
261
280
  isClaudeReasoningEffortModel: () => isClaudeReasoningEffortModel,
262
281
  isDeepSeekReasoningEffortModel: () => isDeepSeekReasoningEffortModel,
@@ -274,6 +293,7 @@ var AITuberOnAirChat = (() => {
274
293
  isXaiReasoningEffortModel: () => isXaiReasoningEffortModel,
275
294
  isXaiReasoningEffortNoneModel: () => isXaiReasoningEffortNoneModel,
276
295
  isXaiVisionModel: () => isXaiVisionModel,
296
+ isZaiReasoningEffortModel: () => isZaiReasoningEffortModel,
277
297
  isZaiToolStreamModel: () => isZaiToolStreamModel,
278
298
  isZaiVisionModel: () => isZaiVisionModel,
279
299
  normalizeClaudeReasoningEffort: () => normalizeClaudeReasoningEffort,
@@ -281,6 +301,7 @@ var AITuberOnAirChat = (() => {
281
301
  normalizeGeminiReasoningEffort: () => normalizeGeminiReasoningEffort,
282
302
  normalizeOpenRouterReasoningEffort: () => normalizeOpenRouterReasoningEffort,
283
303
  normalizeXaiReasoningEffort: () => normalizeXaiReasoningEffort,
304
+ normalizeZaiReasoningEffort: () => normalizeZaiReasoningEffort,
284
305
  parseOpenAICompatibleOneShot: () => parseOpenAICompatibleOneShot,
285
306
  parseOpenAICompatibleTextStream: () => parseOpenAICompatibleTextStream,
286
307
  parseOpenAICompatibleToolStream: () => parseOpenAICompatibleToolStream,
@@ -391,6 +412,7 @@ var AITuberOnAirChat = (() => {
391
412
  var ENDPOINT_GEMINI_API = "https://generativelanguage.googleapis.com";
392
413
  var MODEL_GEMMA_4_31B_IT = "gemma-4-31b-it";
393
414
  var MODEL_GEMMA_4_26B_A4B_IT = "gemma-4-26b-a4b-it";
415
+ var MODEL_GEMINI_3_7_FLASH = "gemini-3.7-flash";
394
416
  var MODEL_GEMINI_3_6_FLASH = "gemini-3.6-flash";
395
417
  var MODEL_GEMINI_3_5_FLASH = "gemini-3.5-flash";
396
418
  var MODEL_GEMINI_3_5_FLASH_LITE = "gemini-3.5-flash-lite";
@@ -404,6 +426,7 @@ var AITuberOnAirChat = (() => {
404
426
  var MODEL_GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite";
405
427
  var MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17 = "gemini-2.5-flash-lite-preview-06-17";
406
428
  var GEMINI_RECOMMENDED_MODELS = [
429
+ MODEL_GEMINI_3_7_FLASH,
407
430
  MODEL_GEMINI_3_6_FLASH,
408
431
  MODEL_GEMINI_3_5_FLASH,
409
432
  MODEL_GEMINI_3_5_FLASH_LITE,
@@ -436,6 +459,11 @@ var AITuberOnAirChat = (() => {
436
459
  "medium",
437
460
  "high"
438
461
  ];
462
+ var GEMINI_3_7_FLASH_REASONING_EFFORTS = [
463
+ "low",
464
+ "medium",
465
+ "high"
466
+ ];
439
467
  var GEMINI_FLASH_REASONING_EFFORT_MODELS = [
440
468
  MODEL_GEMINI_3_6_FLASH,
441
469
  MODEL_GEMINI_3_5_FLASH,
@@ -449,6 +477,9 @@ var AITuberOnAirChat = (() => {
449
477
  MODEL_GEMINI_3_PRO_PREVIEW
450
478
  ];
451
479
  function getGeminiSupportedReasoningEfforts(model) {
480
+ if (model === MODEL_GEMINI_3_7_FLASH) {
481
+ return GEMINI_3_7_FLASH_REASONING_EFFORTS;
482
+ }
452
483
  if (GEMINI_FLASH_REASONING_EFFORT_MODELS.includes(model)) {
453
484
  return GEMINI_FLASH_REASONING_EFFORTS;
454
485
  }
@@ -489,8 +520,17 @@ var AITuberOnAirChat = (() => {
489
520
  var MODEL_CLAUDE_4_6_OPUS = "claude-opus-4-6";
490
521
  var MODEL_CLAUDE_4_7_OPUS = "claude-opus-4-7";
491
522
  var MODEL_CLAUDE_4_8_OPUS = "claude-opus-4-8";
523
+ var MODEL_CLAUDE_5_FABLE = "claude-fable-5";
492
524
  var MODEL_CLAUDE_5_SONNET = "claude-sonnet-5";
493
525
  var MODEL_CLAUDE_5_OPUS = "claude-opus-5";
526
+ var CLAUDE_DEPRECATED_MODELS = [
527
+ MODEL_CLAUDE_3_HAIKU,
528
+ MODEL_CLAUDE_3_5_HAIKU,
529
+ MODEL_CLAUDE_3_5_SONNET,
530
+ MODEL_CLAUDE_3_7_SONNET,
531
+ MODEL_CLAUDE_4_SONNET,
532
+ MODEL_CLAUDE_4_OPUS
533
+ ];
494
534
  var CLAUDE_STANDARD_REASONING_EFFORTS = [
495
535
  "low",
496
536
  "medium",
@@ -511,13 +551,11 @@ var AITuberOnAirChat = (() => {
511
551
  [MODEL_CLAUDE_4_6_OPUS]: CLAUDE_MAX_REASONING_EFFORTS,
512
552
  [MODEL_CLAUDE_4_7_OPUS]: CLAUDE_XHIGH_REASONING_EFFORTS,
513
553
  [MODEL_CLAUDE_4_8_OPUS]: CLAUDE_XHIGH_REASONING_EFFORTS,
554
+ [MODEL_CLAUDE_5_FABLE]: CLAUDE_XHIGH_REASONING_EFFORTS,
514
555
  [MODEL_CLAUDE_5_SONNET]: CLAUDE_XHIGH_REASONING_EFFORTS,
515
556
  [MODEL_CLAUDE_5_OPUS]: CLAUDE_XHIGH_REASONING_EFFORTS
516
557
  };
517
558
  var CLAUDE_VISION_SUPPORTED_MODELS = [
518
- MODEL_CLAUDE_3_HAIKU,
519
- MODEL_CLAUDE_4_SONNET,
520
- MODEL_CLAUDE_4_OPUS,
521
559
  MODEL_CLAUDE_4_5_SONNET,
522
560
  MODEL_CLAUDE_4_5_HAIKU,
523
561
  MODEL_CLAUDE_4_5_OPUS,
@@ -525,6 +563,7 @@ var AITuberOnAirChat = (() => {
525
563
  MODEL_CLAUDE_4_6_OPUS,
526
564
  MODEL_CLAUDE_4_7_OPUS,
527
565
  MODEL_CLAUDE_4_8_OPUS,
566
+ MODEL_CLAUDE_5_FABLE,
528
567
  MODEL_CLAUDE_5_SONNET,
529
568
  MODEL_CLAUDE_5_OPUS
530
569
  ];
@@ -577,6 +616,7 @@ var AITuberOnAirChat = (() => {
577
616
  var MODEL_OPENAI_GPT_4_1_NANO = "openai/gpt-4.1-nano";
578
617
  var MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST = "~anthropic/claude-sonnet-latest";
579
618
  var MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST = "~anthropic/claude-haiku-latest";
619
+ var MODEL_ANTHROPIC_CLAUDE_FABLE_5 = "anthropic/claude-fable-5";
580
620
  var MODEL_ANTHROPIC_CLAUDE_OPUS_5 = "anthropic/claude-opus-5";
581
621
  var MODEL_ANTHROPIC_CLAUDE_OPUS_4 = "anthropic/claude-opus-4";
582
622
  var MODEL_ANTHROPIC_CLAUDE_SONNET_4 = "anthropic/claude-sonnet-4";
@@ -585,6 +625,7 @@ var AITuberOnAirChat = (() => {
585
625
  var MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU = "anthropic/claude-haiku-4.5";
586
626
  var MODEL_GOOGLE_GEMINI_PRO_LATEST = "~google/gemini-pro-latest";
587
627
  var MODEL_GOOGLE_GEMINI_FLASH_LATEST = "~google/gemini-flash-latest";
628
+ var MODEL_GOOGLE_GEMINI_3_7_FLASH = "google/gemini-3.7-flash";
588
629
  var MODEL_GOOGLE_GEMINI_3_6_FLASH = "google/gemini-3.6-flash";
589
630
  var MODEL_GOOGLE_GEMINI_3_5_FLASH_LITE = "google/gemini-3.5-flash-lite";
590
631
  var MODEL_GOOGLE_GEMINI_2_5_PRO = "google/gemini-2.5-pro";
@@ -597,9 +638,17 @@ var AITuberOnAirChat = (() => {
597
638
  var MODEL_KWAIPILOT_KAT_CODER_AIR_V2_5 = "kwaipilot/kat-coder-air-v2.5";
598
639
  var MODEL_KWAIPILOT_KAT_CODER_PRO_V2_5 = "kwaipilot/kat-coder-pro-v2.5";
599
640
  var MODEL_XAI_GROK_LATEST = "~x-ai/grok-latest";
641
+ var MODEL_XAI_GROK_4_6 = "x-ai/grok-4.6";
600
642
  var MODEL_XAI_GROK_4_5 = "x-ai/grok-4.5";
601
643
  var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH = "deepseek/deepseek-v4-flash";
602
644
  var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731 = "deepseek/deepseek-v4-flash-0731";
645
+ var MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813 = "deepseek/deepseek-v4-pro-0813";
646
+ var OPENROUTER_DEPRECATED_MODELS = [
647
+ MODEL_OPENAI_GPT_5_1_CHAT,
648
+ MODEL_ANTHROPIC_CLAUDE_3_7_SONNET,
649
+ MODEL_ANTHROPIC_CLAUDE_3_5_SONNET,
650
+ MODEL_ZAI_GLM_4_5_AIR_FREE
651
+ ];
603
652
  var DEFAULT_OPENROUTER_REASONING_EFFORTS = [
604
653
  "none",
605
654
  "minimal",
@@ -618,10 +667,12 @@ var AITuberOnAirChat = (() => {
618
667
  "high",
619
668
  "max"
620
669
  ];
621
- var OPENROUTER_FREE_MODELS = [
622
- MODEL_GPT_OSS_20B_FREE,
623
- MODEL_ZAI_GLM_4_5_AIR_FREE
670
+ var OPENROUTER_DEEPSEEK_V4_PRO_REASONING_EFFORTS = [
671
+ "none",
672
+ "high",
673
+ "xhigh"
624
674
  ];
675
+ var OPENROUTER_FREE_MODELS = [MODEL_GPT_OSS_20B_FREE];
625
676
  var OPENROUTER_VISION_SUPPORTED_MODELS = [
626
677
  MODEL_OPENROUTER_AUTO_BETA,
627
678
  MODEL_MOONSHOTAI_KIMI_K3,
@@ -633,7 +684,6 @@ var AITuberOnAirChat = (() => {
633
684
  MODEL_OPENAI_GPT_5_6_LUNA,
634
685
  MODEL_OPENAI_GPT_5_5_PRO,
635
686
  MODEL_OPENAI_GPT_5_5,
636
- MODEL_OPENAI_GPT_5_1_CHAT,
637
687
  MODEL_OPENAI_GPT_5_1_CODEX,
638
688
  MODEL_OPENAI_GPT_5_MINI,
639
689
  MODEL_OPENAI_GPT_5_NANO,
@@ -642,13 +692,14 @@ var AITuberOnAirChat = (() => {
642
692
  MODEL_OPENAI_GPT_4_1_NANO,
643
693
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
644
694
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
695
+ MODEL_ANTHROPIC_CLAUDE_FABLE_5,
645
696
  MODEL_ANTHROPIC_CLAUDE_OPUS_5,
646
697
  MODEL_ANTHROPIC_CLAUDE_OPUS_4,
647
698
  MODEL_ANTHROPIC_CLAUDE_SONNET_4,
648
- MODEL_ANTHROPIC_CLAUDE_3_7_SONNET,
649
699
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
650
700
  MODEL_GOOGLE_GEMINI_PRO_LATEST,
651
701
  MODEL_GOOGLE_GEMINI_FLASH_LATEST,
702
+ MODEL_GOOGLE_GEMINI_3_7_FLASH,
652
703
  MODEL_GOOGLE_GEMINI_3_6_FLASH,
653
704
  MODEL_GOOGLE_GEMINI_3_5_FLASH_LITE,
654
705
  MODEL_GOOGLE_GEMINI_2_5_PRO,
@@ -657,6 +708,7 @@ var AITuberOnAirChat = (() => {
657
708
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
658
709
  MODEL_MOONSHOTAI_KIMI_K2_5,
659
710
  MODEL_XAI_GROK_LATEST,
711
+ MODEL_XAI_GROK_4_6,
660
712
  MODEL_XAI_GROK_4_5
661
713
  ];
662
714
  var OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE = 20;
@@ -679,11 +731,14 @@ var AITuberOnAirChat = (() => {
679
731
  if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731) {
680
732
  return OPENROUTER_DEEPSEEK_V4_FLASH_0731_REASONING_EFFORTS;
681
733
  }
734
+ if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813) {
735
+ return OPENROUTER_DEEPSEEK_V4_PRO_REASONING_EFFORTS;
736
+ }
682
737
  return DEFAULT_OPENROUTER_REASONING_EFFORTS;
683
738
  }
684
739
  function getDefaultOpenRouterReasoningEffort(model) {
685
740
  const normalizedModel = model.trim();
686
- return normalizedModel === MODEL_ZAI_GLM_5_2 || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731 ? "none" : void 0;
741
+ return normalizedModel === MODEL_ZAI_GLM_5_2 || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731 || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813 ? "none" : void 0;
687
742
  }
688
743
  function normalizeOpenRouterReasoningEffort(model, effort) {
689
744
  const normalizedModel = model.trim();
@@ -706,6 +761,17 @@ var AITuberOnAirChat = (() => {
706
761
  return "high";
707
762
  }
708
763
  }
764
+ if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813) {
765
+ if (requested === "minimal" || requested === "low") {
766
+ return "none";
767
+ }
768
+ if (requested === "medium") {
769
+ return "high";
770
+ }
771
+ if (requested === "max") {
772
+ return "xhigh";
773
+ }
774
+ }
709
775
  return requested;
710
776
  }
711
777
 
@@ -723,6 +789,37 @@ var AITuberOnAirChat = (() => {
723
789
  var MODEL_GLM_4_6V = "glm-4.6V";
724
790
  var MODEL_GLM_4_6V_FLASHX = "glm-4.6V-FlashX";
725
791
  var MODEL_GLM_4_6V_FLASH = "glm-4.6V-Flash";
792
+ var ZAI_GLM_5_2_REASONING_EFFORTS = [
793
+ "none",
794
+ "minimal",
795
+ "low",
796
+ "medium",
797
+ "high",
798
+ "xhigh",
799
+ "max"
800
+ ];
801
+ function getZaiSupportedReasoningEfforts(model) {
802
+ return model === MODEL_GLM_5_2 ? ZAI_GLM_5_2_REASONING_EFFORTS : [];
803
+ }
804
+ function isZaiReasoningEffortModel(model) {
805
+ return getZaiSupportedReasoningEfforts(model).length > 0;
806
+ }
807
+ function getDefaultZaiReasoningEffort(model) {
808
+ return isZaiReasoningEffortModel(model) ? "none" : void 0;
809
+ }
810
+ function normalizeZaiReasoningEffort(model, effort) {
811
+ if (!isZaiReasoningEffortModel(model)) {
812
+ return void 0;
813
+ }
814
+ const requested = effort ?? getDefaultZaiReasoningEffort(model);
815
+ if (requested === "none" || requested === "minimal") {
816
+ return "none";
817
+ }
818
+ if (requested === "low" || requested === "medium" || requested === "high") {
819
+ return "high";
820
+ }
821
+ return "max";
822
+ }
726
823
  var ZAI_VISION_SUPPORTED_MODELS = [
727
824
  MODEL_GLM_5V_TURBO,
728
825
  MODEL_GLM_4_6V,
@@ -738,31 +835,47 @@ var AITuberOnAirChat = (() => {
738
835
 
739
836
  // src/constants/xai.ts
740
837
  var ENDPOINT_XAI_CHAT_COMPLETIONS_API = "https://api.x.ai/v1/chat/completions";
838
+ var MODEL_GROK_4_6 = "grok-4.6";
741
839
  var MODEL_GROK_4_5 = "grok-4.5";
742
840
  var MODEL_GROK_4_3 = "grok-4.3";
743
841
  var MODEL_GROK_4_20_REASONING = "grok-4.20-0309-reasoning";
744
842
  var MODEL_GROK_4_20_NON_REASONING = "grok-4.20-0309-non-reasoning";
745
843
  var MODEL_GROK_4_1_FAST_REASONING = "grok-4-1-fast-reasoning";
746
844
  var MODEL_GROK_4_1_FAST_NON_REASONING = "grok-4-1-fast-non-reasoning";
845
+ var XAI_DEPRECATED_MODELS = [
846
+ MODEL_GROK_4_1_FAST_REASONING,
847
+ MODEL_GROK_4_1_FAST_NON_REASONING
848
+ ];
747
849
  var XAI_VISION_SUPPORTED_MODELS = [
850
+ MODEL_GROK_4_6,
748
851
  MODEL_GROK_4_5,
749
852
  MODEL_GROK_4_3,
750
853
  MODEL_GROK_4_20_REASONING,
751
- MODEL_GROK_4_20_NON_REASONING,
752
- MODEL_GROK_4_1_FAST_REASONING,
753
- MODEL_GROK_4_1_FAST_NON_REASONING
854
+ MODEL_GROK_4_20_NON_REASONING
754
855
  ];
755
856
  function isXaiVisionModel(model) {
756
857
  return XAI_VISION_SUPPORTED_MODELS.includes(model);
757
858
  }
758
859
  function isXaiReasoningEffortModel(model) {
759
- return model === MODEL_GROK_4_5 || model === MODEL_GROK_4_3;
860
+ return getXaiSupportedReasoningEfforts(model).length > 0;
861
+ }
862
+ function getXaiSupportedReasoningEfforts(model) {
863
+ if (model === MODEL_GROK_4_6) {
864
+ return ["low", "medium", "high", "xhigh"];
865
+ }
866
+ if (model === MODEL_GROK_4_5) {
867
+ return ["low", "medium", "high"];
868
+ }
869
+ if (model === MODEL_GROK_4_3) {
870
+ return ["none", "low", "medium", "high"];
871
+ }
872
+ return [];
760
873
  }
761
874
  function isXaiReasoningEffortNoneModel(model) {
762
- return model === MODEL_GROK_4_3;
875
+ return getXaiSupportedReasoningEfforts(model).includes("none");
763
876
  }
764
877
  function getDefaultXaiReasoningEffort(model) {
765
- if (model === MODEL_GROK_4_5) {
878
+ if (model === MODEL_GROK_4_6 || model === MODEL_GROK_4_5) {
766
879
  return "low";
767
880
  }
768
881
  return isXaiReasoningEffortNoneModel(model) ? "none" : void 0;
@@ -771,10 +884,14 @@ var AITuberOnAirChat = (() => {
771
884
  if (!isXaiReasoningEffortModel(model)) {
772
885
  return void 0;
773
886
  }
774
- if (reasoningEffort === "none" && !isXaiReasoningEffortNoneModel(model)) {
775
- return "low";
887
+ if (reasoningEffort === void 0) {
888
+ return getDefaultXaiReasoningEffort(model);
776
889
  }
777
- return reasoningEffort ?? getDefaultXaiReasoningEffort(model);
890
+ const supported = getXaiSupportedReasoningEfforts(model);
891
+ if (supported.includes(reasoningEffort)) {
892
+ return reasoningEffort;
893
+ }
894
+ return reasoningEffort === "none" ? "low" : "high";
778
895
  }
779
896
 
780
897
  // src/constants/kimi.ts
@@ -890,9 +1007,9 @@ var AITuberOnAirChat = (() => {
890
1007
  MODEL_MISTRAL_MEDIUM_3_5,
891
1008
  MODEL_MISTRAL_LARGE_LATEST,
892
1009
  MODEL_MISTRAL_LARGE_2512,
893
- MODEL_MISTRAL_SMALL_2603,
894
- MODEL_MISTRAL_MEDIUM_2508
1010
+ MODEL_MISTRAL_SMALL_2603
895
1011
  ];
1012
+ var MISTRAL_DEPRECATED_MODELS = [MODEL_MISTRAL_MEDIUM_2508];
896
1013
  var MISTRAL_REASONING_EFFORT_SUPPORTED_MODELS = [
897
1014
  MODEL_MISTRAL_SMALL_LATEST,
898
1015
  MODEL_MISTRAL_MEDIUM_3_5
@@ -904,7 +1021,6 @@ var AITuberOnAirChat = (() => {
904
1021
  MODEL_MINISTRAL_14B_2512,
905
1022
  MODEL_MISTRAL_SMALL_2603,
906
1023
  MODEL_MISTRAL_MEDIUM_3_5,
907
- MODEL_MISTRAL_MEDIUM_2508,
908
1024
  MODEL_MISTRAL_LARGE_LATEST,
909
1025
  MODEL_MISTRAL_LARGE_2512
910
1026
  ];
@@ -923,9 +1039,10 @@ var AITuberOnAirChat = (() => {
923
1039
  var ENDPOINT_SAKANA_CHAT_COMPLETIONS_API = `${SAKANA_API_BASE_URL}/chat/completions`;
924
1040
  var MODEL_FUGU = "fugu";
925
1041
  var MODEL_FUGU_ULTRA = "fugu-ultra";
1042
+ var MODEL_FUGU_ULTRA_V1_1 = "fugu-ultra-v1.1";
926
1043
  var MODEL_FUGU_ULTRA_20260615 = "fugu-ultra-20260615";
927
- var SAKANA_SUPPORTED_MODELS = [
928
- MODEL_FUGU,
1044
+ var SAKANA_SUPPORTED_MODELS = [MODEL_FUGU, MODEL_FUGU_ULTRA_V1_1];
1045
+ var SAKANA_COMPATIBILITY_MODELS = [
929
1046
  MODEL_FUGU_ULTRA,
930
1047
  MODEL_FUGU_ULTRA_20260615
931
1048
  ];
@@ -935,10 +1052,8 @@ var AITuberOnAirChat = (() => {
935
1052
  var ENDPOINT_PLAMO_CHAT_COMPLETIONS_API = `${PLAMO_API_BASE_URL}/chat/completions`;
936
1053
  var MODEL_PLAMO_3_0_PRIME = "plamo-3.0-prime";
937
1054
  var MODEL_PLAMO_2_2_PRIME = "plamo-2.2-prime";
938
- var PLAMO_SUPPORTED_MODELS = [
939
- MODEL_PLAMO_3_0_PRIME,
940
- MODEL_PLAMO_2_2_PRIME
941
- ];
1055
+ var PLAMO_SUPPORTED_MODELS = [MODEL_PLAMO_3_0_PRIME];
1056
+ var PLAMO_DEPRECATED_MODELS = [MODEL_PLAMO_2_2_PRIME];
942
1057
 
943
1058
  // src/constants/chat.ts
944
1059
  var CHAT_RESPONSE_LENGTH = {
@@ -1901,7 +2016,9 @@ If it's in another language, summarize in that language.
1901
2016
  hasTools: this.tools.length > 0 || this.mcpServers.length > 0,
1902
2017
  runWithoutTools: async () => {
1903
2018
  const res = await this.callClaude(messages, this.model, true);
1904
- return this.parsePureStream(res, onPartialResponse);
2019
+ return this.convertToStandardCompletion(
2020
+ await this.parseStream(res, onPartialResponse)
2021
+ );
1905
2022
  },
1906
2023
  runWithTools: () => this.chatOnce(messages, true, onPartialResponse),
1907
2024
  onCompleteResponse,
@@ -1919,7 +2036,9 @@ If it's in another language, summarize in that language.
1919
2036
  hasTools: this.tools.length > 0 || this.mcpServers.length > 0,
1920
2037
  runWithoutTools: async () => {
1921
2038
  const res = await this.callClaude(messages, this.visionModel, true);
1922
- return this.parsePureStream(res, onPartialResponse);
2039
+ return this.convertToStandardCompletion(
2040
+ await this.parseStream(res, onPartialResponse)
2041
+ );
1923
2042
  },
1924
2043
  runWithTools: () => this.visionChatOnce(messages),
1925
2044
  onCompleteResponse,
@@ -1991,6 +2110,8 @@ If it's in another language, summarize in that language.
1991
2110
  const textBlocks = [];
1992
2111
  const providerBlocks = /* @__PURE__ */ new Map();
1993
2112
  const toolCalls = /* @__PURE__ */ new Map();
2113
+ let finishReason;
2114
+ let stopDetails;
1994
2115
  let buf = "";
1995
2116
  while (true) {
1996
2117
  const { done, value } = await reader.read();
@@ -2004,6 +2125,14 @@ If it's in another language, summarize in that language.
2004
2125
  const payload = line.slice(5).trim();
2005
2126
  if (payload === "[DONE]") break;
2006
2127
  const ev = JSON.parse(payload);
2128
+ if (ev.type === "message_delta") {
2129
+ if (typeof ev.delta?.stop_reason === "string") {
2130
+ finishReason = ev.delta.stop_reason;
2131
+ }
2132
+ if (ev.delta?.stop_details !== void 0 || ev.stop_details !== void 0) {
2133
+ stopDetails = ev.delta?.stop_details ?? ev.stop_details;
2134
+ }
2135
+ }
2007
2136
  if (ev.type === "content_block_start" && ev.content_block && typeof ev.index === "number") {
2008
2137
  providerBlocks.set(ev.index, { ...ev.content_block });
2009
2138
  }
@@ -2086,18 +2215,17 @@ If it's in another language, summarize in that language.
2086
2215
  }
2087
2216
  }
2088
2217
  }
2218
+ const hasToolUse = textBlocks.some(
2219
+ (b) => b.type === "tool_use" || b.type === "mcp_tool_use"
2220
+ );
2089
2221
  return {
2090
2222
  blocks: textBlocks,
2091
2223
  providerContent: [...providerBlocks.entries()].sort(([a], [b]) => a - b).map(([, block]) => block),
2092
- stop_reason: textBlocks.some(
2093
- (b) => b.type === "tool_use" || b.type === "mcp_tool_use"
2094
- ) ? "tool_use" : "end"
2224
+ stop_reason: hasToolUse ? "tool_use" : "end",
2225
+ finish_reason: finishReason,
2226
+ stop_details: stopDetails
2095
2227
  };
2096
2228
  }
2097
- async parsePureStream(res, onPartial) {
2098
- const { blocks } = await this.parseStream(res, onPartial);
2099
- return blocks.filter((b) => b.type === "text").map((b) => b.text).join("");
2100
- }
2101
2229
  parseOneShot(data) {
2102
2230
  const blocks = [];
2103
2231
  (data.content ?? []).forEach((c) => {
@@ -2133,12 +2261,15 @@ If it's in another language, summarize in that language.
2133
2261
  });
2134
2262
  }
2135
2263
  });
2264
+ const hasToolUse = blocks.some(
2265
+ (b) => b.type === "tool_use" || b.type === "mcp_tool_use"
2266
+ );
2136
2267
  return {
2137
2268
  blocks,
2138
2269
  providerContent: (data.content ?? []).map((block) => ({ ...block })),
2139
- stop_reason: blocks.some(
2140
- (b) => b.type === "tool_use" || b.type === "mcp_tool_use"
2141
- ) ? "tool_use" : "end"
2270
+ stop_reason: hasToolUse ? "tool_use" : "end",
2271
+ finish_reason: data.stop_reason,
2272
+ stop_details: data.stop_details
2142
2273
  };
2143
2274
  }
2144
2275
  /**
@@ -2188,6 +2319,8 @@ If it's in another language, summarize in that language.
2188
2319
  return {
2189
2320
  blocks: standardBlocks,
2190
2321
  stop_reason: completion.stop_reason,
2322
+ finish_reason: completion.finish_reason,
2323
+ stop_details: completion.stop_details,
2191
2324
  assistant_message: {
2192
2325
  role: "assistant",
2193
2326
  content: standardBlocks.filter((block) => block.type === "text").map((block) => block.text).join(""),
@@ -2244,8 +2377,6 @@ If it's in another language, summarize in that language.
2244
2377
  */
2245
2378
  getSupportedModels() {
2246
2379
  return [
2247
- MODEL_CLAUDE_4_SONNET,
2248
- MODEL_CLAUDE_4_OPUS,
2249
2380
  MODEL_CLAUDE_4_5_SONNET,
2250
2381
  MODEL_CLAUDE_4_5_HAIKU,
2251
2382
  MODEL_CLAUDE_4_5_OPUS,
@@ -2253,9 +2384,9 @@ If it's in another language, summarize in that language.
2253
2384
  MODEL_CLAUDE_4_6_OPUS,
2254
2385
  MODEL_CLAUDE_4_7_OPUS,
2255
2386
  MODEL_CLAUDE_4_8_OPUS,
2387
+ MODEL_CLAUDE_5_FABLE,
2256
2388
  MODEL_CLAUDE_5_SONNET,
2257
- MODEL_CLAUDE_5_OPUS,
2258
- MODEL_CLAUDE_3_HAIKU
2389
+ MODEL_CLAUDE_5_OPUS
2259
2390
  ];
2260
2391
  }
2261
2392
  /**
@@ -2294,6 +2425,7 @@ If it's in another language, summarize in that language.
2294
2425
  const dec = new TextDecoder();
2295
2426
  const textBlocks = [];
2296
2427
  const toolCallsMap = /* @__PURE__ */ new Map();
2428
+ const providerItems = /* @__PURE__ */ new Map();
2297
2429
  let responseStatus;
2298
2430
  let incompleteDetails;
2299
2431
  let usage;
@@ -2321,7 +2453,7 @@ If it's in another language, summarize in that language.
2321
2453
  onPartial,
2322
2454
  textBlocks,
2323
2455
  toolCallsMap,
2324
- options,
2456
+ providerItems,
2325
2457
  (metadata) => {
2326
2458
  if (metadata.responseStatus !== void 0) {
2327
2459
  responseStatus = metadata.responseStatus;
@@ -2348,21 +2480,31 @@ If it's in another language, summarize in that language.
2348
2480
  type: "tool_use",
2349
2481
  id: tool.id,
2350
2482
  name: tool.name,
2351
- input: tool.input || {}
2483
+ input: safeParseToolCallInput(tool.arguments, options.onJsonError)
2352
2484
  })
2353
2485
  );
2486
+ const providerContent = Array.from(providerItems.values());
2487
+ const text = StreamTextAccumulator.getFullText(textBlocks);
2354
2488
  return {
2355
2489
  blocks: [...textBlocks, ...toolBlocks],
2356
2490
  stop_reason: toolBlocks.length ? "tool_use" : "end",
2357
2491
  truncated: responseStatus === "incomplete",
2358
2492
  response_status: responseStatus,
2359
2493
  incomplete_details: incompleteDetails,
2360
- usage
2494
+ usage,
2495
+ ...providerContent.length > 0 ? {
2496
+ assistant_message: {
2497
+ role: "assistant",
2498
+ content: text,
2499
+ provider_content: providerContent
2500
+ }
2501
+ } : {}
2361
2502
  };
2362
2503
  }
2363
- function handleResponsesSSEEvent(eventType, data, onPartial, textBlocks, toolCallsMap, options, onMetadata) {
2504
+ function handleResponsesSSEEvent(eventType, data, onPartial, textBlocks, toolCallsMap, providerItems, onMetadata) {
2364
2505
  switch (eventType) {
2365
2506
  case "response.output_item.added":
2507
+ rememberProviderItem(providerItems, data.item);
2366
2508
  if (data.item?.type === "message" && Array.isArray(data.item.content)) {
2367
2509
  data.item.content.forEach((c) => {
2368
2510
  if (c.type === "output_text" && c.text) {
@@ -2372,12 +2514,41 @@ If it's in another language, summarize in that language.
2372
2514
  });
2373
2515
  } else if (data.item?.type === "function_call") {
2374
2516
  toolCallsMap.set(data.item.id, {
2375
- id: data.item.id,
2517
+ id: data.item.call_id ?? data.item.id,
2376
2518
  name: data.item.name,
2377
- input: safeParseToolCallInput(
2378
- data.item.arguments,
2379
- options.onJsonError
2380
- )
2519
+ arguments: data.item.arguments ?? ""
2520
+ });
2521
+ }
2522
+ break;
2523
+ case "response.function_call_arguments.delta": {
2524
+ const tool = toolCallsMap.get(data.item_id);
2525
+ if (tool && typeof data.delta === "string") {
2526
+ tool.arguments += data.delta;
2527
+ }
2528
+ const item = providerItems.get(data.item_id);
2529
+ if (item && typeof data.delta === "string") {
2530
+ item.arguments = `${item.arguments ?? ""}${data.delta}`;
2531
+ }
2532
+ break;
2533
+ }
2534
+ case "response.function_call_arguments.done": {
2535
+ const tool = toolCallsMap.get(data.item_id);
2536
+ if (tool && typeof data.arguments === "string") {
2537
+ tool.arguments = data.arguments;
2538
+ }
2539
+ const item = providerItems.get(data.item_id);
2540
+ if (item && typeof data.arguments === "string") {
2541
+ item.arguments = data.arguments;
2542
+ }
2543
+ break;
2544
+ }
2545
+ case "response.output_item.done":
2546
+ rememberProviderItem(providerItems, data.item);
2547
+ if (data.item?.type === "function_call") {
2548
+ toolCallsMap.set(data.item.id, {
2549
+ id: data.item.call_id ?? data.item.id,
2550
+ name: data.item.name,
2551
+ arguments: data.item.arguments ?? ""
2381
2552
  });
2382
2553
  }
2383
2554
  break;
@@ -2412,6 +2583,11 @@ If it's in another language, summarize in that language.
2412
2583
  break;
2413
2584
  }
2414
2585
  }
2586
+ function rememberProviderItem(items, item) {
2587
+ if (!item || typeof item !== "object") return;
2588
+ const key = typeof item.id === "string" && item.id ? item.id : `output-item-${items.size}`;
2589
+ items.set(key, { ...item });
2590
+ }
2415
2591
  function extractResponsesMetadata(data, fallbackStatus) {
2416
2592
  const response = data?.response ?? data;
2417
2593
  return {
@@ -2434,7 +2610,7 @@ If it's in another language, summarize in that language.
2434
2610
  if (outputItem.type === "function_call") {
2435
2611
  blocks.push({
2436
2612
  type: "tool_use",
2437
- id: outputItem.id,
2613
+ id: outputItem.call_id ?? outputItem.id,
2438
2614
  name: outputItem.name,
2439
2615
  input: safeParseToolCallInput(
2440
2616
  outputItem.arguments,
@@ -2450,7 +2626,16 @@ If it's in another language, summarize in that language.
2450
2626
  truncated: data?.status === "incomplete",
2451
2627
  response_status: data?.status,
2452
2628
  incomplete_details: data?.incomplete_details ?? null,
2453
- usage: data?.usage
2629
+ usage: data?.usage,
2630
+ ...Array.isArray(data?.output) && data.output.length > 0 ? {
2631
+ assistant_message: {
2632
+ role: "assistant",
2633
+ content: blocks.filter(
2634
+ (block) => block.type === "text"
2635
+ ).map((block) => block.text).join(""),
2636
+ provider_content: data.output
2637
+ }
2638
+ } : {}
2454
2639
  };
2455
2640
  }
2456
2641
 
@@ -2669,10 +2854,22 @@ If it's in another language, summarize in that language.
2669
2854
  }
2670
2855
  }
2671
2856
  function cleanMessagesForResponsesAPI(messages) {
2672
- return messages.map((msg) => {
2673
- const role = msg.role === "tool" ? "user" : msg.role;
2857
+ return messages.flatMap((msg) => {
2858
+ if (msg.role === "assistant" && msg.provider_content?.length) {
2859
+ return msg.provider_content;
2860
+ }
2861
+ if (msg.role === "tool" && msg.tool_call_id) {
2862
+ return [
2863
+ {
2864
+ type: "function_call_output",
2865
+ call_id: msg.tool_call_id,
2866
+ output: msg.content
2867
+ }
2868
+ ];
2869
+ }
2870
+ const items = [];
2674
2871
  const cleanMsg = {
2675
- role
2872
+ role: msg.role === "tool" ? "user" : msg.role
2676
2873
  };
2677
2874
  if (typeof msg.content === "string") {
2678
2875
  cleanMsg.content = msg.content;
@@ -2694,7 +2891,19 @@ If it's in another language, summarize in that language.
2694
2891
  } else {
2695
2892
  cleanMsg.content = msg.content;
2696
2893
  }
2697
- return cleanMsg;
2894
+ const hasContent = typeof cleanMsg.content !== "string" || cleanMsg.content.length > 0;
2895
+ if (hasContent) items.push(cleanMsg);
2896
+ if (msg.role === "assistant" && msg.tool_calls) {
2897
+ items.push(
2898
+ ...msg.tool_calls.map((call) => ({
2899
+ type: "function_call",
2900
+ call_id: call.id,
2901
+ name: call.function.name,
2902
+ arguments: call.function.arguments
2903
+ }))
2904
+ );
2905
+ }
2906
+ return items;
2698
2907
  });
2699
2908
  }
2700
2909
  function cleanMessagesForMistralChatCompletions(messages) {
@@ -3130,6 +3339,7 @@ If it's in another language, summarize in that language.
3130
3339
  currentRole = null;
3131
3340
  };
3132
3341
  for (const msg of messages) {
3342
+ if (msg.role === "system") continue;
3133
3343
  const role = mapRoleToGemini(msg.role);
3134
3344
  if (msg.tool_calls) {
3135
3345
  pushCurrent();
@@ -3173,6 +3383,7 @@ If it's in another language, summarize in that language.
3173
3383
  currentRole = null;
3174
3384
  };
3175
3385
  for (const msg of messages) {
3386
+ if (msg.role === "system") continue;
3176
3387
  const role = mapRoleToGemini(msg.role);
3177
3388
  if (msg.tool_calls) {
3178
3389
  pushCurrent();
@@ -3227,6 +3438,18 @@ If it's in another language, summarize in that language.
3227
3438
  pushCurrent();
3228
3439
  return geminiMessages;
3229
3440
  }
3441
+ function extractGeminiSystemInstruction(messages) {
3442
+ const parts = messages.flatMap((message) => {
3443
+ if (message.role !== "system") return [];
3444
+ if (typeof message.content === "string") {
3445
+ return message.content ? [{ text: message.content }] : [];
3446
+ }
3447
+ return message.content.flatMap(
3448
+ (block) => block.type === "text" && block.text ? [{ text: block.text }] : []
3449
+ );
3450
+ });
3451
+ return parts.length > 0 ? { parts } : void 0;
3452
+ }
3230
3453
  function createFunctionCallPart(call, options) {
3231
3454
  options.callIdMap?.set(call.id, call.function.name);
3232
3455
  const context = options.functionCallContextMap?.get(call.id);
@@ -3569,6 +3792,8 @@ If it's in another language, summarize in that language.
3569
3792
  maxOutputTokens: maxTokens !== void 0 ? maxTokens : getMaxTokensForResponseLength(this.responseLength)
3570
3793
  }
3571
3794
  };
3795
+ const systemInstruction = extractGeminiSystemInstruction(messages);
3796
+ if (systemInstruction) body.systemInstruction = systemInstruction;
3572
3797
  const thinkingConfig = this.resolveThinkingConfig(model);
3573
3798
  if (thinkingConfig) {
3574
3799
  body.generationConfig.thinkingConfig = thinkingConfig;
@@ -5057,7 +5282,6 @@ If it's in another language, summarize in that language.
5057
5282
  MODEL_OPENROUTER_FUSION,
5058
5283
  // Free models
5059
5284
  MODEL_GPT_OSS_20B_FREE,
5060
- MODEL_ZAI_GLM_4_5_AIR_FREE,
5061
5285
  // OpenAI models
5062
5286
  MODEL_OPENAI_GPT_LATEST,
5063
5287
  MODEL_OPENAI_GPT_MINI_LATEST,
@@ -5066,7 +5290,6 @@ If it's in another language, summarize in that language.
5066
5290
  MODEL_OPENAI_GPT_5_6_LUNA,
5067
5291
  MODEL_OPENAI_GPT_5_5_PRO,
5068
5292
  MODEL_OPENAI_GPT_5_5,
5069
- MODEL_OPENAI_GPT_5_1_CHAT,
5070
5293
  MODEL_OPENAI_GPT_5_1_CODEX,
5071
5294
  MODEL_OPENAI_GPT_5_MINI,
5072
5295
  MODEL_OPENAI_GPT_5_NANO,
@@ -5076,15 +5299,15 @@ If it's in another language, summarize in that language.
5076
5299
  // Anthropic models
5077
5300
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
5078
5301
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
5302
+ MODEL_ANTHROPIC_CLAUDE_FABLE_5,
5079
5303
  MODEL_ANTHROPIC_CLAUDE_OPUS_5,
5080
5304
  MODEL_ANTHROPIC_CLAUDE_OPUS_4,
5081
5305
  MODEL_ANTHROPIC_CLAUDE_SONNET_4,
5082
- MODEL_ANTHROPIC_CLAUDE_3_7_SONNET,
5083
- MODEL_ANTHROPIC_CLAUDE_3_5_SONNET,
5084
5306
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
5085
5307
  // Gemini models
5086
5308
  MODEL_GOOGLE_GEMINI_PRO_LATEST,
5087
5309
  MODEL_GOOGLE_GEMINI_FLASH_LATEST,
5310
+ MODEL_GOOGLE_GEMINI_3_7_FLASH,
5088
5311
  MODEL_GOOGLE_GEMINI_3_6_FLASH,
5089
5312
  MODEL_GOOGLE_GEMINI_3_5_FLASH_LITE,
5090
5313
  MODEL_GOOGLE_GEMINI_2_5_PRO,
@@ -5096,10 +5319,12 @@ If it's in another language, summarize in that language.
5096
5319
  MODEL_ZAI_GLM_4_5_AIR,
5097
5320
  // xAI models
5098
5321
  MODEL_XAI_GROK_LATEST,
5322
+ MODEL_XAI_GROK_4_6,
5099
5323
  MODEL_XAI_GROK_4_5,
5100
5324
  // DeepSeek models
5101
5325
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731,
5102
5326
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH,
5327
+ MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813,
5103
5328
  // Other models
5104
5329
  MODEL_MOONSHOTAI_KIMI_LATEST,
5105
5330
  MODEL_MOONSHOTAI_KIMI_K3,
@@ -5323,7 +5548,7 @@ If it's in another language, summarize in that language.
5323
5548
  * @param model Name of the model to use
5324
5549
  * @param visionModel Name of the vision model
5325
5550
  */
5326
- constructor(apiKey, model = MODEL_GROK_4_1_FAST_NON_REASONING, visionModel = MODEL_GROK_4_1_FAST_NON_REASONING, tools, endpoint = ENDPOINT_XAI_CHAT_COMPLETIONS_API, responseLength, reasoningEffort) {
5551
+ constructor(apiKey, model = MODEL_GROK_4_3, visionModel = MODEL_GROK_4_3, tools, endpoint = ENDPOINT_XAI_CHAT_COMPLETIONS_API, responseLength, reasoningEffort = "none") {
5327
5552
  /** Provider name */
5328
5553
  this.provider = "xai";
5329
5554
  this.apiKey = apiKey;
@@ -5507,25 +5732,24 @@ If it's in another language, summarize in that language.
5507
5732
  */
5508
5733
  getSupportedModels() {
5509
5734
  return [
5735
+ MODEL_GROK_4_6,
5510
5736
  MODEL_GROK_4_5,
5511
5737
  MODEL_GROK_4_3,
5512
5738
  MODEL_GROK_4_20_REASONING,
5513
- MODEL_GROK_4_20_NON_REASONING,
5514
- MODEL_GROK_4_1_FAST_REASONING,
5515
- MODEL_GROK_4_1_FAST_NON_REASONING
5739
+ MODEL_GROK_4_20_NON_REASONING
5516
5740
  ];
5517
5741
  }
5518
5742
  /**
5519
5743
  * Get the default model
5520
5744
  */
5521
5745
  getDefaultModel() {
5522
- return MODEL_GROK_4_1_FAST_NON_REASONING;
5746
+ return MODEL_GROK_4_3;
5523
5747
  }
5524
5748
  /**
5525
5749
  * Get the default vision model
5526
5750
  */
5527
5751
  getDefaultVisionModel() {
5528
- return MODEL_GROK_4_1_FAST_NON_REASONING;
5752
+ return MODEL_GROK_4_3;
5529
5753
  }
5530
5754
  /**
5531
5755
  * Check if this provider supports vision
@@ -5555,7 +5779,7 @@ If it's in another language, summarize in that language.
5555
5779
  * @param model Name of the model to use
5556
5780
  * @param visionModel Name of the vision model
5557
5781
  */
5558
- constructor(apiKey, model = MODEL_GLM_5_2, visionModel = MODEL_GLM_4_6V_FLASH, tools, endpoint = ENDPOINT_ZAI_CHAT_COMPLETIONS_API, responseLength, responseFormat, thinking) {
5782
+ constructor(apiKey, model = MODEL_GLM_5_2, visionModel = MODEL_GLM_4_6V_FLASH, tools, endpoint = ENDPOINT_ZAI_CHAT_COMPLETIONS_API, responseLength, responseFormat, thinking, reasoningEffort) {
5559
5783
  /** Provider name */
5560
5784
  this.provider = "zai";
5561
5785
  this.apiKey = apiKey;
@@ -5565,6 +5789,7 @@ If it's in another language, summarize in that language.
5565
5789
  this.responseLength = responseLength;
5566
5790
  this.responseFormat = responseFormat;
5567
5791
  this.thinking = thinking ?? { type: "disabled" };
5792
+ this.reasoningEffort = reasoningEffort;
5568
5793
  this.visionModel = visionModel;
5569
5794
  }
5570
5795
  /**
@@ -5669,6 +5894,9 @@ If it's in another language, summarize in that language.
5669
5894
  if (this.thinking) {
5670
5895
  body.thinking = this.thinking;
5671
5896
  }
5897
+ if (model === MODEL_GLM_5_2 && this.reasoningEffort) {
5898
+ body.reasoning_effort = this.reasoningEffort;
5899
+ }
5672
5900
  const tools = this.buildToolsDefinition();
5673
5901
  if (tools.length > 0) {
5674
5902
  body.tools = tools;
@@ -5719,7 +5947,26 @@ If it's in another language, summarize in that language.
5719
5947
  validate: "explicit"
5720
5948
  });
5721
5949
  const tools = options.tools;
5722
- const thinking = options.thinking ?? { type: "disabled" };
5950
+ const supportedReasoningEfforts = getZaiSupportedReasoningEfforts(model);
5951
+ if (options.reasoning_effort !== void 0 && !supportedReasoningEfforts.includes(options.reasoning_effort)) {
5952
+ const supportedMessage = supportedReasoningEfforts.length > 0 ? `Supported values: ${supportedReasoningEfforts.join(", ")}.` : "This model does not expose configurable effort.";
5953
+ throw new Error(
5954
+ `Model ${model} does not support Z.ai reasoning_effort: ${options.reasoning_effort}. ${supportedMessage}`
5955
+ );
5956
+ }
5957
+ const normalizedReasoningEffort = normalizeZaiReasoningEffort(
5958
+ model,
5959
+ options.reasoning_effort
5960
+ );
5961
+ const usesExplicitThinking = options.thinking !== void 0;
5962
+ const thinking = usesExplicitThinking && options.reasoning_effort === void 0 ? options.thinking : normalizedReasoningEffort === "high" || normalizedReasoningEffort === "max" ? {
5963
+ type: "enabled",
5964
+ clear_thinking: options.thinking?.clear_thinking
5965
+ } : {
5966
+ type: "disabled",
5967
+ clear_thinking: options.thinking?.clear_thinking
5968
+ };
5969
+ const reasoningEffort = thinking?.type === "enabled" && options.reasoning_effort !== void 0 ? normalizedReasoningEffort : void 0;
5723
5970
  return new ZAIChatService(
5724
5971
  options.apiKey,
5725
5972
  model,
@@ -5728,7 +5975,8 @@ If it's in another language, summarize in that language.
5728
5975
  options.endpoint || ENDPOINT_ZAI_CHAT_COMPLETIONS_API,
5729
5976
  options.responseLength,
5730
5977
  options.responseFormat,
5731
- thinking
5978
+ thinking,
5979
+ reasoningEffort
5732
5980
  );
5733
5981
  }
5734
5982
  /**
@@ -5805,21 +6053,120 @@ If it's in another language, summarize in that language.
5805
6053
  new PlamoChatServiceProvider()
5806
6054
  ];
5807
6055
 
5808
- // src/services/ChatServiceFactory.ts
5809
- var TOOL_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set([
6056
+ // src/backend.ts
6057
+ var KNOWN_CHAT_PROVIDERS = /* @__PURE__ */ new Set([
6058
+ "claude",
6059
+ "claude-agent-sdk",
6060
+ "codex-sdk",
6061
+ "copilot-sdk",
6062
+ "deepseek",
6063
+ "gemini",
6064
+ "gemini-nano",
6065
+ "kimi",
6066
+ "mistral",
5810
6067
  "openai",
5811
6068
  "openai-compatible",
5812
6069
  "openrouter",
5813
- "gemini",
5814
- "claude",
5815
- "zai",
6070
+ "plamo",
6071
+ "sakana",
5816
6072
  "xai",
5817
- "kimi",
6073
+ "zai"
6074
+ ]);
6075
+ var TOOL_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set([
6076
+ "claude",
5818
6077
  "deepseek",
6078
+ "gemini",
6079
+ "kimi",
5819
6080
  "mistral",
6081
+ "openai",
6082
+ "openai-compatible",
6083
+ "openrouter",
6084
+ "plamo",
5820
6085
  "sakana",
5821
- "plamo"
6086
+ "xai",
6087
+ "zai"
5822
6088
  ]);
6089
+ var NON_STREAMING_PROVIDERS = /* @__PURE__ */ new Set(["codex-sdk"]);
6090
+ function getChatBackendProviderCapabilities(provider) {
6091
+ if (!KNOWN_CHAT_PROVIDERS.has(provider)) return void 0;
6092
+ return {
6093
+ text: true,
6094
+ streaming: !NON_STREAMING_PROVIDERS.has(provider),
6095
+ tools: TOOL_SUPPORTED_PROVIDERS.has(provider)
6096
+ };
6097
+ }
6098
+ function buildToolContinuationMessages(input) {
6099
+ const isClaude = input.provider === "claude";
6100
+ const messages = input.messages.filter(
6101
+ (message) => !isEmptyClaudeAssistantMessage(isClaude, message)
6102
+ );
6103
+ const toolUses = input.completion.blocks.filter(
6104
+ (block) => block.type === "tool_use"
6105
+ );
6106
+ const assistantMessage = input.completion.assistant_message ?? buildAssistantToolCall(isClaude, toolUses);
6107
+ if (!isEmptyClaudeAssistantMessage(isClaude, assistantMessage)) {
6108
+ messages.push({ ...assistantMessage });
6109
+ }
6110
+ messages.push(...buildToolResultMessages(isClaude, input.toolResults));
6111
+ return messages;
6112
+ }
6113
+ function isEmptyClaudeAssistantMessage(isClaude, message) {
6114
+ if (!isClaude || message.role !== "assistant") {
6115
+ return false;
6116
+ }
6117
+ const content = message.content;
6118
+ return Array.isArray(content) && content.length === 0;
6119
+ }
6120
+ function buildAssistantToolCall(isClaude, toolUses) {
6121
+ if (isClaude) {
6122
+ return {
6123
+ role: "assistant",
6124
+ content: toolUses.map((toolUse) => ({
6125
+ type: "tool_use",
6126
+ id: toolUse.id,
6127
+ name: toolUse.name,
6128
+ input: toolUse.input ?? {}
6129
+ }))
6130
+ };
6131
+ }
6132
+ return {
6133
+ role: "assistant",
6134
+ content: [],
6135
+ tool_calls: toolUses.map((toolUse) => ({
6136
+ id: toolUse.id,
6137
+ type: "function",
6138
+ function: {
6139
+ name: toolUse.name,
6140
+ arguments: JSON.stringify(toolUse.input ?? {})
6141
+ }
6142
+ }))
6143
+ };
6144
+ }
6145
+ function buildToolResultMessages(isClaude, toolResults) {
6146
+ if (isClaude) {
6147
+ return toolResults.map(
6148
+ (result) => ({
6149
+ role: "user",
6150
+ content: [
6151
+ {
6152
+ type: "tool_result",
6153
+ tool_use_id: result.tool_use_id,
6154
+ content: result.content
6155
+ }
6156
+ ]
6157
+ })
6158
+ );
6159
+ }
6160
+ return toolResults.map(
6161
+ (result) => ({
6162
+ role: "tool",
6163
+ tool_call_id: result.tool_use_id,
6164
+ content: result.content
6165
+ })
6166
+ );
6167
+ }
6168
+
6169
+ // src/services/ChatServiceFactory.ts
5823
6170
  var MCP_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set(["openai", "gemini", "claude"]);
5824
6171
  var JSON_MODE_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set([
5825
6172
  "openai",
@@ -5835,8 +6182,9 @@ If it's in another language, summarize in that language.
5835
6182
  kimi: ["low", "high", "max"],
5836
6183
  mistral: ["low", "medium", "high"],
5837
6184
  plamo: ["none", "medium"],
5838
- xai: ["none", "low", "medium", "high"],
5839
- deepseek: ["none", "low", "high", "max"]
6185
+ xai: ["none", "low", "medium", "high", "xhigh"],
6186
+ deepseek: ["none", "low", "high", "max"],
6187
+ zai: ["none", "minimal", "low", "medium", "high", "xhigh", "max"]
5840
6188
  };
5841
6189
  var ChatServiceFactory = class {
5842
6190
  /**
@@ -5885,18 +6233,19 @@ If it's in another language, summarize in that language.
5885
6233
  return void 0;
5886
6234
  }
5887
6235
  const vision = model ? this.getVisionSupportLevelForModel(providerName, model) : provider.getVisionSupportLevel();
6236
+ const backendCapabilities = getChatBackendProviderCapabilities(providerName);
5888
6237
  return {
5889
6238
  provider: providerName,
5890
6239
  models: provider.getSupportedModels(),
5891
6240
  defaultModel: typeof provider.getDefaultModel === "function" ? provider.getDefaultModel() : void 0,
5892
6241
  text: true,
5893
- streaming: true,
6242
+ streaming: backendCapabilities?.streaming ?? true,
5894
6243
  vision,
5895
- tools: TOOL_SUPPORTED_PROVIDERS.has(providerName),
6244
+ tools: backendCapabilities?.tools ?? false,
5896
6245
  mcp: MCP_SUPPORTED_PROVIDERS.has(providerName),
5897
6246
  jsonMode: JSON_MODE_SUPPORTED_PROVIDERS.has(providerName),
5898
6247
  responseLength: true,
5899
- reasoningEffort: providerName === "claude" && model ? [...getClaudeSupportedReasoningEfforts(model)] : providerName === "kimi" && model ? [...getKimiSupportedReasoningEfforts(model)] : providerName === "deepseek" && model ? [...getDeepSeekSupportedReasoningEfforts(model)] : providerName === "openrouter" && model ? [...getOpenRouterSupportedReasoningEfforts(model)] : REASONING_EFFORT_BY_PROVIDER[providerName] ?? []
6248
+ reasoningEffort: providerName === "claude" && model ? [...getClaudeSupportedReasoningEfforts(model)] : providerName === "gemini" && model ? [...getGeminiSupportedReasoningEfforts(model)] : providerName === "kimi" && model ? [...getKimiSupportedReasoningEfforts(model)] : providerName === "deepseek" && model ? [...getDeepSeekSupportedReasoningEfforts(model)] : providerName === "openrouter" && model ? [...getOpenRouterSupportedReasoningEfforts(model)] : providerName === "xai" && model ? [...getXaiSupportedReasoningEfforts(model)] : providerName === "zai" && model ? [...getZaiSupportedReasoningEfforts(model)] : REASONING_EFFORT_BY_PROVIDER[providerName] ?? []
5900
6249
  };
5901
6250
  }
5902
6251
  /**