@node-llm/core 1.18.0 → 1.19.1

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 (189) hide show
  1. package/README.md +14 -12
  2. package/dist/agent/Agent.d.ts +17 -3
  3. package/dist/agent/Agent.d.ts.map +1 -1
  4. package/dist/agent/Agent.js +11 -0
  5. package/dist/aliases.d.ts +341 -316
  6. package/dist/aliases.d.ts.map +1 -1
  7. package/dist/aliases.js +467 -442
  8. package/dist/chat/Chat.d.ts +12 -5
  9. package/dist/chat/Chat.d.ts.map +1 -1
  10. package/dist/chat/Chat.js +45 -13
  11. package/dist/chat/ChatOptions.d.ts +17 -0
  12. package/dist/chat/ChatOptions.d.ts.map +1 -1
  13. package/dist/chat/ChatResponse.d.ts +5 -0
  14. package/dist/chat/ChatResponse.d.ts.map +1 -1
  15. package/dist/chat/ChatResponse.js +12 -4
  16. package/dist/chat/ChatStream.d.ts.map +1 -1
  17. package/dist/chat/ChatStream.js +20 -10
  18. package/dist/chat/PromptCache.d.ts +7 -0
  19. package/dist/chat/PromptCache.d.ts.map +1 -0
  20. package/dist/chat/PromptCache.js +7 -0
  21. package/dist/chat/Temperature.d.ts +7 -0
  22. package/dist/chat/Temperature.d.ts.map +1 -0
  23. package/dist/chat/Temperature.js +17 -0
  24. package/dist/chat/Tool.d.ts +28 -3
  25. package/dist/chat/Tool.d.ts.map +1 -1
  26. package/dist/chat/Tool.js +28 -2
  27. package/dist/chat/ToolCallOutcome.d.ts +12 -0
  28. package/dist/chat/ToolCallOutcome.d.ts.map +1 -1
  29. package/dist/chat/ToolCallOutcome.js +14 -0
  30. package/dist/chat/ToolResultWindow.d.ts +16 -0
  31. package/dist/chat/ToolResultWindow.d.ts.map +1 -0
  32. package/dist/chat/ToolResultWindow.js +25 -0
  33. package/dist/config.d.ts +30 -0
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js +66 -30
  36. package/dist/errors/billing.d.ts +7 -0
  37. package/dist/errors/billing.d.ts.map +1 -0
  38. package/dist/errors/billing.js +24 -0
  39. package/dist/errors/index.d.ts +28 -0
  40. package/dist/errors/index.d.ts.map +1 -1
  41. package/dist/errors/index.js +32 -0
  42. package/dist/executor/Executor.d.ts.map +1 -1
  43. package/dist/executor/Executor.js +5 -3
  44. package/dist/index.d.ts +4 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/llm.d.ts +2 -1
  48. package/dist/llm.d.ts.map +1 -1
  49. package/dist/llm.js +8 -2
  50. package/dist/models/ModelRegistry.d.ts +12 -1
  51. package/dist/models/ModelRegistry.d.ts.map +1 -1
  52. package/dist/models/ModelRegistry.js +22 -2
  53. package/dist/models/models.json +11900 -4568
  54. package/dist/models/types.d.ts +14 -1
  55. package/dist/models/types.d.ts.map +1 -1
  56. package/dist/providers/Provider.d.ts +23 -1
  57. package/dist/providers/Provider.d.ts.map +1 -1
  58. package/dist/providers/anthropic/AnthropicProvider.d.ts +2 -0
  59. package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
  60. package/dist/providers/anthropic/AnthropicProvider.js +2 -0
  61. package/dist/providers/anthropic/Capabilities.d.ts +1 -0
  62. package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
  63. package/dist/providers/anthropic/Capabilities.js +3 -0
  64. package/dist/providers/anthropic/Chat.d.ts.map +1 -1
  65. package/dist/providers/anthropic/Chat.js +7 -75
  66. package/dist/providers/anthropic/Errors.d.ts.map +1 -1
  67. package/dist/providers/anthropic/Errors.js +4 -3
  68. package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
  69. package/dist/providers/anthropic/Streaming.js +4 -66
  70. package/dist/providers/anthropic/Utils.d.ts +33 -1
  71. package/dist/providers/anthropic/Utils.d.ts.map +1 -1
  72. package/dist/providers/anthropic/Utils.js +114 -0
  73. package/dist/providers/anthropic/types.d.ts +17 -3
  74. package/dist/providers/anthropic/types.d.ts.map +1 -1
  75. package/dist/providers/azure/AzureProvider.d.ts +54 -0
  76. package/dist/providers/azure/AzureProvider.d.ts.map +1 -0
  77. package/dist/providers/azure/AzureProvider.js +110 -0
  78. package/dist/providers/azure/Capabilities.d.ts +16 -0
  79. package/dist/providers/azure/Capabilities.d.ts.map +1 -0
  80. package/dist/providers/azure/Capabilities.js +36 -0
  81. package/dist/providers/azure/Embedding.d.ts +11 -0
  82. package/dist/providers/azure/Embedding.d.ts.map +1 -0
  83. package/dist/providers/azure/Embedding.js +23 -0
  84. package/dist/providers/azure/Models.d.ts +18 -0
  85. package/dist/providers/azure/Models.d.ts.map +1 -0
  86. package/dist/providers/azure/Models.js +29 -0
  87. package/dist/providers/azure/index.d.ts +5 -0
  88. package/dist/providers/azure/index.d.ts.map +1 -0
  89. package/dist/providers/azure/index.js +28 -0
  90. package/dist/providers/bedrock/BedrockProvider.d.ts.map +1 -1
  91. package/dist/providers/bedrock/BedrockProvider.js +1 -0
  92. package/dist/providers/bedrock/Capabilities.d.ts +1 -0
  93. package/dist/providers/bedrock/Capabilities.d.ts.map +1 -1
  94. package/dist/providers/bedrock/Capabilities.js +3 -0
  95. package/dist/providers/bedrock/Chat.d.ts.map +1 -1
  96. package/dist/providers/bedrock/Chat.js +6 -2
  97. package/dist/providers/bedrock/Errors.d.ts.map +1 -1
  98. package/dist/providers/bedrock/Errors.js +4 -0
  99. package/dist/providers/bedrock/Streaming.d.ts.map +1 -1
  100. package/dist/providers/bedrock/Streaming.js +4 -1
  101. package/dist/providers/deepseek/Capabilities.d.ts +1 -0
  102. package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
  103. package/dist/providers/deepseek/Capabilities.js +3 -0
  104. package/dist/providers/deepseek/Chat.d.ts.map +1 -1
  105. package/dist/providers/deepseek/Chat.js +3 -2
  106. package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -0
  107. package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
  108. package/dist/providers/deepseek/DeepSeekProvider.js +1 -0
  109. package/dist/providers/deepseek/Errors.d.ts.map +1 -1
  110. package/dist/providers/deepseek/Errors.js +5 -4
  111. package/dist/providers/gemini/Capabilities.d.ts +1 -0
  112. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  113. package/dist/providers/gemini/Capabilities.js +3 -0
  114. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  115. package/dist/providers/gemini/Chat.js +6 -4
  116. package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
  117. package/dist/providers/gemini/ChatUtils.js +2 -1
  118. package/dist/providers/gemini/Errors.d.ts.map +1 -1
  119. package/dist/providers/gemini/Errors.js +4 -3
  120. package/dist/providers/gemini/GeminiProvider.d.ts +1 -0
  121. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  122. package/dist/providers/gemini/GeminiProvider.js +1 -0
  123. package/dist/providers/gemini/Streaming.d.ts.map +1 -1
  124. package/dist/providers/gemini/Streaming.js +3 -2
  125. package/dist/providers/gemini/types.d.ts +2 -0
  126. package/dist/providers/gemini/types.d.ts.map +1 -1
  127. package/dist/providers/mistral/Capabilities.d.ts +1 -0
  128. package/dist/providers/mistral/Capabilities.d.ts.map +1 -1
  129. package/dist/providers/mistral/Capabilities.js +3 -0
  130. package/dist/providers/mistral/Chat.d.ts.map +1 -1
  131. package/dist/providers/mistral/Chat.js +3 -2
  132. package/dist/providers/mistral/Errors.d.ts.map +1 -1
  133. package/dist/providers/mistral/Errors.js +4 -3
  134. package/dist/providers/mistral/MistralProvider.d.ts +1 -0
  135. package/dist/providers/mistral/MistralProvider.d.ts.map +1 -1
  136. package/dist/providers/mistral/MistralProvider.js +1 -0
  137. package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
  138. package/dist/providers/ollama/OllamaProvider.js +1 -0
  139. package/dist/providers/openai/Capabilities.d.ts +6 -0
  140. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  141. package/dist/providers/openai/Capabilities.js +10 -0
  142. package/dist/providers/openai/Chat.d.ts +3 -0
  143. package/dist/providers/openai/Chat.d.ts.map +1 -1
  144. package/dist/providers/openai/Chat.js +26 -7
  145. package/dist/providers/openai/Embedding.d.ts +2 -0
  146. package/dist/providers/openai/Embedding.d.ts.map +1 -1
  147. package/dist/providers/openai/Embedding.js +8 -5
  148. package/dist/providers/openai/Errors.d.ts.map +1 -1
  149. package/dist/providers/openai/Errors.js +4 -3
  150. package/dist/providers/openai/Models.d.ts +10 -0
  151. package/dist/providers/openai/Models.d.ts.map +1 -1
  152. package/dist/providers/openai/Models.js +12 -8
  153. package/dist/providers/openai/OpenAIProvider.d.ts +11 -1
  154. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  155. package/dist/providers/openai/OpenAIProvider.js +36 -0
  156. package/dist/providers/openai/Responses.d.ts +30 -0
  157. package/dist/providers/openai/Responses.d.ts.map +1 -0
  158. package/dist/providers/openai/Responses.js +176 -0
  159. package/dist/providers/openai/Streaming.d.ts +2 -0
  160. package/dist/providers/openai/Streaming.d.ts.map +1 -1
  161. package/dist/providers/openai/Streaming.js +19 -5
  162. package/dist/providers/openrouter/Capabilities.d.ts +1 -0
  163. package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
  164. package/dist/providers/openrouter/Capabilities.js +3 -0
  165. package/dist/providers/openrouter/OpenRouterProvider.d.ts +1 -0
  166. package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
  167. package/dist/providers/openrouter/OpenRouterProvider.js +1 -0
  168. package/dist/providers/registry.d.ts +2 -1
  169. package/dist/providers/registry.d.ts.map +1 -1
  170. package/dist/providers/registry.js +2 -1
  171. package/dist/providers/xai/Capabilities.d.ts +1 -0
  172. package/dist/providers/xai/Capabilities.d.ts.map +1 -1
  173. package/dist/providers/xai/Capabilities.js +3 -0
  174. package/dist/providers/xai/Chat.d.ts.map +1 -1
  175. package/dist/providers/xai/Chat.js +3 -2
  176. package/dist/providers/xai/Errors.d.ts.map +1 -1
  177. package/dist/providers/xai/Errors.js +5 -2
  178. package/dist/providers/xai/XAIProvider.d.ts +1 -0
  179. package/dist/providers/xai/XAIProvider.d.ts.map +1 -1
  180. package/dist/providers/xai/XAIProvider.js +1 -0
  181. package/dist/schema/Schema.d.ts +3 -3
  182. package/dist/schema/Schema.d.ts.map +1 -1
  183. package/dist/schema/to-json-schema.d.ts +2 -2
  184. package/dist/schema/to-json-schema.d.ts.map +1 -1
  185. package/dist/schema/to-json-schema.js +3 -8
  186. package/dist/schema/zod.d.ts +33 -0
  187. package/dist/schema/zod.d.ts.map +1 -0
  188. package/dist/schema/zod.js +33 -0
  189. package/package.json +14 -15
