@aituber-onair/chat 0.39.0 → 0.41.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 (131) hide show
  1. package/README.ja.md +36 -11
  2. package/README.md +35 -11
  3. package/dist/cjs/constants/index.d.ts +1 -0
  4. package/dist/cjs/constants/index.d.ts.map +1 -1
  5. package/dist/cjs/constants/index.js +1 -0
  6. package/dist/cjs/constants/index.js.map +1 -1
  7. package/dist/cjs/constants/kimi.d.ts +7 -0
  8. package/dist/cjs/constants/kimi.d.ts.map +1 -1
  9. package/dist/cjs/constants/kimi.js +21 -2
  10. package/dist/cjs/constants/kimi.js.map +1 -1
  11. package/dist/cjs/constants/openai.d.ts +3 -2
  12. package/dist/cjs/constants/openai.d.ts.map +1 -1
  13. package/dist/cjs/constants/openai.js +5 -1
  14. package/dist/cjs/constants/openai.js.map +1 -1
  15. package/dist/cjs/constants/openrouter.d.ts +2 -0
  16. package/dist/cjs/constants/openrouter.d.ts.map +1 -1
  17. package/dist/cjs/constants/openrouter.js +4 -1
  18. package/dist/cjs/constants/openrouter.js.map +1 -1
  19. package/dist/cjs/constants/sakana.d.ts +7 -0
  20. package/dist/cjs/constants/sakana.d.ts.map +1 -0
  21. package/dist/cjs/constants/sakana.js +14 -0
  22. package/dist/cjs/constants/sakana.js.map +1 -0
  23. package/dist/cjs/constants/zai.d.ts +1 -0
  24. package/dist/cjs/constants/zai.d.ts.map +1 -1
  25. package/dist/cjs/constants/zai.js +2 -1
  26. package/dist/cjs/constants/zai.js.map +1 -1
  27. package/dist/cjs/index.d.ts +3 -1
  28. package/dist/cjs/index.d.ts.map +1 -1
  29. package/dist/cjs/index.js +6 -1
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +2 -0
  32. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  33. package/dist/cjs/services/providers/index.d.ts +2 -1
  34. package/dist/cjs/services/providers/index.d.ts.map +1 -1
  35. package/dist/cjs/services/providers/index.js +2 -0
  36. package/dist/cjs/services/providers/index.js.map +1 -1
  37. package/dist/cjs/services/providers/kimi/KimiChatService.d.ts +1 -0
  38. package/dist/cjs/services/providers/kimi/KimiChatService.d.ts.map +1 -1
  39. package/dist/cjs/services/providers/kimi/KimiChatService.js +13 -1
  40. package/dist/cjs/services/providers/kimi/KimiChatService.js.map +1 -1
  41. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.d.ts +2 -0
  42. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.d.ts.map +1 -1
  43. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.js +22 -5
  44. package/dist/cjs/services/providers/kimi/KimiChatServiceProvider.js.map +1 -1
  45. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  46. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +4 -0
  47. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  48. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  49. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +12 -4
  50. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  51. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  52. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +2 -0
  53. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  54. package/dist/cjs/services/providers/sakana/SakanaChatService.d.ts +7 -0
  55. package/dist/cjs/services/providers/sakana/SakanaChatService.d.ts.map +1 -0
  56. package/dist/cjs/services/providers/sakana/SakanaChatService.js +12 -0
  57. package/dist/cjs/services/providers/sakana/SakanaChatService.js.map +1 -0
  58. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.d.ts +16 -0
  59. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.d.ts.map +1 -0
  60. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.js +57 -0
  61. package/dist/cjs/services/providers/sakana/SakanaChatServiceProvider.js.map +1 -0
  62. package/dist/cjs/services/providers/zai/ZAIChatService.js +1 -1
  63. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  64. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js +2 -1
  65. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  66. package/dist/esm/constants/index.d.ts +1 -0
  67. package/dist/esm/constants/index.d.ts.map +1 -1
  68. package/dist/esm/constants/index.js +1 -0
  69. package/dist/esm/constants/index.js.map +1 -1
  70. package/dist/esm/constants/kimi.d.ts +7 -0
  71. package/dist/esm/constants/kimi.d.ts.map +1 -1
  72. package/dist/esm/constants/kimi.js +19 -1
  73. package/dist/esm/constants/kimi.js.map +1 -1
  74. package/dist/esm/constants/openai.d.ts +3 -2
  75. package/dist/esm/constants/openai.d.ts.map +1 -1
  76. package/dist/esm/constants/openai.js +5 -1
  77. package/dist/esm/constants/openai.js.map +1 -1
  78. package/dist/esm/constants/openrouter.d.ts +2 -0
  79. package/dist/esm/constants/openrouter.d.ts.map +1 -1
  80. package/dist/esm/constants/openrouter.js +3 -0
  81. package/dist/esm/constants/openrouter.js.map +1 -1
  82. package/dist/esm/constants/sakana.d.ts +7 -0
  83. package/dist/esm/constants/sakana.d.ts.map +1 -0
  84. package/dist/esm/constants/sakana.js +11 -0
  85. package/dist/esm/constants/sakana.js.map +1 -0
  86. package/dist/esm/constants/zai.d.ts +1 -0
  87. package/dist/esm/constants/zai.d.ts.map +1 -1
  88. package/dist/esm/constants/zai.js +1 -0
  89. package/dist/esm/constants/zai.js.map +1 -1
  90. package/dist/esm/index.d.ts +3 -1
  91. package/dist/esm/index.d.ts.map +1 -1
  92. package/dist/esm/index.js +3 -0
  93. package/dist/esm/index.js.map +1 -1
  94. package/dist/esm/services/providers/ChatServiceProvider.d.ts +2 -0
  95. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  96. package/dist/esm/services/providers/index.d.ts +2 -1
  97. package/dist/esm/services/providers/index.d.ts.map +1 -1
  98. package/dist/esm/services/providers/index.js +2 -0
  99. package/dist/esm/services/providers/index.js.map +1 -1
  100. package/dist/esm/services/providers/kimi/KimiChatService.d.ts +1 -0
  101. package/dist/esm/services/providers/kimi/KimiChatService.d.ts.map +1 -1
  102. package/dist/esm/services/providers/kimi/KimiChatService.js +14 -2
  103. package/dist/esm/services/providers/kimi/KimiChatService.js.map +1 -1
  104. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.d.ts +2 -0
  105. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.d.ts.map +1 -1
  106. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.js +23 -6
  107. package/dist/esm/services/providers/kimi/KimiChatServiceProvider.js.map +1 -1
  108. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  109. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +4 -0
  110. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  111. package/dist/esm/services/providers/openrouter/OpenRouterChatService.d.ts.map +1 -1
  112. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +13 -5
  113. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  114. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  115. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +3 -1
  116. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  117. package/dist/esm/services/providers/sakana/SakanaChatService.d.ts +7 -0
  118. package/dist/esm/services/providers/sakana/SakanaChatService.d.ts.map +1 -0
  119. package/dist/esm/services/providers/sakana/SakanaChatService.js +8 -0
  120. package/dist/esm/services/providers/sakana/SakanaChatService.js.map +1 -0
  121. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.d.ts +16 -0
  122. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.d.ts.map +1 -0
  123. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.js +53 -0
  124. package/dist/esm/services/providers/sakana/SakanaChatServiceProvider.js.map +1 -0
  125. package/dist/esm/services/providers/zai/ZAIChatService.js +2 -2
  126. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  127. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js +3 -2
  128. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  129. package/dist/umd/aituber-onair-chat.js +183 -12
  130. package/dist/umd/aituber-onair-chat.min.js +10 -10
  131. package/package.json +1 -1
