@aituber-onair/chat 0.52.0 → 0.54.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 (113) hide show
  1. package/README.ja.md +33 -25
  2. package/README.md +34 -25
  3. package/dist/cjs/constants/deepseek.d.ts +3 -0
  4. package/dist/cjs/constants/deepseek.d.ts.map +1 -1
  5. package/dist/cjs/constants/deepseek.js +13 -1
  6. package/dist/cjs/constants/deepseek.js.map +1 -1
  7. package/dist/cjs/constants/gemini.d.ts +2 -1
  8. package/dist/cjs/constants/gemini.d.ts.map +1 -1
  9. package/dist/cjs/constants/gemini.js +10 -14
  10. package/dist/cjs/constants/gemini.js.map +1 -1
  11. package/dist/cjs/constants/openrouter.d.ts +7 -0
  12. package/dist/cjs/constants/openrouter.d.ts.map +1 -1
  13. package/dist/cjs/constants/openrouter.js +71 -2
  14. package/dist/cjs/constants/openrouter.js.map +1 -1
  15. package/dist/cjs/constants/sakana.d.ts +3 -0
  16. package/dist/cjs/constants/sakana.d.ts.map +1 -1
  17. package/dist/cjs/constants/sakana.js +12 -2
  18. package/dist/cjs/constants/sakana.js.map +1 -1
  19. package/dist/cjs/constants/zai.d.ts +3 -0
  20. package/dist/cjs/constants/zai.d.ts.map +1 -1
  21. package/dist/cjs/constants/zai.js +32 -3
  22. package/dist/cjs/constants/zai.js.map +1 -1
  23. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +3 -3
  24. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  25. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts +2 -2
  26. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts.map +1 -1
  27. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.js +16 -7
  28. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.js.map +1 -1
  29. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +2 -1
  30. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  31. package/dist/cjs/services/providers/openai/OpenAIChatService.js +3 -1
  32. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  33. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts +2 -1
  34. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  35. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +4 -1
  36. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  37. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  38. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +6 -1
  39. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  40. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  41. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +7 -0
  42. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  43. package/dist/cjs/services/providers/sakana/SakanaChatService.d.ts +3 -1
  44. package/dist/cjs/services/providers/sakana/SakanaChatService.d.ts.map +1 -1
  45. package/dist/cjs/services/providers/sakana/SakanaChatService.js +2 -2
  46. package/dist/cjs/services/providers/sakana/SakanaChatService.js.map +1 -1
  47. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.d.ts +2 -2
  48. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.d.ts.map +1 -1
  49. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.js +22 -7
  50. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.js.map +1 -1
  51. package/dist/cjs/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  52. package/dist/cjs/services/providers/zai/ZAIChatService.js +1 -1
  53. package/dist/cjs/services/providers/zai/ZAIChatService.js.map +1 -1
  54. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  55. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js +24 -14
  56. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  57. package/dist/esm/constants/deepseek.d.ts +3 -0
  58. package/dist/esm/constants/deepseek.d.ts.map +1 -1
  59. package/dist/esm/constants/deepseek.js +11 -0
  60. package/dist/esm/constants/deepseek.js.map +1 -1
  61. package/dist/esm/constants/gemini.d.ts +2 -1
  62. package/dist/esm/constants/gemini.d.ts.map +1 -1
  63. package/dist/esm/constants/gemini.js +9 -13
  64. package/dist/esm/constants/gemini.js.map +1 -1
  65. package/dist/esm/constants/openrouter.d.ts +7 -0
  66. package/dist/esm/constants/openrouter.d.ts.map +1 -1
  67. package/dist/esm/constants/openrouter.js +69 -0
  68. package/dist/esm/constants/openrouter.js.map +1 -1
  69. package/dist/esm/constants/sakana.d.ts +3 -0
  70. package/dist/esm/constants/sakana.d.ts.map +1 -1
  71. package/dist/esm/constants/sakana.js +10 -1
  72. package/dist/esm/constants/sakana.js.map +1 -1
  73. package/dist/esm/constants/zai.d.ts +3 -0
  74. package/dist/esm/constants/zai.d.ts.map +1 -1
  75. package/dist/esm/constants/zai.js +30 -2
  76. package/dist/esm/constants/zai.js.map +1 -1
  77. package/dist/esm/services/providers/ChatServiceProvider.d.ts +3 -3
  78. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  79. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts +2 -2
  80. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts.map +1 -1
  81. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.js +17 -8
  82. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.js.map +1 -1
  83. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +2 -1
  84. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  85. package/dist/esm/services/providers/openai/OpenAIChatService.js +3 -1
  86. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  87. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts +2 -1
  88. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  89. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +4 -1
  90. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  91. package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  92. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +7 -2
  93. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  94. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  95. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +8 -1
  96. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  97. package/dist/esm/services/providers/sakana/SakanaChatService.d.ts +3 -1
  98. package/dist/esm/services/providers/sakana/SakanaChatService.d.ts.map +1 -1
  99. package/dist/esm/services/providers/sakana/SakanaChatService.js +2 -2
  100. package/dist/esm/services/providers/sakana/SakanaChatService.js.map +1 -1
  101. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.d.ts +2 -2
  102. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.d.ts.map +1 -1
  103. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.js +23 -8
  104. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.js.map +1 -1
  105. package/dist/esm/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  106. package/dist/esm/services/providers/zai/ZAIChatService.js +2 -2
  107. package/dist/esm/services/providers/zai/ZAIChatService.js.map +1 -1
  108. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  109. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js +25 -15
  110. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  111. package/dist/umd/aituber-onair-chat.js +209 -39
  112. package/dist/umd/aituber-onair-chat.min.js +9 -9
  113. package/package.json +1 -1
