@librechat/agents 2.4.50 → 2.4.51

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.
@@ -3,9 +3,8 @@
3
3
  var openai$1 = require('openai');
4
4
  var xai = require('@langchain/xai');
5
5
  var deepseek = require('@langchain/deepseek');
6
- var base = require('@langchain/core/language_models/base');
7
6
  var openai = require('@langchain/openai');
8
- var function_calling = require('@langchain/core/utils/function_calling');
7
+ require('@langchain/core/utils/function_calling');
9
8
  var index = require('./utils/index.cjs');
10
9
 
11
10
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
@@ -49,45 +48,6 @@ function createAbortHandler(controller) {
49
48
  controller.abort();
50
49
  };
51
50
  }
52
- /**
53
- * Formats a tool in either OpenAI format, or LangChain structured tool format
54
- * into an OpenAI tool format. If the tool is already in OpenAI format, return without
55
- * any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format
56
- * using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters
57
- * returned from the `zodFunction` util are not defined.
58
- *
59
- * @param {BindToolsInput} tool The tool to convert to an OpenAI tool.
60
- * @param {Object} [fields] Additional fields to add to the OpenAI tool.
61
- * @returns {ToolDefinition} The inputted tool in OpenAI tool format.
62
- */
63
- function _convertToOpenAITool(tool, fields) {
64
- let toolDef;
65
- if (function_calling.isLangChainTool(tool)) {
66
- toolDef = openai.formatToOpenAITool(tool);
67
- }
68
- else {
69
- toolDef = tool;
70
- }
71
- if (fields?.strict !== undefined) {
72
- toolDef.function.strict = fields.strict;
73
- }
74
- return toolDef;
75
- }
76
- function _convertChatOpenAIToolTypeToOpenAITool(tool, fields) {
77
- if (base.isOpenAITool(tool)) {
78
- if (fields?.strict !== undefined) {
79
- return {
80
- ...tool,
81
- function: {
82
- ...tool.function,
83
- strict: fields.strict,
84
- },
85
- };
86
- }
87
- return tool;
88
- }
89
- return _convertToOpenAITool(tool, fields);
90
- }
91
51
  class CustomOpenAIClient extends openai.OpenAIClient {
92
52
  abortHandler;
93
53
  async fetchWithTimeout(url, init, ms, controller) {
@@ -142,28 +102,10 @@ class CustomAzureOpenAIClient extends openai$1.AzureOpenAI {
142
102
  }));
143
103
  }
144
104
  }
