@aituber-onair/chat 0.59.0 → 0.60.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 (81) hide show
  1. package/README.ja.md +37 -5
  2. package/README.md +35 -5
  3. package/dist/cjs/constants/openai.d.ts +1 -0
  4. package/dist/cjs/constants/openai.d.ts.map +1 -1
  5. package/dist/cjs/constants/openai.js +10 -5
  6. package/dist/cjs/constants/openai.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 +47 -5
  10. package/dist/cjs/constants/openrouter.js.map +1 -1
  11. package/dist/cjs/constants/zai.d.ts +1 -0
  12. package/dist/cjs/constants/zai.d.ts.map +1 -1
  13. package/dist/cjs/constants/zai.js +6 -2
  14. package/dist/cjs/constants/zai.js.map +1 -1
  15. package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -1
  16. package/dist/cjs/services/ChatServiceFactory.js +2 -1
  17. package/dist/cjs/services/ChatServiceFactory.js.map +1 -1
  18. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  19. package/dist/cjs/services/providers/openai/OpenAIChatService.js +13 -4
  20. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  21. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  22. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +7 -0
  23. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  24. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  25. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +10 -1
  26. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  27. package/dist/cjs/services/providers/openai/responsesParser.d.ts.map +1 -1
  28. package/dist/cjs/services/providers/openai/responsesParser.js +36 -14
  29. package/dist/cjs/services/providers/openai/responsesParser.js.map +1 -1
  30. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js +3 -3
  31. package/dist/cjs/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  32. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  33. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js +7 -0
  34. package/dist/cjs/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  35. package/dist/cjs/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  36. package/dist/cjs/services/providers/zai/ZAIChatService.js +14 -3
  37. package/dist/cjs/services/providers/zai/ZAIChatService.js.map +1 -1
  38. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  39. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js +1 -0
  40. package/dist/cjs/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  41. package/dist/esm/constants/openai.d.ts +1 -0
  42. package/dist/esm/constants/openai.d.ts.map +1 -1
  43. package/dist/esm/constants/openai.js +9 -4
  44. package/dist/esm/constants/openai.js.map +1 -1
  45. package/dist/esm/constants/openrouter.d.ts +7 -0
  46. package/dist/esm/constants/openrouter.d.ts.map +1 -1
  47. package/dist/esm/constants/openrouter.js +45 -3
  48. package/dist/esm/constants/openrouter.js.map +1 -1
  49. package/dist/esm/constants/zai.d.ts +1 -0
  50. package/dist/esm/constants/zai.d.ts.map +1 -1
  51. package/dist/esm/constants/zai.js +5 -1
  52. package/dist/esm/constants/zai.js.map +1 -1
  53. package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -1
  54. package/dist/esm/services/ChatServiceFactory.js +3 -2
  55. package/dist/esm/services/ChatServiceFactory.js.map +1 -1
  56. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  57. package/dist/esm/services/providers/openai/OpenAIChatService.js +14 -5
  58. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  59. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  60. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +8 -1
  61. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  62. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  63. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +11 -2
  64. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  65. package/dist/esm/services/providers/openai/responsesParser.d.ts.map +1 -1
  66. package/dist/esm/services/providers/openai/responsesParser.js +36 -14
  67. package/dist/esm/services/providers/openai/responsesParser.js.map +1 -1
  68. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js +3 -3
  69. package/dist/esm/services/providers/openrouter/OpenRouterChatService.js.map +1 -1
  70. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.d.ts.map +1 -1
  71. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js +8 -1
  72. package/dist/esm/services/providers/openrouter/OpenRouterChatServiceProvider.js.map +1 -1
  73. package/dist/esm/services/providers/zai/ZAIChatService.d.ts.map +1 -1
  74. package/dist/esm/services/providers/zai/ZAIChatService.js +15 -4
  75. package/dist/esm/services/providers/zai/ZAIChatService.js.map +1 -1
  76. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.d.ts.map +1 -1
  77. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js +2 -1
  78. package/dist/esm/services/providers/zai/ZAIChatServiceProvider.js.map +1 -1
  79. package/dist/umd/aituber-onair-chat.js +141 -42
  80. package/dist/umd/aituber-onair-chat.min.js +8 -8
  81. package/package.json +2 -1