@@ -31,6 +31,7 @@ var AITuberOnAirChat = (() => {
31
31
  DEEPSEEK_API_BASE_URL: () => DEEPSEEK_API_BASE_URL,
32
32
  DEEPSEEK_DEPRECATED_MODELS: () => DEEPSEEK_DEPRECATED_MODELS,
33
33
  DEEPSEEK_SUPPORTED_MODELS: () => DEEPSEEK_SUPPORTED_MODELS,
34
+ DEEPSEEK_VISION_SUPPORTED_MODELS: () => DEEPSEEK_VISION_SUPPORTED_MODELS,
34
35
  DEFAULT_MAX_TOKENS: () => DEFAULT_MAX_TOKENS,
35
36
  DEFAULT_SUMMARY_PROMPT_TEMPLATE: () => DEFAULT_SUMMARY_PROMPT_TEMPLATE,
36
37
  DEFAULT_VISION_PROMPT: () => DEFAULT_VISION_PROMPT,
@@ -78,8 +79,10 @@ var AITuberOnAirChat = (() => {
78
79
  MODEL_ANTHROPIC_CLAUDE_FABLE_5: () => MODEL_ANTHROPIC_CLAUDE_FABLE_5,
79
80
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST: () => MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
80
81
  MODEL_ANTHROPIC_CLAUDE_OPUS_4: () => MODEL_ANTHROPIC_CLAUDE_OPUS_4,
82
+ MODEL_ANTHROPIC_CLAUDE_OPUS_4_8: () => MODEL_ANTHROPIC_CLAUDE_OPUS_4_8,
81
83
  MODEL_ANTHROPIC_CLAUDE_OPUS_5: () => MODEL_ANTHROPIC_CLAUDE_OPUS_5,
82
84
  MODEL_ANTHROPIC_CLAUDE_SONNET_4: () => MODEL_ANTHROPIC_CLAUDE_SONNET_4,
85
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5: () => MODEL_ANTHROPIC_CLAUDE_SONNET_5,
83
86
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST: () => MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
84
87
  MODEL_CLAUDE_3_5_HAIKU: () => MODEL_CLAUDE_3_5_HAIKU,
85
88
  MODEL_CLAUDE_3_5_SONNET: () => MODEL_CLAUDE_3_5_SONNET,
@@ -100,6 +103,7 @@ var AITuberOnAirChat = (() => {
100
103
  MODEL_DEEPSEEK_CHAT: () => MODEL_DEEPSEEK_CHAT,
101
104
  MODEL_DEEPSEEK_REASONER: () => MODEL_DEEPSEEK_REASONER,
102
105
  MODEL_DEEPSEEK_V4_FLASH: () => MODEL_DEEPSEEK_V4_FLASH,
106
+ MODEL_DEEPSEEK_V4_FLASH_VISION_EXP: () => MODEL_DEEPSEEK_V4_FLASH_VISION_EXP,
103
107
  MODEL_DEEPSEEK_V4_PRO: () => MODEL_DEEPSEEK_V4_PRO,
104
108
  MODEL_FUGU: () => MODEL_FUGU,
105
109
  MODEL_FUGU_ULTRA: () => MODEL_FUGU_ULTRA,
@@ -116,6 +120,7 @@ var AITuberOnAirChat = (() => {
116
120
  MODEL_GEMINI_3_5_FLASH_LITE: () => MODEL_GEMINI_3_5_FLASH_LITE,
117
121
  MODEL_GEMINI_3_6_FLASH: () => MODEL_GEMINI_3_6_FLASH,
118
122
  MODEL_GEMINI_3_7_FLASH: () => MODEL_GEMINI_3_7_FLASH,
123
+ MODEL_GEMINI_3_8_FLASH: () => MODEL_GEMINI_3_8_FLASH,
119
124
  MODEL_GEMINI_3_FLASH_PREVIEW: () => MODEL_GEMINI_3_FLASH_PREVIEW,
120
125
  MODEL_GEMINI_3_PRO_PREVIEW: () => MODEL_GEMINI_3_PRO_PREVIEW,
121
126
  MODEL_GEMINI_NANO: () => MODEL_GEMINI_NANO,
@@ -132,6 +137,8 @@ var AITuberOnAirChat = (() => {
132
137
  MODEL_GLM_5V_TURBO: () => MODEL_GLM_5V_TURBO,
133
138
  MODEL_GLM_5_1: () => MODEL_GLM_5_1,
134
139
  MODEL_GLM_5_2: () => MODEL_GLM_5_2,
140
+ MODEL_GLM_5_3: () => MODEL_GLM_5_3,
141
+ MODEL_GLM_5_3_FLASH: () => MODEL_GLM_5_3_FLASH,
135
142
  MODEL_GLM_5_TURBO: () => MODEL_GLM_5_TURBO,
136
143
  MODEL_GOOGLE_GEMINI_2_5_FLASH: () => MODEL_GOOGLE_GEMINI_2_5_FLASH,
137
144
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025: () => MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
@@ -184,6 +191,7 @@ var AITuberOnAirChat = (() => {
184
191
  MODEL_MISTRAL_SMALL_2603: () => MODEL_MISTRAL_SMALL_2603,
185
192
  MODEL_MISTRAL_SMALL_LATEST: () => MODEL_MISTRAL_SMALL_LATEST,
186
193
  MODEL_MOONSHOTAI_KIMI_K2_5: () => MODEL_MOONSHOTAI_KIMI_K2_5,
194
+ MODEL_MOONSHOTAI_KIMI_K2_6: () => MODEL_MOONSHOTAI_KIMI_K2_6,
187
195
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE: () => MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
188
196
  MODEL_MOONSHOTAI_KIMI_K3: () => MODEL_MOONSHOTAI_KIMI_K3,
189
197
  MODEL_MOONSHOTAI_KIMI_LATEST: () => MODEL_MOONSHOTAI_KIMI_LATEST,
@@ -208,10 +216,13 @@ var AITuberOnAirChat = (() => {
208
216
  MODEL_OPENROUTER_AUTO_BETA: () => MODEL_OPENROUTER_AUTO_BETA,
209
217
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH,
210
218
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731,
219
+ MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
211
220
  MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813: () => MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813,
212
221
  MODEL_OPENROUTER_FUSION: () => MODEL_OPENROUTER_FUSION,
213
222
  MODEL_PLAMO_2_2_PRIME: () => MODEL_PLAMO_2_2_PRIME,
214
223
  MODEL_PLAMO_3_0_PRIME: () => MODEL_PLAMO_3_0_PRIME,
224
+ MODEL_QWEN_QWEN_3_8_FLASH: () => MODEL_QWEN_QWEN_3_8_FLASH,
225
+ MODEL_SAKANA_NAMAZU: () => MODEL_SAKANA_NAMAZU,
215
226
  MODEL_XAI_GROK_4_5: () => MODEL_XAI_GROK_4_5,
216
227
  MODEL_XAI_GROK_4_6: () => MODEL_XAI_GROK_4_6,
217
228
  MODEL_XAI_GROK_LATEST: () => MODEL_XAI_GROK_LATEST,
@@ -219,6 +230,8 @@ var AITuberOnAirChat = (() => {
219
230
  MODEL_ZAI_GLM_4_5_AIR_FREE: () => MODEL_ZAI_GLM_4_5_AIR_FREE,
220
231
  MODEL_ZAI_GLM_4_7_FLASH: () => MODEL_ZAI_GLM_4_7_FLASH,
221
232
  MODEL_ZAI_GLM_5_2: () => MODEL_ZAI_GLM_5_2,
233
+ MODEL_ZAI_GLM_5_3: () => MODEL_ZAI_GLM_5_3,
234
+ MODEL_ZAI_GLM_5_3_FLASH: () => MODEL_ZAI_GLM_5_3_FLASH,
222
235
  MistralChatService: () => MistralChatService,
223
236
  MistralChatServiceProvider: () => MistralChatServiceProvider,
224
237
  OPENROUTER_CREDITS_THRESHOLD: () => OPENROUTER_CREDITS_THRESHOLD,
@@ -241,6 +254,7 @@ var AITuberOnAirChat = (() => {
241
254
  SAKANA_API_BASE_URL: () => SAKANA_API_BASE_URL,
242
255
  SAKANA_COMPATIBILITY_MODELS: () => SAKANA_COMPATIBILITY_MODELS,
243
256
  SAKANA_SUPPORTED_MODELS: () => SAKANA_SUPPORTED_MODELS,
257
+ SAKANA_VISION_SUPPORTED_MODELS: () => SAKANA_VISION_SUPPORTED_MODELS,
244
258
  SakanaChatService: () => SakanaChatService,
245
259
  SakanaChatServiceProvider: () => SakanaChatServiceProvider,
246
260
  StreamTextAccumulator: () => StreamTextAccumulator,
@@ -279,6 +293,7 @@ var AITuberOnAirChat = (() => {
279
293
  installGASFetch: () => installGASFetch,
280
294
  isClaudeReasoningEffortModel: () => isClaudeReasoningEffortModel,
281
295
  isDeepSeekReasoningEffortModel: () => isDeepSeekReasoningEffortModel,
296
+ isDeepSeekVisionModel: () => isDeepSeekVisionModel,
282
297
  isGPT5Model: () => isGPT5Model,
283
298
  isGeminiReasoningEffortModel: () => isGeminiReasoningEffortModel,
284
299
  isKimiReasoningEffortModel: () => isKimiReasoningEffortModel,
@@ -290,9 +305,11 @@ var AITuberOnAirChat = (() => {
290
305
  isOpenRouterFreeModel: () => isOpenRouterFreeModel,
291
306
  isOpenRouterVisionModel: () => isOpenRouterVisionModel,
292
307
  isResponsesOnlyGPT5Model: () => isResponsesOnlyGPT5Model,
308
+ isSakanaVisionModel: () => isSakanaVisionModel,
293
309
  isXaiReasoningEffortModel: () => isXaiReasoningEffortModel,
294
310
  isXaiReasoningEffortNoneModel: () => isXaiReasoningEffortNoneModel,
295
311
  isXaiVisionModel: () => isXaiVisionModel,
312
+ isZaiAlwaysThinkingModel: () => isZaiAlwaysThinkingModel,
296
313
  isZaiReasoningEffortModel: () => isZaiReasoningEffortModel,
297
314
  isZaiToolStreamModel: () => isZaiToolStreamModel,
298
315
  isZaiVisionModel: () => isZaiVisionModel,
@@ -412,6 +429,7 @@ var AITuberOnAirChat = (() => {
412
429
  var ENDPOINT_GEMINI_API = "https://generativelanguage.googleapis.com";
413
430
  var MODEL_GEMMA_4_31B_IT = "gemma-4-31b-it";
414
431
  var MODEL_GEMMA_4_26B_A4B_IT = "gemma-4-26b-a4b-it";
432
+ var MODEL_GEMINI_3_8_FLASH = "gemini-3.8-flash";
415
433
  var MODEL_GEMINI_3_7_FLASH = "gemini-3.7-flash";
416
434
  var MODEL_GEMINI_3_6_FLASH = "gemini-3.6-flash";
417
435
  var MODEL_GEMINI_3_5_FLASH = "gemini-3.5-flash";
@@ -426,6 +444,7 @@ var AITuberOnAirChat = (() => {
426
444
  var MODEL_GEMINI_2_5_FLASH_LITE = "gemini-2.5-flash-lite";
427
445
  var MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17 = "gemini-2.5-flash-lite-preview-06-17";
428
446
  var GEMINI_RECOMMENDED_MODELS = [
447
+ MODEL_GEMINI_3_8_FLASH,
429
448
  MODEL_GEMINI_3_7_FLASH,
430
449
  MODEL_GEMINI_3_6_FLASH,
431
450
  MODEL_GEMINI_3_5_FLASH,
@@ -454,12 +473,7 @@ var AITuberOnAirChat = (() => {
454
473
  "medium",
455
474
  "high"
456
475
  ];
457
- var GEMINI_PRO_REASONING_EFFORTS = [
458
- "low",
459
- "medium",
460
- "high"
461
- ];
462
- var GEMINI_3_7_FLASH_REASONING_EFFORTS = [
476
+ var GEMINI_LOW_MINIMUM_REASONING_EFFORTS = [
463
477
  "low",
464
478
  "medium",
465
479
  "high"
@@ -472,19 +486,18 @@ var AITuberOnAirChat = (() => {
472
486
  MODEL_GEMINI_3_1_FLASH_LITE_PREVIEW,
473
487
  MODEL_GEMINI_3_FLASH_PREVIEW
474
488
  ];
475
- var GEMINI_PRO_REASONING_EFFORT_MODELS = [
489
+ var GEMINI_LOW_MINIMUM_REASONING_EFFORT_MODELS = [
490
+ MODEL_GEMINI_3_8_FLASH,
491
+ MODEL_GEMINI_3_7_FLASH,
476
492
  MODEL_GEMINI_3_1_PRO_PREVIEW,
477
493
  MODEL_GEMINI_3_PRO_PREVIEW
478
494
  ];
479
495
  function getGeminiSupportedReasoningEfforts(model) {
480
- if (model === MODEL_GEMINI_3_7_FLASH) {
481
- return GEMINI_3_7_FLASH_REASONING_EFFORTS;
482
- }
483
496
  if (GEMINI_FLASH_REASONING_EFFORT_MODELS.includes(model)) {
484
497
  return GEMINI_FLASH_REASONING_EFFORTS;
485
498
  }
486
- if (GEMINI_PRO_REASONING_EFFORT_MODELS.includes(model)) {
487
- return GEMINI_PRO_REASONING_EFFORTS;
499
+ if (GEMINI_LOW_MINIMUM_REASONING_EFFORT_MODELS.includes(model)) {
500
+ return GEMINI_LOW_MINIMUM_REASONING_EFFORTS;
488
501
  }
489
502
  return [];
490
503
  }
@@ -598,6 +611,7 @@ var AITuberOnAirChat = (() => {
598
611
  var MODEL_GPT_OSS_20B_FREE = "openai/gpt-oss-20b:free";
599
612
  var MODEL_MOONSHOTAI_KIMI_K3 = "moonshotai/kimi-k3";
600
613
  var MODEL_MOONSHOTAI_KIMI_K2_7_CODE = "moonshotai/kimi-k2.7-code";
614
+ var MODEL_MOONSHOTAI_KIMI_K2_6 = "moonshotai/kimi-k2.6";
601
615
  var MODEL_MOONSHOTAI_KIMI_K2_5 = "moonshotai/kimi-k2.5";
602
616
  var MODEL_MOONSHOTAI_KIMI_LATEST = "~moonshotai/kimi-latest";
603
617
  var MODEL_OPENAI_GPT_LATEST = "~openai/gpt-latest";
@@ -617,7 +631,9 @@ var AITuberOnAirChat = (() => {
617
631
  var MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST = "~anthropic/claude-sonnet-latest";
618
632
  var MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST = "~anthropic/claude-haiku-latest";
619
633
  var MODEL_ANTHROPIC_CLAUDE_FABLE_5 = "anthropic/claude-fable-5";
634
+ var MODEL_ANTHROPIC_CLAUDE_SONNET_5 = "anthropic/claude-sonnet-5";
620
635
  var MODEL_ANTHROPIC_CLAUDE_OPUS_5 = "anthropic/claude-opus-5";
636
+ var MODEL_ANTHROPIC_CLAUDE_OPUS_4_8 = "anthropic/claude-opus-4.8";
621
637
  var MODEL_ANTHROPIC_CLAUDE_OPUS_4 = "anthropic/claude-opus-4";
622
638
  var MODEL_ANTHROPIC_CLAUDE_SONNET_4 = "anthropic/claude-sonnet-4";
623
639
  var MODEL_ANTHROPIC_CLAUDE_3_7_SONNET = "anthropic/claude-3.7-sonnet";
@@ -632,6 +648,8 @@ var AITuberOnAirChat = (() => {
632
648
  var MODEL_GOOGLE_GEMINI_2_5_FLASH = "google/gemini-2.5-flash";
633
649
  var MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025 = "google/gemini-2.5-flash-lite-preview-09-2025";
634
650
  var MODEL_ZAI_GLM_5_2 = "z-ai/glm-5.2";
651
+ var MODEL_ZAI_GLM_5_3 = "z-ai/glm-5.3";
652
+ var MODEL_ZAI_GLM_5_3_FLASH = "z-ai/glm-5.3-flash";
635
653
  var MODEL_ZAI_GLM_4_7_FLASH = "z-ai/glm-4.7-flash";
636
654
  var MODEL_ZAI_GLM_4_5_AIR = "z-ai/glm-4.5-air";
637
655
  var MODEL_ZAI_GLM_4_5_AIR_FREE = "z-ai/glm-4.5-air:free";
@@ -643,6 +661,8 @@ var AITuberOnAirChat = (() => {
643
661
  var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH = "deepseek/deepseek-v4-flash";
644
662
  var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731 = "deepseek/deepseek-v4-flash-0731";
645
663
  var MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813 = "deepseek/deepseek-v4-pro-0813";
664
+ var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP = "deepseek/deepseek-v4-flash-vision-exp";
665
+ var MODEL_QWEN_QWEN_3_8_FLASH = "qwen/qwen3.8-flash";
646
666
  var OPENROUTER_DEPRECATED_MODELS = [
647
667
  MODEL_OPENAI_GPT_5_1_CHAT,
648
668
  MODEL_ANTHROPIC_CLAUDE_3_7_SONNET,
@@ -672,10 +692,30 @@ var AITuberOnAirChat = (() => {
672
692
  "high",
673
693
  "xhigh"
674
694
  ];
695
+ var OPENROUTER_ALWAYS_THINKING_REASONING_EFFORTS = [
696
+ "low",
697
+ "high",
698
+ "max"
699
+ ];
700
+ var OPENROUTER_OPTIONAL_LOW_REASONING_EFFORTS = [
701
+ "none",
702
+ "low",
703
+ "high",
704
+ "max"
705
+ ];
706
+ var OPENROUTER_CLAUDE_REASONING_EFFORTS = [
707
+ "none",
708
+ "low",
709
+ "medium",
710
+ "high",
711
+ "xhigh",
712
+ "max"
713
+ ];
675
714
  var OPENROUTER_FREE_MODELS = [MODEL_GPT_OSS_20B_FREE];
676
715
  var OPENROUTER_VISION_SUPPORTED_MODELS = [
677
716
  MODEL_OPENROUTER_AUTO_BETA,
678
717
  MODEL_MOONSHOTAI_KIMI_K3,
718
+ MODEL_MOONSHOTAI_KIMI_K2_6,
679
719
  MODEL_MOONSHOTAI_KIMI_LATEST,
680
720
  MODEL_OPENAI_GPT_LATEST,
681
721
  MODEL_OPENAI_GPT_MINI_LATEST,
@@ -693,7 +733,9 @@ var AITuberOnAirChat = (() => {
693
733
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
694
734
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
695
735
  MODEL_ANTHROPIC_CLAUDE_FABLE_5,
736
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5,
696
737
  MODEL_ANTHROPIC_CLAUDE_OPUS_5,
738
+ MODEL_ANTHROPIC_CLAUDE_OPUS_4_8,
697
739
  MODEL_ANTHROPIC_CLAUDE_OPUS_4,
698
740
  MODEL_ANTHROPIC_CLAUDE_SONNET_4,
699
741
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
@@ -705,6 +747,9 @@ var AITuberOnAirChat = (() => {
705
747
  MODEL_GOOGLE_GEMINI_2_5_PRO,
706
748
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
707
749
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
750
+ MODEL_ZAI_GLM_5_3_FLASH,
751
+ MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
752
+ MODEL_QWEN_QWEN_3_8_FLASH,
708
753
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
709
754
  MODEL_MOONSHOTAI_KIMI_K2_5,
710
755
  MODEL_XAI_GROK_LATEST,
@@ -725,6 +770,15 @@ var AITuberOnAirChat = (() => {
725
770
  }
726
771
  function getOpenRouterSupportedReasoningEfforts(model) {
727
772
  const normalizedModel = model.trim();
773
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
774
+ return OPENROUTER_ALWAYS_THINKING_REASONING_EFFORTS;
775
+ }
776
+ if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP) {
777
+ return OPENROUTER_OPTIONAL_LOW_REASONING_EFFORTS;
778
+ }
779
+ if (normalizedModel === MODEL_ANTHROPIC_CLAUDE_SONNET_5 || normalizedModel === MODEL_ANTHROPIC_CLAUDE_OPUS_4_8) {
780
+ return OPENROUTER_CLAUDE_REASONING_EFFORTS;
781
+ }
728
782
  if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH) {
729
783
  return OPENROUTER_DEEPSEEK_V4_FLASH_REASONING_EFFORTS;
730
784
  }
@@ -738,7 +792,10 @@ var AITuberOnAirChat = (() => {
738
792
  }
739
793
  function getDefaultOpenRouterReasoningEffort(model) {
740
794
  const normalizedModel = model.trim();
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;
795
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
796
+ return "low";
797
+ }
798
+ return normalizedModel === MODEL_ZAI_GLM_5_2 || normalizedModel === MODEL_QWEN_QWEN_3_8_FLASH || normalizedModel === MODEL_MOONSHOTAI_KIMI_K2_6 || normalizedModel === MODEL_ANTHROPIC_CLAUDE_SONNET_5 || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731 || normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813 ? "none" : void 0;
742
799
  }
743
800
  function normalizeOpenRouterReasoningEffort(model, effort) {
744
801
  const normalizedModel = model.trim();
@@ -746,6 +803,15 @@ var AITuberOnAirChat = (() => {
746
803
  if (!requested) {
747
804
  return void 0;
748
805
  }
806
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
807
+ if (requested === "high") {
808
+ return "high";
809
+ }
810
+ if (requested === "max" || requested === "xhigh") {
811
+ return "max";
812
+ }
813
+ return "low";
814
+ }
749
815
  const supported = getOpenRouterSupportedReasoningEfforts(model);
750
816
  if (supported.includes(requested)) {
751
817
  return requested;
@@ -772,11 +838,21 @@ var AITuberOnAirChat = (() => {
772
838
  return "xhigh";
773
839
  }
774
840
  }
841
+ if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP) {
842
+ if (requested === "minimal" || requested === "medium") {
843
+ return "low";
844
+ }
845
+ if (requested === "xhigh") {
846
+ return "high";
847
+ }
848
+ }
775
849
  return requested;
776
850
  }
777
851
 
778
852
  // src/constants/zai.ts
779
853
  var ENDPOINT_ZAI_CHAT_COMPLETIONS_API = "https://api.z.ai/api/paas/v4/chat/completions";
854
+ var MODEL_GLM_5_3 = "glm-5.3";
855
+ var MODEL_GLM_5_3_FLASH = "glm-5.3-flash";
780
856
  var MODEL_GLM_5_2 = "glm-5.2";
781
857
  var MODEL_GLM_5_1 = "glm-5.1";
782
858
  var MODEL_GLM_5 = "glm-5";
@@ -798,20 +874,43 @@ var AITuberOnAirChat = (() => {
798
874
  "xhigh",
799
875
  "max"
800
876
  ];
877
+ var ZAI_GLM_5_3_REASONING_EFFORTS = [
878
+ "low",
879
+ "high",
880
+ "max"
881
+ ];
882
+ function isZaiAlwaysThinkingModel(model) {
883
+ return model === MODEL_GLM_5_3 || model === MODEL_GLM_5_3_FLASH;
884
+ }
801
885
  function getZaiSupportedReasoningEfforts(model) {
886
+ if (isZaiAlwaysThinkingModel(model)) {
887
+ return ZAI_GLM_5_3_REASONING_EFFORTS;
888
+ }
802
889
  return model === MODEL_GLM_5_2 ? ZAI_GLM_5_2_REASONING_EFFORTS : [];
803
890
  }
804
891
  function isZaiReasoningEffortModel(model) {
805
892
  return getZaiSupportedReasoningEfforts(model).length > 0;
806
893
  }
807
894
  function getDefaultZaiReasoningEffort(model) {
808
- return isZaiReasoningEffortModel(model) ? "none" : void 0;
895
+ if (isZaiAlwaysThinkingModel(model)) {
896
+ return "low";
897
+ }
898
+ return model === MODEL_GLM_5_2 ? "none" : void 0;
809
899
  }
810
900
  function normalizeZaiReasoningEffort(model, effort) {
811
901
  if (!isZaiReasoningEffortModel(model)) {
812
902
  return void 0;
813
903
  }
814
904
  const requested = effort ?? getDefaultZaiReasoningEffort(model);
905
+ if (isZaiAlwaysThinkingModel(model)) {
906
+ if (requested === "high") {
907
+ return "high";
908
+ }
909
+ if (requested === "max" || requested === "xhigh") {
910
+ return "max";
911
+ }
912
+ return "low";
913
+ }
815
914
  if (requested === "none" || requested === "minimal") {
816
915
  return "none";
817
916
  }
@@ -821,6 +920,7 @@ var AITuberOnAirChat = (() => {
821
920
  return "max";
822
921
  }
823
922
  var ZAI_VISION_SUPPORTED_MODELS = [
923
+ MODEL_GLM_5_3_FLASH,
824
924
  MODEL_GLM_5V_TURBO,
825
925
  MODEL_GLM_4_6V,
826
926
  MODEL_GLM_4_6V_FLASHX,
@@ -830,7 +930,8 @@ var AITuberOnAirChat = (() => {
830
930
  return ZAI_VISION_SUPPORTED_MODELS.includes(model);
831
931
  }
832
932
  function isZaiToolStreamModel(model) {
833
- return model.toLowerCase().startsWith("glm-4.6");
933
+ const normalizedModel = model.toLowerCase();
934
+ return normalizedModel.startsWith("glm-5.3") || normalizedModel.startsWith("glm-4.6");
834
935
  }
835
936
 
836
937
  // src/constants/xai.ts
@@ -936,6 +1037,7 @@ var AITuberOnAirChat = (() => {
936
1037
  var ENDPOINT_DEEPSEEK_CHAT_COMPLETIONS_API = `${DEEPSEEK_API_BASE_URL}/chat/completions`;
937
1038
  var MODEL_DEEPSEEK_V4_FLASH = "deepseek-v4-flash";
938
1039
  var MODEL_DEEPSEEK_V4_PRO = "deepseek-v4-pro";
1040
+ var MODEL_DEEPSEEK_V4_FLASH_VISION_EXP = "deepseek-v4-flash-vision-exp";
939
1041
  var DEEPSEEK_V4_FLASH_REASONING_EFFORTS = [
940
1042
  "none",
941
1043
  "low",
@@ -951,7 +1053,11 @@ var AITuberOnAirChat = (() => {
951
1053
  var MODEL_DEEPSEEK_REASONER = "deepseek-reasoner";
952
1054
  var DEEPSEEK_SUPPORTED_MODELS = [
953
1055
  MODEL_DEEPSEEK_V4_FLASH,
954
- MODEL_DEEPSEEK_V4_PRO
1056
+ MODEL_DEEPSEEK_V4_PRO,
1057
+ MODEL_DEEPSEEK_V4_FLASH_VISION_EXP
1058
+ ];
1059
+ var DEEPSEEK_VISION_SUPPORTED_MODELS = [
1060
+ MODEL_DEEPSEEK_V4_FLASH_VISION_EXP
955
1061
  ];
956
1062
  var DEEPSEEK_DEPRECATED_MODELS = [
957
1063
  MODEL_DEEPSEEK_CHAT,
@@ -961,11 +1067,17 @@ var AITuberOnAirChat = (() => {
961
1067
  if (model === MODEL_DEEPSEEK_V4_FLASH) {
962
1068
  return DEEPSEEK_V4_FLASH_REASONING_EFFORTS;
963
1069
  }
1070
+ if (model === MODEL_DEEPSEEK_V4_FLASH_VISION_EXP) {
1071
+ return DEEPSEEK_V4_FLASH_REASONING_EFFORTS;
1072
+ }
964
1073
  if (model === MODEL_DEEPSEEK_V4_PRO) {
965
1074
  return DEEPSEEK_V4_PRO_REASONING_EFFORTS;
966
1075
  }
967
1076
  return [];
968
1077
  }
1078
+ function isDeepSeekVisionModel(model) {
1079
+ return DEEPSEEK_VISION_SUPPORTED_MODELS.includes(model);
1080
+ }
969
1081
  function isDeepSeekReasoningEffortModel(model) {
970
1082
  return getDeepSeekSupportedReasoningEfforts(model).length > 0;
971
1083
  }
@@ -1040,8 +1152,17 @@ var AITuberOnAirChat = (() => {
1040
1152
  var MODEL_FUGU = "fugu";
1041
1153
  var MODEL_FUGU_ULTRA = "fugu-ultra";
1042
1154
  var MODEL_FUGU_ULTRA_V1_1 = "fugu-ultra-v1.1";
1155
+ var MODEL_SAKANA_NAMAZU = "sakana-namazu";
1043
1156
  var MODEL_FUGU_ULTRA_20260615 = "fugu-ultra-20260615";
1044
- var SAKANA_SUPPORTED_MODELS = [MODEL_FUGU, MODEL_FUGU_ULTRA_V1_1];
1157
+ var SAKANA_SUPPORTED_MODELS = [
1158
+ MODEL_FUGU,
1159
+ MODEL_FUGU_ULTRA_V1_1,
1160
+ MODEL_SAKANA_NAMAZU
1161
+ ];
1162
+ var SAKANA_VISION_SUPPORTED_MODELS = [MODEL_SAKANA_NAMAZU];
1163
+ function isSakanaVisionModel(model) {
1164
+ return SAKANA_VISION_SUPPORTED_MODELS.includes(model);
1165
+ }
1045
1166
  var SAKANA_COMPATIBILITY_MODELS = [
1046
1167
  MODEL_FUGU_ULTRA,
1047
1168
  MODEL_FUGU_ULTRA_20260615
@@ -2728,6 +2849,7 @@ If it's in another language, summarize in that language.
2728
2849
  reasoning_effort,
2729
2850
  enableReasoningSummary,
2730
2851
  responseFormat,
2852
+ chatTemplateThinking,
2731
2853
  maxTokens
2732
2854
  }) {
2733
2855
  const isResponsesAPI = endpoint === ENDPOINT_OPENAI_RESPONSES_API;
@@ -2812,6 +2934,9 @@ If it's in another language, summarize in that language.
2812
2934
  body.reasoning_effort = reasoning_effort;
2813
2935
  }
2814
2936
  }
2937
+ if (provider === "sakana" && chatTemplateThinking !== void 0) {
2938
+ body.chat_template_kwargs = { thinking: chatTemplateThinking };
2939
+ }
2815
2940
  const toolDefinitions = buildOpenAIToolsDefinition({
2816
2941
  tools,
2817
2942
  mcpServers,
@@ -2939,7 +3064,7 @@ If it's in another language, summarize in that language.
2939
3064
  * @param model Name of the model to use
2940
3065
  * @param visionModel Name of the vision model
2941
3066
  */
2942
- constructor(apiKey, model = MODEL_GPT_4O_MINI, visionModel = MODEL_GPT_4O_MINI, tools, endpoint = ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, mcpServers = [], responseLength, verbosity, reasoning_effort, enableReasoningSummary = false, provider = "openai", validateVisionModel = true, responseFormat) {
3067
+ constructor(apiKey, model = MODEL_GPT_4O_MINI, visionModel = MODEL_GPT_4O_MINI, tools, endpoint = ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, mcpServers = [], responseLength, verbosity, reasoning_effort, enableReasoningSummary = false, provider = "openai", validateVisionModel = true, responseFormat, chatTemplateThinking) {
2943
3068
  this.provider = provider;
2944
3069
  this.apiKey = apiKey;
2945
3070
  this.model = model;
@@ -2951,6 +3076,7 @@ If it's in another language, summarize in that language.
2951
3076
  this.reasoning_effort = reasoning_effort;
2952
3077
  this.enableReasoningSummary = enableReasoningSummary;
2953
3078
  this.responseFormat = responseFormat;
3079
+ this.chatTemplateThinking = chatTemplateThinking;
2954
3080
  if (validateVisionModel && !VISION_SUPPORTED_MODELS.includes(visionModel)) {
2955
3081
  throw new Error(
2956
3082
  `Model ${visionModel} does not support vision capabilities.`
@@ -3098,6 +3224,7 @@ If it's in another language, summarize in that language.
3098
3224
  reasoning_effort: this.reasoning_effort,
3099
3225
  enableReasoningSummary: this.enableReasoningSummary,
3100
3226
  responseFormat: this.responseFormat,
3227
+ chatTemplateThinking: this.chatTemplateThinking,
3101
3228
  maxTokens
3102
3229
  });
3103
3230
  const headers = {};
@@ -3155,11 +3282,19 @@ If it's in another language, summarize in that language.
3155
3282
  createChatService(options) {
3156
3283
  this.validateRequiredOptions(options);
3157
3284
  const model = options.model || this.getDefaultModel();
3285
+ const visionModel = resolveVisionModel({
3286
+ model,
3287
+ visionModel: options.visionModel,
3288
+ defaultModel: this.getDefaultModel(),
3289
+ defaultVisionModel: MODEL_DEEPSEEK_V4_FLASH_VISION_EXP,
3290
+ supportsVisionForModel: (visionModel2) => this.supportsVisionForModel(visionModel2),
3291
+ validate: "explicit"
3292
+ });
3158
3293
  const tools = options.tools;
3159
3294
  return new DeepSeekChatService(
3160
3295
  options.apiKey,
3161
3296
  model,
3162
- options.visionModel ?? model,
3297
+ visionModel,
3163
3298
  tools,
3164
3299
  this.resolveEndpoint(options),
3165
3300
  options.responseLength,
@@ -3176,16 +3311,16 @@ If it's in another language, summarize in that language.
3176
3311
  return MODEL_DEEPSEEK_V4_FLASH;
3177
3312
  }
3178
3313
  supportsVision() {
3179
- return false;
3314
+ return true;
3180
3315
  }
3181
3316
  getVisionSupportLevel() {
3182
- return "unsupported";
3317
+ return "supported";
3183
3318
  }
3184
- supportsVisionForModel(_model) {
3185
- return false;
3319
+ supportsVisionForModel(model) {
3320
+ return isDeepSeekVisionModel(model);
3186
3321
  }
3187
- getVisionSupportLevelForModel(_model) {
3188
- return "unsupported";
3322
+ getVisionSupportLevelForModel(model) {
3323
+ return this.supportsVisionForModel(model) ? "supported" : "unsupported";
3189
3324
  }
3190
3325
  validateRequiredOptions(options) {
3191
3326
  if (!options.apiKey?.trim()) {
@@ -4954,7 +5089,12 @@ If it's in another language, summarize in that language.
4954
5089
 
4955
5090
  // src/services/providers/openrouter/OpenRouterChatService.ts
4956
5091
  var isOpenRouterAutoModel = (model) => [MODEL_OPENROUTER_AUTO, MODEL_OPENROUTER_AUTO_BETA].includes(model.trim());
4957
- var isTokenLimitUnsupportedModel = (model) => [MODEL_GPT_OSS_20B_FREE, MODEL_ZAI_GLM_5_2].includes(model.trim());
5092
+ var isTokenLimitUnsupportedModel = (model) => [
5093
+ MODEL_GPT_OSS_20B_FREE,
5094
+ MODEL_ZAI_GLM_5_3,
5095
+ MODEL_ZAI_GLM_5_3_FLASH,
5096
+ MODEL_ZAI_GLM_5_2
5097
+ ].includes(model.trim());
4958
5098
  var ensureAutoRouterOutput = (model, hasVisibleOutput) => {
4959
5099
  if (isOpenRouterAutoModel(model) && !hasVisibleOutput) {
4960
5100
  throw new Error(
@@ -5300,7 +5440,9 @@ If it's in another language, summarize in that language.
5300
5440
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
5301
5441
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
5302
5442
  MODEL_ANTHROPIC_CLAUDE_FABLE_5,
5443
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5,
5303
5444
  MODEL_ANTHROPIC_CLAUDE_OPUS_5,
5445
+ MODEL_ANTHROPIC_CLAUDE_OPUS_4_8,
5304
5446
  MODEL_ANTHROPIC_CLAUDE_OPUS_4,
5305
5447
  MODEL_ANTHROPIC_CLAUDE_SONNET_4,
5306
5448
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
@@ -5314,6 +5456,8 @@ If it's in another language, summarize in that language.
5314
5456
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
5315
5457
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
5316
5458
  // Z.ai models
5459
+ MODEL_ZAI_GLM_5_3,
5460
+ MODEL_ZAI_GLM_5_3_FLASH,
5317
5461
  MODEL_ZAI_GLM_5_2,
5318
5462
  MODEL_ZAI_GLM_4_7_FLASH,
5319
5463
  MODEL_ZAI_GLM_4_5_AIR,
@@ -5325,10 +5469,13 @@ If it's in another language, summarize in that language.
5325
5469
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731,
5326
5470
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH,
5327
5471
  MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813,
5472
+ MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
5328
5473
  // Other models
5474
+ MODEL_QWEN_QWEN_3_8_FLASH,
5329
5475
  MODEL_MOONSHOTAI_KIMI_LATEST,
5330
5476
  MODEL_MOONSHOTAI_KIMI_K3,
5331
5477
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
5478
+ MODEL_MOONSHOTAI_KIMI_K2_6,
5332
5479
  MODEL_MOONSHOTAI_KIMI_K2_5,
5333
5480
  MODEL_KWAIPILOT_KAT_CODER_AIR_V2_5,
5334
5481
  MODEL_KWAIPILOT_KAT_CODER_PRO_V2_5
@@ -5463,7 +5610,7 @@ If it's in another language, summarize in that language.
5463
5610
 
5464
5611
  // src/services/providers/sakana/SakanaChatService.ts
5465
5612
  var SakanaChatService = class extends OpenAIChatService {
5466
- constructor(apiKey, model = MODEL_FUGU, visionModel = model, tools, endpoint = ENDPOINT_SAKANA_CHAT_COMPLETIONS_API, responseLength) {
5613
+ constructor(apiKey, model = MODEL_FUGU, visionModel = model, tools, endpoint = ENDPOINT_SAKANA_CHAT_COMPLETIONS_API, responseLength, thinking) {
5467
5614
  super(
5468
5615
  apiKey,
5469
5616
  model,
@@ -5476,7 +5623,9 @@ If it's in another language, summarize in that language.
5476
5623
  void 0,
5477
5624
  false,
5478
5625
  "sakana",
5479
- false
5626
+ false,
5627
+ void 0,
5628
+ thinking?.type === "enabled"
5480
5629
  );
5481
5630
  }
5482
5631
  };
@@ -5486,14 +5635,29 @@ If it's in another language, summarize in that language.
5486
5635
  createChatService(options) {
5487
5636
  this.validateRequiredOptions(options);
5488
5637
  const model = options.model || this.getDefaultModel();
5638
+ const visionModel = resolveVisionModel({
5639
+ model,
5640
+ visionModel: options.visionModel,
5641
+ defaultModel: this.getDefaultModel(),
5642
+ defaultVisionModel: MODEL_SAKANA_NAMAZU,
5643
+ supportsVisionForModel: (visionModel2) => this.supportsVisionForModel(visionModel2),
5644
+ validate: "explicit"
5645
+ });
5489
5646
  const tools = options.tools;
5647
+ if (options.thinking !== void 0 && model !== MODEL_SAKANA_NAMAZU) {
5648
+ throw new Error(
5649
+ "Sakana thinking control is only supported for sakana-namazu."
5650
+ );
5651
+ }
5652
+ const thinking = model === MODEL_SAKANA_NAMAZU ? options.thinking ?? { type: "disabled" } : void 0;
5490
5653
  return new SakanaChatService(
5491
5654
  options.apiKey,
5492
5655
  model,
5493
- options.visionModel ?? model,
5656
+ visionModel,
5494
5657
  tools,
5495
5658
  this.resolveEndpoint(options),
5496
- options.responseLength
5659
+ options.responseLength,
5660
+ thinking
5497
5661
  );
5498
5662
  }
5499
5663
  getProviderName() {
@@ -5506,16 +5670,16 @@ If it's in another language, summarize in that language.
5506
5670
  return MODEL_FUGU;
5507
5671
  }
5508
5672
  supportsVision() {
5509
- return false;
5673
+ return true;
5510
5674
  }
5511
5675
  getVisionSupportLevel() {
5512
- return "unsupported";
5676
+ return "supported";
5513
5677
  }
5514
- supportsVisionForModel(_model) {
5515
- return false;
5678
+ supportsVisionForModel(model) {
5679
+ return isSakanaVisionModel(model);
5516
5680
  }
5517
- getVisionSupportLevelForModel(_model) {
5518
- return "unsupported";
5681
+ getVisionSupportLevelForModel(model) {
5682
+ return this.supportsVisionForModel(model) ? "supported" : "unsupported";
5519
5683
  }
5520
5684
  validateRequiredOptions(options) {
5521
5685
  if (!options.apiKey?.trim()) {
@@ -5894,7 +6058,7 @@ If it's in another language, summarize in that language.
5894
6058
  if (this.thinking) {
5895
6059
  body.thinking = this.thinking;
5896
6060
  }
5897
- if (model === MODEL_GLM_5_2 && this.reasoningEffort) {
6061
+ if (isZaiReasoningEffortModel(model) && this.reasoningEffort) {
5898
6062
  body.reasoning_effort = this.reasoningEffort;
5899
6063
  }
5900
6064
  const tools = this.buildToolsDefinition();
@@ -5958,15 +6122,19 @@ If it's in another language, summarize in that language.
5958
6122
  model,
5959
6123
  options.reasoning_effort
5960
6124
  );
6125
+ const alwaysThinking = isZaiAlwaysThinkingModel(model);
5961
6126
  const usesExplicitThinking = options.thinking !== void 0;
5962
- const thinking = usesExplicitThinking && options.reasoning_effort === void 0 ? options.thinking : normalizedReasoningEffort === "high" || normalizedReasoningEffort === "max" ? {
6127
+ const thinking = alwaysThinking ? {
6128
+ type: "enabled",
6129
+ clear_thinking: options.thinking?.clear_thinking ?? true
6130
+ } : usesExplicitThinking && options.reasoning_effort === void 0 ? options.thinking : normalizedReasoningEffort === "high" || normalizedReasoningEffort === "max" ? {
5963
6131
  type: "enabled",
5964
6132
  clear_thinking: options.thinking?.clear_thinking
5965
6133
  } : {
5966
6134
  type: "disabled",
5967
6135
  clear_thinking: options.thinking?.clear_thinking
5968
6136
  };
5969
- const reasoningEffort = thinking?.type === "enabled" && options.reasoning_effort !== void 0 ? normalizedReasoningEffort : void 0;
6137
+ const reasoningEffort = alwaysThinking ? normalizedReasoningEffort : thinking?.type === "enabled" && options.reasoning_effort !== void 0 ? normalizedReasoningEffort : void 0;
5970
6138
  return new ZAIChatService(
5971
6139
  options.apiKey,
5972
6140
  model,
@@ -5990,6 +6158,8 @@ If it's in another language, summarize in that language.
5990
6158
  */
5991
6159
  getSupportedModels() {
5992
6160
  return [
6161
+ MODEL_GLM_5_3,
6162
+ MODEL_GLM_5_3_FLASH,
5993
6163
  MODEL_GLM_5_2,
5994
6164
  MODEL_GLM_5_1,
5995
6165
  MODEL_GLM_5,