145
- function isBuiltInTool(tool) {
146
- return 'type' in tool && tool.type !== 'function';
147
- }
148
105
  class ChatOpenAI extends openai.ChatOpenAI {
149
106
  get exposedClient() {
150
107
  return this.client;
151
108
  }
152
- bindTools(tools, kwargs) {
153
- let strict;
154
- if (kwargs?.strict !== undefined) {
155
- strict = kwargs.strict;
156
- }
157
- else if (this.supportsStrictToolCalling !== undefined) {
158
- strict = this.supportsStrictToolCalling;
159
- }
160
- return this.withConfig({
161
- tools: tools.map((tool) => isBuiltInTool(tool)
162
- ? tool
163
- : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })),
164
- ...kwargs,
165
- });
166
- }
167
109
  _getClientOptions(options) {
168
110
  if (!this.client) {
169
111
  const openAIEndpointConfig = {
@@ -207,21 +149,6 @@ class ChatOpenAI extends openai.ChatOpenAI {
207
149
  }
208
150
  }
209
151
  class AzureChatOpenAI extends openai.AzureChatOpenAI {
210
- bindTools(tools, kwargs) {
211
- let strict;
212
- if (kwargs?.strict !== undefined) {
213
- strict = kwargs.strict;
214
- }
215
- else if (this.supportsStrictToolCalling !== undefined) {
216
- strict = this.supportsStrictToolCalling;
217
- }
218
- return this.withConfig({
219
- tools: tools.map((tool) => isBuiltInTool(tool)
220
- ? tool
221
- : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })),
222
- ...kwargs,
223
- });
224
- }
225
152
  get exposedClient() {
226
153
  return this.client;
227
154
  }
@@ -359,7 +286,6 @@ exports.ChatOpenAI = ChatOpenAI;
359
286
  exports.ChatXAI = ChatXAI;
360
287
  exports.CustomAzureOpenAIClient = CustomAzureOpenAIClient;
361
288
  exports.CustomOpenAIClient = CustomOpenAIClient;
362
- exports._convertToOpenAITool = _convertToOpenAITool;
363
289
  exports.isHeaders = isHeaders;
364
290
  exports.normalizeHeaders = normalizeHeaders;
365
291
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/llm/openai/index.ts"],"sourcesContent":["import { AzureOpenAI as AzureOpenAIClient } from 'openai';\nimport { ChatXAI as OriginalChatXAI } from '@langchain/xai';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport {\n isOpenAITool,\n ToolDefinition,\n BaseLanguageModelInput,\n} from '@langchain/core/language_models/base';\nimport {\n getEndpoint,\n OpenAIClient,\n formatToOpenAITool,\n ChatOpenAI as OriginalChatOpenAI,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n} from '@langchain/openai';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { isLangChainTool } from '@langchain/core/utils/function_calling';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { OpenAIEndpointConfig } from '@langchain/openai/dist/utils/azure';\nimport type { AIMessageChunk, BaseMessage } from '@langchain/core/messages';\nimport type { Runnable } from '@langchain/core/runnables';\nimport type * as t from '@langchain/openai';\nimport {\n _convertMessagesToOpenAIResponsesParams,\n _convertOpenAIResponsesDeltaToBaseMessageChunk,\n type ResponseReturnStreamEvents,\n} from './utils';\n\ntype ResponsesCreateParams = Parameters<OpenAIClient.Responses['create']>[0];\ntype ResponsesTool = Exclude<ResponsesCreateParams['tools'], undefined>[number];\n\ntype ChatOpenAIToolType =\n | BindToolsInput\n | OpenAIClient.ChatCompletionTool\n | ResponsesTool;\n\ntype HeaderValue = string | undefined | null;\nexport type HeadersLike =\n | Headers\n | readonly HeaderValue[][]\n | Record<string, HeaderValue | readonly HeaderValue[]>\n | undefined\n | null\n // NullableHeaders\n | { values: Headers; [key: string]: unknown };\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst iife = <T>(fn: () => T) => fn();\n\nexport function isHeaders(headers: unknown): headers is Headers {\n return (\n typeof Headers !== 'undefined' &&\n headers !== null &&\n typeof headers === 'object' &&\n Object.prototype.toString.call(headers) === '[object Headers]'\n );\n}\n\nexport function normalizeHeaders(\n headers: HeadersLike\n): Record<string, HeaderValue | readonly HeaderValue[]> {\n const output = iife(() => {\n // If headers is a Headers instance\n if (isHeaders(headers)) {\n return headers;\n }\n // If headers is an array of [key, value] pairs\n else if (Array.isArray(headers)) {\n return new Headers(headers);\n }\n // If headers is a NullableHeaders-like object (has 'values' property that is a Headers)\n else if (\n typeof headers === 'object' &&\n headers !== null &&\n 'values' in headers &&\n isHeaders(headers.values)\n ) {\n return headers.values;\n }\n // If headers is a plain object\n else if (typeof headers === 'object' && headers !== null) {\n const entries: [string, string][] = Object.entries(headers)\n .filter(([, v]) => typeof v === 'string')\n .map(([k, v]) => [k, v as string]);\n return new Headers(entries);\n }\n return new Headers();\n });\n\n return Object.fromEntries(output.entries());\n}\n\ntype OpenAICoreRequestOptions = OpenAIClient.RequestOptions;\n\nfunction createAbortHandler(controller: AbortController): () => void {\n return function (): void {\n controller.abort();\n };\n}\n/**\n * Formats a tool in either OpenAI format, or LangChain structured tool format\n * into an OpenAI tool format. If the tool is already in OpenAI format, return without\n * any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format\n * using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters\n * returned from the `zodFunction` util are not defined.\n *\n * @param {BindToolsInput} tool The tool to convert to an OpenAI tool.\n * @param {Object} [fields] Additional fields to add to the OpenAI tool.\n * @returns {ToolDefinition} The inputted tool in OpenAI tool format.\n */\nexport function _convertToOpenAITool(\n tool: BindToolsInput,\n fields?: {\n /**\n * If `true`, model output is guaranteed to exactly match the JSON Schema\n * provided in the function definition.\n */\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n let toolDef: OpenAIClient.ChatCompletionTool | undefined;\n\n if (isLangChainTool(tool)) {\n toolDef = formatToOpenAITool(tool);\n } else {\n toolDef = tool as ToolDefinition;\n }\n\n if (fields?.strict !== undefined) {\n toolDef.function.strict = fields.strict;\n }\n\n return toolDef;\n}\n\nfunction _convertChatOpenAIToolTypeToOpenAITool(\n tool: ChatOpenAIToolType,\n fields?: {\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n if (isOpenAITool(tool)) {\n if (fields?.strict !== undefined) {\n return {\n ...tool,\n function: {\n ...tool.function,\n strict: fields.strict,\n },\n };\n }\n\n return tool;\n }\n return _convertToOpenAITool(tool, fields);\n}\n\nexport class CustomOpenAIClient extends OpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\nexport class CustomAzureOpenAIClient extends AzureOpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\n\nfunction isBuiltInTool(tool: ChatOpenAIToolType): tool is ResponsesTool {\n return 'type' in tool && tool.type !== 'function';\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n override bindTools(\n tools: ChatOpenAIToolType[],\n kwargs?: Partial<t.ChatOpenAICallOptions>\n ): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions> {\n let strict: boolean | undefined;\n if (kwargs?.strict !== undefined) {\n strict = kwargs.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n return this.withConfig({\n tools: tools.map((tool) =>\n isBuiltInTool(tool)\n ? tool\n : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })\n ),\n ...kwargs,\n } as Partial<t.ChatOpenAICallOptions>);\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\n\nexport class AzureChatOpenAI extends OriginalAzureChatOpenAI {\n override bindTools(\n tools: ChatOpenAIToolType[],\n kwargs?: Partial<t.ChatOpenAICallOptions>\n ): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions> {\n let strict: boolean | undefined;\n if (kwargs?.strict !== undefined) {\n strict = kwargs.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n return this.withConfig({\n tools: tools.map((tool) =>\n isBuiltInTool(tool)\n ? tool\n : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })\n ),\n ...kwargs,\n } as Partial<t.ChatOpenAICallOptions>);\n }\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: langchainjs-azure-openai-v2`\n : 'langchainjs-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\nexport class ChatDeepSeek extends OriginalChatDeepSeek {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n\nexport class ChatXAI extends OriginalChatXAI {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n"],"names":["isLangChainTool","formatToOpenAITool","isOpenAITool","OpenAIClient","AzureOpenAIClient","OriginalChatOpenAI","getEndpoint","_convertMessagesToOpenAIResponsesParams","_convertOpenAIResponsesDeltaToBaseMessageChunk","OriginalAzureChatOpenAI","OriginalChatDeepSeek","OriginalChatXAI"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/llm/openai/index.ts"],"sourcesContent":["import { AzureOpenAI as AzureOpenAIClient } from 'openai';\nimport { ChatXAI as OriginalChatXAI } from '@langchain/xai';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport { ToolDefinition } from '@langchain/core/language_models/base';\nimport {\n getEndpoint,\n OpenAIClient,\n formatToOpenAITool,\n ChatOpenAI as OriginalChatOpenAI,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n} from '@langchain/openai';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { isLangChainTool } from '@langchain/core/utils/function_calling';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { OpenAIEndpointConfig } from '@langchain/openai/dist/utils/azure';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type * as t from '@langchain/openai';\nimport {\n _convertMessagesToOpenAIResponsesParams,\n _convertOpenAIResponsesDeltaToBaseMessageChunk,\n type ResponseReturnStreamEvents,\n} from './utils';\n\ntype HeaderValue = string | undefined | null;\nexport type HeadersLike =\n | Headers\n | readonly HeaderValue[][]\n | Record<string, HeaderValue | readonly HeaderValue[]>\n | undefined\n | null\n // NullableHeaders\n | { values: Headers; [key: string]: unknown };\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst iife = <T>(fn: () => T) => fn();\n\nexport function isHeaders(headers: unknown): headers is Headers {\n return (\n typeof Headers !== 'undefined' &&\n headers !== null &&\n typeof headers === 'object' &&\n Object.prototype.toString.call(headers) === '[object Headers]'\n );\n}\n\nexport function normalizeHeaders(\n headers: HeadersLike\n): Record<string, HeaderValue | readonly HeaderValue[]> {\n const output = iife(() => {\n // If headers is a Headers instance\n if (isHeaders(headers)) {\n return headers;\n }\n // If headers is an array of [key, value] pairs\n else if (Array.isArray(headers)) {\n return new Headers(headers);\n }\n // If headers is a NullableHeaders-like object (has 'values' property that is a Headers)\n else if (\n typeof headers === 'object' &&\n headers !== null &&\n 'values' in headers &&\n isHeaders(headers.values)\n ) {\n return headers.values;\n }\n // If headers is a plain object\n else if (typeof headers === 'object' && headers !== null) {\n const entries: [string, string][] = Object.entries(headers)\n .filter(([, v]) => typeof v === 'string')\n .map(([k, v]) => [k, v as string]);\n return new Headers(entries);\n }\n return new Headers();\n });\n\n return Object.fromEntries(output.entries());\n}\n\ntype OpenAICoreRequestOptions = OpenAIClient.RequestOptions;\n\nfunction createAbortHandler(controller: AbortController): () => void {\n return function (): void {\n controller.abort();\n };\n}\n/**\n * Formats a tool in either OpenAI format, or LangChain structured tool format\n * into an OpenAI tool format. If the tool is already in OpenAI format, return without\n * any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format\n * using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters\n * returned from the `zodFunction` util are not defined.\n *\n * @param {BindToolsInput} tool The tool to convert to an OpenAI tool.\n * @param {Object} [fields] Additional fields to add to the OpenAI tool.\n * @returns {ToolDefinition} The inputted tool in OpenAI tool format.\n */\nexport function _convertToOpenAITool(\n tool: BindToolsInput,\n fields?: {\n /**\n * If `true`, model output is guaranteed to exactly match the JSON Schema\n * provided in the function definition.\n */\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n let toolDef: OpenAIClient.ChatCompletionTool | undefined;\n\n if (isLangChainTool(tool)) {\n toolDef = formatToOpenAITool(tool);\n } else {\n toolDef = tool as ToolDefinition;\n }\n\n if (fields?.strict !== undefined) {\n toolDef.function.strict = fields.strict;\n }\n\n return toolDef;\n}\nexport class CustomOpenAIClient extends OpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\nexport class CustomAzureOpenAIClient extends AzureOpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\n\nexport class AzureChatOpenAI extends OriginalAzureChatOpenAI {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: langchainjs-azure-openai-v2`\n : 'langchainjs-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\nexport class ChatDeepSeek extends OriginalChatDeepSeek {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n\nexport class ChatXAI extends OriginalChatXAI {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n"],"names":["OpenAIClient","AzureOpenAIClient","OriginalChatOpenAI","getEndpoint","_convertMessagesToOpenAIResponsesParams","_convertOpenAIResponsesDeltaToBaseMessageChunk","OriginalAzureChatOpenAI","OriginalChatDeepSeek","OriginalChatXAI"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import { AzureOpenAI } from 'openai';
2
2
  import { ChatXAI as ChatXAI$1 } from '@langchain/xai';
3
3
  import { ChatDeepSeek as ChatDeepSeek$1 } from '@langchain/deepseek';
4
- import { isOpenAITool } from '@langchain/core/language_models/base';
5
- import { getEndpoint, AzureChatOpenAI as AzureChatOpenAI$1, ChatOpenAI as ChatOpenAI$1, OpenAIClient, formatToOpenAITool } from '@langchain/openai';
6
- import { isLangChainTool } from '@langchain/core/utils/function_calling';
4
+ import { getEndpoint, AzureChatOpenAI as AzureChatOpenAI$1, ChatOpenAI as ChatOpenAI$1, OpenAIClient } from '@langchain/openai';
5
+ import '@langchain/core/utils/function_calling';
7
6
  import { _convertMessagesToOpenAIResponsesParams, _convertOpenAIResponsesDeltaToBaseMessageChunk } from './utils/index.mjs';
8
7
 
9
8
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
@@ -47,45 +46,6 @@ function createAbortHandler(controller) {
47
46
  controller.abort();
48
47
  };
49
48
  }