@@ -82,8 +82,10 @@ var AITuberOnAirChat = (() => {
82
82
  MODEL_ANTHROPIC_CLAUDE_OPUS_4: () => MODEL_ANTHROPIC_CLAUDE_OPUS_4,
83
83
  MODEL_ANTHROPIC_CLAUDE_OPUS_4_8: () => MODEL_ANTHROPIC_CLAUDE_OPUS_4_8,
84
84
  MODEL_ANTHROPIC_CLAUDE_OPUS_5: () => MODEL_ANTHROPIC_CLAUDE_OPUS_5,
85
+ MODEL_ANTHROPIC_CLAUDE_OPUS_5_5: () => MODEL_ANTHROPIC_CLAUDE_OPUS_5_5,
85
86
  MODEL_ANTHROPIC_CLAUDE_SONNET_4: () => MODEL_ANTHROPIC_CLAUDE_SONNET_4,
86
87
  MODEL_ANTHROPIC_CLAUDE_SONNET_5: () => MODEL_ANTHROPIC_CLAUDE_SONNET_5,
88
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5_5: () => MODEL_ANTHROPIC_CLAUDE_SONNET_5_5,
87
89
  MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST: () => MODEL_ANTHROPIC_CLAUDE_SONNET_LATEST,
88
90
  MODEL_CLAUDE_3_5_HAIKU: () => MODEL_CLAUDE_3_5_HAIKU,
89
91
  MODEL_CLAUDE_3_5_SONNET: () => MODEL_CLAUDE_3_5_SONNET,
@@ -144,6 +146,7 @@ var AITuberOnAirChat = (() => {
144
146
  MODEL_GLM_5_2: () => MODEL_GLM_5_2,
145
147
  MODEL_GLM_5_3: () => MODEL_GLM_5_3,
146
148
  MODEL_GLM_5_3_FLASH: () => MODEL_GLM_5_3_FLASH,
149
+ MODEL_GLM_5_3_FLASHX: () => MODEL_GLM_5_3_FLASHX,
147
150
  MODEL_GLM_5_TURBO: () => MODEL_GLM_5_TURBO,
148
151
  MODEL_GOOGLE_GEMINI_2_5_FLASH: () => MODEL_GOOGLE_GEMINI_2_5_FLASH,
149
152
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025: () => MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
@@ -172,6 +175,7 @@ var AITuberOnAirChat = (() => {
172
175
  MODEL_GPT_5_6_TERRA: () => MODEL_GPT_5_6_TERRA,
173
176
  MODEL_GPT_5_MINI: () => MODEL_GPT_5_MINI,
174
177
  MODEL_GPT_5_NANO: () => MODEL_GPT_5_NANO,
178
+ MODEL_GPT_6_1_SOL: () => MODEL_GPT_6_1_SOL,
175
179
  MODEL_GPT_6_ASTRA: () => MODEL_GPT_6_ASTRA,
176
180
  MODEL_GPT_6_LUNA: () => MODEL_GPT_6_LUNA,
177
181
  MODEL_GPT_6_SOL: () => MODEL_GPT_6_SOL,
@@ -225,8 +229,11 @@ var AITuberOnAirChat = (() => {
225
229
  MODEL_OPENAI_GPT_5_6_TERRA: () => MODEL_OPENAI_GPT_5_6_TERRA,
226
230
  MODEL_OPENAI_GPT_5_MINI: () => MODEL_OPENAI_GPT_5_MINI,
227
231
  MODEL_OPENAI_GPT_5_NANO: () => MODEL_OPENAI_GPT_5_NANO,
232
+ MODEL_OPENAI_GPT_6_1_SOL: () => MODEL_OPENAI_GPT_6_1_SOL,
228
233
  MODEL_OPENAI_GPT_6_ASTRA: () => MODEL_OPENAI_GPT_6_ASTRA,
229
234
  MODEL_OPENAI_GPT_6_ASTRA_PRO: () => MODEL_OPENAI_GPT_6_ASTRA_PRO,
235
+ MODEL_OPENAI_GPT_6_LUNA: () => MODEL_OPENAI_GPT_6_LUNA,
236
+ MODEL_OPENAI_GPT_6_SOL: () => MODEL_OPENAI_GPT_6_SOL,
230
237
  MODEL_OPENAI_GPT_LATEST: () => MODEL_OPENAI_GPT_LATEST,
231
238
  MODEL_OPENAI_GPT_MINI_LATEST: () => MODEL_OPENAI_GPT_MINI_LATEST,
232
239
  MODEL_OPENROUTER_AUTO: () => MODEL_OPENROUTER_AUTO,
@@ -244,6 +251,7 @@ var AITuberOnAirChat = (() => {
244
251
  MODEL_SAKANA_NAMAZU: () => MODEL_SAKANA_NAMAZU,
245
252
  MODEL_XAI_GROK_4_5: () => MODEL_XAI_GROK_4_5,
246
253
  MODEL_XAI_GROK_4_6: () => MODEL_XAI_GROK_4_6,
254
+ MODEL_XAI_GROK_4_7: () => MODEL_XAI_GROK_4_7,
247
255
  MODEL_XAI_GROK_LATEST: () => MODEL_XAI_GROK_LATEST,
248
256
  MODEL_ZAI_GLM_4_5_AIR: () => MODEL_ZAI_GLM_4_5_AIR,
249
257
  MODEL_ZAI_GLM_4_5_AIR_FREE: () => MODEL_ZAI_GLM_4_5_AIR_FREE,
@@ -251,6 +259,7 @@ var AITuberOnAirChat = (() => {
251
259
  MODEL_ZAI_GLM_5_2: () => MODEL_ZAI_GLM_5_2,
252
260
  MODEL_ZAI_GLM_5_3: () => MODEL_ZAI_GLM_5_3,
253
261
  MODEL_ZAI_GLM_5_3_FLASH: () => MODEL_ZAI_GLM_5_3_FLASH,
262
+ MODEL_ZAI_GLM_5_3_FLASHX: () => MODEL_ZAI_GLM_5_3_FLASHX,
254
263
  MistralChatService: () => MistralChatService,
255
264
  MistralChatServiceProvider: () => MistralChatServiceProvider,
256
265
  OPENAI_COMPATIBLE_LOCAL_PRESETS: () => OPENAI_COMPATIBLE_LOCAL_PRESETS,
@@ -362,6 +371,7 @@ var AITuberOnAirChat = (() => {
362
371
  // src/constants/openai.ts
363
372
  var ENDPOINT_OPENAI_CHAT_COMPLETIONS_API = "https://api.openai.com/v1/chat/completions";
364
373
  var ENDPOINT_OPENAI_RESPONSES_API = "https://api.openai.com/v1/responses";
374
+ var MODEL_GPT_6_1_SOL = "gpt-6.1-sol";
365
375
  var MODEL_GPT_6_ASTRA = "gpt-6-astra";
366
376
  var MODEL_GPT_6_SOL = "gpt-6-sol";
367
377
  var MODEL_GPT_6_LUNA = "gpt-6-luna";
@@ -387,6 +397,7 @@ var AITuberOnAirChat = (() => {
387
397
  var MODEL_O1_MINI = "o1-mini";
388
398
  var MODEL_O1 = "o1";
389
399
  var VISION_SUPPORTED_MODELS = [
400
+ MODEL_GPT_6_1_SOL,
390
401
  MODEL_GPT_6_ASTRA,
391
402
  MODEL_GPT_6_SOL,
392
403
  MODEL_GPT_6_LUNA,
@@ -430,16 +441,16 @@ var AITuberOnAirChat = (() => {
430
441
  return GPT_5_MODELS.includes(model);
431
442
  }
432
443
  function isOpenAIReasoningModel(model) {
433
- return model === MODEL_GPT_6_ASTRA || model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || isGPT5Model(model);
444
+ return model === MODEL_GPT_6_1_SOL || model === MODEL_GPT_6_ASTRA || model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || isGPT5Model(model);
434
445
  }
435
446
  function isResponsesOnlyGPT5Model(model) {
436
447
  return model === MODEL_GPT_5_4_PRO;
437
448
  }
438
449
  function allowsReasoningXHigh(model) {
439
- return model === MODEL_GPT_6_ASTRA || model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || model === MODEL_GPT_5_6 || model === MODEL_GPT_5_6_SOL || model === MODEL_GPT_5_6_TERRA || model === MODEL_GPT_5_6_LUNA || model === MODEL_GPT_5_5 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO || model === MODEL_GPT_5_4_PRO;
450
+ return model === MODEL_GPT_6_1_SOL || model === MODEL_GPT_6_ASTRA || model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || model === MODEL_GPT_5_6 || model === MODEL_GPT_5_6_SOL || model === MODEL_GPT_5_6_TERRA || model === MODEL_GPT_5_6_LUNA || model === MODEL_GPT_5_5 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO || model === MODEL_GPT_5_4_PRO;
440
451
  }
441
452
  function allowsReasoningMax(model) {
442
- return model === MODEL_GPT_6_ASTRA || model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || model === MODEL_GPT_5_6 || model === MODEL_GPT_5_6_SOL || model === MODEL_GPT_5_6_TERRA || model === MODEL_GPT_5_6_LUNA;
453
+ return model === MODEL_GPT_6_1_SOL || model === MODEL_GPT_6_ASTRA || model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || model === MODEL_GPT_5_6 || model === MODEL_GPT_5_6_SOL || model === MODEL_GPT_5_6_TERRA || model === MODEL_GPT_5_6_LUNA;
443
454
  }
444
455
  function allowsReasoningNone(model) {
445
456
  return model === MODEL_GPT_6_SOL || model === MODEL_GPT_6_LUNA || model === MODEL_GPT_5_6 || model === MODEL_GPT_5_6_SOL || model === MODEL_GPT_5_6_TERRA || model === MODEL_GPT_5_6_LUNA || model === MODEL_GPT_5_1 || model === MODEL_GPT_5_4 || model === MODEL_GPT_5_5 || model === MODEL_GPT_5_4_MINI || model === MODEL_GPT_5_4_NANO;
@@ -460,7 +471,7 @@ var AITuberOnAirChat = (() => {
460
471
  return "medium";
461
472
  }
462
473
  function getDefaultReasoningEffortForOpenAIModel(model) {
463
- return model === MODEL_GPT_6_ASTRA ? "low" : model === MODEL_GPT_6_SOL ? "medium" : model === MODEL_GPT_6_LUNA ? "low" : getDefaultReasoningEffortForGPT5Model(model);
474
+ return model === MODEL_GPT_6_1_SOL || model === MODEL_GPT_6_ASTRA ? "low" : model === MODEL_GPT_6_SOL ? "medium" : model === MODEL_GPT_6_LUNA ? "low" : getDefaultReasoningEffortForGPT5Model(model);
464
475
  }
465
476
 
466
477
  // src/constants/gemini.ts
@@ -651,6 +662,12 @@ var AITuberOnAirChat = (() => {
651
662
 
652
663
  // src/constants/openrouter.ts
653
664
  var ENDPOINT_OPENROUTER_API = "https://openrouter.ai/api/v1/chat/completions";
665
+ var MODEL_OPENAI_GPT_6_1_SOL = "openai/gpt-6.1-sol";
666
+ var MODEL_OPENAI_GPT_6_SOL = "openai/gpt-6-sol";
667
+ var MODEL_OPENAI_GPT_6_LUNA = "openai/gpt-6-luna";
668
+ var MODEL_ANTHROPIC_CLAUDE_SONNET_5_5 = "anthropic/claude-sonnet-5.5";
669
+ var MODEL_ANTHROPIC_CLAUDE_OPUS_5_5 = "anthropic/claude-opus-5.5";
670
+ var MODEL_XAI_GROK_4_7 = "x-ai/grok-4.7";
654
671
  var MODEL_OPENAI_GPT_6_ASTRA = "openai/gpt-6-astra";
655
672
  var MODEL_OPENAI_GPT_6_ASTRA_PRO = "openai/gpt-6-astra-pro";
656
673
  var MODEL_ANTHROPIC_CLAUDE_FABLE_5_1 = "anthropic/claude-fable-5.1";
@@ -707,6 +724,7 @@ var AITuberOnAirChat = (() => {
707
724
  var MODEL_ZAI_GLM_5_2 = "z-ai/glm-5.2";
708
725
  var MODEL_ZAI_GLM_5_3 = "z-ai/glm-5.3";
709
726
  var MODEL_ZAI_GLM_5_3_FLASH = "z-ai/glm-5.3-flash";
727
+ var MODEL_ZAI_GLM_5_3_FLASHX = "z-ai/glm-5.3-flashx";
710
728
  var MODEL_ZAI_GLM_4_7_FLASH = "z-ai/glm-4.7-flash";
711
729
  var MODEL_ZAI_GLM_4_5_AIR = "z-ai/glm-4.5-air";
712
730
  var MODEL_ZAI_GLM_4_5_AIR_FREE = "z-ai/glm-4.5-air:free";
@@ -769,6 +787,31 @@ var AITuberOnAirChat = (() => {
769
787
  "max"
770
788
  ];
771
789
  var OPENROUTER_MODEL_REASONING = {
790
+ // Chat-oriented defaults avoid disabling mandatory reasoning and favor latency.
791
+ [MODEL_OPENAI_GPT_6_1_SOL]: {
792
+ efforts: ["low", "medium", "high", "xhigh", "max"],
793
+ defaultEffort: "low"
794
+ },
795
+ [MODEL_OPENAI_GPT_6_SOL]: {
796
+ efforts: ["none", "low", "medium", "high", "xhigh", "max"],
797
+ defaultEffort: "none"
798
+ },
799
+ [MODEL_OPENAI_GPT_6_LUNA]: {
800
+ efforts: ["none", "low", "medium", "high", "xhigh", "max"],
801
+ defaultEffort: "none"
802
+ },
803
+ [MODEL_ANTHROPIC_CLAUDE_SONNET_5_5]: {
804
+ efforts: ["low", "medium", "high", "xhigh", "max"],
805
+ defaultEffort: "low"
806
+ },
807
+ [MODEL_ANTHROPIC_CLAUDE_OPUS_5_5]: {
808
+ efforts: ["low", "medium", "high", "xhigh", "max"],
809
+ defaultEffort: "low"
810
+ },
811
+ [MODEL_XAI_GROK_4_7]: {
812
+ efforts: ["low", "medium", "high", "xhigh"],
813
+ defaultEffort: "low"
814
+ },
772
815
  [MODEL_OPENAI_GPT_6_ASTRA]: {
773
816
  efforts: ["max", "xhigh", "high", "medium", "low"],
774
817
  defaultEffort: "medium"
@@ -821,6 +864,12 @@ var AITuberOnAirChat = (() => {
821
864
  MODEL_NEX_AGI_NEX_N2_5_PRO_FREE
822
865
  ];
823
866
  var OPENROUTER_VISION_SUPPORTED_MODELS = [
867
+ MODEL_OPENAI_GPT_6_1_SOL,
868
+ MODEL_OPENAI_GPT_6_SOL,
869
+ MODEL_OPENAI_GPT_6_LUNA,
870
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5_5,
871
+ MODEL_ANTHROPIC_CLAUDE_OPUS_5_5,
872
+ MODEL_XAI_GROK_4_7,
824
873
  MODEL_OPENAI_GPT_6_ASTRA,
825
874
  MODEL_OPENAI_GPT_6_ASTRA_PRO,
826
875
  MODEL_ANTHROPIC_CLAUDE_FABLE_5_1,
@@ -866,6 +915,7 @@ var AITuberOnAirChat = (() => {
866
915
  MODEL_GOOGLE_GEMINI_2_5_FLASH,
867
916
  MODEL_GOOGLE_GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,
868
917
  MODEL_ZAI_GLM_5_3_FLASH,
918
+ MODEL_ZAI_GLM_5_3_FLASHX,
869
919
  MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP,
870
920
  MODEL_QWEN_QWEN_3_8_FLASH,
871
921
  MODEL_MOONSHOTAI_KIMI_K2_7_CODE,
@@ -893,7 +943,7 @@ var AITuberOnAirChat = (() => {
893
943
  normalizedModel
894
944
  ) ? OPENROUTER_MODEL_REASONING[normalizedModel] : void 0;
895
945
  if (profile) return profile.efforts;
896
- if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
946
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH || normalizedModel === MODEL_ZAI_GLM_5_3_FLASHX) {
897
947
  return OPENROUTER_ALWAYS_THINKING_REASONING_EFFORTS;
898
948
  }
899
949
  if (normalizedModel === MODEL_OPENROUTER_DEEPSEEK_V4_FLASH_VISION_EXP) {
@@ -920,7 +970,7 @@ var AITuberOnAirChat = (() => {
920
970
  normalizedModel
921
971
  ) ? OPENROUTER_MODEL_REASONING[normalizedModel] : void 0;
922
972
  if (profile) return profile.defaultEffort;
923
- if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
973
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH || normalizedModel === MODEL_ZAI_GLM_5_3_FLASHX) {
924
974
  return "low";
925
975
  }
926
976
  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;
@@ -939,7 +989,7 @@ var AITuberOnAirChat = (() => {
939
989
  if (!requested) {
940
990
  return void 0;
941
991
  }
942
- if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH) {
992
+ if (normalizedModel === MODEL_ZAI_GLM_5_3 || normalizedModel === MODEL_ZAI_GLM_5_3_FLASH || normalizedModel === MODEL_ZAI_GLM_5_3_FLASHX) {
943
993
  if (requested === "high") {
944
994
  return "high";
945
995
  }
@@ -989,6 +1039,7 @@ var AITuberOnAirChat = (() => {
989
1039
  var ENDPOINT_ZAI_CHAT_COMPLETIONS_API = "https://api.z.ai/api/paas/v4/chat/completions";
990
1040
  var MODEL_GLM_5_3 = "glm-5.3";
991
1041
  var MODEL_GLM_5_3_FLASH = "glm-5.3-flash";
1042
+ var MODEL_GLM_5_3_FLASHX = "glm-5.3-flashx";
992
1043
  var MODEL_GLM_5_2 = "glm-5.2";
993
1044
  var MODEL_GLM_5_1 = "glm-5.1";
994
1045
  var MODEL_GLM_5 = "glm-5";
@@ -1016,7 +1067,7 @@ var AITuberOnAirChat = (() => {
1016
1067
  "max"
1017
1068
  ];
1018
1069
  function isZaiAlwaysThinkingModel(model) {
1019
- return model === MODEL_GLM_5_3 || model === MODEL_GLM_5_3_FLASH;
1070
+ return model === MODEL_GLM_5_3 || model === MODEL_GLM_5_3_FLASH || model === MODEL_GLM_5_3_FLASHX;
1020
1071
  }
1021
1072
  function getZaiSupportedReasoningEfforts(model) {
1022
1073
  if (isZaiAlwaysThinkingModel(model)) {
@@ -1056,6 +1107,7 @@ var AITuberOnAirChat = (() => {
1056
1107
  return "max";
1057
1108
  }
1058
1109
  var ZAI_VISION_SUPPORTED_MODELS = [
1110
+ MODEL_GLM_5_3_FLASHX,
1059
1111
  MODEL_GLM_5_3_FLASH,
1060
1112
  MODEL_GLM_5V_TURBO,
1061
1113
  MODEL_GLM_4_6V,
@@ -2874,6 +2926,15 @@ If it's in another language, summarize in that language.
2874
2926
  };
2875
2927
 
2876
2928
  // src/services/providers/openai/responsesParser.ts
2929
+ function throwIfResponsesError(data, eventType) {
2930
+ const response = data?.response ?? data;
2931
+ const error = response?.error;
2932
+ if (!error && response?.status !== "failed" && eventType !== "error" && eventType !== "response.failed") {
2933
+ return;
2934
+ }
2935
+ const message = typeof error === "string" ? error : error?.message ?? data?.message ?? "The provider response failed.";
2936
+ throw new Error(`Provider response error: ${message}`);
2937
+ }
2877
2938
  async function parseOpenAIResponsesStream(res, onPartial, options = {}) {
2878
2939
  const reader = res.body.getReader();
2879
2940
  const dec = new TextDecoder();
@@ -2884,12 +2945,12 @@ If it's in another language, summarize in that language.
2884
2945
  let incompleteDetails;
2885
2946
  let usage;
2886
2947
  let buf = "";
2948
+ let eventType = "";
2949
+ let eventData = "";
2887
2950
  while (true) {
2888
2951
  const { done, value } = await reader.read();
2889
2952
  if (done) break;
2890
2953
  buf += dec.decode(value, { stream: true });
2891
- let eventType = "";
2892
- let eventData = "";
2893
2954
  const lines = buf.split("\n");
2894
2955
  buf = lines.pop() || "";
2895
2956
  for (let i = 0; i < lines.length; i++) {
@@ -2899,31 +2960,36 @@ If it's in another language, summarize in that language.
2899
2960
  } else if (line.startsWith("data:")) {
2900
2961
  eventData = line.slice(5).trim();
2901
2962
  } else if (line === "" && eventType && eventData) {
2963
+ let json;
2902
2964
  try {
2903
- const json = JSON.parse(eventData);
2904
- handleResponsesSSEEvent(
2905
- eventType,
2906
- json,
2907
- onPartial,
2908
- textBlocks,
2909
- toolCallsMap,
2910
- providerItems,
2911
- (metadata) => {
2912
- if (metadata.responseStatus !== void 0) {
2913
- responseStatus = metadata.responseStatus;
2914
- }
2915
- if (metadata.incompleteDetails !== void 0) {
2916
- incompleteDetails = metadata.incompleteDetails;
2917
- }
2918
- if (metadata.usage !== void 0) {
2919
- usage = metadata.usage;
2920
- }
2921
- }
2922
- );
2965
+ json = JSON.parse(eventData);
2923
2966
  } catch (error) {
2924
2967
  options.onJsonError?.(eventData, error);
2925
2968
  console.warn("Failed to parse SSE data:", eventData);
2969
+ eventType = "";
2970
+ eventData = "";
2971
+ continue;
2926
2972
  }
2973
+ throwIfResponsesError(json, eventType);
2974
+ handleResponsesSSEEvent(
2975
+ eventType,
2976
+ json,
2977
+ onPartial,
2978
+ textBlocks,
2979
+ toolCallsMap,
2980
+ providerItems,
2981
+ (metadata) => {
2982
+ if (metadata.responseStatus !== void 0) {
2983
+ responseStatus = metadata.responseStatus;
2984
+ }
2985
+ if (metadata.incompleteDetails !== void 0) {
2986
+ incompleteDetails = metadata.incompleteDetails;
2987
+ }
2988
+ if (metadata.usage !== void 0) {
2989
+ usage = metadata.usage;
2990
+ }
2991
+ }
2992
+ );
2927
2993
  eventType = "";
2928
2994
  eventData = "";
2929
2995
  }
@@ -3051,6 +3117,7 @@ If it's in another language, summarize in that language.
3051
3117
  };
3052
3118
  }
3053
3119
  function parseOpenAIResponsesOneShot(data, options = {}) {
3120
+ throwIfResponsesError(data);
3054
3121
  const blocks = [];
3055
3122
  if (data.output && Array.isArray(data.output)) {
3056
3123
  data.output.forEach((outputItem) => {
@@ -3185,10 +3252,15 @@ If it's in another language, summarize in that language.
3185
3252
  chatTemplateThinking,
3186
3253
  maxTokens
3187
3254
  }) {
3188
- if (model === MODEL_GPT_6_ASTRA && (!reasoning_effort || reasoning_effort === "none" || reasoning_effort === "minimal")) {
3255
+ if ((model === MODEL_GPT_6_ASTRA || provider === "openai" && model === MODEL_GPT_6_1_SOL) && (!reasoning_effort || reasoning_effort === "none" || reasoning_effort === "minimal")) {
3189
3256
  reasoning_effort = "low";
3190
3257
  }
3191
3258
  const isResponsesAPI = endpoint === ENDPOINT_OPENAI_RESPONSES_API;
3259
+ if (provider === "openai" && model === MODEL_GPT_6_1_SOL && (tools.length > 0 || mcpServers.length > 0) && !isResponsesAPI) {
3260
+ throw new Error(
3261
+ "GPT-6.1 Sol tool calling requires the OpenAI Responses API endpoint: " + ENDPOINT_OPENAI_RESPONSES_API + ". Custom endpoints use Chat Completions and cannot be used with this model's tools."
3262
+ );
3263
+ }
3192
3264
  validateMCPCompatibility(endpoint, mcpServers);
3193
3265
  const body = {
3194
3266
  model,
@@ -3405,7 +3477,8 @@ If it's in another language, summarize in that language.
3405
3477
  this.apiKey = apiKey;
3406
3478
  this.model = model;
3407
3479
  this.tools = tools || [];
3408
- this.endpoint = (model === MODEL_GPT_6_ASTRA || visionModel === MODEL_GPT_6_ASTRA) && endpoint === ENDPOINT_OPENAI_CHAT_COMPLETIONS_API ? ENDPOINT_OPENAI_RESPONSES_API : endpoint;
3480
+ const solToolsRequireResponses = provider === "openai" && (model === MODEL_GPT_6_1_SOL || visionModel === MODEL_GPT_6_1_SOL) && (this.tools.length > 0 || mcpServers.length > 0);
3481
+ this.endpoint = (model === MODEL_GPT_6_ASTRA || visionModel === MODEL_GPT_6_ASTRA || solToolsRequireResponses) && endpoint === ENDPOINT_OPENAI_CHAT_COMPLETIONS_API ? ENDPOINT_OPENAI_RESPONSES_API : endpoint;
3409
3482
  this.mcpServers = mcpServers;
3410
3483
  this.responseLength = responseLength;
3411
3484
  this.verbosity = verbosity;
@@ -3572,15 +3645,18 @@ If it's in another language, summarize in that language.
3572
3645
  return res;
3573
3646
  }
3574
3647
  async handleStream(res, onPartial) {
3575
- return parseOpenAICompatibleTextStream(res, onPartial);
3648
+ return parseOpenAICompatibleTextStream(res, onPartial, {
3649
+ throwOnApiError: true
3650
+ });
3576
3651
  }
3577
3652
  async parseStream(res, onPartial) {
3578
3653
  return parseOpenAICompatibleToolStream(res, onPartial, {
3579
- appendTextBlock: StreamTextAccumulator.addTextBlock
3654
+ appendTextBlock: StreamTextAccumulator.addTextBlock,
3655
+ throwOnApiError: true
3580
3656
  });
3581
3657
  }
3582
3658
  parseOneShot(data) {
3583
- return parseOpenAICompatibleOneShot(data);
3659
+ return parseOpenAICompatibleOneShot(data, { throwOnApiError: true });
3584
3660
  }
3585
3661
  };
3586
3662
 
@@ -5540,6 +5616,9 @@ If it's in another language, summarize in that language.
5540
5616
  shouldUseResponsesAPI = preference !== "chat" || optimizedOptions.reasoning_effort !== "none";
5541
5617
  } else if (isResponsesOnlyGPT5Model(modelName)) {
5542
5618
  shouldUseResponsesAPI = true;
5619
+ } else if (modelName === MODEL_GPT_6_1_SOL || visionModel === MODEL_GPT_6_1_SOL) {
5620
+ const preference = optimizedOptions.gpt5EndpointPreference || "responses";
5621
+ shouldUseResponsesAPI = (tools?.length ?? 0) > 0 || preference !== "chat";
5543
5622
  } else if (isOpenAIReasoningModel(modelName)) {
5544
5623
  const preference = optimizedOptions.gpt5EndpointPreference || "chat";
5545
5624
  shouldUseResponsesAPI = preference === "responses";
@@ -5583,6 +5662,7 @@ If it's in another language, summarize in that language.
5583
5662
  MODEL_GPT_5_4,
5584
5663
  MODEL_GPT_5_5,
5585
5664
  MODEL_GPT_5_6,
5665
+ MODEL_GPT_6_1_SOL,
5586
5666
  MODEL_GPT_6_ASTRA,
5587
5667
  MODEL_GPT_6_SOL,
5588
5668
  MODEL_GPT_6_LUNA,
@@ -5947,7 +6027,7 @@ If it's in another language, summarize in that language.
5947
6027
  async handleStream(res, onPartial, model) {
5948
6028
  const text = await parseOpenAICompatibleTextStream(res, onPartial, {
5949
6029
  onJsonError: (payload) => console.debug("Failed to parse SSE data:", payload),
5950
- throwOnApiError: isOpenRouterAutoModel(model)
6030
+ throwOnApiError: true
5951
6031
  });
5952
6032
  ensureAutoRouterOutput(model, text.trim().length > 0);
5953
6033
  return text;
@@ -5958,7 +6038,7 @@ If it's in another language, summarize in that language.
5958
6038
  async parseStream(res, onPartial, model) {
5959
6039
  const completion = await parseOpenAICompatibleToolStream(res, onPartial, {
5960
6040
  onJsonError: (payload) => console.debug("Failed to parse SSE data:", payload),
5961
- throwOnApiError: isOpenRouterAutoModel(model)
6041
+ throwOnApiError: true
5962
6042
  });
5963
6043
  ensureAutoRouterOutput(model, hasUsableCompletionOutput(completion));
5964
6044
  return completion;
@@ -5968,7 +6048,7 @@ If it's in another language, summarize in that language.
5968
6048
  */
5969
6049
  parseOneShot(data, model) {
5970
6050
  const completion = parseOpenAICompatibleOneShot(data, {
5971
- throwOnApiError: isOpenRouterAutoModel(model)
6051
+ throwOnApiError: true
5972
6052
  });
5973
6053
  ensureAutoRouterOutput(model, hasUsableCompletionOutput(completion));
5974
6054
  return completion;
@@ -6022,6 +6102,12 @@ If it's in another language, summarize in that language.
6022
6102
  */
6023
6103
  getSupportedModels() {
6024
6104
  return [
6105
+ MODEL_OPENAI_GPT_6_1_SOL,
6106
+ MODEL_OPENAI_GPT_6_SOL,
6107
+ MODEL_OPENAI_GPT_6_LUNA,
6108
+ MODEL_ANTHROPIC_CLAUDE_SONNET_5_5,
6109
+ MODEL_ANTHROPIC_CLAUDE_OPUS_5_5,
6110
+ MODEL_XAI_GROK_4_7,
6025
6111
  MODEL_OPENAI_GPT_6_ASTRA,
6026
6112
  MODEL_OPENAI_GPT_6_ASTRA_PRO,
6027
6113
  MODEL_ANTHROPIC_CLAUDE_FABLE_5_1,
@@ -6075,6 +6161,7 @@ If it's in another language, summarize in that language.
6075
6161
  // Z.ai models
6076
6162
  MODEL_ZAI_GLM_5_3,
6077
6163
  MODEL_ZAI_GLM_5_3_FLASH,
6164
+ MODEL_ZAI_GLM_5_3_FLASHX,
6078
6165
  MODEL_ZAI_GLM_5_2,
6079
6166
  MODEL_ZAI_GLM_4_7_FLASH,
6080
6167
  MODEL_ZAI_GLM_4_5_AIR,
@@ -6673,10 +6760,19 @@ If it's in another language, summarize in that language.
6673
6760
  if (this.responseFormat) {
6674
6761
  body.response_format = this.responseFormat;
6675
6762
  }
6676
- if (this.thinking) {
6763
+ if (model === MODEL_GLM_5_3_FLASHX) {
6764
+ body.thinking = {
6765
+ type: "enabled",
6766
+ clear_thinking: this.thinking?.clear_thinking ?? true
6767
+ };
6768
+ body.reasoning_effort = normalizeZaiReasoningEffort(
6769
+ model,
6770
+ this.reasoningEffort
6771
+ );
6772
+ } else if (this.thinking) {
6677
6773
  body.thinking = this.thinking;
6678
6774
  }
6679
- if (isZaiReasoningEffortModel(model) && this.reasoningEffort) {
6775
+ if (model !== MODEL_GLM_5_3_FLASHX && isZaiReasoningEffortModel(model) && this.reasoningEffort) {
6680
6776
  body.reasoning_effort = this.reasoningEffort;
6681
6777
  }
6682
6778
  const tools = this.buildToolsDefinition();
@@ -6694,6 +6790,7 @@ If it's in another language, summarize in that language.
6694
6790
  }
6695
6791
  async handleStream(res, onPartial) {
6696
6792
  return parseOpenAICompatibleTextStream(res, onPartial, {
6793
+ throwOnApiError: true,
6697
6794
  onJsonError: (payload) => console.debug("Failed to parse SSE data:", payload)
6698
6795
  });
6699
6796
  }
@@ -6702,6 +6799,7 @@ If it's in another language, summarize in that language.
6702
6799
  */
6703
6800
  async parseStream(res, onPartial) {
6704
6801
  return parseOpenAICompatibleToolStream(res, onPartial, {
6802
+ throwOnApiError: true,
6705
6803
  onJsonError: (payload) => console.debug("Failed to parse SSE data:", payload)
6706
6804
  });
6707
6805
  }
@@ -6709,7 +6807,7 @@ If it's in another language, summarize in that language.
6709
6807
  * Parse non-streaming response
6710
6808
  */
6711
6809
  parseOneShot(data) {
6712
- return parseOpenAICompatibleOneShot(data);
6810
+ return parseOpenAICompatibleOneShot(data, { throwOnApiError: true });
6713
6811
  }
6714
6812
  };
6715
6813
 
@@ -6778,6 +6876,7 @@ If it's in another language, summarize in that language.
6778
6876
  return [
6779
6877
  MODEL_GLM_5_3,
6780
6878
  MODEL_GLM_5_3_FLASH,
6879
+ MODEL_GLM_5_3_FLASHX,
6781
6880
  MODEL_GLM_5_2,
6782
6881
  MODEL_GLM_5_1,
6783
6882
  MODEL_GLM_5,
@@ -7034,7 +7133,7 @@ If it's in another language, summarize in that language.
7034
7133
  mcp: MCP_SUPPORTED_PROVIDERS.has(providerName),
7035
7134
  jsonMode: JSON_MODE_SUPPORTED_PROVIDERS.has(providerName),
7036
7135
  responseLength: true,
7037
- reasoningEffort: providerName === "openai" && model === MODEL_GPT_6_ASTRA ? ["low", "medium", "high", "xhigh", "max"] : providerName === "openai" && model === MODEL_GPT_6_SOL ? ["none", "low", "medium", "high", "xhigh", "max"] : providerName === "openai" && model === MODEL_GPT_6_LUNA ? ["none", "low", "medium", "high", "xhigh", "max"] : providerName === "claude" && model ? [...getClaudeSupportedReasoningEfforts(model)] : providerName === "gemini" && model ? [...getGeminiSupportedReasoningEfforts(model)] : providerName === "kimi" && model ? [...getKimiSupportedReasoningEfforts(model)] : providerName === "deepseek" && model ? [...getDeepSeekSupportedReasoningEfforts(model)] : providerName === "openrouter" && model ? [...getOpenRouterSupportedReasoningEfforts(model)] : providerName === "xai" && model ? [...getXaiSupportedReasoningEfforts(model)] : providerName === "zai" && model ? [...getZaiSupportedReasoningEfforts(model)] : REASONING_EFFORT_BY_PROVIDER[providerName] ?? []
7136
+ reasoningEffort: providerName === "openai" && (model === MODEL_GPT_6_1_SOL || model === MODEL_GPT_6_ASTRA) ? ["low", "medium", "high", "xhigh", "max"] : providerName === "openai" && model === MODEL_GPT_6_SOL ? ["none", "low", "medium", "high", "xhigh", "max"] : providerName === "openai" && model === MODEL_GPT_6_LUNA ? ["none", "low", "medium", "high", "xhigh", "max"] : providerName === "claude" && model ? [...getClaudeSupportedReasoningEfforts(model)] : providerName === "gemini" && model ? [...getGeminiSupportedReasoningEfforts(model)] : providerName === "kimi" && model ? [...getKimiSupportedReasoningEfforts(model)] : providerName === "deepseek" && model ? [...getDeepSeekSupportedReasoningEfforts(model)] : providerName === "openrouter" && model ? [...getOpenRouterSupportedReasoningEfforts(model)] : providerName === "xai" && model ? [...getXaiSupportedReasoningEfforts(model)] : providerName === "zai" && model ? [...getZaiSupportedReasoningEfforts(model)] : REASONING_EFFORT_BY_PROVIDER[providerName] ?? []
7038
7137
  };
7039
7138
  }
7040
7139
  /**