@@ -45,6 +45,7 @@ var AITuberOnAirChat = (() => {
45
45
  ENDPOINT_OPENAI_CHAT_COMPLETIONS_API: () => ENDPOINT_OPENAI_CHAT_COMPLETIONS_API,
46
46
  ENDPOINT_OPENAI_RESPONSES_API: () => ENDPOINT_OPENAI_RESPONSES_API,
47
47
  ENDPOINT_OPENROUTER_API: () => ENDPOINT_OPENROUTER_API,
48
+ ENDPOINT_SAKANA_CHAT_COMPLETIONS_API: () => ENDPOINT_SAKANA_CHAT_COMPLETIONS_API,
48
49
  ENDPOINT_XAI_CHAT_COMPLETIONS_API: () => ENDPOINT_XAI_CHAT_COMPLETIONS_API,
49
50
  ENDPOINT_ZAI_CHAT_COMPLETIONS_API: () => ENDPOINT_ZAI_CHAT_COMPLETIONS_API,
50
51
  EmotionParser: () => EmotionParser,
@@ -59,6 +60,7 @@ var AITuberOnAirChat = (() => {
59
60
  GeminiNanoChatService: () => GeminiNanoChatService,
60
61
  GeminiNanoChatServiceProvider: () => GeminiNanoChatServiceProvider,
61
62
  HttpError: () => HttpError,
63
+ KIMI_THINKING_REQUIRED_MODELS: () => KIMI_THINKING_REQUIRED_MODELS,
62
64
  KIMI_VISION_SUPPORTED_MODELS: () => KIMI_VISION_SUPPORTED_MODELS,
63
65
  KimiChatService: () => KimiChatService,
64
66
  KimiChatServiceProvider: () => KimiChatServiceProvider,
@@ -91,6 +93,9 @@ var AITuberOnAirChat = (() => {
91
93
  MODEL_DEEPSEEK_REASONER: () => MODEL_DEEPSEEK_REASONER,
92
94
  MODEL_DEEPSEEK_V4_FLASH: () => MODEL_DEEPSEEK_V4_FLASH,
93
95
  MODEL_DEEPSEEK_V4_PRO: () => MODEL_DEEPSEEK_V4_PRO,
96
+ MODEL_FUGU: () => MODEL_FUGU,
97
+ MODEL_FUGU_ULTRA: () => MODEL_FUGU_ULTRA,
98
+ MODEL_FUGU_ULTRA_20260615: () => MODEL_FUGU_ULTRA_20260615,
94
99
  MODEL_GEMINI_2_5_FLASH: () => MODEL_GEMINI_2_5_FLASH,
95
100
  MODEL_GEMINI_2_5_FLASH_LITE: () => MODEL_GEMINI_2_5_FLASH_LITE,
96
101
  MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17: () => MODEL_GEMINI_2_5_FLASH_LITE_PREVIEW_06_17,
@@ -112,6 +117,7 @@ var AITuberOnAirChat = (() => {
112
117
  MODEL_GLM_4_7_FLASH: () => MODEL_GLM_4_7_FLASH,
113
118
  MODEL_GLM_4_7_FLASHX: () => MODEL_GLM_4_7_FLASHX,
114
119
  MODEL_GLM_5: () => MODEL_GLM_5,
120
+ MODEL_GLM_5_2: () => MODEL_GLM_5_2,
115
121
  MODEL_GLM_5_TURBO: () => MODEL_GLM_5_TURBO,
116
122
  MODEL_GOOGLE_GEMINI_2_5_FLASH: () => MODEL_GOOGLE_GEMINI_2_5_FLASH,
117
123
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025: () => MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
@@ -140,6 +146,8 @@ var AITuberOnAirChat = (() => {
140
146
  MODEL_GROK_4_3: () => MODEL_GROK_4_3,
141
147
  MODEL_KIMI_K2_5: () => MODEL_KIMI_K2_5,
142
148
  MODEL_KIMI_K2_6: () => MODEL_KIMI_K2_6,
149
+ MODEL_KIMI_K2_7_CODE: () => MODEL_KIMI_K2_7_CODE,
150
+ MODEL_KIMI_K2_7_CODE_HIGHSPEED: () => MODEL_KIMI_K2_7_CODE_HIGHSPEED,
143
151
  MODEL_MISTRAL_LARGE_2512: () => MODEL_MISTRAL_LARGE_2512,
144
152
  MODEL_MISTRAL_LARGE_LATEST: () => MODEL_MISTRAL_LARGE_LATEST,
145
153
  MODEL_MISTRAL_MEDIUM_2508: () => MODEL_MISTRAL_MEDIUM_2508,
@@ -147,6 +155,7 @@ var AITuberOnAirChat = (() => {
147
155
  MODEL_MISTRAL_SMALL_2603: () => MODEL_MISTRAL_SMALL_2603,
148
156
  MODEL_MISTRAL_SMALL_LATEST: () => MODEL_MISTRAL_SMALL_LATEST,
149
157
  MODEL_MOONSHOTAI_KIMI_K2_5: () => MODEL_MOONSHOTAI_KIMI_K2_5,
158
+ MODEL_MOONSHOTAI_KIMI_K2_7_CODE: () => MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
150
159
  MODEL_MOONSHOTAI_KIMI_LATEST: () => MODEL_MOONSHOTAI_KIMI_LATEST,
151
160
  MODEL_O1: () => MODEL_O1,
152
161
  MODEL_O1_MINI: () => MODEL_O1_MINI,
@@ -167,6 +176,7 @@ var AITuberOnAirChat = (() => {
167
176
  MODEL_ZAI_GLM_4_5_AIR: () => MODEL_ZAI_GLM_4_5_AIR,
168
177
  MODEL_ZAI_GLM_4_5_AIR_FREE: () => MODEL_ZAI_GLM_4_5_AIR_FREE,
169
178
  MODEL_ZAI_GLM_4_7_FLASH: () => MODEL_ZAI_GLM_4_7_FLASH,
179
+ MODEL_ZAI_GLM_5_2: () => MODEL_ZAI_GLM_5_2,
170
180
  MistralChatService: () => MistralChatService,
171
181
  MistralChatServiceProvider: () => MistralChatServiceProvider,
172
182
  OPENROUTER_CREDITS_THRESHOLD: () => OPENROUTER_CREDITS_THRESHOLD,
@@ -180,6 +190,10 @@ var AITuberOnAirChat = (() => {
180
190
  OpenAICompatibleChatServiceProvider: () => OpenAICompatibleChatServiceProvider,
181
191
  OpenRouterChatService: () => OpenRouterChatService,
182
192
  OpenRouterChatServiceProvider: () => OpenRouterChatServiceProvider,
193
+ SAKANA_API_BASE_URL: () => SAKANA_API_BASE_URL,
194
+ SAKANA_SUPPORTED_MODELS: () => SAKANA_SUPPORTED_MODELS,
195
+ SakanaChatService: () => SakanaChatService,
196
+ SakanaChatServiceProvider: () => SakanaChatServiceProvider,
183
197
  StreamTextAccumulator: () => StreamTextAccumulator,
184
198
  VISION_SUPPORTED_MODELS: () => VISION_SUPPORTED_MODELS,
185
199
  XAIChatService: () => XAIChatService,
@@ -197,6 +211,7 @@ var AITuberOnAirChat = (() => {
197
211
  getMaxTokensForResponseLength: () => getMaxTokensForResponseLength,
198
212
  installGASFetch: () => installGASFetch,
199
213
  isGPT5Model: () => isGPT5Model,
214
+ isKimiThinkingRequiredModel: () => isKimiThinkingRequiredModel,
200
215
  isKimiVisionModel: () => isKimiVisionModel,
201
216
  isMistralReasoningEffort: () => isMistralReasoningEffort,
202
217
  isMistralReasoningEffortModel: () => isMistralReasoningEffortModel,
@@ -292,6 +307,9 @@ var AITuberOnAirChat = (() => {
292
307
  if (allowsReasoningNone(model)) {
293
308
  return "none";
294
309
  }
310
+ if (allowsReasoningMinimal(model)) {
311
+ return "minimal";
312
+ }
295
313
  return "medium";
296
314
  }
297
315
 
@@ -363,6 +381,7 @@ var AITuberOnAirChat = (() => {
363
381
  var MODEL_OPENROUTER_AUTO = "openrouter/auto";
364
382
  var MODEL_OPENROUTER_FUSION = "openrouter/fusion";
365
383
  var MODEL_GPT_OSS_20B_FREE = "openai/gpt-oss-20b:free";
384
+ var MODEL_MOONSHOTAI_KIMI_K2_7_CODE = "moonshotai/kimi-k2.7-code";
366
385
  var MODEL_MOONSHOTAI_KIMI_K2_5 = "moonshotai/kimi-k2.5";
367
386
  var MODEL_MOONSHOTAI_KIMI_LATEST = "~moonshotai/kimi-latest";
368
387
  var MODEL_OPENAI_GPT_LATEST = "~openai/gpt-latest";
@@ -388,6 +407,7 @@ var AITuberOnAirChat = (() => {
388
407
  var MODEL_GOOGLE_GEMINI_2_5_PRO = "google/gemini-2.5-pro";
389
408
  var MODEL_GOOGLE_GEMINI_2_5_FLASH = "google/gemini-2.5-flash";
390
409
  var MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025 = "google/gemini-2.5-flash-lite-preview-09-2025";
410
+ var MODEL_ZAI_GLM_5_2 = "z-ai/glm-5.2";
391
411
  var MODEL_ZAI_GLM_4_7_FLASH = "z-ai/glm-4.7-flash";
392
412
  var MODEL_ZAI_GLM_4_5_AIR = "z-ai/glm-4.5-air";
393
413
  var MODEL_ZAI_GLM_4_5_AIR_FREE = "z-ai/glm-4.5-air:free";
@@ -419,6 +439,7 @@ var AITuberOnAirChat = (() => {
419
439
  MODEL_GOOGLE_GEMINI_2_5_PRO,
420
440
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
421
441
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
442
+ MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
422
443
  MODEL_MOONSHOTAI_KIMI_K2_5
423
444
  ];
424
445
  var OPENROUTER_FREE_RATE_LIMIT_PER_MINUTE = 20;
@@ -436,6 +457,7 @@ var AITuberOnAirChat = (() => {
436
457
 
437
458
  // src/constants/zai.ts
438
459
  var ENDPOINT_ZAI_CHAT_COMPLETIONS_API = "https://api.z.ai/api/paas/v4/chat/completions";
460
+ var MODEL_GLM_5_2 = "glm-5.2";
439
461
  var MODEL_GLM_5 = "glm-5";
440
462
  var MODEL_GLM_5_TURBO = "glm-5-turbo";
441
463
  var MODEL_GLM_4_7 = "glm-4.7";
@@ -477,12 +499,26 @@ var AITuberOnAirChat = (() => {
477
499
 
478
500
  // src/constants/kimi.ts
479
501
  var ENDPOINT_KIMI_CHAT_COMPLETIONS_API = "https://api.moonshot.ai/v1/chat/completions";
502
+ var MODEL_KIMI_K2_7_CODE = "kimi-k2.7-code";
503
+ var MODEL_KIMI_K2_7_CODE_HIGHSPEED = "kimi-k2.7-code-highspeed";
480
504
  var MODEL_KIMI_K2_6 = "kimi-k2.6";
481
505
  var MODEL_KIMI_K2_5 = "kimi-k2.5";
482
- var KIMI_VISION_SUPPORTED_MODELS = [MODEL_KIMI_K2_6, MODEL_KIMI_K2_5];
506
+ var KIMI_VISION_SUPPORTED_MODELS = [
507
+ MODEL_KIMI_K2_7_CODE,
508
+ MODEL_KIMI_K2_7_CODE_HIGHSPEED,
509
+ MODEL_KIMI_K2_6,
510
+ MODEL_KIMI_K2_5
511
+ ];
512
+ var KIMI_THINKING_REQUIRED_MODELS = [
513
+ MODEL_KIMI_K2_7_CODE,
514
+ MODEL_KIMI_K2_7_CODE_HIGHSPEED
515
+ ];
483
516
  function isKimiVisionModel(model) {
484
517
  return KIMI_VISION_SUPPORTED_MODELS.includes(model);
485
518
  }
519
+ function isKimiThinkingRequiredModel(model) {
520
+ return KIMI_THINKING_REQUIRED_MODELS.includes(model);
521
+ }
486
522
 
487
523
  // src/constants/deepseek.ts
488
524
  var DEEPSEEK_API_BASE_URL = "https://api.deepseek.com";
@@ -539,6 +575,18 @@ var AITuberOnAirChat = (() => {
539
575
  return MISTRAL_VISION_SUPPORTED_MODELS.includes(model);
540
576
  }
541
577
 
578
+ // src/constants/sakana.ts
579
+ var SAKANA_API_BASE_URL = "https://api.sakana.ai/v1";
580
+ var ENDPOINT_SAKANA_CHAT_COMPLETIONS_API = `${SAKANA_API_BASE_URL}/chat/completions`;
581
+ var MODEL_FUGU = "fugu";
582
+ var MODEL_FUGU_ULTRA = "fugu-ultra";
583
+ var MODEL_FUGU_ULTRA_20260615 = "fugu-ultra-20260615";
584
+ var SAKANA_SUPPORTED_MODELS = [
585
+ MODEL_FUGU,
586
+ MODEL_FUGU_ULTRA,
587
+ MODEL_FUGU_ULTRA_20260615
588
+ ];
589
+
542
590
  // src/constants/chat.ts
543
591
  var CHAT_RESPONSE_LENGTH = {
544
592
  VERY_SHORT: "veryShort",
@@ -2005,7 +2053,8 @@ If it's in another language, summarize in that language.
2005
2053
  var OPENAI_COMPATIBLE_CHAT_COMPLETIONS_PROVIDERS = /* @__PURE__ */ new Set([
2006
2054
  "openai-compatible",
2007
2055
  "deepseek",
2008
- "mistral"
2056
+ "mistral",
2057
+ "sakana"
2009
2058
  ]);
2010
2059
  function buildOpenAIRequestBody({
2011
2060
  provider,
@@ -3520,7 +3569,7 @@ If it's in another language, summarize in that language.
3520
3569
  if (this.responseFormat) {
3521
3570
  body.response_format = this.responseFormat;
3522
3571
  }
3523
- const effectiveThinking = this.tools.length > 0 ? { type: "disabled" } : this.thinking;
3572
+ const effectiveThinking = this.resolveEffectiveThinking(model);
3524
3573
  if (effectiveThinking) {
3525
3574
  if (this.isSelfHostedEndpoint()) {
3526
3575
  if (effectiveThinking.type === "disabled") {
@@ -3543,6 +3592,20 @@ If it's in another language, summarize in that language.
3543
3592
  normalizeEndpoint(value) {
3544
3593
  return value.replace(/\/+$/, "");
3545
3594
  }
3595
+ resolveEffectiveThinking(model) {
3596
+ if (isKimiThinkingRequiredModel(model)) {
3597
+ if (this.thinking?.type === "disabled") {
3598
+ throw new Error(
3599
+ `Model ${model} requires thinking mode and does not support thinking: disabled.`
3600
+ );
3601
+ }
3602
+ return this.thinking ?? { type: "enabled" };
3603
+ }
3604
+ if (this.tools.length > 0) {
3605
+ return { type: "disabled" };
3606
+ }
3607
+ return this.thinking;
3608
+ }
3546
3609
  buildToolsDefinition() {
3547
3610
  return buildOpenAICompatibleTools(this.tools, "chat-completions");
3548
3611
  }
@@ -3569,6 +3632,9 @@ If it's in another language, summarize in that language.
3569
3632
 
3570
3633
  // src/services/providers/kimi/KimiChatServiceProvider.ts
3571
3634
  var KimiChatServiceProvider = class {
3635
+ constructor() {
3636
+ this.defaultThinking = { type: "enabled" };
3637
+ }
3572
3638
  /**
3573
3639
  * Create a chat service instance
3574
3640
  */
@@ -3584,8 +3650,7 @@ If it's in another language, summarize in that language.
3584
3650
  validate: "explicit"
3585
3651
  });
3586
3652
  const tools = options.tools;
3587
- const defaultThinking = options.thinking ?? { type: "enabled" };
3588
- const thinking = tools && tools.length > 0 ? { type: "disabled" } : defaultThinking;
3653
+ const thinking = this.resolveThinking(model, tools, options.thinking);
3589
3654
  return new KimiChatService(
3590
3655
  options.apiKey,
3591
3656
  model,
@@ -3607,7 +3672,12 @@ If it's in another language, summarize in that language.
3607
3672
  * Get the list of supported models
3608
3673
  */
3609
3674
  getSupportedModels() {
3610
- return [MODEL_KIMI_K2_6, MODEL_KIMI_K2_5];
3675
+ return [
3676
+ MODEL_KIMI_K2_7_CODE,
3677
+ MODEL_KIMI_K2_7_CODE_HIGHSPEED,
3678
+ MODEL_KIMI_K2_6,
3679
+ MODEL_KIMI_K2_5
3680
+ ];
3611
3681
  }
3612
3682
  /**
3613
3683
  * Get the default model
@@ -3655,6 +3725,20 @@ If it's in another language, summarize in that language.
3655
3725
  normalizeEndpoint(value) {
3656
3726
  return value.replace(/\/+$/, "");
3657
3727
  }
3728
+ resolveThinking(model, tools, thinking) {
3729
+ if (isKimiThinkingRequiredModel(model)) {
3730
+ if (thinking?.type === "disabled") {
3731
+ throw new Error(
3732
+ `Model ${model} requires thinking mode and does not support thinking: disabled.`
3733
+ );
3734
+ }
3735
+ return thinking ?? this.defaultThinking;
3736
+ }
3737
+ if (tools && tools.length > 0) {
3738
+ return { type: "disabled" };
3739
+ }
3740
+ return thinking ?? this.defaultThinking;
3741
+ }
3658
3742
  };
3659
3743
 
3660
3744
  // src/services/providers/mistral/MistralChatService.ts
@@ -3986,7 +4070,8 @@ If it's in another language, summarize in that language.
3986
4070
  };
3987
4071
 
3988
4072
  // src/services/providers/openrouter/OpenRouterChatService.ts
3989
- var isTokenLimitUnsupportedModel = (model) => model.trim() === MODEL_GPT_OSS_20B_FREE;
4073
+ var isTokenLimitUnsupportedModel = (model) => [MODEL_GPT_OSS_20B_FREE, MODEL_ZAI_GLM_5_2].includes(model.trim());
4074
+ var getDefaultReasoningEffort = (model) => model.trim() === MODEL_ZAI_GLM_5_2 ? "none" : void 0;
3990
4075
  var OpenRouterChatService = class {
3991
4076
  /**
3992
4077
  * Constructor
@@ -4182,16 +4267,19 @@ If it's in another language, summarize in that language.
4182
4267
  const tokenLimit = maxTokens !== void 0 ? maxTokens : getMaxTokensForResponseLength(this.responseLength);
4183
4268
  if (tokenLimit && isTokenLimitUnsupportedModel(model)) {
4184
4269
  console.warn(
4185
- `OpenRouter: Token limits are not supported for ${model} due to known issues. Using unlimited tokens instead.`
4270
+ `OpenRouter: Token limits are disabled for ${model} because this model can return empty content when a token limit is set.`
4186
4271
  );
4187
4272
  } else if (tokenLimit) {
4188
4273
  body.max_tokens = tokenLimit;
4189
4274
  }
4190
- if (this.reasoning_effort !== void 0 || this.includeReasoning !== void 0 || this.reasoningMaxTokens) {
4275
+ const defaultReasoningEffort = getDefaultReasoningEffort(model);
4276
+ if (this.reasoning_effort !== void 0 || this.includeReasoning !== void 0 || this.reasoningMaxTokens || defaultReasoningEffort) {
4191
4277
  body.reasoning = {};
4192
4278
  if (this.reasoning_effort && this.reasoning_effort !== "none") {
4193
4279
  const effort = this.reasoning_effort === "minimal" ? "low" : this.reasoning_effort;
4194
4280
  body.reasoning.effort = effort;
4281
+ } else if (this.reasoning_effort === void 0 && defaultReasoningEffort) {
4282
+ body.reasoning.effort = defaultReasoningEffort;
4195
4283
  }
4196
4284
  if (this.reasoning_effort === "none" || this.includeReasoning !== true) {
4197
4285
  body.reasoning.exclude = true;
@@ -4313,10 +4401,12 @@ If it's in another language, summarize in that language.
4313
4401
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
4314
4402
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
4315
4403
  // Z.ai models
4404
+ MODEL_ZAI_GLM_5_2,
4316
4405
  MODEL_ZAI_GLM_4_7_FLASH,
4317
4406
  MODEL_ZAI_GLM_4_5_AIR,
4318
4407
  // Other models
4319
4408
  MODEL_MOONSHOTAI_KIMI_LATEST,
4409
+ MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
4320
4410
  MODEL_MOONSHOTAI_KIMI_K2_5
4321
4411
  ];
4322
4412
  }
@@ -4367,6 +4457,85 @@ If it's in another language, summarize in that language.
4367
4457
  }
4368
4458
  };
4369
4459
 
4460
+ // src/services/providers/sakana/SakanaChatService.ts
4461
+ var SakanaChatService = class extends OpenAIChatService {
4462
+ constructor(apiKey, model = MODEL_FUGU, visionModel = model, tools, endpoint = ENDPOINT_SAKANA_CHAT_COMPLETIONS_API, responseLength) {
4463
+ super(
4464
+ apiKey,
4465
+ model,
4466
+ visionModel,
4467
+ tools,
4468
+ endpoint,
4469
+ [],
4470
+ responseLength,
4471
+ void 0,
4472
+ void 0,
4473
+ false,
4474
+ "sakana",
4475
+ false
4476
+ );
4477
+ }
4478
+ };
4479
+
4480
+ // src/services/providers/sakana/SakanaChatServiceProvider.ts
4481
+ var SakanaChatServiceProvider = class {
4482
+ createChatService(options) {
4483
+ this.validateRequiredOptions(options);
4484
+ const model = options.model || this.getDefaultModel();
4485
+ const tools = options.tools;
4486
+ return new SakanaChatService(
4487
+ options.apiKey,
4488
+ model,
4489
+ options.visionModel ?? model,
4490
+ tools,
4491
+ this.resolveEndpoint(options),
4492
+ options.responseLength
4493
+ );
4494
+ }
4495
+ getProviderName() {
4496
+ return "sakana";
4497
+ }
4498
+ getSupportedModels() {
4499
+ return [...SAKANA_SUPPORTED_MODELS];
4500
+ }
4501
+ getDefaultModel() {
4502
+ return MODEL_FUGU;
4503
+ }
4504
+ supportsVision() {
4505
+ return false;
4506
+ }
4507
+ getVisionSupportLevel() {
4508
+ return "unsupported";
4509
+ }
4510
+ supportsVisionForModel(_model) {
4511
+ return false;
4512
+ }
4513
+ getVisionSupportLevelForModel(_model) {
4514
+ return "unsupported";
4515
+ }
4516
+ validateRequiredOptions(options) {
4517
+ if (!options.apiKey?.trim()) {
4518
+ throw new Error("sakana provider requires apiKey.");
4519
+ }
4520
+ }
4521
+ resolveEndpoint(options) {
4522
+ if (options.endpoint) {
4523
+ return this.normalizeUrl(options.endpoint);
4524
+ }
4525
+ if (options.baseUrl) {
4526
+ const baseUrl = this.normalizeUrl(options.baseUrl);
4527
+ if (baseUrl.endsWith("/chat/completions")) {
4528
+ return baseUrl;
4529
+ }
4530
+ return `${baseUrl}/chat/completions`;
4531
+ }
4532
+ return ENDPOINT_SAKANA_CHAT_COMPLETIONS_API;
4533
+ }
4534
+ normalizeUrl(value) {
4535
+ return value.trim().replace(/\/+$/, "");
4536
+ }
4537
+ };
4538
+
4370
4539
  // src/services/providers/xai/XAIChatService.ts
4371
4540
  var XAIChatService = class {
4372
4541
  /**
@@ -4595,7 +4764,7 @@ If it's in another language, summarize in that language.
4595
4764
  * @param model Name of the model to use
4596
4765
  * @param visionModel Name of the vision model
4597
4766
  */
4598
- constructor(apiKey, model = MODEL_GLM_4_7, visionModel = MODEL_GLM_4_6V_FLASH, tools, endpoint = ENDPOINT_ZAI_CHAT_COMPLETIONS_API, responseLength, responseFormat, thinking) {
4767
+ constructor(apiKey, model = MODEL_GLM_5_2, visionModel = MODEL_GLM_4_6V_FLASH, tools, endpoint = ENDPOINT_ZAI_CHAT_COMPLETIONS_API, responseLength, responseFormat, thinking) {
4599
4768
  /** Provider name */
4600
4769
  this.provider = "zai";
4601
4770
  this.apiKey = apiKey;
@@ -4782,6 +4951,7 @@ If it's in another language, summarize in that language.
4782
4951
  */
4783
4952
  getSupportedModels() {
4784
4953
  return [
4954
+ MODEL_GLM_5_2,
4785
4955
  MODEL_GLM_5,
4786
4956
  MODEL_GLM_5_TURBO,
4787
4957
  MODEL_GLM_4_7,
@@ -4797,7 +4967,7 @@ If it's in another language, summarize in that language.
4797
4967
  * Get the default model
4798
4968
  */
4799
4969
  getDefaultModel() {
4800
- return MODEL_GLM_4_7;
4970
+ return MODEL_GLM_5_2;
4801
4971
  }
4802
4972
  /**
4803
4973
  * Get the default vision model
@@ -4837,7 +5007,8 @@ If it's in another language, summarize in that language.
4837
5007
  new XAIChatServiceProvider(),
4838
5008
  new KimiChatServiceProvider(),
4839
5009
  new DeepSeekChatServiceProvider(),
4840
- new MistralChatServiceProvider()
5010
+ new MistralChatServiceProvider(),
5011
+ new SakanaChatServiceProvider()
4841
5012
  ];
4842
5013
 
4843
5014
  // src/services/ChatServiceFactory.ts