@aituber-onair/chat 0.52.0 → 0.53.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 (105) hide show
  1. package/README.ja.md +27 -20
  2. package/README.md +27 -20
  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/openrouter.d.ts +7 -0
  8. package/dist/cjs/constants/openrouter.d.ts.map +1 -1
  9. package/dist/cjs/constants/openrouter.js +71 -2
  10. package/dist/cjs/constants/openrouter.js.map +1 -1
  11. package/dist/cjs/constants/sakana.d.ts +3 -0
  12. package/dist/cjs/constants/sakana.d.ts.map +1 -1
  13. package/dist/cjs/constants/sakana.js +12 -2
  14. package/dist/cjs/constants/sakana.js.map +1 -1
  15. package/dist/cjs/constants/zai.d.ts +3 -0
  16. package/dist/cjs/constants/zai.d.ts.map +1 -1
  17. package/dist/cjs/constants/zai.js +32 -3
  18. package/dist/cjs/constants/zai.js.map +1 -1
  19. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +3 -3
  20. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  21. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts +2 -2
  22. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts.map +1 -1
  23. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.js +16 -7
  24. package/dist/cjs/services/providers/deepseek/DeepSeekChatServiceProvider.js.map +1 -1
  25. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +2 -1
  26. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  27. package/dist/cjs/services/providers/openai/OpenAIChatService.js +3 -1
  28. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  29. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts +2 -1
  30. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  31. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +4 -1
  32. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  33. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  34. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +6 -1
  35. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  36. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  37. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +7 -0
  38. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  39. package/dist/cjs/services/providers/sakana/SakanaChatService.d.ts +3 -1
  40. package/dist/cjs/services/providers/sakana/SakanaChatService.d.ts.map +1 -1
  41. package/dist/cjs/services/providers/sakana/SakanaChatService.js +2 -2
  42. package/dist/cjs/services/providers/sakana/SakanaChatService.js.map +1 -1
  43. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.d.ts +2 -2
  44. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.d.ts.map +1 -1
  45. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.js +22 -7
  46. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.js.map +1 -1
  47. package/dist/cjs/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  48. package/dist/cjs/services/providers/zai/ZAIChatService.js +1 -1
  49. package/dist/cjs/services/providers/zai/ZAIChatService.js.map +1 -1
  50. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  51. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js +24 -14
  52. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  53. package/dist/esm/constants/deepseek.d.ts +3 -0
  54. package/dist/esm/constants/deepseek.d.ts.map +1 -1
  55. package/dist/esm/constants/deepseek.js +11 -0
  56. package/dist/esm/constants/deepseek.js.map +1 -1
  57. package/dist/esm/constants/openrouter.d.ts +7 -0
  58. package/dist/esm/constants/openrouter.d.ts.map +1 -1
  59. package/dist/esm/constants/openrouter.js +69 -0
  60. package/dist/esm/constants/openrouter.js.map +1 -1
  61. package/dist/esm/constants/sakana.d.ts +3 -0
  62. package/dist/esm/constants/sakana.d.ts.map +1 -1
  63. package/dist/esm/constants/sakana.js +10 -1
  64. package/dist/esm/constants/sakana.js.map +1 -1
  65. package/dist/esm/constants/zai.d.ts +3 -0
  66. package/dist/esm/constants/zai.d.ts.map +1 -1
  67. package/dist/esm/constants/zai.js +30 -2
  68. package/dist/esm/constants/zai.js.map +1 -1
  69. package/dist/esm/services/providers/ChatServiceProvider.d.ts +3 -3
  70. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  71. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts +2 -2
  72. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.d.ts.map +1 -1
  73. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.js +17 -8
  74. package/dist/esm/services/providers/deepseek/DeepSeekChatServiceProvider.js.map +1 -1
  75. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +2 -1
  76. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  77. package/dist/esm/services/providers/openai/OpenAIChatService.js +3 -1
  78. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  79. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts +2 -1
  80. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  81. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +4 -1
  82. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  83. package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  84. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +7 -2
  85. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  86. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  87. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +8 -1
  88. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  89. package/dist/esm/services/providers/sakana/SakanaChatService.d.ts +3 -1
  90. package/dist/esm/services/providers/sakana/SakanaChatService.d.ts.map +1 -1
  91. package/dist/esm/services/providers/sakana/SakanaChatService.js +2 -2
  92. package/dist/esm/services/providers/sakana/SakanaChatService.js.map +1 -1
  93. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.d.ts +2 -2
  94. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.d.ts.map +1 -1
  95. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.js +23 -8
  96. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.js.map +1 -1
  97. package/dist/esm/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  98. package/dist/esm/services/providers/zai/ZAIChatService.js +2 -2
  99. package/dist/esm/services/providers/zai/ZAIChatService.js.map +1 -1
  100. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  101. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js +25 -15
  102. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  103. package/dist/umd/aituber-onair-chat.js +200 -27
  104. package/dist/umd/aituber-onair-chat.min.js +9 -9
  105. 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,