50
- /**
51
- * Formats a tool in either OpenAI format, or LangChain structured tool format
52
- * into an OpenAI tool format. If the tool is already in OpenAI format, return without
53
- * any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format
54
- * using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters
55
- * returned from the `zodFunction` util are not defined.
56
- *
57
- * @param {BindToolsInput} tool The tool to convert to an OpenAI tool.
58
- * @param {Object} [fields] Additional fields to add to the OpenAI tool.
59
- * @returns {ToolDefinition} The inputted tool in OpenAI tool format.
60
- */
61
- function _convertToOpenAITool(tool, fields) {
62
- let toolDef;
63
- if (isLangChainTool(tool)) {
64
- toolDef = formatToOpenAITool(tool);
65
- }
66
- else {
67
- toolDef = tool;
68
- }
69
- if (fields?.strict !== undefined) {
70
- toolDef.function.strict = fields.strict;
71
- }
72
- return toolDef;
73
- }
74
- function _convertChatOpenAIToolTypeToOpenAITool(tool, fields) {
75
- if (isOpenAITool(tool)) {
76
- if (fields?.strict !== undefined) {
77
- return {
78
- ...tool,
79
- function: {
80
- ...tool.function,
81
- strict: fields.strict,
82
- },
83
- };
84
- }
85
- return tool;
86
- }
87
- return _convertToOpenAITool(tool, fields);
88
- }
89
49
  class CustomOpenAIClient extends OpenAIClient {
90
50
  abortHandler;
91
51
  async fetchWithTimeout(url, init, ms, controller) {
@@ -140,28 +100,10 @@ class CustomAzureOpenAIClient extends AzureOpenAI {
140
100
  }));
