@aituber-onair/chat 0.42.0 → 0.44.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 (93) hide show
  1. package/README.ja.md +35 -2
  2. package/README.md +35 -2
  3. package/dist/cjs/constants/claude.d.ts +1 -0
  4. package/dist/cjs/constants/claude.d.ts.map +1 -1
  5. package/dist/cjs/constants/claude.js +3 -1
  6. package/dist/cjs/constants/claude.js.map +1 -1
  7. package/dist/cjs/constants/xai.d.ts +9 -0
  8. package/dist/cjs/constants/xai.d.ts.map +1 -1
  9. package/dist/cjs/constants/xai.js +14 -0
  10. package/dist/cjs/constants/xai.js.map +1 -1
  11. package/dist/cjs/services/ChatServiceFactory.d.ts +9 -0
  12. package/dist/cjs/services/ChatServiceFactory.d.ts.map +1 -1
  13. package/dist/cjs/services/ChatServiceFactory.js +63 -0
  14. package/dist/cjs/services/ChatServiceFactory.js.map +1 -1
  15. package/dist/cjs/services/providers/ChatServiceProvider.d.ts +6 -2
  16. package/dist/cjs/services/providers/ChatServiceProvider.d.ts.map +1 -1
  17. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  18. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js +1 -0
  19. package/dist/cjs/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  20. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts +5 -1
  21. package/dist/cjs/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  22. package/dist/cjs/services/providers/openai/OpenAIChatService.js +3 -1
  23. package/dist/cjs/services/providers/openai/OpenAIChatService.js.map +1 -1
  24. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  25. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js +17 -1
  26. package/dist/cjs/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  27. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts +4 -1
  28. package/dist/cjs/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  29. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js +21 -1
  30. package/dist/cjs/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  31. package/dist/cjs/services/providers/openaiCompatible/OpenAICompatibleChatServiceProvider.d.ts.map +1 -1
  32. package/dist/cjs/services/providers/openaiCompatible/OpenAICompatibleChatServiceProvider.js +18 -1
  33. package/dist/cjs/services/providers/openaiCompatible/OpenAICompatibleChatServiceProvider.js.map +1 -1
  34. package/dist/cjs/services/providers/xai/XAIChatService.d.ts +3 -1
  35. package/dist/cjs/services/providers/xai/XAIChatService.d.ts.map +1 -1
  36. package/dist/cjs/services/providers/xai/XAIChatService.js +5 -1
  37. package/dist/cjs/services/providers/xai/XAIChatService.js.map +1 -1
  38. package/dist/cjs/services/providers/xai/XAIChatServiceProvider.d.ts.map +1 -1
  39. package/dist/cjs/services/providers/xai/XAIChatServiceProvider.js +1 -1
  40. package/dist/cjs/services/providers/xai/XAIChatServiceProvider.js.map +1 -1
  41. package/dist/cjs/types/capabilities.d.ts +15 -0
  42. package/dist/cjs/types/capabilities.d.ts.map +1 -0
  43. package/dist/cjs/types/capabilities.js +3 -0
  44. package/dist/cjs/types/capabilities.js.map +1 -0
  45. package/dist/cjs/types/index.d.ts +1 -0
  46. package/dist/cjs/types/index.d.ts.map +1 -1
  47. package/dist/esm/constants/claude.d.ts +1 -0
  48. package/dist/esm/constants/claude.d.ts.map +1 -1
  49. package/dist/esm/constants/claude.js +2 -0
  50. package/dist/esm/constants/claude.js.map +1 -1
  51. package/dist/esm/constants/xai.d.ts +9 -0
  52. package/dist/esm/constants/xai.d.ts.map +1 -1
  53. package/dist/esm/constants/xai.js +12 -0
  54. package/dist/esm/constants/xai.js.map +1 -1
  55. package/dist/esm/services/ChatServiceFactory.d.ts +9 -0
  56. package/dist/esm/services/ChatServiceFactory.d.ts.map +1 -1
  57. package/dist/esm/services/ChatServiceFactory.js +63 -0
  58. package/dist/esm/services/ChatServiceFactory.js.map +1 -1
  59. package/dist/esm/services/providers/ChatServiceProvider.d.ts +6 -2
  60. package/dist/esm/services/providers/ChatServiceProvider.d.ts.map +1 -1
  61. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.d.ts.map +1 -1
  62. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js +2 -1
  63. package/dist/esm/services/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  64. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts +5 -1
  65. package/dist/esm/services/providers/openai/OpenAIChatService.d.ts.map +1 -1
  66. package/dist/esm/services/providers/openai/OpenAIChatService.js +3 -1
  67. package/dist/esm/services/providers/openai/OpenAIChatService.js.map +1 -1
  68. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.d.ts.map +1 -1
  69. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js +17 -1
  70. package/dist/esm/services/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  71. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts +4 -1
  72. package/dist/esm/services/providers/openai/openaiRequestBuilder.d.ts.map +1 -1
  73. package/dist/esm/services/providers/openai/openaiRequestBuilder.js +21 -1
  74. package/dist/esm/services/providers/openai/openaiRequestBuilder.js.map +1 -1
  75. package/dist/esm/services/providers/openaiCompatible/OpenAICompatibleChatServiceProvider.d.ts.map +1 -1
  76. package/dist/esm/services/providers/openaiCompatible/OpenAICompatibleChatServiceProvider.js +18 -1
  77. package/dist/esm/services/providers/openaiCompatible/OpenAICompatibleChatServiceProvider.js.map +1 -1
  78. package/dist/esm/services/providers/xai/XAIChatService.d.ts +3 -1
  79. package/dist/esm/services/providers/xai/XAIChatService.d.ts.map +1 -1
  80. package/dist/esm/services/providers/xai/XAIChatService.js +6 -2
  81. package/dist/esm/services/providers/xai/XAIChatService.js.map +1 -1
  82. package/dist/esm/services/providers/xai/XAIChatServiceProvider.d.ts.map +1 -1
  83. package/dist/esm/services/providers/xai/XAIChatServiceProvider.js +2 -2
  84. package/dist/esm/services/providers/xai/XAIChatServiceProvider.js.map +1 -1
  85. package/dist/esm/types/capabilities.d.ts +15 -0
  86. package/dist/esm/types/capabilities.d.ts.map +1 -0
  87. package/dist/esm/types/capabilities.js +2 -0
  88. package/dist/esm/types/capabilities.js.map +1 -0
  89. package/dist/esm/types/index.d.ts +1 -0
  90. package/dist/esm/types/index.d.ts.map +1 -1
  91. package/dist/umd/aituber-onair-chat.js +114 -8
  92. package/dist/umd/aituber-onair-chat.min.js +7 -7
  93. package/package.json +1 -1