@@ -132,6 +136,8 @@ var AITuberOnAirChat = (() => {
132
136
  MODEL_GLM_5V_TURBO: () => MODEL_GLM_5V_TURBO,
133
137
  MODEL_GLM_5_1: () => MODEL_GLM_5_1,
134
138
  MODEL_GLM_5_2: () => MODEL_GLM_5_2,
139
+ MODEL_GLM_5_3: () => MODEL_GLM_5_3,
140
+ MODEL_GLM_5_3_FLASH: () => MODEL_GLM_5_3_FLASH,
135
141
  MODEL_GLM_5_TURBO: () => MODEL_GLM_5_TURBO,
136
142
  MODEL_GOOGLE_GEMINI_2_5_FLASH: () => MODEL_GOOGLE_GEMINI_2_5_FLASH,
137
143
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025: () => MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
@@ -184,6 +190,7 @@ var AITuberOnAirChat = (() => {
184
190
  MODEL_MISTRAL_SMALL_2603: () => MODEL_MISTRAL_SMALL_2603,
185
191
  MODEL_MISTRAL_SMALL_LATEST: () => MODEL_MISTRAL_SMALL_LATEST,
186
192
  MODEL_MOONSHOTAI_KIMI_K2_5: () => MODEL_MOONSHOTAI_KIMI_K2_5,
193
+ MODEL_MOONSHOTAI_KIMI_K2_6: () => MODEL_MOONSHOTAI_KIMI_K2_6,
187
194
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE: () => MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
188
195
  MODEL_MOONSHOTAI_KIMI_K3: () => MODEL_MOONSHOTAI_KIMI_K3,
189
196
  MODEL_MOONSHOTAI_KIMI_LATEST: () => MODEL_MOONSHOTAI_KIMI_LATEST,
@@ -208,10 +215,13 @@ var AITuberOnAirChat = (() => {
208
215
  MODEL_OPENROUTER_AUTO_BETA: () => MODEL_OPENROUTER_AUTO_BETA,
209
216
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH,
210
217
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731,
218
+ MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP: () => MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
211
219
  MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813: () => MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813,
212
220
  MODEL_OPENROUTER_FUSION: () => MODEL_OPENROUTER_FUSION,
213
221
  MODEL_PLAMO_2_2_PRIME: () => MODEL_PLAMO_2_2_PRIME,
214
222
  MODEL_PLAMO_3_0_PRIME: () => MODEL_PLAMO_3_0_PRIME,
223
+ MODEL_QWEN_QWEN_3_8_FLASH: () => MODEL_QWEN_QWEN_3_8_FLASH,
224
+ MODEL_SAKANA_NAMAZU: () => MODEL_SAKANA_NAMAZU,
215
225
  MODEL_XAI_GROK_4_5: () => MODEL_XAI_GROK_4_5,
216
226
  MODEL_XAI_GROK_4_6: () => MODEL_XAI_GROK_4_6,
217
227
  MODEL_XAI_GROK_LATEST: () => MODEL_XAI_GROK_LATEST,
@@ -219,6 +229,8 @@ var AITuberOnAirChat = (() => {
219
229
  MODEL_ZAI_GLM_4_5_AIR_FREE: () => MODEL_ZAI_GLM_4_5_AIR_FREE,
220
230
  MODEL_ZAI_GLM_4_7_FLASH: () => MODEL_ZAI_GLM_4_7_FLASH,
221
231
  MODEL_ZAI_GLM_5_2: () => MODEL_ZAI_GLM_5_2,
232
+ MODEL_ZAI_GLM_5_3: () => MODEL_ZAI_GLM_5_3,
233
+ MODEL_ZAI_GLM_5_3_FLASH: () => MODEL_ZAI_GLM_5_3_FLASH,
222
234
  MistralChatService: () => MistralChatService,
223
235
  MistralChatServiceProvider: () => MistralChatServiceProvider,
224
236
  OPENROUTER_CREDITS_THRESHOLD: () => OPENROUTER_CREDITS_THRESHOLD,
@@ -241,6 +253,7 @@ var AITuberOnAirChat = (() => {
241
253
  SAKANA_API_BASE_URL: () => SAKANA_API_BASE_URL,
242
254
  SAKANA_COMPATIBILITY_MODELS: () => SAKANA_COMPATIBILITY_MODELS,
243
255
  SAKANA_SUPPORTED_MODELS: () => SAKANA_SUPPORTED_MODELS,
256
+ SAKANA_VISION_SUPPORTED_MODELS: () => SAKANA_VISION_SUPPORTED_MODELS,
244
257
  SakanaChatService: () => SakanaChatService,
245
258
  SakanaChatServiceProvider: () => SakanaChatServiceProvider,
246
259
  StreamTextAccumulator: () => StreamTextAccumulator,
@@ -279,6 +292,7 @@ var AITuberOnAirChat = (() => {
279
292
  installGASFetch: () => installGASFetch,
280
293
  isClaudeReasoningEffortModel: () => isClaudeReasoningEffortModel,
281
294
  isDeepSeekReasoningEffortModel: () => isDeepSeekReasoningEffortModel,
295
+ isDeepSeekVisionModel: () => isDeepSeekVisionModel,
282
296
  isGPT5Model: () => isGPT5Model,
283
297
  isGeminiReasoningEffortModel: () => isGeminiReasoningEffortModel,
284
298
  isKimiReasoningEffortModel: () => isKimiReasoningEffortModel,
@@ -290,9 +304,11 @@ var AITuberOnAirChat = (() => {
290
304
  isOpenRouterFreeModel: () => isOpenRouterFreeModel,
291
305
  isOpenRouterVisionModel: () => isOpenRouterVisionModel,
292
306
  isResponsesOnlyGPT5Model: () => isResponsesOnlyGPT5Model,
307
+ isSakanaVisionModel: () => isSakanaVisionModel,
293
308
  isXaiReasoningEffortModel: () => isXaiReasoningEffortModel,
294
309
  isXaiReasoningEffortNoneModel: () => isXaiReasoningEffortNoneModel,
295
310
  isXaiVisionModel: () => isXaiVisionModel,
311
+ isZaiAlwaysThinkingModel: () => isZaiAlwaysThinkingModel,
296
312
  isZaiReasoningEffortModel: () => isZaiReasoningEffortModel,
297
313
  isZaiToolStreamModel: () => isZaiToolStreamModel,
298
314
  isZaiVisionModel: () => isZaiVisionModel,
@@ -598,6 +614,7 @@ var AITuberOnAirChat = (() => {
598
614
  var MODEL_GPT_OSS_20B_FREE = "openai/gpt-oss-20b:free";
599
615
  var MODEL_MOONSHOTAI_KIMI_K3 = "moonshotai/kimi-k3";
600
616
  var MODEL_MOONSHOTAI_KIMI_K2_7_CODE = "moonshotai/kimi-k2.7-code";
617
+ var MODEL_MOONSHOTAI_KIMI_K2_6 = "moonshotai/kimi-k2.6";
601
618
  var MODEL_MOONSHOTAI_KIMI_K2_5 = "moonshotai/kimi-k2.5";
602
619
  var MODEL_MOONSHOTAI_KIMI_LATEST = "~moonshotai/kimi-latest";
603
620
  var MODEL_OPENAI_GPT_LATEST = "~openai/gpt-latest";
@@ -617,7 +634,9 @@ var AITuberOnAirChat = (() => {
617
634
  var MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST = "~anthropic/claude-sonnet-latest";
618
635
  var MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST = "~anthropic/claude-haiku-latest";
619
636
  var MODEL_ANTHROPIC_CLAUDE_FABLE_5 = "anthropic/claude-fable-5";
637
+ var MODEL_ANTHROPIC_CLAUDE_SONNET_5 = "anthropic/claude-sonnet-5";
620
638
  var MODEL_ANTHROPIC_CLAUDE_OPUS_5 = "anthropic/claude-opus-5";
639
+ var MODEL_ANTHROPIC_CLAUDE_OPUS_4_8 = "anthropic/claude-opus-4.8";
621
640
  var MODEL_ANTHROPIC_CLAUDE_OPUS_4 = "anthropic/claude-opus-4";
622
641
  var MODEL_ANTHROPIC_CLAUDE_SONNET_4 = "anthropic/claude-sonnet-4";
623
642
  var MODEL_ANTHROPIC_CLAUDE_3_7_SONNET = "anthropic/claude-3.7-sonnet";
@@ -632,6 +651,8 @@ var AITuberOnAirChat = (() => {
632
651
  var MODEL_GOOGLE_GEMINI_2_5_FLASH = "google/gemini-2.5-flash";
633
652
  var MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025 = "google/gemini-2.5-flash-lite-preview-09-2025";
634
653
  var MODEL_ZAI_GLM_5_2 = "z-ai/glm-5.2";
654
+ var MODEL_ZAI_GLM_5_3 = "z-ai/glm-5.3";
655
+ var MODEL_ZAI_GLM_5_3_FLASH = "z-ai/glm-5.3-flash";
635
656
  var MODEL_ZAI_GLM_4_7_FLASH = "z-ai/glm-4.7-flash";
636
657
  var MODEL_ZAI_GLM_4_5_AIR = "z-ai/glm-4.5-air";
637
658
  var MODEL_ZAI_GLM_4_5_AIR_FREE = "z-ai/glm-4.5-air:free";
@@ -643,6 +664,8 @@ var AITuberOnAirChat = (() => {
643
664
  var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH = "deepseek/deepseek-v4-flash";
644
665
  var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731 = "deepseek/deepseek-v4-flash-0731";
645
666
  var MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813 = "deepseek/deepseek-v4-pro-0813";
667
+ var MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP = "deepseek/deepseek-v4-flash-vision-exp";
668
+ var MODEL_QWEN_QWEN_3_8_FLASH = "qwen/qwen3.8-flash";
646
669
  var OPENROUTER_DEPRECATED_MODELS = [
647
670
  MODEL_OPENAI_GPT_5_1_CHAT,
648
671
  MODEL_ANTHROPIC_CLAUDE_3_7_SONNET,
@@ -672,10 +695,30 @@ var AITuberOnAirChat = (() => {
672
695
  "high",
673
696
  "xhigh"
674
697
  ];
698
+ var OPENROUTER_ALWAYS_THINKING_REASONING_EFFORTS = [
699
+ "low",
700
+ "high",
701
+ "max"
702
+ ];
703
+ var OPENROUTER_OPTIONAL_LOW_REASONING_EFFORTS = [
704
+ "none",
705
+ "low",
706
+ "high",
707
+ "max"
708
+ ];
709
+ var OPENROUTER_CLAUDE_REASONING_EFFORTS = [
710
+ "none",
711
+ "low",
712
+ "medium",
713
+ "high",
714
+ "xhigh",
715
+ "max"
716
+ ];
675
717
  var OPENROUTER_FREE_MODELS = [MODEL_GPT_OSS_20B_FREE];
676
718
  var OPENROUTER_VISION_SUPPORTED_MODELS = [
677
719
  MODEL_OPENROUTER_AUTO_BETA,
678
720
  MODEL_MOONSHOTAI_KIMI_K3,
721
+ MODEL_MOONSHOTAI_KIMI_K2_6,
679
722
  MODEL_MOONSHOTAI_KIMI_LATEST,
680
723
  MODEL_OPENAI_GPT_LATEST,
681
724
  MODEL_OPENAI_GPT_MINI_LATEST,
@@ -693,7 +736,9 @@ var AITuberOnAirChat = (() => {
693
736
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
694
737
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
695
738
  MODEL_ANTHROPIC_CLAUDE_FABLE_5,
739
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5,
696
740
  MODEL_ANTHROPIC_CLAUDE_OPUS_5,
741
+ MODEL_ANTHROPIC_CLAUDE_OPUS_4_8,
697
742
  MODEL_ANTHROPIC_CLAUDE_OPUS_4,
698
743
  MODEL_ANTHROPIC_CLAUDE_SONNET_4,
699
744
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
@@ -705,6 +750,9 @@ var AITuberOnAirChat = (() => {
705
750
  MODEL_GOOGLE_GEMINI_2_5_PRO,
706
751
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
707
752
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
753
+ MODEL_ZAI_GLM_5_3_FLASH,
754
+ MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
755
+ MODEL_QWEN_QWEN_3_8_FLASH,
708
756
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
709
757
  MODEL_MOONSHOTAI_KIMI_K2_5,
710
758
  MODEL_XAI_GROK_LATEST,
@@ -725,6 +773,15 @@ var AITuberOnAirChat = (() => {
725
773
  }
726
774
  function getOpenRouterSupportedReasoningEfforts(model) {
727
775
  const normalizedModel = model.trim();
776
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
777
+ return OPENROUTER_ALWAYS_THINKING_REASONING_EFFORTS;
778
+ }
779
+ if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP) {
780
+ return OPENROUTER_OPTIONAL_LOW_REASONING_EFFORTS;
781
+ }
782
+ if (normalizedModel === MODEL_ANTHROPIC_CLAUDE_SONNET_5 || normalizedModel === MODEL_ANTHROPIC_CLAUDE_OPUS_4_8) {
783
+ return OPENROUTER_CLAUDE_REASONING_EFFORTS;
784
+ }
728
785
  if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH) {
729
786
  return OPENROUTER_DEEPSEEK_V4_FLASH_REASONING_EFFORTS;
730
787
  }
@@ -738,7 +795,10 @@ var AITuberOnAirChat = (() => {
738
795
  }
739
796
  function getDefaultOpenRouterReasoningEffort(model) {
740
797
  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;
798
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
799
+ return "low";
800
+ }
801
+ 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
802
  }
743
803
  function normalizeOpenRouterReasoningEffort(model, effort) {
744
804
  const normalizedModel = model.trim();
@@ -746,6 +806,15 @@ var AITuberOnAirChat = (() => {
746
806
  if (!requested) {
747
807
  return void 0;
748
808
  }
809
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
810
+ if (requested === "high") {
811
+ return "high";
812
+ }
813
+ if (requested === "max" || requested === "xhigh") {
814
+ return "max";
815
+ }
816
+ return "low";
817
+ }
749
818
  const supported = getOpenRouterSupportedReasoningEfforts(model);
750
819
  if (supported.includes(requested)) {
751
820
  return requested;
@@ -772,11 +841,21 @@ var AITuberOnAirChat = (() => {
772
841
  return "xhigh";
773
842
  }
774
843
  }
844
+ if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP) {
845
+ if (requested === "minimal" || requested === "medium") {
846
+ return "low";
847
+ }
848
+ if (requested === "xhigh") {
849
+ return "high";
850
+ }
851
+ }
775
852
  return requested;
776
853
  }
777
854
 
778
855
  // src/constants/zai.ts
779
856
  var ENDPOINT_ZAI_CHAT_COMPLETIONS_API = "https://api.z.ai/api/paas/v4/chat/completions";
857
+ var MODEL_GLM_5_3 = "glm-5.3";
858
+ var MODEL_GLM_5_3_FLASH = "glm-5.3-flash";
780
859
  var MODEL_GLM_5_2 = "glm-5.2";
781
860
  var MODEL_GLM_5_1 = "glm-5.1";
782
861
  var MODEL_GLM_5 = "glm-5";
@@ -798,20 +877,43 @@ var AITuberOnAirChat = (() => {
798
877
  "xhigh",
799
878
  "max"
800
879
  ];
880
+ var ZAI_GLM_5_3_REASONING_EFFORTS = [
881
+ "low",
882
+ "high",
883
+ "max"
884
+ ];
885
+ function isZaiAlwaysThinkingModel(model) {
886
+ return model === MODEL_GLM_5_3 || model === MODEL_GLM_5_3_FLASH;
887
+ }
801
888
  function getZaiSupportedReasoningEfforts(model) {
889
+ if (isZaiAlwaysThinkingModel(model)) {
890
+ return ZAI_GLM_5_3_REASONING_EFFORTS;
891
+ }
802
892
  return model === MODEL_GLM_5_2 ? ZAI_GLM_5_2_REASONING_EFFORTS : [];
803
893
  }
804
894
  function isZaiReasoningEffortModel(model) {
805
895
  return getZaiSupportedReasoningEfforts(model).length > 0;
806
896
  }
807
897
  function getDefaultZaiReasoningEffort(model) {
808
- return isZaiReasoningEffortModel(model) ? "none" : void 0;
898
+ if (isZaiAlwaysThinkingModel(model)) {
899
+ return "low";
900
+ }
901
+ return model === MODEL_GLM_5_2 ? "none" : void 0;
809
902
  }
810
903
  function normalizeZaiReasoningEffort(model, effort) {
811
904
  if (!isZaiReasoningEffortModel(model)) {
812
905
  return void 0;
813
906
  }
814
907
  const requested = effort ?? getDefaultZaiReasoningEffort(model);
908
+ if (isZaiAlwaysThinkingModel(model)) {
909
+ if (requested === "high") {
910
+ return "high";
911
+ }
912
+ if (requested === "max" || requested === "xhigh") {
913
+ return "max";
914
+ }
915
+ return "low";
916
+ }
815
917
  if (requested === "none" || requested === "minimal") {
816
918
  return "none";
817
919
  }
@@ -821,6 +923,7 @@ var AITuberOnAirChat = (() => {
821
923
  return "max";
822
924
  }
823
925
  var ZAI_VISION_SUPPORTED_MODELS = [
926
+ MODEL_GLM_5_3_FLASH,
824
927
  MODEL_GLM_5V_TURBO,
825
928
  MODEL_GLM_4_6V,
826
929
  MODEL_GLM_4_6V_FLASHX,
@@ -830,7 +933,8 @@ var AITuberOnAirChat = (() => {
830
933
  return ZAI_VISION_SUPPORTED_MODELS.includes(model);
831
934
  }
832
935
  function isZaiToolStreamModel(model) {
833
- return model.toLowerCase().startsWith("glm-4.6");
936
+ const normalizedModel = model.toLowerCase();
937
+ return normalizedModel.startsWith("glm-5.3") || normalizedModel.startsWith("glm-4.6");
834
938
  }
835
939
 
836
940
  // src/constants/xai.ts
@@ -936,6 +1040,7 @@ var AITuberOnAirChat = (() => {
936
1040
  var ENDPOINT_DEEPSEEK_CHAT_COMPLETIONS_API = `${DEEPSEEK_API_BASE_URL}/chat/completions`;
937
1041
  var MODEL_DEEPSEEK_V4_FLASH = "deepseek-v4-flash";
938
1042
  var MODEL_DEEPSEEK_V4_PRO = "deepseek-v4-pro";
1043
+ var MODEL_DEEPSEEK_V4_FLASH_VISION_EXP = "deepseek-v4-flash-vision-exp";
939
1044
  var DEEPSEEK_V4_FLASH_REASONING_EFFORTS = [
940
1045
  "none",
941
1046
  "low",
@@ -951,7 +1056,11 @@ var AITuberOnAirChat = (() => {
951
1056
  var MODEL_DEEPSEEK_REASONER = "deepseek-reasoner";
952
1057
  var DEEPSEEK_SUPPORTED_MODELS = [
953
1058
  MODEL_DEEPSEEK_V4_FLASH,
954
- MODEL_DEEPSEEK_V4_PRO
1059
+ MODEL_DEEPSEEK_V4_PRO,
1060
+ MODEL_DEEPSEEK_V4_FLASH_VISION_EXP
1061
+ ];
1062
+ var DEEPSEEK_VISION_SUPPORTED_MODELS = [
1063
+ MODEL_DEEPSEEK_V4_FLASH_VISION_EXP
955
1064
  ];
956
1065
  var DEEPSEEK_DEPRECATED_MODELS = [
957
1066
  MODEL_DEEPSEEK_CHAT,
@@ -961,11 +1070,17 @@ var AITuberOnAirChat = (() => {
961
1070
  if (model === MODEL_DEEPSEEK_V4_FLASH) {
962
1071
  return DEEPSEEK_V4_FLASH_REASONING_EFFORTS;
963
1072
  }
1073
+ if (model === MODEL_DEEPSEEK_V4_FLASH_VISION_EXP) {
1074
+ return DEEPSEEK_V4_FLASH_REASONING_EFFORTS;
1075
+ }
964
1076
  if (model === MODEL_DEEPSEEK_V4_PRO) {
965
1077
  return DEEPSEEK_V4_PRO_REASONING_EFFORTS;
966
1078
  }
967
1079
  return [];
968
1080
  }
1081
+ function isDeepSeekVisionModel(model) {
1082
+ return DEEPSEEK_VISION_SUPPORTED_MODELS.includes(model);
1083
+ }
969
1084
  function isDeepSeekReasoningEffortModel(model) {
970
1085
  return getDeepSeekSupportedReasoningEfforts(model).length > 0;
971
1086
  }
@@ -1040,8 +1155,17 @@ var AITuberOnAirChat = (() => {
1040
1155
  var MODEL_FUGU = "fugu";
1041
1156
  var MODEL_FUGU_ULTRA = "fugu-ultra";
1042
1157
  var MODEL_FUGU_ULTRA_V1_1 = "fugu-ultra-v1.1";
1158
+ var MODEL_SAKANA_NAMAZU = "sakana-namazu";
1043
1159
  var MODEL_FUGU_ULTRA_20260615 = "fugu-ultra-20260615";
1044
- var SAKANA_SUPPORTED_MODELS = [MODEL_FUGU, MODEL_FUGU_ULTRA_V1_1];
1160
+ var SAKANA_SUPPORTED_MODELS = [
1161
+ MODEL_FUGU,
1162
+ MODEL_FUGU_ULTRA_V1_1,
1163
+ MODEL_SAKANA_NAMAZU
1164
+ ];
1165
+ var SAKANA_VISION_SUPPORTED_MODELS = [MODEL_SAKANA_NAMAZU];
1166
+ function isSakanaVisionModel(model) {
1167
+ return SAKANA_VISION_SUPPORTED_MODELS.includes(model);
1168
+ }
1045
1169
  var SAKANA_COMPATIBILITY_MODELS = [
1046
1170
  MODEL_FUGU_ULTRA,
1047
1171
  MODEL_FUGU_ULTRA_20260615
@@ -2728,6 +2852,7 @@ If it's in another language, summarize in that language.
2728
2852
  reasoning_effort,
2729
2853
  enableReasoningSummary,
2730
2854
  responseFormat,
2855
+ chatTemplateThinking,
2731
2856
  maxTokens
2732
2857
  }) {
2733
2858
  const isResponsesAPI = endpoint === ENDPOINT_OPENAI_RESPONSES_API;
@@ -2812,6 +2937,9 @@ If it's in another language, summarize in that language.
2812
2937
  body.reasoning_effort = reasoning_effort;
2813
2938
  }
2814
2939
  }
2940
+ if (provider === "sakana" && chatTemplateThinking !== void 0) {
2941
+ body.chat_template_kwargs = { thinking: chatTemplateThinking };
2942
+ }
2815
2943
  const toolDefinitions = buildOpenAIToolsDefinition({
2816
2944
  tools,
2817
2945
  mcpServers,
@@ -2939,7 +3067,7 @@ If it's in another language, summarize in that language.
2939
3067
  * @param model Name of the model to use
2940
3068
  * @param visionModel Name of the vision model
2941
3069
  */
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) {
3070
+ 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
3071
  this.provider = provider;
2944
3072
  this.apiKey = apiKey;
2945
3073
  this.model = model;
@@ -2951,6 +3079,7 @@ If it's in another language, summarize in that language.
2951
3079
  this.reasoning_effort = reasoning_effort;
2952
3080
  this.enableReasoningSummary = enableReasoningSummary;
2953
3081
  this.responseFormat = responseFormat;
3082
+ this.chatTemplateThinking = chatTemplateThinking;
2954
3083
  if (validateVisionModel && !VISION_SUPPORTED_MODELS.includes(visionModel)) {
2955
3084
  throw new Error(
2956
3085
  `Model ${visionModel} does not support vision capabilities.`
@@ -3098,6 +3227,7 @@ If it's in another language, summarize in that language.
3098
3227
  reasoning_effort: this.reasoning_effort,
3099
3228
  enableReasoningSummary: this.enableReasoningSummary,
3100
3229
  responseFormat: this.responseFormat,
3230
+ chatTemplateThinking: this.chatTemplateThinking,
3101
3231
  maxTokens
3102
3232
  });
3103
3233
  const headers = {};
@@ -3155,11 +3285,19 @@ If it's in another language, summarize in that language.
3155
3285
  createChatService(options) {
3156
3286
  this.validateRequiredOptions(options);
3157
3287
  const model = options.model || this.getDefaultModel();
3288
+ const visionModel = resolveVisionModel({
3289
+ model,
3290
+ visionModel: options.visionModel,
3291
+ defaultModel: this.getDefaultModel(),
3292
+ defaultVisionModel: MODEL_DEEPSEEK_V4_FLASH_VISION_EXP,
3293
+ supportsVisionForModel: (visionModel2) => this.supportsVisionForModel(visionModel2),
3294
+ validate: "explicit"
3295
+ });
3158
3296
  const tools = options.tools;
3159
3297
  return new DeepSeekChatService(
3160
3298
  options.apiKey,
3161
3299
  model,
3162
- options.visionModel ?? model,
3300
+ visionModel,
3163
3301
  tools,
3164
3302
  this.resolveEndpoint(options),
3165
3303
  options.responseLength,
@@ -3176,16 +3314,16 @@ If it's in another language, summarize in that language.
3176
3314
  return MODEL_DEEPSEEK_V4_FLASH;
3177
3315
  }
3178
3316
  supportsVision() {
3179
- return false;
3317
+ return true;
3180
3318
  }
3181
3319
  getVisionSupportLevel() {
3182
- return "unsupported";
3320
+ return "supported";
3183
3321
  }
3184
- supportsVisionForModel(_model) {
3185
- return false;
3322
+ supportsVisionForModel(model) {
3323
+ return isDeepSeekVisionModel(model);
3186
3324
  }
3187
- getVisionSupportLevelForModel(_model) {
3188
- return "unsupported";
3325
+ getVisionSupportLevelForModel(model) {
3326
+ return this.supportsVisionForModel(model) ? "supported" : "unsupported";
3189
3327
  }
3190
3328
  validateRequiredOptions(options) {
3191
3329
  if (!options.apiKey?.trim()) {
@@ -4954,7 +5092,12 @@ If it's in another language, summarize in that language.
4954
5092
 
4955
5093
  // src/services/providers/openrouter/OpenRouterChatService.ts
4956
5094
  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());
5095
+ var isTokenLimitUnsupportedModel = (model) => [
5096
+ MODEL_GPT_OSS_20B_FREE,
5097
+ MODEL_ZAI_GLM_5_3,
5098
+ MODEL_ZAI_GLM_5_3_FLASH,
5099
+ MODEL_ZAI_GLM_5_2
5100
+ ].includes(model.trim());
4958
5101
  var ensureAutoRouterOutput = (model, hasVisibleOutput) => {
4959
5102
  if (isOpenRouterAutoModel(model) && !hasVisibleOutput) {
4960
5103
  throw new Error(
@@ -5300,7 +5443,9 @@ If it's in another language, summarize in that language.
5300
5443
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
5301
5444
  MODEL_ANTHROPIC_CLAUDE_HAIKU_LATEST,
5302
5445
  MODEL_ANTHROPIC_CLAUDE_FABLE_5,
5446
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5,
5303
5447
  MODEL_ANTHROPIC_CLAUDE_OPUS_5,
5448
+ MODEL_ANTHROPIC_CLAUDE_OPUS_4_8,
5304
5449
  MODEL_ANTHROPIC_CLAUDE_OPUS_4,
5305
5450
  MODEL_ANTHROPIC_CLAUDE_SONNET_4,
5306
5451
  MODEL_ANTHROPIC_CLAUDE_4_5_HAIKU,
@@ -5314,6 +5459,8 @@ If it's in another language, summarize in that language.
5314
5459
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
5315
5460
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
5316
5461
  // Z.ai models
5462
+ MODEL_ZAI_GLM_5_3,
5463
+ MODEL_ZAI_GLM_5_3_FLASH,
5317
5464
  MODEL_ZAI_GLM_5_2,
5318
5465
  MODEL_ZAI_GLM_4_7_FLASH,
5319
5466
  MODEL_ZAI_GLM_4_5_AIR,
@@ -5325,10 +5472,13 @@ If it's in another language, summarize in that language.
5325
5472
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_0731,
5326
5473
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH,
5327
5474
  MODEL_OPENROUTER_DEEPSEEK_V4_PRO_0813,
5475
+ MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
5328
5476
  // Other models
5477
+ MODEL_QWEN_QWEN_3_8_FLASH,
5329
5478
  MODEL_MOONSHOTAI_KIMI_LATEST,
5330
5479
  MODEL_MOONSHOTAI_KIMI_K3,
5331
5480
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
5481
+ MODEL_MOONSHOTAI_KIMI_K2_6,
5332
5482
  MODEL_MOONSHOTAI_KIMI_K2_5,
5333
5483
  MODEL_KWAIPILOT_KAT_CODER_AIR_V2_5,
5334
5484
  MODEL_KWAIPILOT_KAT_CODER_PRO_V2_5
@@ -5463,7 +5613,7 @@ If it's in another language, summarize in that language.
5463
5613
 
5464
5614
  // src/services/providers/sakana/SakanaChatService.ts
5465
5615
  var SakanaChatService = class extends OpenAIChatService {
5466
- constructor(apiKey, model = MODEL_FUGU, visionModel = model, tools, endpoint = ENDPOINT_SAKANA_CHAT_COMPLETIONS_API, responseLength) {
5616
+ constructor(apiKey, model = MODEL_FUGU, visionModel = model, tools, endpoint = ENDPOINT_SAKANA_CHAT_COMPLETIONS_API, responseLength, thinking) {
5467
5617
  super(
5468
5618
  apiKey,
5469
5619
  model,
@@ -5476,7 +5626,9 @@ If it's in another language, summarize in that language.
5476
5626
  void 0,
5477
5627
  false,
5478
5628
  "sakana",
5479
- false
5629
+ false,
5630
+ void 0,
5631
+ thinking?.type === "enabled"
5480
5632
  );
5481
5633
  }
5482
5634
  };
@@ -5486,14 +5638,29 @@ If it's in another language, summarize in that language.
5486
5638
  createChatService(options) {
5487
5639
  this.validateRequiredOptions(options);
5488
5640
  const model = options.model || this.getDefaultModel();
5641
+ const visionModel = resolveVisionModel({
5642
+ model,
5643
+ visionModel: options.visionModel,
5644
+ defaultModel: this.getDefaultModel(),
5645
+ defaultVisionModel: MODEL_SAKANA_NAMAZU,
5646
+ supportsVisionForModel: (visionModel2) => this.supportsVisionForModel(visionModel2),
5647
+ validate: "explicit"
5648
+ });
5489
5649
  const tools = options.tools;
5650
+ if (options.thinking !== void 0 && model !== MODEL_SAKANA_NAMAZU) {
5651
+ throw new Error(
5652
+ "Sakana thinking control is only supported for sakana-namazu."
5653
+ );
5654
+ }
5655
+ const thinking = model === MODEL_SAKANA_NAMAZU ? options.thinking ?? { type: "disabled" } : void 0;
5490
5656
  return new SakanaChatService(
5491
5657
  options.apiKey,
5492
5658
  model,
5493
- options.visionModel ?? model,
5659
+ visionModel,
5494
5660
  tools,
5495
5661
  this.resolveEndpoint(options),
5496
- options.responseLength
5662
+ options.responseLength,
5663
+ thinking
5497
5664
  );
5498
5665
  }
5499
5666
  getProviderName() {
@@ -5506,16 +5673,16 @@ If it's in another language, summarize in that language.
5506
5673
  return MODEL_FUGU;
5507
5674
  }
5508
5675
  supportsVision() {
5509
- return false;
5676
+ return true;
5510
5677
  }
5511
5678
  getVisionSupportLevel() {
5512
- return "unsupported";
5679
+ return "supported";
5513
5680
  }
5514
- supportsVisionForModel(_model) {
5515
- return false;
5681
+ supportsVisionForModel(model) {
5682
+ return isSakanaVisionModel(model);
5516
5683
  }
5517
- getVisionSupportLevelForModel(_model) {
5518
- return "unsupported";
5684
+ getVisionSupportLevelForModel(model) {
5685
+ return this.supportsVisionForModel(model) ? "supported" : "unsupported";
5519
5686
  }
5520
5687
  validateRequiredOptions(options) {
5521
5688
  if (!options.apiKey?.trim()) {
@@ -5894,7 +6061,7 @@ If it's in another language, summarize in that language.
5894
6061
  if (this.thinking) {
5895
6062
  body.thinking = this.thinking;
5896
6063
  }
5897
- if (model === MODEL_GLM_5_2 && this.reasoningEffort) {
6064
+ if (isZaiReasoningEffortModel(model) && this.reasoningEffort) {
5898
6065
  body.reasoning_effort = this.reasoningEffort;
5899
6066
  }
5900
6067
  const tools = this.buildToolsDefinition();
@@ -5958,15 +6125,19 @@ If it's in another language, summarize in that language.
5958
6125
  model,
5959
6126
  options.reasoning_effort
5960
6127
  );
6128
+ const alwaysThinking = isZaiAlwaysThinkingModel(model);
5961
6129
  const usesExplicitThinking = options.thinking !== void 0;
5962
- const thinking = usesExplicitThinking && options.reasoning_effort === void 0 ? options.thinking : normalizedReasoningEffort === "high" || normalizedReasoningEffort === "max" ? {
6130
+ const thinking = alwaysThinking ? {
6131
+ type: "enabled",
6132
+ clear_thinking: options.thinking?.clear_thinking ?? true
6133
+ } : usesExplicitThinking && options.reasoning_effort === void 0 ? options.thinking : normalizedReasoningEffort === "high" || normalizedReasoningEffort === "max" ? {
5963
6134
  type: "enabled",
5964
6135
  clear_thinking: options.thinking?.clear_thinking
5965
6136
  } : {
5966
6137
  type: "disabled",
5967
6138
  clear_thinking: options.thinking?.clear_thinking
5968
6139
  };
5969
- const reasoningEffort = thinking?.type === "enabled" && options.reasoning_effort !== void 0 ? normalizedReasoningEffort : void 0;
6140
+ const reasoningEffort = alwaysThinking ? normalizedReasoningEffort : thinking?.type === "enabled" && options.reasoning_effort !== void 0 ? normalizedReasoningEffort : void 0;
5970
6141
  return new ZAIChatService(
5971
6142
  options.apiKey,
5972
6143
  model,
@@ -5990,6 +6161,8 @@ If it's in another language, summarize in that language.
5990
6161
  */
5991
6162
  getSupportedModels() {
5992
6163
  return [
6164
+ MODEL_GLM_5_3,
6165
+ MODEL_GLM_5_3_FLASH,
5993
6166
  MODEL_GLM_5_2,
5994
6167
  MODEL_GLM_5_1,
5995
6168
  MODEL_GLM_5,