141
101
  }
142
102
  }
143
- function isBuiltInTool(tool) {
144
- return 'type' in tool && tool.type !== 'function';
145
- }
146
103
  class ChatOpenAI extends ChatOpenAI$1 {
147
104
  get exposedClient() {
148
105
  return this.client;
149
106
  }
150
- bindTools(tools, kwargs) {
151
- let strict;
152
- if (kwargs?.strict !== undefined) {
153
- strict = kwargs.strict;
154
- }
155
- else if (this.supportsStrictToolCalling !== undefined) {
156
- strict = this.supportsStrictToolCalling;
157
- }
158
- return this.withConfig({
159
- tools: tools.map((tool) => isBuiltInTool(tool)
160
- ? tool
161
- : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })),
162
- ...kwargs,
163
- });
164
- }
165
107
  _getClientOptions(options) {
166
108
  if (!this.client) {
167
109
  const openAIEndpointConfig = {
@@ -205,21 +147,6 @@ class ChatOpenAI extends ChatOpenAI$1 {
205
147
  }
206
148
  }
207
149
  class AzureChatOpenAI extends AzureChatOpenAI$1 {
208
- bindTools(tools, kwargs) {
209
- let strict;
210
- if (kwargs?.strict !== undefined) {
211
- strict = kwargs.strict;
212
- }
213
- else if (this.supportsStrictToolCalling !== undefined) {
214
- strict = this.supportsStrictToolCalling;
215
- }
216
- return this.withConfig({
217
- tools: tools.map((tool) => isBuiltInTool(tool)
218
- ? tool
219
- : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })),
220
- ...kwargs,
221
- });
222
- }
223
150
  get exposedClient() {
224
151
  return this.client;
225
152
  }
@@ -351,5 +278,5 @@ class ChatXAI extends ChatXAI$1 {
351
278
  }
352
279
  }
353
280
 