@@ -90,6 +90,7 @@ var AITuberOnAirChat = (() => {
90
90
  MODEL_CLAUDE_4_8_OPUS: () => MODEL_CLAUDE_4_8_OPUS,
91
91
  MODEL_CLAUDE_4_OPUS: () => MODEL_CLAUDE_4_OPUS,
92
92
  MODEL_CLAUDE_4_SONNET: () => MODEL_CLAUDE_4_SONNET,
93
+ MODEL_CLAUDE_5_SONNET: () => MODEL_CLAUDE_5_SONNET,
93
94
  MODEL_DEEPSEEK_CHAT: () => MODEL_DEEPSEEK_CHAT,
94
95
  MODEL_DEEPSEEK_REASONER: () => MODEL_DEEPSEEK_REASONER,
95
96
  MODEL_DEEPSEEK_V4_FLASH: () => MODEL_DEEPSEEK_V4_FLASH,
@@ -215,6 +216,7 @@ var AITuberOnAirChat = (() => {
215
216
  allowsReasoningXHigh: () => allowsReasoningXHigh,
216
217
  buildOpenAICompatibleTools: () => buildOpenAICompatibleTools,
217
218
  getDefaultReasoningEffortForGPT5Model: () => getDefaultReasoningEffortForGPT5Model,
219
+ getDefaultXaiReasoningEffort: () => getDefaultXaiReasoningEffort,
218
220
  getMaxTokensForResponseLength: () => getMaxTokensForResponseLength,
219
221
  installGASFetch: () => installGASFetch,
220
222
  isGPT5Model: () => isGPT5Model,
@@ -226,6 +228,7 @@ var AITuberOnAirChat = (() => {
226
228
  isOpenRouterFreeModel: () => isOpenRouterFreeModel,
227
229
  isOpenRouterVisionModel: () => isOpenRouterVisionModel,
228
230
  isResponsesOnlyGPT5Model: () => isResponsesOnlyGPT5Model,
231
+ isXaiReasoningEffortModel: () => isXaiReasoningEffortModel,
229
232
  isXaiVisionModel: () => isXaiVisionModel,
230
233
  isZaiToolStreamModel: () => isZaiToolStreamModel,
231
234
  isZaiVisionModel: () => isZaiVisionModel,
@@ -370,6 +373,7 @@ var AITuberOnAirChat = (() => {
370
373
  var MODEL_CLAUDE_4_6_OPUS = "claude-opus-4-6";
371
374
  var MODEL_CLAUDE_4_7_OPUS = "claude-opus-4-7";
372
375
  var MODEL_CLAUDE_4_8_OPUS = "claude-opus-4-8";
376
+ var MODEL_CLAUDE_5_SONNET = "claude-sonnet-5";
373
377
  var CLAUDE_VISION_SUPPORTED_MODELS = [
374
378
  MODEL_CLAUDE_3_HAIKU,
375
379
  MODEL_CLAUDE_4_SONNET,
@@ -380,7 +384,8 @@ var AITuberOnAirChat = (() => {
380
384
  MODEL_CLAUDE_4_6_SONNET,
381
385
  MODEL_CLAUDE_4_6_OPUS,
382
386
  MODEL_CLAUDE_4_7_OPUS,
383
- MODEL_CLAUDE_4_8_OPUS
387
+ MODEL_CLAUDE_4_8_OPUS,
388
+ MODEL_CLAUDE_5_SONNET
384
389
  ];
385
390
 
386
391
  // src/constants/openrouter.ts
@@ -503,6 +508,12 @@ var AITuberOnAirChat = (() => {
503
508
  function isXaiVisionModel(model) {
504
509
  return XAI_VISION_SUPPORTED_MODELS.includes(model);
505
510
  }
511
+ function isXaiReasoningEffortModel(model) {
512
+ return model === MODEL_GROK_4_3;
513
+ }
514
+ function getDefaultXaiReasoningEffort(model) {
515
+ return isXaiReasoningEffortModel(model) ? "none" : void 0;
516
+ }
506
517
 
507
518
  // src/constants/kimi.ts
508
519
  var ENDPOINT_KIMI_CHAT_COMPLETIONS_API = "https://api.moonshot.ai/v1/chat/completions";
@@ -1809,6 +1820,7 @@ If it's in another language, summarize in that language.
1809
1820
  MODEL_CLAUDE_4_6_OPUS,
1810
1821
  MODEL_CLAUDE_4_7_OPUS,
1811
1822
  MODEL_CLAUDE_4_8_OPUS,
1823
+ MODEL_CLAUDE_5_SONNET,
1812
1824
  MODEL_CLAUDE_3_HAIKU
1813
1825
  ];
1814
1826
  }
@@ -2074,6 +2086,15 @@ If it's in another language, summarize in that language.
2074
2086
  "sakana",
2075
2087
  "plamo"
2076
2088
  ]);
2089
+ function toResponsesTextFormat(responseFormat) {
2090
+ if (responseFormat.type !== "json_schema") {
2091
+ return responseFormat;
2092
+ }
2093
+ return {
2094
+ type: responseFormat.type,
2095
+ ...responseFormat.json_schema
2096
+ };
2097
+ }
2077
2098
  function buildOpenAIRequestBody({
2078
2099
  provider,
2079
2100
  endpoint,
@@ -2086,6 +2107,7 @@ If it's in another language, summarize in that language.
2086
2107
  verbosity,
2087
2108
  reasoning_effort,
2088
2109
  enableReasoningSummary,
2110
+ responseFormat,
2089
2111
  maxTokens
2090
2112
  }) {
2091
2113
  const isResponsesAPI = endpoint === ENDPOINT_OPENAI_RESPONSES_API;
@@ -2146,6 +2168,16 @@ If it's in another language, summarize in that language.
2146
2168
  }
2147
2169
  }
2148
2170
  }
2171
+ if (responseFormat) {
2172
+ if (isResponsesAPI) {
2173
+ body.text = {
2174
+ ...body.text,
2175
+ format: toResponsesTextFormat(responseFormat)
2176
+ };
2177
+ } else {
2178
+ body.response_format = responseFormat;
2179
+ }
2180
+ }
2149
2181
  if (provider === "mistral" && isMistralReasoningEffortModel(model) && reasoning_effort && isMistralReasoningEffort(reasoning_effort)) {
2150
2182
  body.reasoning_effort = reasoning_effort;
2151
2183
  }
@@ -2255,7 +2287,7 @@ If it's in another language, summarize in that language.
2255
2287
  * @param model Name of the model to use
2256
2288
  * @param visionModel Name of the vision model
2257
2289
  */
2258
- 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) {
2290
+ 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) {
2259
2291
  this.provider = provider;
2260
2292
  this.apiKey = apiKey;
2261
2293
  this.model = model;
@@ -2266,6 +2298,7 @@ If it's in another language, summarize in that language.
2266
2298
  this.verbosity = verbosity;
2267
2299
  this.reasoning_effort = reasoning_effort;
2268
2300
  this.enableReasoningSummary = enableReasoningSummary;
2301
+ this.responseFormat = responseFormat;
2269
2302
  if (validateVisionModel && !VISION_SUPPORTED_MODELS.includes(visionModel)) {
2270
2303
  throw new Error(
2271
2304
  `Model ${visionModel} does not support vision capabilities.`
@@ -2412,6 +2445,7 @@ If it's in another language, summarize in that language.
2412
2445
  verbosity: this.verbosity,
2413
2446
  reasoning_effort: this.reasoning_effort,
2414
2447
  enableReasoningSummary: this.enableReasoningSummary,
2448
+ responseFormat: this.responseFormat,
2415
2449
  maxTokens
2416
2450
  });
2417
2451
  const headers = {};
@@ -3858,7 +3892,7 @@ If it's in another language, summarize in that language.
3858
3892
  var OpenAICompatibleChatServiceProvider = class {
3859
3893
  createChatService(options) {
3860
3894
  this.validateRequiredOptions(options);
3861
- return new OpenAIChatService(
3895
+ const serviceArgs = [
3862
3896
  options.apiKey?.trim() ?? "",
3863
3897
  options.model,
3864
3898
  options.visionModel ?? options.model,
@@ -3871,7 +3905,11 @@ If it's in another language, summarize in that language.
3871
3905
  options.enableReasoningSummary,
3872
3906
  this.getProviderName(),
3873
3907
  false
3874
- );
3908
+ ];
3909
+ if (options.responseFormat !== void 0) {
3910
+ serviceArgs.push(options.responseFormat);
3911
+ }
3912
+ return new OpenAIChatService(...serviceArgs);
3875
3913
  }
3876
3914
  getProviderName() {
3877
3915
  return "openai-compatible";
@@ -3958,7 +3996,7 @@ If it's in another language, summarize in that language.
3958
3996
  shouldUseResponsesAPI = preference === "responses";
3959
3997
  }
3960
3998
  const endpoint = optimizedOptions.endpoint || (shouldUseResponsesAPI ? ENDPOINT_OPENAI_RESPONSES_API : ENDPOINT_OPENAI_CHAT_COMPLETIONS_API);
3961
- return new OpenAIChatService(
3999
+ const serviceArgs = [
3962
4000
  optimizedOptions.apiKey,
3963
4001
  modelName,
3964
4002
  visionModel,
@@ -3970,7 +4008,11 @@ If it's in another language, summarize in that language.
3970
4008
  optimizedOptions.reasoning_effort,
3971
4009
  optimizedOptions.enableReasoningSummary,
3972
4010
  this.getProviderName()
3973
- );
4011
+ ];
4012
+ if (optimizedOptions.responseFormat !== void 0) {
4013
+ serviceArgs.push(true, optimizedOptions.responseFormat);
4014
+ }
4015
+ return new OpenAIChatService(...serviceArgs);
3974
4016
  }
3975
4017
  /**
3976
4018
  * Get the provider name
@@ -4645,7 +4687,7 @@ If it's in another language, summarize in that language.
4645
4687
  * @param model Name of the model to use
4646
4688
  * @param visionModel Name of the vision model
4647
4689
  */
4648
- constructor(apiKey, model = MODEL_GROK_4_1_FAST_NON_REASONING, visionModel = MODEL_GROK_4_1_FAST_NON_REASONING, tools, endpoint = ENDPOINT_XAI_CHAT_COMPLETIONS_API, responseLength) {
4690
+ constructor(apiKey, model = MODEL_GROK_4_1_FAST_NON_REASONING, visionModel = MODEL_GROK_4_1_FAST_NON_REASONING, tools, endpoint = ENDPOINT_XAI_CHAT_COMPLETIONS_API, responseLength, reasoningEffort) {
4649
4691
  /** Provider name */
4650
4692
  this.provider = "xai";
4651
4693
  this.apiKey = apiKey;
@@ -4654,6 +4696,7 @@ If it's in another language, summarize in that language.
4654
4696
  this.endpoint = endpoint;
4655
4697
  this.responseLength = responseLength;
4656
4698
  this.visionModel = visionModel;
4699
+ this.reasoningEffort = reasoningEffort;
4657
4700
  }
4658
4701
  /**
4659
4702
  * Get the current model name
@@ -4751,6 +4794,9 @@ If it's in another language, summarize in that language.
4751
4794
  if (tokenLimit !== void 0) {
4752
4795
  body.max_tokens = tokenLimit;
4753
4796
  }
4797
+ if (this.reasoningEffort && isXaiReasoningEffortModel(model)) {
4798
+ body.reasoning_effort = this.reasoningEffort;
4799
+ }
4754
4800
  const tools = this.buildToolsDefinition();
4755
4801
  if (tools.length > 0) {
4756
4802
  body.tools = tools;
@@ -4804,7 +4850,8 @@ If it's in another language, summarize in that language.
4804
4850
  visionModel,
4805
4851
  tools,
4806
4852
  options.endpoint || ENDPOINT_XAI_CHAT_COMPLETIONS_API,
4807
- options.responseLength
4853
+ options.responseLength,
4854
+ options.reasoning_effort ?? getDefaultXaiReasoningEffort(model)
4808
4855
  );
4809
4856
  }
4810
4857
  /**
@@ -5114,6 +5161,34 @@ If it's in another language, summarize in that language.
5114
5161
  ];
5115
5162
 
5116
5163
  // src/services/ChatServiceFactory.ts
5164
+ var TOOL_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set([
5165
+ "openai",
5166
+ "openai-compatible",
5167
+ "openrouter",
5168
+ "gemini",
5169
+ "claude",
5170
+ "zai",
5171
+ "xai",
5172
+ "kimi",
5173
+ "deepseek",
5174
+ "mistral",
5175
+ "sakana",
5176
+ "plamo"
5177
+ ]);
5178
+ var MCP_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set(["openai", "gemini", "claude"]);
5179
+ var JSON_MODE_SUPPORTED_PROVIDERS = /* @__PURE__ */ new Set([
5180
+ "openai",
5181
+ "openai-compatible",
5182
+ "zai",
5183
+ "kimi"
5184
+ ]);
5185
+ var REASONING_EFFORT_BY_PROVIDER = {
5186
+ openai: ["none", "minimal", "low", "medium", "high", "xhigh"],
5187
+ openrouter: ["none", "minimal", "low", "medium", "high"],
5188
+ mistral: ["low", "medium", "high"],
5189
+ plamo: ["none", "medium"],
5190
+ xai: ["low", "high"]
5191
+ };
5117
5192
  var ChatServiceFactory = class {
5118
5193
  /**
5119
5194
  * Register a new provider
@@ -5152,6 +5227,37 @@ If it's in another language, summarize in that language.
5152
5227
  const provider = this.providers.get(providerName);
5153
5228
  return provider ? provider.getSupportedModels() : [];
5154
5229
  }
5230
+ /**
5231
+ * Get machine-readable provider capabilities for UI and agent planning.
5232
+ */
5233
+ static getProviderCapabilities(providerName, model) {
5234
+ const provider = this.providers.get(providerName);
5235
+ if (!provider) {
5236
+ return void 0;
5237
+ }
5238
+ const vision = model ? this.getVisionSupportLevelForModel(providerName, model) : provider.getVisionSupportLevel();
5239
+ return {
5240
+ provider: providerName,
5241
+ models: provider.getSupportedModels(),
5242
+ defaultModel: typeof provider.getDefaultModel === "function" ? provider.getDefaultModel() : void 0,
5243
+ text: true,
5244
+ streaming: true,
5245
+ vision,
5246
+ tools: TOOL_SUPPORTED_PROVIDERS.has(providerName),
5247
+ mcp: MCP_SUPPORTED_PROVIDERS.has(providerName),
5248
+ jsonMode: JSON_MODE_SUPPORTED_PROVIDERS.has(providerName),
5249
+ responseLength: true,
5250
+ reasoningEffort: REASONING_EFFORT_BY_PROVIDER[providerName] ?? []
5251
+ };
5252
+ }
5253
+ /**
5254
+ * Get machine-readable capabilities for all registered providers.
5255
+ */
5256
+ static getAllProviderCapabilities() {
5257
+ return this.getAvailableProviders().map((providerName) => this.getProviderCapabilities(providerName)).filter(
5258
+ (capabilities) => capabilities !== void 0
5259
+ );
5260
+ }
5155
5261
  /**
5156
5262
  * Get provider-level vision support status.
5157
5263
  */