@@ -41,19 +41,23 @@ export class OpenAIModels {
41
41
  const model = ModelRegistry.find(modelId, this.getProviderName());
42
42
  return model?.pricing || Capabilities.getPricing(modelId);
43
43
  }
44
+ endpoint() {
45
+ return buildUrl(this.baseUrl, "/models");
46
+ }
47
+ requestHeaders() {
48
+ return { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" };
49
+ }
50
+ /** The models the API lists that are worth returning */
51
+ listed(data) {
52
+ return data;
53
+ }
44
54
  async execute() {
45
55
  const provider = this.getProviderName();
46
56
  try {
47
- const response = await fetchWithTimeout(buildUrl(this.baseUrl, "/models"), {
48
- method: "GET",
49
- headers: {
50
- Authorization: `Bearer ${this.apiKey}`,
51
- "Content-Type": "application/json"
52
- }
53
- }, config.requestTimeout);
57
+ const response = await fetchWithTimeout(this.endpoint(), { method: "GET", headers: this.requestHeaders() }, config.requestTimeout);
54
58
  if (response.ok) {
55
59
  const { data } = (await response.json());
56
- return data.map((m) => {
60
+ return this.listed(data).map((m) => {
57
61
  const modelId = m.id;
58
62
  const registryModel = ModelRegistry.find(modelId, provider);
59
63
  return {
@@ -1,3 +1,4 @@
1
+ import { OpenAIResponses, type ResponsesTarget } from "./Responses.js";
1
2
  import { Provider, ChatRequest, ChatResponse, ModelInfo, ChatChunk, ImageRequest, ImageResponse, TranscriptionRequest, TranscriptionResponse, ModerationRequest, ModerationResponse, EmbeddingRequest, EmbeddingResponse } from "../Provider.js";
2
3
  import { BaseProvider } from "../BaseProvider.js";
3
4
  import { OpenAIChat } from "./Chat.js";
@@ -11,11 +12,12 @@ export interface OpenAIProviderOptions {
11
12
  apiKey: string;
12
13
  baseUrl?: string;
13
14
  }
14
- export declare class OpenAIProvider extends BaseProvider implements Provider {
15
+ export declare class OpenAIProvider extends BaseProvider implements Provider, ResponsesTarget {
15
16
  protected readonly options: OpenAIProviderOptions;
16
17
  protected baseUrl: string;
17
18
  protected chatHandler: OpenAIChat;
18
19
  protected streamingHandler: OpenAIStreaming;
20
+ protected responsesHandler: OpenAIResponses;
19
21
  protected modelsHandler: OpenAIModels;
20
22
  protected imageHandler: OpenAIImage;
21
23
  protected transcriptionHandler: OpenAITranscription;
@@ -32,11 +34,19 @@ export declare class OpenAIProvider extends BaseProvider implements Provider {
32
34
  supportsReasoning: (model: string) => boolean;
33
35
  supportsDeveloperRole: (model: string) => boolean;
34
36
  supportsPrediction: (model: string) => boolean;
37
+ supportsTemperature: (model: string) => boolean;
35
38
  getContextWindow: (model: string) => number | null;
36
39
  };
37
40
  constructor(options: OpenAIProviderOptions);
38
41
  apiBase(): string;
39
42
  headers(): Record<string, string>;
43
+ /** Where an endpoint such as /chat/completions is served */
44
+ url(path: string): string;
45
+ registryModel(model: string): string;
46
+ responsesBase(): string;
47
+ responsesModel(model: string): string;
48
+ /** Whether a request goes to the Responses API rather than Chat Completions. */
49
+ protected usesResponsesApi(request: ChatRequest): boolean;
40
50
  protected providerName(): string;
41
51
  defaultModel(feature?: string): string;
42
52
  chat(request: ChatRequest): Promise<ChatResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/OpenAIProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ;IAwBtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB;IAvB7D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAC5C,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IACtC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;IACpD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC9C,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAErC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;uCACF,MAAM;oCACT,MAAM;kCACR,MAAM;MAChC;gBAE6B,OAAO,EAAE,qBAAqB;IAYtD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAehD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIzE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGnE"}
1
+ {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/OpenAIProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAqB,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAa,YAAW,QAAQ,EAAE,eAAe;IA0BvE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB;IAzB7D,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAC5C,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAC5C,SAAS,CAAC,aAAa,EAAE,YAAY,CAAC;IACtC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;IACpD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC9C,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAErC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;uCACF,MAAM;oCACT,MAAM;qCACL,MAAM;kCACT,MAAM;MAChC;gBAE6B,OAAO,EAAE,qBAAqB;IAatD,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,4DAA4D;IACrD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIzB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC,aAAa,IAAI,MAAM;IAIvB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI5C,gFAAgF;IAChF,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAIzD,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAehD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAKhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAgBxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIzE,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGnE"}
@@ -1,3 +1,4 @@
1
+ import { OpenAIResponses, needsResponsesApi } from "./Responses.js";
1
2
  import { BaseProvider } from "../BaseProvider.js";
2
3
  import { DEFAULT_OPENAI_BASE_URL } from "../../constants.js";
3
4
  import { Capabilities } from "./Capabilities.js";
@@ -8,11 +9,13 @@ import { OpenAIImage } from "./Image.js";
8
9
  import { OpenAITranscription } from "./Transcription.js";
9
10
  import { OpenAIModeration } from "./Moderation.js";
10
11
  import { OpenAIEmbedding } from "./Embedding.js";
12
+ import { buildUrl } from "./utils.js";
11
13
  export class OpenAIProvider extends BaseProvider {
12
14
  options;
13
15
  baseUrl;
14
16
  chatHandler;
15
17
  streamingHandler;
18
+ responsesHandler;
16
19
  modelsHandler;
17
20
  imageHandler;
18
21
  transcriptionHandler;
@@ -29,6 +32,7 @@ export class OpenAIProvider extends BaseProvider {
29
32
  supportsReasoning: (model) => Capabilities.supportsReasoning(model),
30
33
  supportsDeveloperRole: (model) => Capabilities.supportsDeveloperRole(model),
31
34
  supportsPrediction: (model) => Capabilities.supportsPrediction(model),
35
+ supportsTemperature: (model) => Capabilities.supportsTemperature(model),
32
36
  getContextWindow: (model) => Capabilities.getContextWindow(model) || null
33
37
  };
34
38
  constructor(options) {
@@ -37,6 +41,7 @@ export class OpenAIProvider extends BaseProvider {
37
41
  this.baseUrl = options.baseUrl ?? DEFAULT_OPENAI_BASE_URL;
38
42
  this.chatHandler = new OpenAIChat(this, options.apiKey);
39
43
  this.streamingHandler = new OpenAIStreaming(this, options.apiKey);
44
+ this.responsesHandler = new OpenAIResponses(this);
40
45
  this.modelsHandler = new OpenAIModels(this.baseUrl, options.apiKey);
41
46
  this.imageHandler = new OpenAIImage(this.baseUrl, options.apiKey);
42
47
  this.transcriptionHandler = new OpenAITranscription(this.baseUrl, options.apiKey);
@@ -52,6 +57,23 @@ export class OpenAIProvider extends BaseProvider {
52
57
  "Content-Type": "application/json"
53
58
  };
54
59
  }
60
+ /** Where an endpoint such as /chat/completions is served */
61
+ url(path) {
62
+ return buildUrl(this.apiBase(), path);
63
+ }
64
+ registryModel(model) {
65
+ return model;
66
+ }
67
+ responsesBase() {
68
+ return this.apiBase();
69
+ }
70
+ responsesModel(model) {
71
+ return model;
72
+ }
73
+ /** Whether a request goes to the Responses API rather than Chat Completions. */
74
+ usesResponsesApi(request) {
75
+ return needsResponsesApi(request, this.apiBase());
76
+ }
55
77
  providerName() {
56
78
  return "OpenAI";
57
79
  }
@@ -70,9 +92,23 @@ export class OpenAIProvider extends BaseProvider {
70
92
  }
71
93
  }
72
94
  async chat(request) {
95
+ if (this.usesResponsesApi(request))
96
+ return this.responsesHandler.execute(request);
73
97
  return this.chatHandler.execute(request);
74
98
  }
75
99
  async *stream(request) {
100
+ // Requests only the Responses API serves arrive whole, as one chunk, for now.
101
+ if (this.usesResponsesApi(request)) {
102
+ const response = await this.responsesHandler.execute(request);
103
+ yield {
104
+ content: response.content ?? "",
105
+ tool_calls: response.tool_calls,
106
+ usage: response.usage,
107
+ thinking: response.thinking,
108
+ done: true
109
+ };
110
+ return;
111
+ }
76
112
  yield* this.streamingHandler.execute(request);
77
113
  }
78
114
  async listModels() {
@@ -0,0 +1,30 @@
1
+ import { ChatRequest, ChatResponse } from "../Provider.js";
2
+ /**
3
+ * Some OpenAI models only accept function tools through the Responses API: Chat Completions
4
+ * rejects them ("use /v1/responses"). Requests that would fail that way go here; everything else
5
+ * keeps using Chat Completions.
6
+ */
7
+ export declare function needsResponsesApi(request: ChatRequest, baseUrl: string): boolean;
8
+ /**
9
+ * Where Responses requests go and how they are signed: OpenAI's own API, or a provider serving
10
+ * the same API under another address, such as an Azure resource.
11
+ */
12
+ export interface ResponsesTarget {
13
+ id: string;
14
+ responsesBase(): string;
15
+ /** The model the registry prices the request's model as */
16
+ registryModel(model: string): string;
17
+ headers(): Record<string, string>;
18
+ /** The name the API knows the model by, such as an Azure deployment's name */
19
+ responsesModel(model: string): string;
20
+ }
21
+ /**
22
+ * Chat through OpenAI's Responses API, for requests Chat Completions can't serve. Nothing is
23
+ * stored on OpenAI's side: like every other NodeLLM chat, each request carries the conversation.
24
+ */
25
+ export declare class OpenAIResponses {
26
+ private readonly target;
27
+ constructor(target: ResponsesTarget);
28
+ execute(request: ChatRequest): Promise<ChatResponse>;
29
+ }
30
+ //# sourceMappingURL=Responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Responses.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Responses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiC3D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAMhF;AAkED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,IAAI,MAAM,CAAC;IACxB,2DAA2D;IAC3D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,8EAA8E;IAC9E,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAED;;;GAGG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAE9C,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAmH3D"}
@@ -0,0 +1,176 @@
1
+ import { Capabilities } from "./Capabilities.js";
2
+ import { handleOpenAIError } from "./Errors.js";
3
+ import { ModelRegistry } from "../../models/ModelRegistry.js";
4
+ import { buildUrl } from "./utils.js";
5
+ import { logger } from "../../utils/logger.js";
6
+ import { fetchWithTimeout } from "../../utils/fetch.js";
7
+ import { enforceStrictSchema } from "../../schema/strict.js";
8
+ /**
9
+ * Some OpenAI models only accept function tools through the Responses API: Chat Completions
10
+ * rejects them ("use /v1/responses"). Requests that would fail that way go here; everything else
11
+ * keeps using Chat Completions.
12
+ */
13
+ export function needsResponsesApi(request, baseUrl) {
14
+ return (baseUrl.includes("api.openai.com") &&
15
+ !!request.tools?.length &&
16
+ Capabilities.needsResponsesForTools(request.model));
17
+ }
18
+ function contentParts(content, role) {
19
+ if (content === null || content === undefined)
20
+ return "";
21
+ if (typeof content === "string")
22
+ return content;
23
+ const textType = role === "assistant" ? "output_text" : "input_text";
24
+ return content.flatMap((part) => {
25
+ if (part.type === "text")
26
+ return [{ type: textType, text: part.text }];
27
+ if (part.type === "image_url")
28
+ return [{ type: "input_image", image_url: part.image_url.url }];
29
+ return [];
30
+ });
31
+ }
32
+ /** Chat Completions messages as Responses input items: tool calls and results become items. */
33
+ function inputItems(messages) {
34
+ return messages.flatMap((message) => {
35
+ if (message.role === "tool") {
36
+ return [
37
+ {
38
+ type: "function_call_output",
39
+ call_id: message.tool_call_id,
40
+ output: typeof message.content === "string" ? message.content : JSON.stringify(message.content)
41
+ }
42
+ ];
43
+ }
44
+ const items = [];
45
+ const content = contentParts(message.content, message.role);
46
+ if (content !== "" && !(Array.isArray(content) && content.length === 0)) {
47
+ items.push({ role: message.role, content });
48
+ }
49
+ for (const call of message.tool_calls ?? []) {
50
+ items.push({
51
+ type: "function_call",
52
+ call_id: call.id,
53
+ name: call.function.name,
54
+ arguments: call.function.arguments
55
+ });
56
+ }
57
+ return items;
58
+ });
59
+ }
60
+ function toolChoice(choice) {
61
+ if (choice === undefined)
62
+ return undefined;
63
+ if (typeof choice === "string")
64
+ return choice;
65
+ const name = choice.function?.name;
66
+ return name ? { type: "function", name } : choice;
67
+ }
68
+ function textFormat(format) {
69
+ if (!format)
70
+ return undefined;
71
+ if (format.type === "json_schema" && format.json_schema) {
72
+ const { name, schema, strict } = format.json_schema;
73
+ return {
74
+ type: "json_schema",
75
+ name: name ?? "response",
76
+ schema: strict === true ? enforceStrictSchema(schema) : schema,
77
+ strict
78
+ };
79
+ }
80
+ return { type: format.type };
81
+ }
82
+ /**
83
+ * Chat through OpenAI's Responses API, for requests Chat Completions can't serve. Nothing is
84
+ * stored on OpenAI's side: like every other NodeLLM chat, each request carries the conversation.
85
+ */
86
+ export class OpenAIResponses {
87
+ target;
88
+ constructor(target) {
89
+ this.target = target;
90
+ }
91
+ async execute(request) {
92
+ const { model, messages, tools, temperature: _temperature, max_tokens, response_format, thinking, headers: _headers, requestTimeout: _requestTimeout, signal, prediction: _prediction, tool_choice, parallel_tool_calls, ...rest } = request;
93
+ const body = {
94
+ model: this.target.responsesModel(model),
95
+ input: inputItems(messages),
96
+ store: false,
97
+ ...rest
98
+ };
99
+ const knownModel = this.target.registryModel(model);
100
+ const temperature = Capabilities.normalizeTemperature(request.temperature, knownModel);
101
+ if (temperature !== undefined && temperature !== null)
102
+ body.temperature = temperature;
103
+ if (max_tokens)
104
+ body.max_output_tokens = max_tokens;
105
+ if (parallel_tool_calls !== undefined)
106
+ body.parallel_tool_calls = parallel_tool_calls;
107
+ if (thinking?.effort && thinking.effort !== "none")
108
+ body.reasoning = { effort: thinking.effort };
109
+ if (tools?.length) {
110
+ body.tools = tools.map((tool) => ({
111
+ type: "function",
112
+ name: tool.function.name,
113
+ description: tool.function.description,
114
+ parameters: tool.function.strict === true
115
+ ? enforceStrictSchema(tool.function.parameters)
116
+ : tool.function.parameters,
117
+ ...(tool.function.strict !== undefined ? { strict: tool.function.strict } : {})
118
+ }));
119
+ }
120
+ const choice = toolChoice(tool_choice);
121
+ if (choice !== undefined)
122
+ body.tool_choice = choice;
123
+ const format = textFormat(response_format);
124
+ if (format)
125
+ body.text = { format };
126
+ const url = buildUrl(this.target.responsesBase(), "/responses");
127
+ logger.logRequest("OpenAI", "POST", url, body);
128
+ const response = await fetchWithTimeout(url, {
129
+ method: "POST",
130
+ headers: {
131
+ ...this.target.headers(),
132
+ ...request.headers
133
+ },
134
+ body: JSON.stringify(body),
135
+ signal
136
+ }, request.requestTimeout);
137
+ if (!response.ok) {
138
+ await handleOpenAIError(response, model);
139
+ }
140
+ const json = (await response.json());
141
+ logger.logResponse("OpenAI", response.status, response.statusText, json);
142
+ const output = json.output ?? [];
143
+ const text = output
144
+ .filter((item) => item.type === "message")
145
+ .flatMap((item) => item.content ?? [])
146
+ .filter((part) => part.type === "output_text")
147
+ .map((part) => part.text ?? "")
148
+ .join("");
149
+ const toolCalls = output
150
+ .filter((item) => item.type === "function_call")
151
+ .map((item) => ({
152
+ id: item.call_id ?? "",
153
+ type: "function",
154
+ function: { name: item.name ?? "", arguments: item.arguments ?? "{}" }
155
+ }));
156
+ if (!text && toolCalls.length === 0) {
157
+ throw new Error("OpenAI returned empty response");
158
+ }
159
+ const usage = json.usage
160
+ ? ModelRegistry.calculateCost({
161
+ input_tokens: json.usage.input_tokens,
162
+ output_tokens: json.usage.output_tokens,
163
+ total_tokens: json.usage.total_tokens,
164
+ cached_tokens: json.usage.input_tokens_details?.cached_tokens,
165
+ reasoning_tokens: json.usage.output_tokens_details?.reasoning_tokens
166
+ }, knownModel, this.target.id)
167
+ : undefined;
168
+ const reasoningTokens = json.usage?.output_tokens_details?.reasoning_tokens;
169
+ return {
170
+ content: text || null,
171
+ tool_calls: toolCalls.length ? toolCalls : undefined,
172
+ usage,
173
+ thinking: reasoningTokens ? { tokens: reasoningTokens } : undefined
174
+ };
175
+ }
176
+ }
@@ -5,6 +5,8 @@ export declare class OpenAIStreaming {
5
5
  private readonly apiKey;
6
6
  private readonly baseUrl;
7
7
  constructor(providerOrUrl: OpenAIProvider | string, apiKey: string);
8
+ private url;
9
+ private authHeaders;
8
10
  execute(request: ChatRequest, controller?: AbortController): AsyncGenerator<ChatChunk>;
9
11
  }
10
12
  //# sourceMappingURL=Streaming.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,aAAa,EAAE,cAAc,GAAG,MAAM,EACtC,MAAM,EAAE,MAAM;IAK1B,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;CAyP9F"}
1
+ {"version":3,"file":"Streaming.d.ts","sourceRoot":"","sources":["../../../src/providers/openai/Streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,qBAAa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,aAAa,EAAE,cAAc,GAAG,MAAM,EACtC,MAAM,EAAE,MAAM;IAOjC,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,WAAW;IAKZ,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC,SAAS,CAAC;CA4P9F"}
@@ -15,11 +15,26 @@ export class OpenAIStreaming {
15
15
  this.apiKey = apiKey;
16
16
  this.baseUrl = typeof providerOrUrl === "string" ? providerOrUrl : providerOrUrl.apiBase();
17
17
  }
18
+ // A provider decides where its requests go and signs them; Azure, for one, routes by deployment
19
+ // and wants an api-key header, not a bearer token.
20
+ url() {
21
+ if (typeof this.providerOrUrl === "string")
22
+ return buildUrl(this.baseUrl, "/chat/completions");
23
+ return this.providerOrUrl.url("/chat/completions");
24
+ }
25
+ authHeaders() {
26
+ if (typeof this.providerOrUrl !== "string")
27
+ return this.providerOrUrl.headers();
28
+ return { Authorization: `Bearer ${this.apiKey}`, "Content-Type": "application/json" };
29
+ }
18
30
  async *execute(request, controller) {
19
31
  const internalController = new AbortController();
20
32
  const abortController = controller || internalController;
21
33
  const signal = request.signal ? request.signal : abortController.signal;
22
- const temperature = Capabilities.normalizeTemperature(request.temperature, request.model);
34
+ const knownModel = typeof this.providerOrUrl === "string"
35
+ ? request.model
36
+ : this.providerOrUrl.registryModel(request.model);
37
+ const temperature = Capabilities.normalizeTemperature(request.temperature, knownModel);
23
38
  const isMainOpenAI = this.baseUrl.includes("api.openai.com");
24
39
  const supportsDeveloperRole = isMainOpenAI &&
25
40
  (typeof this.providerOrUrl === "string"
@@ -35,7 +50,7 @@ export class OpenAIStreaming {
35
50
  body.temperature = temperature;
36
51
  }
37
52
  if (request.max_tokens) {
38
- if (Capabilities.needsMaxCompletionTokens(request.model)) {
53
+ if (Capabilities.needsMaxCompletionTokens(knownModel)) {
39
54
  body.max_completion_tokens = request.max_tokens;
40
55
  }
41
56
  else {
@@ -92,13 +107,12 @@ export class OpenAIStreaming {
92
107
  // Track tool calls being built across chunks
93
108
  const toolCallsMap = new Map();
94
109
  try {
95
- const url = buildUrl(this.baseUrl, "/chat/completions");
110
+ const url = this.url();
96
111
  logger.logRequest("OpenAI", "POST", url, body);
97
112
  const response = await fetchWithTimeout(url, {
98
113
  method: "POST",
99
114
  headers: {
100
- Authorization: `Bearer ${this.apiKey}`,
101
- "Content-Type": "application/json",
115
+ ...this.authHeaders(),
102
116
  ...request.headers
103
117
  },
104
118
  body: JSON.stringify(body),
@@ -9,6 +9,7 @@ export declare class OpenRouterCapabilities {
9
9
  static supportsModeration(_modelId: string): boolean;
10
10
  static supportsReasoning(modelId: string): boolean;
11
11
  static supportsToolChoice(_modelId: string): boolean;
12
+ static supportsTemperature(modelId: string): boolean;
12
13
  static getContextWindow(modelId: string): number | null;
13
14
  }
14
15
  //# sourceMappingURL=Capabilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/Capabilities.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGxD"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/Capabilities.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAO/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQ9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAMnD,MAAM,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzD,MAAM,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAGxD"}
@@ -35,6 +35,9 @@ export class OpenRouterCapabilities {
35
35
  static supportsToolChoice(_modelId) {
36
36
  return true;
37
37
  }
38
+ static supportsTemperature(modelId) {
39
+ return ModelRegistry.supportsTemperature(modelId, "openrouter");
40
+ }
38
41
  static getContextWindow(modelId) {
39
42
  return ModelRegistry.getContextWindow(modelId, "openrouter") ?? null;
40
43
  }
@@ -15,6 +15,7 @@ export declare class OpenRouterProvider extends OpenAIProvider {
15
15
  supportsReasoning: (model: string) => boolean;
16
16
  supportsDeveloperRole: (_model: string) => boolean;
17
17
  supportsPrediction: (_model: string) => boolean;
18
+ supportsTemperature: (model: string) => boolean;
18
19
  getContextWindow: (model: string) => number | null;
19
20
  };
20
21
  constructor(options: OpenRouterProviderOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IAC7C,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCAEZ,MAAM;yCACD,MAAM;uCAER,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;qCACT,MAAM;kCACT,MAAM;MAChC;gBAEU,OAAO,EAAE,yBAAyB;IAO9C,SAAS,CAAC,YAAY,IAAI,MAAM;CAGjC"}
1
+ {"version":3,"file":"OpenRouterProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter/OpenRouterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IAC7C,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCAEZ,MAAM;yCACD,MAAM;uCAER,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;qCACT,MAAM;qCACN,MAAM;kCACT,MAAM;MAChC;gBAEU,OAAO,EAAE,yBAAyB;IAO9C,SAAS,CAAC,YAAY,IAAI,MAAM;CAGjC"}
@@ -13,6 +13,7 @@ export class OpenRouterProvider extends OpenAIProvider {
13
13
  supportsReasoning: (model) => OpenRouterCapabilities.supportsReasoning(model),
14
14
  supportsDeveloperRole: (_model) => true,
15
15
  supportsPrediction: (_model) => false,
16
+ supportsTemperature: (model) => OpenRouterCapabilities.supportsTemperature(model),
16
17
  getContextWindow: (model) => OpenRouterCapabilities.getContextWindow(model) || null
17
18
  };
18
19
  constructor(options) {
@@ -9,6 +9,7 @@ import { registerBedrockProvider } from "./bedrock/index.js";
9
9
  import { registerXAIProvider } from "./xai/index.js";
10
10
  import { registerMistralProvider } from "./mistral/index.js";
11
11
  import { registerTypeSafeProvider } from "./typesafe/index.js";
12
+ import { registerAzureProvider } from "./azure/index.js";
12
13
  import { NodeLLMConfig } from "../config.js";
13
14
  type ProviderFactory = (config?: NodeLLMConfig) => Provider;
14
15
  export type ProviderInterceptor = (provider: Provider) => Provider;
@@ -49,5 +50,5 @@ declare class ProviderRegistry {
49
50
  * ```
50
51
  */
51
52
  export declare const providerRegistry: ProviderRegistry;
52
- export { registerOpenAIProvider as ensureOpenAIRegistered, registerOpenAIProvider, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider, registerBedrockProvider, registerXAIProvider, registerMistralProvider, registerTypeSafeProvider };
53
+ export { registerOpenAIProvider as ensureOpenAIRegistered, registerOpenAIProvider, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider, registerBedrockProvider, registerXAIProvider, registerMistralProvider, registerTypeSafeProvider, registerAzureProvider };
53
54
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,eAAe,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,KAAK,QAAQ,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAEnE,cAAM,gBAAgB;IACpB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAEzC,cAAc,CAAC,WAAW,EAAE,mBAAmB,GAAG,SAAS;IAIlE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAO/C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,QAAQ;IAgBvD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAGvD,OAAO,EACL,sBAAsB,IAAI,sBAAsB,EAChD,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACzB,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,eAAe,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,KAAK,QAAQ,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAEnE,cAAM,gBAAgB;IACpB,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,iBAAiB,CAAC,CAAsB;IAEzC,cAAc,CAAC,WAAW,EAAE,mBAAmB,GAAG,SAAS;IAIlE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAO/C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,QAAQ;IAgBvD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,kBAAyB,CAAC;AAGvD,OAAO,EACL,sBAAsB,IAAI,sBAAsB,EAChD,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACtB,CAAC"}
@@ -8,6 +8,7 @@ import { registerBedrockProvider } from "./bedrock/index.js";
8
8
  import { registerXAIProvider } from "./xai/index.js";
9
9
  import { registerMistralProvider } from "./mistral/index.js";
10
10
  import { registerTypeSafeProvider } from "./typesafe/index.js";
11
+ import { registerAzureProvider } from "./azure/index.js";
11
12
  class ProviderRegistry {
12
13
  providers = new Map();
13
14
  globalInterceptor;
@@ -67,4 +68,4 @@ class ProviderRegistry {
67
68
  */
68
69
  export const providerRegistry = new ProviderRegistry();
69
70
  // Exported registration functions (delegates to provider-specific index files)
70
- export { registerOpenAIProvider as ensureOpenAIRegistered, registerOpenAIProvider, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider, registerBedrockProvider, registerXAIProvider, registerMistralProvider, registerTypeSafeProvider };
71
+ export { registerOpenAIProvider as ensureOpenAIRegistered, registerOpenAIProvider, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider, registerBedrockProvider, registerXAIProvider, registerMistralProvider, registerTypeSafeProvider, registerAzureProvider };
@@ -9,6 +9,7 @@ export declare class Capabilities {
9
9
  static supportsModeration(modelId: string): boolean;
10
10
  static supportsReasoning(modelId: string): boolean;
11
11
  static supportsToolChoice(_modelId: string): boolean;
12
+ static supportsTemperature(modelId: string): boolean;
12
13
  static getContextWindow(modelId: string): number;
13
14
  static getPricing(modelId: string): ModelPricing | undefined;
14
15
  private static findModel;
@@ -1 +1 @@
1
- {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAS9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
1
+ {"version":3,"file":"Capabilities.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/Capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,YAAY;IACvB,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI/C,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAS9C,MAAM,CAAC,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItD,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAInD,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIpD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIhD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D,OAAO,CAAC,MAAM,CAAC,SAAS;CAGzB"}
@@ -36,6 +36,9 @@ export class Capabilities {
36
36
  static supportsToolChoice(_modelId) {
37
37
  return true;
38
38
  }
39
+ static supportsTemperature(modelId) {
40
+ return ModelRegistry.supportsTemperature(modelId, "xai");
41
+ }
39
42
  static getContextWindow(modelId) {
40
43
  return ModelRegistry.getContextWindow(modelId, "xai") ?? 128_000;
41
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,gBAAgB,CAAC;AAiClE,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAgF3D"}
1
+ {"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAS,MAAM,gBAAgB,CAAC;AAiClE,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;IAG3B,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAkF3D"}
@@ -11,7 +11,7 @@ export class XAIChat {
11
11
  this.apiKey = apiKey;
12
12
  }
13
13
  async execute(request) {
14
- const { model, messages, tools, max_tokens, response_format, thinking: _thinking, headers: _headers, requestTimeout, ...rest } = request;
14
+ const { model, messages, tools, max_tokens, response_format, thinking: _thinking, headers: _headers, requestTimeout, signal, ...rest } = request;
15
15
  const mappedMessages = mapSystemMessages(messages, false);
16
16
  const body = {
17
17
  model,
@@ -33,7 +33,8 @@ export class XAIChat {
33
33
  "Content-Type": "application/json",
34
34
  ...request.headers
35
35
  },
36
- body: JSON.stringify(body)
36
+ body: JSON.stringify(body),
37
+ signal
37
38
  }, requestTimeout);
38
39
  if (!response.ok) {
39
40
  await handleXAIError(response, model);
@@ -1 +1 @@
1
- {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/Errors.ts"],"names":[],"mappings":"AASA,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAiCvF"}
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/Errors.ts"],"names":[],"mappings":"AAWA,wBAAsB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAoCvF"}
@@ -1,11 +1,11 @@
1
- import { APIError, AuthenticationError, BadRequestError, RateLimitError, ServerError, NotFoundError } from "../../errors/index.js";
1
+ import { InsufficientQuotaError, APIError, AuthenticationError, BadRequestError, RateLimitError, ServerError, NotFoundError } from "../../errors/index.js";
2
+ import { isBillingProblem } from "../../errors/billing.js";
2
3
  export async function handleXAIError(response, model) {
3
4
  const status = response.status;
4
5
  let errorMessage = `xAI API identification failed with status ${status}`;
5
6
  let errorData = {};
6
7
  try {
7
8
  const text = await response.text();
8
- console.error("XAI ERROR RESPONSE:", text);
9
9
  errorData = JSON.parse(text);
10
10
  errorMessage = errorData.error?.message || errorMessage;
11
11
  }
@@ -13,6 +13,9 @@ export async function handleXAIError(response, model) {
13
13
  // Ignore JSON parsing errors
14
14
  }
15
15
  const provider = "xai";
16
+ if (isBillingProblem(status, errorMessage)) {
17
+ throw new InsufficientQuotaError(errorMessage, errorData, provider, model);
18
+ }
16
19
  switch (status) {
17
20
  case 401:
18
21
  throw new AuthenticationError(errorMessage, status, errorData, provider);
@@ -21,6 +21,7 @@ export declare class XAIProvider extends BaseProvider implements Provider {
21
21
  supportsModeration: (model: string) => boolean;
22
22
  supportsReasoning: (model: string) => boolean;
23
23
  supportsDeveloperRole: (_model: string) => boolean;
24
+ supportsTemperature: (model: string) => boolean;
24
25
  getContextWindow: (model: string) => number;
25
26
  };
26
27
  constructor(options: XAIProviderOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"XAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/XAIProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAY,SAAQ,YAAa,YAAW,QAAQ;IAoBnD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAnBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAe;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IAEjC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;kCACZ,MAAM;MAChC;gBAE2B,OAAO,EAAE,kBAAkB;IASxD,IAAW,EAAE,IAAI,MAAM,CAEtB;IAEM,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAG3D"}
1
+ {"version":3,"file":"XAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/xai/XAIProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,WAAY,SAAQ,YAAa,YAAW,QAAQ;IAqBnD,OAAO,CAAC,QAAQ,CAAC,OAAO;IApBpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAe;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;IAEjC,YAAY;gCACO,MAAM;+BACP,MAAM;0CACK,MAAM;oCACZ,MAAM;yCACD,MAAM;uCACR,MAAM;oCACT,MAAM;mCACP,MAAM;wCACD,MAAM;qCACT,MAAM;kCACT,MAAM;MAChC;gBAE2B,OAAO,EAAE,kBAAkB;IASxD,IAAW,EAAE,IAAI,MAAM,CAEtB;IAEM,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,SAAS,CAAC,YAAY,IAAI,MAAM;IAIhB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjD,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC;IAIxD,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAIlC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CAG3D"}