354
- export { AzureChatOpenAI, ChatDeepSeek, ChatOpenAI, ChatXAI, CustomAzureOpenAIClient, CustomOpenAIClient, _convertToOpenAITool, isHeaders, normalizeHeaders };
281
+ export { AzureChatOpenAI, ChatDeepSeek, ChatOpenAI, ChatXAI, CustomAzureOpenAIClient, CustomOpenAIClient, isHeaders, normalizeHeaders };
355
282
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/llm/openai/index.ts"],"sourcesContent":["import { AzureOpenAI as AzureOpenAIClient } from 'openai';\nimport { ChatXAI as OriginalChatXAI } from '@langchain/xai';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport {\n isOpenAITool,\n ToolDefinition,\n BaseLanguageModelInput,\n} from '@langchain/core/language_models/base';\nimport {\n getEndpoint,\n OpenAIClient,\n formatToOpenAITool,\n ChatOpenAI as OriginalChatOpenAI,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n} from '@langchain/openai';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { isLangChainTool } from '@langchain/core/utils/function_calling';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { OpenAIEndpointConfig } from '@langchain/openai/dist/utils/azure';\nimport type { AIMessageChunk, BaseMessage } from '@langchain/core/messages';\nimport type { Runnable } from '@langchain/core/runnables';\nimport type * as t from '@langchain/openai';\nimport {\n _convertMessagesToOpenAIResponsesParams,\n _convertOpenAIResponsesDeltaToBaseMessageChunk,\n type ResponseReturnStreamEvents,\n} from './utils';\n\ntype ResponsesCreateParams = Parameters<OpenAIClient.Responses['create']>[0];\ntype ResponsesTool = Exclude<ResponsesCreateParams['tools'], undefined>[number];\n\ntype ChatOpenAIToolType =\n | BindToolsInput\n | OpenAIClient.ChatCompletionTool\n | ResponsesTool;\n\ntype HeaderValue = string | undefined | null;\nexport type HeadersLike =\n | Headers\n | readonly HeaderValue[][]\n | Record<string, HeaderValue | readonly HeaderValue[]>\n | undefined\n | null\n // NullableHeaders\n | { values: Headers; [key: string]: unknown };\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst iife = <T>(fn: () => T) => fn();\n\nexport function isHeaders(headers: unknown): headers is Headers {\n return (\n typeof Headers !== 'undefined' &&\n headers !== null &&\n typeof headers === 'object' &&\n Object.prototype.toString.call(headers) === '[object Headers]'\n );\n}\n\nexport function normalizeHeaders(\n headers: HeadersLike\n): Record<string, HeaderValue | readonly HeaderValue[]> {\n const output = iife(() => {\n // If headers is a Headers instance\n if (isHeaders(headers)) {\n return headers;\n }\n // If headers is an array of [key, value] pairs\n else if (Array.isArray(headers)) {\n return new Headers(headers);\n }\n // If headers is a NullableHeaders-like object (has 'values' property that is a Headers)\n else if (\n typeof headers === 'object' &&\n headers !== null &&\n 'values' in headers &&\n isHeaders(headers.values)\n ) {\n return headers.values;\n }\n // If headers is a plain object\n else if (typeof headers === 'object' && headers !== null) {\n const entries: [string, string][] = Object.entries(headers)\n .filter(([, v]) => typeof v === 'string')\n .map(([k, v]) => [k, v as string]);\n return new Headers(entries);\n }\n return new Headers();\n });\n\n return Object.fromEntries(output.entries());\n}\n\ntype OpenAICoreRequestOptions = OpenAIClient.RequestOptions;\n\nfunction createAbortHandler(controller: AbortController): () => void {\n return function (): void {\n controller.abort();\n };\n}\n/**\n * Formats a tool in either OpenAI format, or LangChain structured tool format\n * into an OpenAI tool format. If the tool is already in OpenAI format, return without\n * any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format\n * using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters\n * returned from the `zodFunction` util are not defined.\n *\n * @param {BindToolsInput} tool The tool to convert to an OpenAI tool.\n * @param {Object} [fields] Additional fields to add to the OpenAI tool.\n * @returns {ToolDefinition} The inputted tool in OpenAI tool format.\n */\nexport function _convertToOpenAITool(\n tool: BindToolsInput,\n fields?: {\n /**\n * If `true`, model output is guaranteed to exactly match the JSON Schema\n * provided in the function definition.\n */\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n let toolDef: OpenAIClient.ChatCompletionTool | undefined;\n\n if (isLangChainTool(tool)) {\n toolDef = formatToOpenAITool(tool);\n } else {\n toolDef = tool as ToolDefinition;\n }\n\n if (fields?.strict !== undefined) {\n toolDef.function.strict = fields.strict;\n }\n\n return toolDef;\n}\n\nfunction _convertChatOpenAIToolTypeToOpenAITool(\n tool: ChatOpenAIToolType,\n fields?: {\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n if (isOpenAITool(tool)) {\n if (fields?.strict !== undefined) {\n return {\n ...tool,\n function: {\n ...tool.function,\n strict: fields.strict,\n },\n };\n }\n\n return tool;\n }\n return _convertToOpenAITool(tool, fields);\n}\n\nexport class CustomOpenAIClient extends OpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\nexport class CustomAzureOpenAIClient extends AzureOpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\n\nfunction isBuiltInTool(tool: ChatOpenAIToolType): tool is ResponsesTool {\n return 'type' in tool && tool.type !== 'function';\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n override bindTools(\n tools: ChatOpenAIToolType[],\n kwargs?: Partial<t.ChatOpenAICallOptions>\n ): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions> {\n let strict: boolean | undefined;\n if (kwargs?.strict !== undefined) {\n strict = kwargs.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n return this.withConfig({\n tools: tools.map((tool) =>\n isBuiltInTool(tool)\n ? tool\n : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })\n ),\n ...kwargs,\n } as Partial<t.ChatOpenAICallOptions>);\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\n\nexport class AzureChatOpenAI extends OriginalAzureChatOpenAI {\n override bindTools(\n tools: ChatOpenAIToolType[],\n kwargs?: Partial<t.ChatOpenAICallOptions>\n ): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions> {\n let strict: boolean | undefined;\n if (kwargs?.strict !== undefined) {\n strict = kwargs.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n return this.withConfig({\n tools: tools.map((tool) =>\n isBuiltInTool(tool)\n ? tool\n : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })\n ),\n ...kwargs,\n } as Partial<t.ChatOpenAICallOptions>);\n }\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: langchainjs-azure-openai-v2`\n : 'langchainjs-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\nexport class ChatDeepSeek extends OriginalChatDeepSeek {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n\nexport class ChatXAI extends OriginalChatXAI {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n"],"names":["AzureOpenAIClient","OriginalChatOpenAI","OriginalAzureChatOpenAI","OriginalChatDeepSeek","OriginalChatXAI"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/llm/openai/index.ts"],"sourcesContent":["import { AzureOpenAI as AzureOpenAIClient } from 'openai';\nimport { ChatXAI as OriginalChatXAI } from '@langchain/xai';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport { ToolDefinition } from '@langchain/core/language_models/base';\nimport {\n getEndpoint,\n OpenAIClient,\n formatToOpenAITool,\n ChatOpenAI as OriginalChatOpenAI,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n} from '@langchain/openai';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { isLangChainTool } from '@langchain/core/utils/function_calling';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { OpenAIEndpointConfig } from '@langchain/openai/dist/utils/azure';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type * as t from '@langchain/openai';\nimport {\n _convertMessagesToOpenAIResponsesParams,\n _convertOpenAIResponsesDeltaToBaseMessageChunk,\n type ResponseReturnStreamEvents,\n} from './utils';\n\ntype HeaderValue = string | undefined | null;\nexport type HeadersLike =\n | Headers\n | readonly HeaderValue[][]\n | Record<string, HeaderValue | readonly HeaderValue[]>\n | undefined\n | null\n // NullableHeaders\n | { values: Headers; [key: string]: unknown };\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst iife = <T>(fn: () => T) => fn();\n\nexport function isHeaders(headers: unknown): headers is Headers {\n return (\n typeof Headers !== 'undefined' &&\n headers !== null &&\n typeof headers === 'object' &&\n Object.prototype.toString.call(headers) === '[object Headers]'\n );\n}\n\nexport function normalizeHeaders(\n headers: HeadersLike\n): Record<string, HeaderValue | readonly HeaderValue[]> {\n const output = iife(() => {\n // If headers is a Headers instance\n if (isHeaders(headers)) {\n return headers;\n }\n // If headers is an array of [key, value] pairs\n else if (Array.isArray(headers)) {\n return new Headers(headers);\n }\n // If headers is a NullableHeaders-like object (has 'values' property that is a Headers)\n else if (\n typeof headers === 'object' &&\n headers !== null &&\n 'values' in headers &&\n isHeaders(headers.values)\n ) {\n return headers.values;\n }\n // If headers is a plain object\n else if (typeof headers === 'object' && headers !== null) {\n const entries: [string, string][] = Object.entries(headers)\n .filter(([, v]) => typeof v === 'string')\n .map(([k, v]) => [k, v as string]);\n return new Headers(entries);\n }\n return new Headers();\n });\n\n return Object.fromEntries(output.entries());\n}\n\ntype OpenAICoreRequestOptions = OpenAIClient.RequestOptions;\n\nfunction createAbortHandler(controller: AbortController): () => void {\n return function (): void {\n controller.abort();\n };\n}\n/**\n * Formats a tool in either OpenAI format, or LangChain structured tool format\n * into an OpenAI tool format. If the tool is already in OpenAI format, return without\n * any changes. If it is in LangChain structured tool format, convert it to OpenAI tool format\n * using OpenAI's `zodFunction` util, falling back to `convertToOpenAIFunction` if the parameters\n * returned from the `zodFunction` util are not defined.\n *\n * @param {BindToolsInput} tool The tool to convert to an OpenAI tool.\n * @param {Object} [fields] Additional fields to add to the OpenAI tool.\n * @returns {ToolDefinition} The inputted tool in OpenAI tool format.\n */\nexport function _convertToOpenAITool(\n tool: BindToolsInput,\n fields?: {\n /**\n * If `true`, model output is guaranteed to exactly match the JSON Schema\n * provided in the function definition.\n */\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n let toolDef: OpenAIClient.ChatCompletionTool | undefined;\n\n if (isLangChainTool(tool)) {\n toolDef = formatToOpenAITool(tool);\n } else {\n toolDef = tool as ToolDefinition;\n }\n\n if (fields?.strict !== undefined) {\n toolDef.function.strict = fields.strict;\n }\n\n return toolDef;\n}\nexport class CustomOpenAIClient extends OpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\nexport class CustomAzureOpenAIClient extends AzureOpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(() => handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\n\nexport class AzureChatOpenAI extends OriginalAzureChatOpenAI {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: langchainjs-azure-openai-v2`\n : 'langchainjs-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (!this._useResponseApi(options)) {\n return yield* super._streamResponseChunks(messages, options, runManager);\n }\n const streamIterable = await this.responseApiWithRetry(\n {\n ...this.invocationParams<'responses'>(options, { streaming: true }),\n input: _convertMessagesToOpenAIResponsesParams(\n messages,\n this.model,\n this.zdrEnabled\n ),\n stream: true,\n },\n options\n );\n\n for await (const data of streamIterable) {\n const chunk = _convertOpenAIResponsesDeltaToBaseMessageChunk(\n data as ResponseReturnStreamEvents\n );\n if (chunk == null) continue;\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n return;\n }\n}\nexport class ChatDeepSeek extends OriginalChatDeepSeek {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n\nexport class ChatXAI extends OriginalChatXAI {\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n protected _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n}\n"],"names":["AzureOpenAIClient","OriginalChatOpenAI","OriginalAzureChatOpenAI","OriginalChatDeepSeek","OriginalChatXAI"],"mappings":"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"}
@@ -1,17 +1,12 @@
1
1
  import { AzureOpenAI as AzureOpenAIClient } from 'openai';
2
2
  import { ChatXAI as OriginalChatXAI } from '@langchain/xai';
3
3
  import { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';
4
- import { BaseLanguageModelInput } from '@langchain/core/language_models/base';
5
4
  import { OpenAIClient, ChatOpenAI as OriginalChatOpenAI, AzureChatOpenAI as OriginalAzureChatOpenAI } from '@langchain/openai';
6
5
  import type { ChatGenerationChunk } from '@langchain/core/outputs';
7
6
  import { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
8
7
  import type { BindToolsInput } from '@langchain/core/language_models/chat_models';
9
- import type { AIMessageChunk, BaseMessage } from '@langchain/core/messages';
10
- import type { Runnable } from '@langchain/core/runnables';
8
+ import type { BaseMessage } from '@langchain/core/messages';
11
9
  import type * as t from '@langchain/openai';
12
- type ResponsesCreateParams = Parameters<OpenAIClient.Responses['create']>[0];
13
- type ResponsesTool = Exclude<ResponsesCreateParams['tools'], undefined>[number];
14
- type ChatOpenAIToolType = BindToolsInput | OpenAIClient.ChatCompletionTool | ResponsesTool;
15
10
  type HeaderValue = string | undefined | null;
16
11
  export type HeadersLike = Headers | readonly HeaderValue[][] | Record<string, HeaderValue | readonly HeaderValue[]> | undefined | null | {
17
12
  values: Headers;
@@ -48,12 +43,10 @@ export declare class CustomAzureOpenAIClient extends AzureOpenAIClient {
48
43
  }
49
44
  export declare class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {
50
45
  get exposedClient(): CustomOpenAIClient;
51
- bindTools(tools: ChatOpenAIToolType[], kwargs?: Partial<t.ChatOpenAICallOptions>): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions>;
52
46
  protected _getClientOptions(options?: OpenAICoreRequestOptions): OpenAICoreRequestOptions;
53
47
  _streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
54
48
  }
55
49
  export declare class AzureChatOpenAI extends OriginalAzureChatOpenAI {
56
- bindTools(tools: ChatOpenAIToolType[], kwargs?: Partial<t.ChatOpenAICallOptions>): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions>;
57
50
  get exposedClient(): CustomOpenAIClient;
58
51
  protected _getClientOptions(options: OpenAICoreRequestOptions | undefined): OpenAICoreRequestOptions;
59
52
  _streamResponseChunks(messages: BaseMessage[], options: this['ParsedCallOptions'], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@librechat/agents",
3
- "version": "2.4.50",
3
+ "version": "2.4.51",
4
4
  "main": "./dist/cjs/main.cjs",
5
5
  "module": "./dist/esm/main.mjs",
6
6
  "types": "./dist/types/index.d.ts",
@@ -75,14 +75,14 @@
75
75
  "@langchain/anthropic": "^0.3.23",
76
76
  "@langchain/aws": "^0.1.11",
77
77
  "@langchain/community": "^0.3.47",
78
- "@langchain/core": "^0.3.60",
78
+ "@langchain/core": "^0.3.62",
79
79
  "@langchain/deepseek": "^0.0.2",
80
80
  "@langchain/google-genai": "^0.2.13",
81
81
  "@langchain/google-vertexai": "^0.2.13",
82
82
  "@langchain/langgraph": "^0.3.4",
83
83
  "@langchain/mistralai": "^0.2.1",
84
84
  "@langchain/ollama": "^0.2.3",
85
- "@langchain/openai": "^0.5.14",
85
+ "@langchain/openai": "^0.5.16",
86
86
  "@langchain/xai": "^0.0.3",
87
87
  "cheerio": "^1.0.0",
88
88
  "dotenv": "^16.4.7",
@@ -1,11 +1,7 @@
1
1
  import { AzureOpenAI as AzureOpenAIClient } from 'openai';
2
2
  import { ChatXAI as OriginalChatXAI } from '@langchain/xai';
3
3
  import { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';
4
- import {
5
- isOpenAITool,
6
- ToolDefinition,
7
- BaseLanguageModelInput,
8
- } from '@langchain/core/language_models/base';
4
+ import { ToolDefinition } from '@langchain/core/language_models/base';
9
5
  import {
10
6
  getEndpoint,
11
7
  OpenAIClient,
@@ -18,8 +14,7 @@ import { isLangChainTool } from '@langchain/core/utils/function_calling';
18
14
  import { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
19
15
  import type { BindToolsInput } from '@langchain/core/language_models/chat_models';
20
16
  import type { OpenAIEndpointConfig } from '@langchain/openai/dist/utils/azure';
21
- import type { AIMessageChunk, BaseMessage } from '@langchain/core/messages';
22
- import type { Runnable } from '@langchain/core/runnables';
17
+ import type { BaseMessage } from '@langchain/core/messages';
23
18
  import type * as t from '@langchain/openai';
24
19
  import {
25
20
  _convertMessagesToOpenAIResponsesParams,
@@ -27,14 +22,6 @@ import {
27
22
  type ResponseReturnStreamEvents,
28
23
  } from './utils';
29
24
 
30
- type ResponsesCreateParams = Parameters<OpenAIClient.Responses['create']>[0];
31
- type ResponsesTool = Exclude<ResponsesCreateParams['tools'], undefined>[number];
32
-
33
- type ChatOpenAIToolType =
34
- | BindToolsInput
35
- | OpenAIClient.ChatCompletionTool
36
- | ResponsesTool;
37
-
38
25
  type HeaderValue = string | undefined | null;
39
26
  export type HeadersLike =
40
27
  | Headers
@@ -133,29 +120,6 @@ export function _convertToOpenAITool(
133
120
 
134
121
  return toolDef;
135
122
  }
136
-
137
- function _convertChatOpenAIToolTypeToOpenAITool(
138
- tool: ChatOpenAIToolType,
139
- fields?: {
140
- strict?: boolean;
141
- }
142
- ): OpenAIClient.ChatCompletionTool {
143
- if (isOpenAITool(tool)) {
144
- if (fields?.strict !== undefined) {
145
- return {
146
- ...tool,
147
- function: {
148
- ...tool.function,
149
- strict: fields.strict,
150
- },
151
- };
152
- }
153
-
154
- return tool;
155
- }
156
- return _convertToOpenAITool(tool, fields);
157
- }
158
-
159
123
  export class CustomOpenAIClient extends OpenAIClient {
160
124
  abortHandler?: () => void;
161
125
  async fetchWithTimeout(
@@ -227,33 +191,10 @@ export class CustomAzureOpenAIClient extends AzureOpenAIClient {
227
191
  }
228
192
  }
229
193
 
230
- function isBuiltInTool(tool: ChatOpenAIToolType): tool is ResponsesTool {
231
- return 'type' in tool && tool.type !== 'function';
232
- }
233
-
234
194
  export class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {
235
195
  public get exposedClient(): CustomOpenAIClient {
236
196
  return this.client;
237
197
  }
238
- override bindTools(
239
- tools: ChatOpenAIToolType[],
240
- kwargs?: Partial<t.ChatOpenAICallOptions>
241
- ): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions> {
242
- let strict: boolean | undefined;
243
- if (kwargs?.strict !== undefined) {
244
- strict = kwargs.strict;
245
- } else if (this.supportsStrictToolCalling !== undefined) {
246
- strict = this.supportsStrictToolCalling;
247
- }
248
- return this.withConfig({
249
- tools: tools.map((tool) =>
250
- isBuiltInTool(tool)
251
- ? tool
252
- : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })
253
- ),
254
- ...kwargs,
255
- } as Partial<t.ChatOpenAICallOptions>);
256
- }
257
198
  protected _getClientOptions(
258
199
  options?: OpenAICoreRequestOptions
259
200
  ): OpenAICoreRequestOptions {
@@ -324,25 +265,6 @@ export class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {
324
265
  }
325
266
 
326
267
  export class AzureChatOpenAI extends OriginalAzureChatOpenAI {
327
- override bindTools(
328
- tools: ChatOpenAIToolType[],
329
- kwargs?: Partial<t.ChatOpenAICallOptions>
330
- ): Runnable<BaseLanguageModelInput, AIMessageChunk, t.ChatOpenAICallOptions> {
331
- let strict: boolean | undefined;
332
- if (kwargs?.strict !== undefined) {
333
- strict = kwargs.strict;
334
- } else if (this.supportsStrictToolCalling !== undefined) {
335
- strict = this.supportsStrictToolCalling;
336
- }
337
- return this.withConfig({
338
- tools: tools.map((tool) =>
339
- isBuiltInTool(tool)
340
- ? tool
341
- : _convertChatOpenAIToolTypeToOpenAITool(tool, { strict })
342
- ),
343
- ...kwargs,
344
- } as Partial<t.ChatOpenAICallOptions>);
345
- }
346
268
  public get exposedClient(): CustomOpenAIClient {
347
269
  return this.client;
348
270
  }
@@ -25,7 +25,7 @@ import { Run } from '@/run';
25
25
 
26
26
  const provider = Providers.ANTHROPIC;
27
27
  describe(`${capitalizeFirstLetter(provider)} Streaming Tests`, () => {
28
- jest.setTimeout(30000);
28
+ jest.setTimeout(60000);
29
29
  let run: Run<t.IState>;
30
30
  let runningHistory: BaseMessage[];
31
31
  let collectedUsage: UsageMetadata[];