@librechat/agents 3.1.77-dev.1 → 3.1.78-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/cjs/common/enum.cjs +54 -0
  2. package/dist/cjs/common/enum.cjs.map +1 -1
  3. package/dist/cjs/graphs/Graph.cjs +148 -4
  4. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  5. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +291 -0
  6. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -0
  7. package/dist/cjs/llm/openai/index.cjs +317 -1
  8. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  9. package/dist/cjs/main.cjs +90 -0
  10. package/dist/cjs/main.cjs.map +1 -1
  11. package/dist/cjs/messages/anthropicToolCache.cjs +102 -0
  12. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -0
  13. package/dist/cjs/messages/prune.cjs +27 -0
  14. package/dist/cjs/messages/prune.cjs.map +1 -1
  15. package/dist/cjs/messages/recency.cjs +99 -0
  16. package/dist/cjs/messages/recency.cjs.map +1 -0
  17. package/dist/cjs/run.cjs +30 -0
  18. package/dist/cjs/run.cjs.map +1 -1
  19. package/dist/cjs/summarization/node.cjs +100 -6
  20. package/dist/cjs/summarization/node.cjs.map +1 -1
  21. package/dist/cjs/tools/ToolNode.cjs +635 -23
  22. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  23. package/dist/cjs/tools/local/CompileCheckTool.cjs +227 -0
  24. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -0
  25. package/dist/cjs/tools/local/FileCheckpointer.cjs +90 -0
  26. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -0
  27. package/dist/cjs/tools/local/LocalCodingTools.cjs +1098 -0
  28. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -0
  29. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +1042 -0
  30. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -0
  31. package/dist/cjs/tools/local/LocalExecutionTools.cjs +122 -0
  32. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -0
  33. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +453 -0
  34. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -0
  35. package/dist/cjs/tools/local/attachments.cjs +183 -0
  36. package/dist/cjs/tools/local/attachments.cjs.map +1 -0
  37. package/dist/cjs/tools/local/bashAst.cjs +129 -0
  38. package/dist/cjs/tools/local/bashAst.cjs.map +1 -0
  39. package/dist/cjs/tools/local/editStrategies.cjs +188 -0
  40. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -0
  41. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +141 -0
  42. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -0
  43. package/dist/cjs/tools/local/syntaxCheck.cjs +182 -0
  44. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -0
  45. package/dist/cjs/tools/local/textEncoding.cjs +30 -0
  46. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -0
  47. package/dist/cjs/tools/local/workspaceFS.cjs +51 -0
  48. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -0
  49. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -0
  50. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  51. package/dist/esm/common/enum.mjs +53 -1
  52. package/dist/esm/common/enum.mjs.map +1 -1
  53. package/dist/esm/graphs/Graph.mjs +149 -5
  54. package/dist/esm/graphs/Graph.mjs.map +1 -1
  55. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +289 -0
  56. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -0
  57. package/dist/esm/llm/openai/index.mjs +318 -2
  58. package/dist/esm/llm/openai/index.mjs.map +1 -1
  59. package/dist/esm/main.mjs +17 -2
  60. package/dist/esm/main.mjs.map +1 -1
  61. package/dist/esm/messages/anthropicToolCache.mjs +99 -0
  62. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -0
  63. package/dist/esm/messages/prune.mjs +26 -1
  64. package/dist/esm/messages/prune.mjs.map +1 -1
  65. package/dist/esm/messages/recency.mjs +97 -0
  66. package/dist/esm/messages/recency.mjs.map +1 -0
  67. package/dist/esm/run.mjs +30 -0
  68. package/dist/esm/run.mjs.map +1 -1
  69. package/dist/esm/summarization/node.mjs +100 -6
  70. package/dist/esm/summarization/node.mjs.map +1 -1
  71. package/dist/esm/tools/ToolNode.mjs +635 -23
  72. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  73. package/dist/esm/tools/local/CompileCheckTool.mjs +223 -0
  74. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -0
  75. package/dist/esm/tools/local/FileCheckpointer.mjs +87 -0
  76. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -0
  77. package/dist/esm/tools/local/LocalCodingTools.mjs +1075 -0
  78. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -0
  79. package/dist/esm/tools/local/LocalExecutionEngine.mjs +1022 -0
  80. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -0
  81. package/dist/esm/tools/local/LocalExecutionTools.mjs +117 -0
  82. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -0
  83. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +448 -0
  84. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -0
  85. package/dist/esm/tools/local/attachments.mjs +180 -0
  86. package/dist/esm/tools/local/attachments.mjs.map +1 -0
  87. package/dist/esm/tools/local/bashAst.mjs +126 -0
  88. package/dist/esm/tools/local/bashAst.mjs.map +1 -0
  89. package/dist/esm/tools/local/editStrategies.mjs +185 -0
  90. package/dist/esm/tools/local/editStrategies.mjs.map +1 -0
  91. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +137 -0
  92. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -0
  93. package/dist/esm/tools/local/syntaxCheck.mjs +179 -0
  94. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -0
  95. package/dist/esm/tools/local/textEncoding.mjs +27 -0
  96. package/dist/esm/tools/local/textEncoding.mjs.map +1 -0
  97. package/dist/esm/tools/local/workspaceFS.mjs +49 -0
  98. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -0
  99. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -0
  100. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  101. package/dist/types/common/enum.d.ts +39 -1
  102. package/dist/types/graphs/Graph.d.ts +34 -0
  103. package/dist/types/hooks/createWorkspacePolicyHook.d.ts +95 -0
  104. package/dist/types/hooks/index.d.ts +2 -0
  105. package/dist/types/index.d.ts +1 -0
  106. package/dist/types/llm/openai/index.d.ts +17 -0
  107. package/dist/types/messages/anthropicToolCache.d.ts +51 -0
  108. package/dist/types/messages/index.d.ts +2 -0
  109. package/dist/types/messages/prune.d.ts +11 -0
  110. package/dist/types/messages/recency.d.ts +64 -0
  111. package/dist/types/run.d.ts +21 -0
  112. package/dist/types/tools/ToolNode.d.ts +145 -2
  113. package/dist/types/tools/local/CompileCheckTool.d.ts +31 -0
  114. package/dist/types/tools/local/FileCheckpointer.d.ts +39 -0
  115. package/dist/types/tools/local/LocalCodingTools.d.ts +57 -0
  116. package/dist/types/tools/local/LocalExecutionEngine.d.ts +149 -0
  117. package/dist/types/tools/local/LocalExecutionTools.d.ts +9 -0
  118. package/dist/types/tools/local/LocalProgrammaticToolCalling.d.ts +21 -0
  119. package/dist/types/tools/local/attachments.d.ts +84 -0
  120. package/dist/types/tools/local/bashAst.d.ts +11 -0
  121. package/dist/types/tools/local/editStrategies.d.ts +28 -0
  122. package/dist/types/tools/local/index.d.ts +12 -0
  123. package/dist/types/tools/local/resolveLocalExecutionTools.d.ts +38 -0
  124. package/dist/types/tools/local/syntaxCheck.d.ts +42 -0
  125. package/dist/types/tools/local/textEncoding.d.ts +21 -0
  126. package/dist/types/tools/local/workspaceFS.d.ts +49 -0
  127. package/dist/types/types/hitl.d.ts +56 -27
  128. package/dist/types/types/run.d.ts +8 -1
  129. package/dist/types/types/summarize.d.ts +30 -0
  130. package/dist/types/types/tools.d.ts +341 -6
  131. package/package.json +21 -2
  132. package/src/common/enum.ts +54 -0
  133. package/src/graphs/Graph.ts +164 -6
  134. package/src/hooks/__tests__/compactHooks.test.ts +38 -2
  135. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +393 -0
  136. package/src/hooks/createWorkspacePolicyHook.ts +355 -0
  137. package/src/hooks/index.ts +6 -0
  138. package/src/index.ts +1 -0
  139. package/src/llm/openai/deepseek.test.ts +479 -0
  140. package/src/llm/openai/index.ts +484 -1
  141. package/src/messages/__tests__/anthropicToolCache.test.ts +125 -0
  142. package/src/messages/__tests__/recency.test.ts +267 -0
  143. package/src/messages/anthropicToolCache.ts +116 -0
  144. package/src/messages/index.ts +2 -0
  145. package/src/messages/prune.ts +27 -1
  146. package/src/messages/recency.ts +155 -0
  147. package/src/run.ts +31 -0
  148. package/src/scripts/compare_pi_vs_ours.ts +840 -0
  149. package/src/scripts/local_engine.ts +166 -0
  150. package/src/scripts/local_engine_checkpointer.ts +205 -0
  151. package/src/scripts/local_engine_compile.ts +263 -0
  152. package/src/scripts/local_engine_hooks.ts +226 -0
  153. package/src/scripts/local_engine_image.ts +201 -0
  154. package/src/scripts/local_engine_ptc.ts +151 -0
  155. package/src/scripts/local_engine_workspace.ts +258 -0
  156. package/src/scripts/summarization-recency.ts +462 -0
  157. package/src/specs/prune.test.ts +39 -0
  158. package/src/summarization/__tests__/node.test.ts +499 -3
  159. package/src/summarization/node.ts +124 -7
  160. package/src/tools/ToolNode.ts +769 -20
  161. package/src/tools/__tests__/LocalExecutionTools.test.ts +2647 -0
  162. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +175 -0
  163. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +114 -0
  164. package/src/tools/__tests__/ToolNode.session.test.ts +84 -0
  165. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +467 -0
  166. package/src/tools/__tests__/directToolHooks.test.ts +411 -0
  167. package/src/tools/__tests__/localToolNames.test.ts +73 -0
  168. package/src/tools/__tests__/workspaceSeam.test.ts +134 -0
  169. package/src/tools/local/CompileCheckTool.ts +278 -0
  170. package/src/tools/local/FileCheckpointer.ts +93 -0
  171. package/src/tools/local/LocalCodingTools.ts +1342 -0
  172. package/src/tools/local/LocalExecutionEngine.ts +1329 -0
  173. package/src/tools/local/LocalExecutionTools.ts +167 -0
  174. package/src/tools/local/LocalProgrammaticToolCalling.ts +594 -0
  175. package/src/tools/local/__tests__/FileCheckpointer.test.ts +120 -0
  176. package/src/tools/local/__tests__/editStrategies.test.ts +134 -0
  177. package/src/tools/local/attachments.ts +251 -0
  178. package/src/tools/local/bashAst.ts +151 -0
  179. package/src/tools/local/editStrategies.ts +188 -0
  180. package/src/tools/local/index.ts +12 -0
  181. package/src/tools/local/resolveLocalExecutionTools.ts +208 -0
  182. package/src/tools/local/syntaxCheck.ts +243 -0
  183. package/src/tools/local/textEncoding.ts +37 -0
  184. package/src/tools/local/workspaceFS.ts +89 -0
  185. package/src/types/hitl.ts +56 -27
  186. package/src/types/run.ts +12 -1
  187. package/src/types/summarize.ts +31 -0
  188. package/src/types/tools.ts +359 -7
@@ -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 { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n AIMessage,\n AIMessageChunk,\n isAIMessage,\n} from '@langchain/core/messages';\nimport { ToolDefinition } from '@langchain/core/language_models/base';\nimport {\n convertToOpenAITool,\n isLangChainTool,\n} from '@langchain/core/utils/function_calling';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport {\n getEndpoint,\n OpenAIClient,\n getHeadersWithUserAgent,\n ChatOpenAI as OriginalChatOpenAI,\n ChatOpenAIResponses as OriginalChatOpenAIResponses,\n ChatOpenAICompletions as OriginalChatOpenAICompletions,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n AzureChatOpenAIResponses as OriginalAzureChatOpenAIResponses,\n AzureChatOpenAICompletions as OriginalAzureChatOpenAICompletions,\n} from '@langchain/openai';\nimport type { HeaderValue, HeadersLike } from './types';\nimport type {\n BaseMessage,\n BaseMessageChunk,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { ChatGeneration, ChatResult } from '@langchain/core/outputs';\nimport type { ChatXAIInput } from '@langchain/xai';\nimport type * as t from '@langchain/openai';\nimport { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';\nimport { sleep } from '@/utils';\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;\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\ntype OpenAIClientConfig = NonNullable<\n ConstructorParameters<typeof OpenAIClient>[0]\n>;\ntype LibreChatOpenAIFields = t.ChatOpenAIFields & {\n _lc_stream_delay?: number;\n includeReasoningContent?: boolean;\n includeReasoningDetails?: boolean;\n convertReasoningDetailsToContent?: boolean;\n};\ntype LibreChatAzureOpenAIFields = t.AzureOpenAIInput & {\n _lc_stream_delay?: number;\n};\ntype ReasoningCallOptions = {\n reasoning?: OpenAIClient.Reasoning;\n reasoningEffort?: OpenAIClient.Reasoning['effort'];\n};\ntype OpenAIDeltaWithLibreChatFields = Record<string, unknown> & {\n reasoning?: unknown;\n reasoning_details?: unknown;\n provider_specific_fields?: unknown;\n};\ntype OpenAIClientOwner = {\n client?: OpenAIClient;\n clientConfig: OpenAIClientConfig;\n timeout?: number;\n};\ntype AbortableOpenAIClient = CustomOpenAIClient | CustomAzureOpenAIClient;\ntype OpenAIClientDelegate = {\n client?: AbortableOpenAIClient;\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions;\n};\ntype OpenAIChatCompletion = OpenAIClient.Chat.Completions.ChatCompletion;\ntype OpenAIChatCompletionChunk =\n OpenAIClient.Chat.Completions.ChatCompletionChunk;\ntype OpenAIChatCompletionStreamItem =\n | OpenAIChatCompletionChunk\n | {\n event: string;\n data?: unknown;\n };\ntype OpenAIChatCompletionRequest =\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming;\ntype OpenAIChatCompletionResult =\n | AsyncIterable<OpenAIChatCompletionChunk>\n | OpenAIChatCompletion;\ntype OpenAIChatCompletionRetry = (\n request: OpenAIChatCompletionRequest,\n requestOptions?: OpenAICoreRequestOptions\n) => Promise<\n AsyncIterable<OpenAIChatCompletionStreamItem> | OpenAIChatCompletion\n>;\n\nfunction getExposedOpenAIClient(\n completions: OpenAIClientDelegate,\n responses: OpenAIClientDelegate,\n preferResponses: boolean\n): AbortableOpenAIClient {\n const responsesClient = responses.client;\n if (responsesClient?.abortHandler != null) {\n return responsesClient;\n }\n const completionsClient = completions.client;\n if (completionsClient?.abortHandler != null) {\n return completionsClient;\n }\n\n const delegate = preferResponses ? responses : completions;\n delegate._getClientOptions(undefined);\n return delegate.client as AbortableOpenAIClient;\n}\n\nfunction getReasoningParams(\n baseReasoning: OpenAIClient.Reasoning | undefined,\n options?: ReasoningCallOptions\n): OpenAIClient.Reasoning | undefined {\n let reasoning: OpenAIClient.Reasoning | undefined;\n if (baseReasoning !== undefined) {\n reasoning = {\n ...reasoning,\n ...baseReasoning,\n };\n }\n if (options?.reasoning !== undefined) {\n reasoning = {\n ...reasoning,\n ...options.reasoning,\n };\n }\n if (\n options?.reasoningEffort !== undefined &&\n reasoning?.effort === undefined\n ) {\n reasoning = {\n ...reasoning,\n effort: options.reasoningEffort,\n };\n }\n return reasoning;\n}\n\nfunction getGatedReasoningParams(\n model: string,\n baseReasoning: OpenAIClient.Reasoning | undefined,\n options?: ReasoningCallOptions\n): OpenAIClient.Reasoning | undefined {\n if (!isReasoningModel(model)) {\n return;\n }\n return getReasoningParams(baseReasoning, options);\n}\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isOpenAIChatCompletionChunk(\n value: unknown\n): value is OpenAIChatCompletionChunk {\n if (!isObject(value)) {\n return false;\n }\n\n // Intentionally loose: downstream handlers already tolerate empty choices.\n const { choices } = value as { choices?: unknown };\n return Array.isArray(choices);\n}\n\nfunction getOpenAIChatCompletionChunk(\n value: OpenAIChatCompletionStreamItem\n): OpenAIChatCompletionChunk | undefined {\n if (isOpenAIChatCompletionChunk(value)) {\n return value;\n }\n\n const { data } = value;\n if (isOpenAIChatCompletionChunk(data)) {\n return data;\n }\n\n return undefined;\n}\n\nasync function* filterOpenAIChatCompletionStream(\n stream: AsyncIterable<OpenAIChatCompletionStreamItem>\n): AsyncGenerator<OpenAIChatCompletionChunk> {\n for await (const item of stream) {\n const chunk = getOpenAIChatCompletionChunk(item);\n if (chunk == null) {\n continue;\n }\n yield chunk;\n }\n}\n\nasync function completionWithFilteredOpenAIStream(\n request: OpenAIChatCompletionRequest,\n requestOptions: OpenAICoreRequestOptions | undefined,\n completionWithRetry: OpenAIChatCompletionRetry\n): Promise<OpenAIChatCompletionResult> {\n if (request.stream !== true) {\n return (await completionWithRetry(\n request,\n requestOptions\n )) as OpenAIChatCompletion;\n }\n\n const stream = await completionWithRetry(request, requestOptions);\n return filterOpenAIChatCompletionStream(\n stream as AsyncIterable<OpenAIChatCompletionStreamItem>\n );\n}\n\nfunction attachLibreChatDeltaFields(\n chunk: BaseMessageChunk,\n delta: Record<string, unknown>\n): BaseMessageChunk {\n if (!AIMessageChunk.isInstance(chunk)) {\n return chunk;\n }\n\n const libreChatDelta = delta as OpenAIDeltaWithLibreChatFields;\n if (\n libreChatDelta.reasoning != null &&\n chunk.additional_kwargs.reasoning_content == null\n ) {\n chunk.additional_kwargs.reasoning_content = libreChatDelta.reasoning;\n }\n if (libreChatDelta.reasoning_details != null) {\n chunk.additional_kwargs.reasoning_details =\n libreChatDelta.reasoning_details;\n }\n if (libreChatDelta.provider_specific_fields != null) {\n chunk.additional_kwargs.provider_specific_fields =\n libreChatDelta.provider_specific_fields;\n }\n return chunk;\n}\n\nfunction attachLibreChatMessageFields(\n message: BaseMessage,\n rawMessage: Record<string, unknown>\n): BaseMessage {\n if (!isAIMessage(message)) {\n return message;\n }\n if (\n rawMessage.reasoning != null &&\n message.additional_kwargs.reasoning_content == null\n ) {\n message.additional_kwargs.reasoning_content = rawMessage.reasoning;\n }\n if (rawMessage.reasoning_details != null) {\n message.additional_kwargs.reasoning_details = rawMessage.reasoning_details;\n }\n if (rawMessage.provider_specific_fields != null) {\n message.additional_kwargs.provider_specific_fields =\n rawMessage.provider_specific_fields;\n }\n return message;\n}\n\nfunction getCustomOpenAIClientOptions(\n owner: OpenAIClientOwner,\n options?: OpenAICoreRequestOptions\n): OpenAICoreRequestOptions {\n if (!(owner.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: owner.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...owner.clientConfig,\n baseURL: endpoint,\n timeout: owner.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n owner.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...owner.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n}\n\nasync function* delayStreamChunks<T>(\n chunks: AsyncGenerator<T>,\n delay?: number\n): AsyncGenerator<T> {\n for await (const chunk of chunks) {\n yield chunk;\n if (delay != null) {\n await sleep(delay);\n }\n }\n}\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 = convertToOpenAITool(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\nclass LibreChatOpenAICompletions extends OriginalChatOpenAICompletions {\n private includeReasoningContent?: boolean;\n private includeReasoningDetails?: boolean;\n private convertReasoningDetailsToContent?: boolean;\n\n constructor(fields?: LibreChatOpenAIFields) {\n super(fields);\n this.includeReasoningContent = fields?.includeReasoningContent;\n this.includeReasoningDetails = fields?.includeReasoningDetails;\n this.convertReasoningDetailsToContent =\n fields?.convertReasoningDetailsToContent;\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n\n protected _convertCompletionsDeltaToBaseMessageChunk(\n delta: Record<string, unknown>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return attachLibreChatDeltaFields(\n super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n ),\n delta\n );\n }\n\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return attachLibreChatMessageFields(\n super._convertCompletionsMessageToBaseMessage(message, rawResponse),\n message as unknown as Record<string, unknown>\n );\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (\n this.includeReasoningContent !== true &&\n this.includeReasoningDetails !== true\n ) {\n return super._generate(messages, options, runManager);\n }\n\n options.signal?.throwIfAborted();\n const usageMetadata: Partial<UsageMetadata> = {};\n const params = this.invocationParams(options);\n const messagesMapped = _convertMessagesToOpenAIParams(\n messages,\n this.model,\n {\n includeReasoningContent: this.includeReasoningContent,\n includeReasoningDetails: this.includeReasoningDetails,\n convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,\n }\n );\n\n if (params.stream === true) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks = new Map<number, ChatGenerationChunk>();\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n typeof chunk.generationInfo?.completion === 'number'\n ? chunk.generationInfo.completion\n : 0;\n const existingChunk = finalChunks.get(index);\n if (existingChunk == null) {\n finalChunks.set(index, chunk);\n } else {\n finalChunks.set(index, existingChunk.concat(chunk));\n }\n }\n const generations = Array.from(finalChunks.entries())\n .sort(([aKey], [bKey]) => aKey - bKey)\n .map(([, value]) => value);\n const { functions, function_call } = this.invocationParams(options);\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data.usage ?? {};\n\n if (completionTokens != null) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n if (promptTokens != null) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n if (totalTokens != null) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n if (\n promptTokensDetails?.audio_tokens != null ||\n promptTokensDetails?.cached_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails.audio_tokens != null && {\n audio: promptTokensDetails.audio_tokens,\n }),\n ...(promptTokensDetails.cached_tokens != null && {\n cache_read: promptTokensDetails.cached_tokens,\n }),\n };\n }\n if (\n completionTokensDetails?.audio_tokens != null ||\n completionTokensDetails?.reasoning_tokens != null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails.audio_tokens != null && {\n audio: completionTokensDetails.audio_tokens,\n }),\n ...(completionTokensDetails.reasoning_tokens != null && {\n reasoning: completionTokensDetails.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data.choices) {\n const generation: ChatGeneration = {\n text: part.message.content ?? '',\n message: this._convertCompletionsMessageToBaseMessage(\n part.message,\n data\n ),\n };\n generation.generationInfo = {\n finish_reason: part.finish_reason,\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata as UsageMetadata;\n }\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith('lc_')\n )\n )\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (\n this.includeReasoningContent !== true &&\n this.includeReasoningDetails !== true\n ) {\n yield* super._streamResponseChunks(messages, options, runManager);\n return;\n }\n\n const messagesMapped: OpenAICompletionParam[] =\n _convertMessagesToOpenAIParams(messages, this.model, {\n includeReasoningContent: this.includeReasoningContent,\n includeReasoningDetails: this.includeReasoningDetails,\n convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n if (options.signal?.aborted === true) {\n return;\n }\n type StreamChoice = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionChunk.Choice,\n 'delta'\n > & {\n delta?: OpenAIClient.Chat.Completions.ChatCompletionChunk.Choice['delta'];\n };\n const choices = data.choices as StreamChoice[] | undefined;\n const choice = choices?.[0];\n if (data.usage != null) {\n usage = data.usage;\n }\n if (choice == null) {\n continue;\n }\n\n const { delta } = choice;\n if (delta == null) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta as unknown as Record<string, unknown>,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index,\n };\n if (typeof chunk.content !== 'string') {\n // eslint-disable-next-line no-console\n console.log(\n '[WARNING]: Received non-string content from OpenAI. This is currently not supported.'\n );\n continue;\n }\n const generationInfo: Record<string, unknown> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs === true) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text,\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens != null && {\n audio: usage.prompt_tokens_details.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens != null && {\n cache_read: usage.prompt_tokens_details.cached_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens != null && {\n audio: usage.completion_tokens_details.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens != null && {\n reasoning: usage.completion_tokens_details.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: '',\n response_metadata: { usage: { ...usage } },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: '',\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text,\n {\n prompt: 0,\n completion: 0,\n },\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (options.signal?.aborted === true) {\n throw new Error('AbortError');\n }\n }\n}\n\nclass LibreChatOpenAIResponses extends OriginalChatOpenAIResponses {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n}\n\nclass LibreChatAzureOpenAICompletions extends OriginalAzureChatOpenAICompletions {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.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']}: librechat-azure-openai-v2`\n : 'librechat-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\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n}\n\nclass LibreChatAzureOpenAIResponses extends OriginalAzureChatOpenAIResponses {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.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']}: librechat-azure-openai-v2`\n : 'librechat-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}\n\nfunction withLibreChatOpenAIFields(\n fields?: LibreChatOpenAIFields\n): LibreChatOpenAIFields {\n const nextFields = fields ?? {};\n return {\n ...nextFields,\n completions:\n nextFields.completions ?? new LibreChatOpenAICompletions(nextFields),\n responses: nextFields.responses ?? new LibreChatOpenAIResponses(nextFields),\n };\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: LibreChatOpenAIFields & t.OpenAIChatInput['modelKwargs']\n ) {\n super(withLibreChatOpenAIFields(fields));\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return getExposedOpenAIClient(\n this.completions as OpenAIClientDelegate,\n this.responses as OpenAIClientDelegate,\n this._useResponsesApi(undefined)\n ) as CustomOpenAIClient;\n }\n static lc_name(): string {\n return 'LibreChatOpenAI';\n }\n _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 /**\n * Returns backwards compatible reasoning parameters from constructor params and call options\n * @internal\n */\n getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return this.getReasoningParams(options);\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\n\nexport class AzureChatOpenAI extends OriginalAzureChatOpenAI {\n _lc_stream_delay?: number;\n\n constructor(fields?: LibreChatAzureOpenAIFields) {\n super(fields);\n this.completions = new LibreChatAzureOpenAICompletions(fields);\n this.responses = new LibreChatAzureOpenAIResponses(fields);\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return getExposedOpenAIClient(\n this.completions as OpenAIClientDelegate,\n this.responses as OpenAIClientDelegate,\n this._useResponsesApi(undefined)\n ) as CustomOpenAIClient;\n }\n static lc_name(): 'LibreChatAzureOpenAI' {\n return 'LibreChatAzureOpenAI';\n }\n /**\n * Returns backwards compatible reasoning parameters from constructor params and call options\n * @internal\n */\n getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return this.getReasoningParams(options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.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']}: librechat-azure-openai-v2`\n : 'librechat-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 yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\nexport class ChatDeepSeek extends OriginalChatDeepSeek {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: ConstructorParameters<typeof OriginalChatDeepSeek>[0] & {\n _lc_stream_delay?: number;\n }\n ) {\n super(fields);\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n static lc_name(): 'LibreChatDeepSeek' {\n return 'LibreChatDeepSeek';\n }\n\n _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 yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\n\n/** xAI-specific usage metadata type */\nexport interface XAIUsageMetadata\n extends OpenAIClient.Completions.CompletionUsage {\n prompt_tokens_details?: {\n audio_tokens?: number;\n cached_tokens?: number;\n text_tokens?: number;\n image_tokens?: number;\n };\n completion_tokens_details?: {\n audio_tokens?: number;\n reasoning_tokens?: number;\n accepted_prediction_tokens?: number;\n rejected_prediction_tokens?: number;\n };\n num_sources_used?: number;\n}\n\nexport class ChatMoonshot extends ChatOpenAI {\n constructor(\n fields?: LibreChatOpenAIFields & t.OpenAIChatInput['modelKwargs']\n ) {\n super({\n ...fields,\n includeReasoningContent: true,\n });\n }\n\n static lc_name(): 'LibreChatMoonshot' {\n return 'LibreChatMoonshot';\n }\n}\n\nexport class ChatXAI extends OriginalChatXAI {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: Partial<ChatXAIInput> & {\n configuration?: { baseURL?: string };\n clientConfig?: { baseURL?: string };\n _lc_stream_delay?: number;\n }\n ) {\n super(fields);\n this._lc_stream_delay = fields?._lc_stream_delay;\n const customBaseURL =\n fields?.configuration?.baseURL ?? fields?.clientConfig?.baseURL;\n if (customBaseURL != null && customBaseURL) {\n this.clientConfig = {\n ...this.clientConfig,\n baseURL: customBaseURL,\n };\n // Reset the client to force recreation with new config\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.client = undefined as any;\n }\n }\n\n static lc_name(): 'LibreChatXAI' {\n return 'LibreChatXAI';\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n\n _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 yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\n"],"names":["AzureOpenAIClient","OriginalChatOpenAICompletions","OriginalChatOpenAIResponses","OriginalAzureChatOpenAICompletions","OriginalAzureChatOpenAIResponses","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 { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n AIMessage,\n AIMessageChunk,\n isAIMessage,\n} from '@langchain/core/messages';\nimport { ToolDefinition } from '@langchain/core/language_models/base';\nimport {\n convertToOpenAITool,\n isLangChainTool,\n} from '@langchain/core/utils/function_calling';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport {\n getEndpoint,\n OpenAIClient,\n getHeadersWithUserAgent,\n ChatOpenAI as OriginalChatOpenAI,\n ChatOpenAIResponses as OriginalChatOpenAIResponses,\n ChatOpenAICompletions as OriginalChatOpenAICompletions,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n AzureChatOpenAIResponses as OriginalAzureChatOpenAIResponses,\n AzureChatOpenAICompletions as OriginalAzureChatOpenAICompletions,\n} from '@langchain/openai';\nimport type { HeaderValue, HeadersLike } from './types';\nimport type {\n BaseMessage,\n BaseMessageChunk,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { ChatGeneration, ChatResult } from '@langchain/core/outputs';\nimport type { ChatXAIInput } from '@langchain/xai';\nimport type * as t from '@langchain/openai';\nimport { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';\nimport { sleep } from '@/utils';\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;\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\ntype OpenAIClientConfig = NonNullable<\n ConstructorParameters<typeof OpenAIClient>[0]\n>;\ntype LibreChatOpenAIFields = t.ChatOpenAIFields & {\n _lc_stream_delay?: number;\n includeReasoningContent?: boolean;\n includeReasoningDetails?: boolean;\n convertReasoningDetailsToContent?: boolean;\n};\ntype LibreChatAzureOpenAIFields = t.AzureOpenAIInput & {\n _lc_stream_delay?: number;\n};\ntype ReasoningCallOptions = {\n reasoning?: OpenAIClient.Reasoning;\n reasoningEffort?: OpenAIClient.Reasoning['effort'];\n};\ntype OpenAIDeltaWithLibreChatFields = Record<string, unknown> & {\n reasoning?: unknown;\n reasoning_details?: unknown;\n provider_specific_fields?: unknown;\n};\ntype OpenAIClientOwner = {\n client?: OpenAIClient;\n clientConfig: OpenAIClientConfig;\n timeout?: number;\n};\ntype AbortableOpenAIClient = CustomOpenAIClient | CustomAzureOpenAIClient;\ntype OpenAIClientDelegate = {\n client?: AbortableOpenAIClient;\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions;\n};\ntype OpenAIChatCompletion = OpenAIClient.Chat.Completions.ChatCompletion;\ntype OpenAIChatCompletionChunk =\n OpenAIClient.Chat.Completions.ChatCompletionChunk;\ntype OpenAIChatCompletionStreamItem =\n | OpenAIChatCompletionChunk\n | {\n event: string;\n data?: unknown;\n };\ntype OpenAIChatCompletionRequest =\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming;\ntype OpenAIChatCompletionResult =\n | AsyncIterable<OpenAIChatCompletionChunk>\n | OpenAIChatCompletion;\ntype OpenAIChatCompletionRetry = (\n request: OpenAIChatCompletionRequest,\n requestOptions?: OpenAICoreRequestOptions\n) => Promise<\n AsyncIterable<OpenAIChatCompletionStreamItem> | OpenAIChatCompletion\n>;\n\nfunction createUsageMetadata(\n usage?: OpenAIClient.Completions.CompletionUsage\n): UsageMetadata {\n const usageMetadata: UsageMetadata = {\n input_tokens: usage?.prompt_tokens ?? 0,\n output_tokens: usage?.completion_tokens ?? 0,\n total_tokens: usage?.total_tokens ?? 0,\n };\n\n if (usage == null) {\n return usageMetadata;\n }\n\n const inputTokenDetails: UsageMetadata['input_token_details'] = {};\n const outputTokenDetails: UsageMetadata['output_token_details'] = {};\n let hasInputTokenDetails = false;\n let hasOutputTokenDetails = false;\n const audioInputTokens = usage.prompt_tokens_details?.audio_tokens;\n const cachedInputTokens = usage.prompt_tokens_details?.cached_tokens;\n const audioOutputTokens = usage.completion_tokens_details?.audio_tokens;\n const reasoningOutputTokens =\n usage.completion_tokens_details?.reasoning_tokens;\n\n if (audioInputTokens != null) {\n inputTokenDetails.audio = audioInputTokens;\n hasInputTokenDetails = true;\n }\n if (cachedInputTokens != null) {\n inputTokenDetails.cache_read = cachedInputTokens;\n hasInputTokenDetails = true;\n }\n if (audioOutputTokens != null) {\n outputTokenDetails.audio = audioOutputTokens;\n hasOutputTokenDetails = true;\n }\n if (reasoningOutputTokens != null) {\n outputTokenDetails.reasoning = reasoningOutputTokens;\n hasOutputTokenDetails = true;\n }\n\n if (hasInputTokenDetails) {\n usageMetadata.input_token_details = inputTokenDetails;\n }\n if (hasOutputTokenDetails) {\n usageMetadata.output_token_details = outputTokenDetails;\n }\n\n return usageMetadata;\n}\n\nfunction getExposedOpenAIClient(\n completions: OpenAIClientDelegate,\n responses: OpenAIClientDelegate,\n preferResponses: boolean\n): AbortableOpenAIClient {\n const responsesClient = responses.client;\n if (responsesClient?.abortHandler != null) {\n return responsesClient;\n }\n const completionsClient = completions.client;\n if (completionsClient?.abortHandler != null) {\n return completionsClient;\n }\n\n const delegate = preferResponses ? responses : completions;\n delegate._getClientOptions(undefined);\n return delegate.client as AbortableOpenAIClient;\n}\n\nfunction getReasoningParams(\n baseReasoning: OpenAIClient.Reasoning | undefined,\n options?: ReasoningCallOptions\n): OpenAIClient.Reasoning | undefined {\n let reasoning: OpenAIClient.Reasoning | undefined;\n if (baseReasoning !== undefined) {\n reasoning = {\n ...reasoning,\n ...baseReasoning,\n };\n }\n if (options?.reasoning !== undefined) {\n reasoning = {\n ...reasoning,\n ...options.reasoning,\n };\n }\n if (\n options?.reasoningEffort !== undefined &&\n reasoning?.effort === undefined\n ) {\n reasoning = {\n ...reasoning,\n effort: options.reasoningEffort,\n };\n }\n return reasoning;\n}\n\nfunction getGatedReasoningParams(\n model: string,\n baseReasoning: OpenAIClient.Reasoning | undefined,\n options?: ReasoningCallOptions\n): OpenAIClient.Reasoning | undefined {\n if (!isReasoningModel(model)) {\n return;\n }\n return getReasoningParams(baseReasoning, options);\n}\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isOpenAIChatCompletionChunk(\n value: unknown\n): value is OpenAIChatCompletionChunk {\n if (!isObject(value)) {\n return false;\n }\n\n // Intentionally loose: downstream handlers already tolerate empty choices.\n const { choices } = value as { choices?: unknown };\n return Array.isArray(choices);\n}\n\nfunction getOpenAIChatCompletionChunk(\n value: OpenAIChatCompletionStreamItem\n): OpenAIChatCompletionChunk | undefined {\n if (isOpenAIChatCompletionChunk(value)) {\n return value;\n }\n\n const { data } = value;\n if (isOpenAIChatCompletionChunk(data)) {\n return data;\n }\n\n return undefined;\n}\n\nasync function* filterOpenAIChatCompletionStream(\n stream: AsyncIterable<OpenAIChatCompletionStreamItem>\n): AsyncGenerator<OpenAIChatCompletionChunk> {\n for await (const item of stream) {\n const chunk = getOpenAIChatCompletionChunk(item);\n if (chunk == null) {\n continue;\n }\n yield chunk;\n }\n}\n\nasync function completionWithFilteredOpenAIStream(\n request: OpenAIChatCompletionRequest,\n requestOptions: OpenAICoreRequestOptions | undefined,\n completionWithRetry: OpenAIChatCompletionRetry\n): Promise<OpenAIChatCompletionResult> {\n if (request.stream !== true) {\n return (await completionWithRetry(\n request,\n requestOptions\n )) as OpenAIChatCompletion;\n }\n\n const stream = await completionWithRetry(request, requestOptions);\n return filterOpenAIChatCompletionStream(\n stream as AsyncIterable<OpenAIChatCompletionStreamItem>\n );\n}\n\nfunction attachLibreChatDeltaFields(\n chunk: BaseMessageChunk,\n delta: Record<string, unknown>\n): BaseMessageChunk {\n if (!AIMessageChunk.isInstance(chunk)) {\n return chunk;\n }\n\n const libreChatDelta = delta as OpenAIDeltaWithLibreChatFields;\n if (\n libreChatDelta.reasoning != null &&\n chunk.additional_kwargs.reasoning_content == null\n ) {\n chunk.additional_kwargs.reasoning_content = libreChatDelta.reasoning;\n }\n if (libreChatDelta.reasoning_details != null) {\n chunk.additional_kwargs.reasoning_details =\n libreChatDelta.reasoning_details;\n }\n if (libreChatDelta.provider_specific_fields != null) {\n chunk.additional_kwargs.provider_specific_fields =\n libreChatDelta.provider_specific_fields;\n }\n return chunk;\n}\n\nfunction attachLibreChatMessageFields(\n message: BaseMessage,\n rawMessage: Record<string, unknown>\n): BaseMessage {\n if (!isAIMessage(message)) {\n return message;\n }\n if (\n rawMessage.reasoning != null &&\n message.additional_kwargs.reasoning_content == null\n ) {\n message.additional_kwargs.reasoning_content = rawMessage.reasoning;\n }\n if (rawMessage.reasoning_details != null) {\n message.additional_kwargs.reasoning_details = rawMessage.reasoning_details;\n }\n if (rawMessage.provider_specific_fields != null) {\n message.additional_kwargs.provider_specific_fields =\n rawMessage.provider_specific_fields;\n }\n return message;\n}\n\nfunction getCustomOpenAIClientOptions(\n owner: OpenAIClientOwner,\n options?: OpenAICoreRequestOptions\n): OpenAICoreRequestOptions {\n if (!(owner.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: owner.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...owner.clientConfig,\n baseURL: endpoint,\n timeout: owner.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n params.defaultHeaders = getHeadersWithUserAgent(params.defaultHeaders);\n owner.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...owner.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n}\n\nasync function* delayStreamChunks<T>(\n chunks: AsyncGenerator<T>,\n delay?: number\n): AsyncGenerator<T> {\n for await (const chunk of chunks) {\n yield chunk;\n if (delay != null) {\n await sleep(delay);\n }\n }\n}\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 = convertToOpenAITool(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\nclass LibreChatOpenAICompletions extends OriginalChatOpenAICompletions {\n private includeReasoningContent?: boolean;\n private includeReasoningDetails?: boolean;\n private convertReasoningDetailsToContent?: boolean;\n\n constructor(fields?: LibreChatOpenAIFields) {\n super(fields);\n this.includeReasoningContent = fields?.includeReasoningContent;\n this.includeReasoningDetails = fields?.includeReasoningDetails;\n this.convertReasoningDetailsToContent =\n fields?.convertReasoningDetailsToContent;\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n\n protected _convertCompletionsDeltaToBaseMessageChunk(\n delta: Record<string, unknown>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return attachLibreChatDeltaFields(\n super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n ),\n delta\n );\n }\n\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return attachLibreChatMessageFields(\n super._convertCompletionsMessageToBaseMessage(message, rawResponse),\n message as unknown as Record<string, unknown>\n );\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (\n this.includeReasoningContent !== true &&\n this.includeReasoningDetails !== true\n ) {\n return super._generate(messages, options, runManager);\n }\n\n options.signal?.throwIfAborted();\n const usageMetadata: Partial<UsageMetadata> = {};\n const params = this.invocationParams(options);\n const messagesMapped = _convertMessagesToOpenAIParams(\n messages,\n this.model,\n {\n includeReasoningContent: this.includeReasoningContent,\n includeReasoningDetails: this.includeReasoningDetails,\n convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,\n }\n );\n\n if (params.stream === true) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks = new Map<number, ChatGenerationChunk>();\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n typeof chunk.generationInfo?.completion === 'number'\n ? chunk.generationInfo.completion\n : 0;\n const existingChunk = finalChunks.get(index);\n if (existingChunk == null) {\n finalChunks.set(index, chunk);\n } else {\n finalChunks.set(index, existingChunk.concat(chunk));\n }\n }\n const generations = Array.from(finalChunks.entries())\n .sort(([aKey], [bKey]) => aKey - bKey)\n .map(([, value]) => value);\n const { functions, function_call } = this.invocationParams(options);\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data.usage ?? {};\n\n if (completionTokens != null) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n if (promptTokens != null) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n if (totalTokens != null) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n if (\n promptTokensDetails?.audio_tokens != null ||\n promptTokensDetails?.cached_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails.audio_tokens != null && {\n audio: promptTokensDetails.audio_tokens,\n }),\n ...(promptTokensDetails.cached_tokens != null && {\n cache_read: promptTokensDetails.cached_tokens,\n }),\n };\n }\n if (\n completionTokensDetails?.audio_tokens != null ||\n completionTokensDetails?.reasoning_tokens != null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails.audio_tokens != null && {\n audio: completionTokensDetails.audio_tokens,\n }),\n ...(completionTokensDetails.reasoning_tokens != null && {\n reasoning: completionTokensDetails.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data.choices) {\n const generation: ChatGeneration = {\n text: part.message.content ?? '',\n message: this._convertCompletionsMessageToBaseMessage(\n part.message,\n data\n ),\n };\n generation.generationInfo = {\n finish_reason: part.finish_reason,\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata as UsageMetadata;\n }\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith('lc_')\n )\n )\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (\n this.includeReasoningContent !== true &&\n this.includeReasoningDetails !== true\n ) {\n yield* super._streamResponseChunks(messages, options, runManager);\n return;\n }\n\n const messagesMapped: OpenAICompletionParam[] =\n _convertMessagesToOpenAIParams(messages, this.model, {\n includeReasoningContent: this.includeReasoningContent,\n includeReasoningDetails: this.includeReasoningDetails,\n convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n if (options.signal?.aborted === true) {\n return;\n }\n type StreamChoice = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionChunk.Choice,\n 'delta'\n > & {\n delta?: OpenAIClient.Chat.Completions.ChatCompletionChunk.Choice['delta'];\n };\n const choices = data.choices as StreamChoice[] | undefined;\n const choice = choices?.[0];\n if (data.usage != null) {\n usage = data.usage;\n }\n if (choice == null) {\n continue;\n }\n\n const { delta } = choice;\n if (delta == null) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta as unknown as Record<string, unknown>,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index,\n };\n if (typeof chunk.content !== 'string') {\n // eslint-disable-next-line no-console\n console.log(\n '[WARNING]: Received non-string content from OpenAI. This is currently not supported.'\n );\n continue;\n }\n const generationInfo: Record<string, unknown> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs === true) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text,\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens != null && {\n audio: usage.prompt_tokens_details.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens != null && {\n cache_read: usage.prompt_tokens_details.cached_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens != null && {\n audio: usage.completion_tokens_details.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens != null && {\n reasoning: usage.completion_tokens_details.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: '',\n response_metadata: { usage: { ...usage } },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: '',\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text,\n {\n prompt: 0,\n completion: 0,\n },\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (options.signal?.aborted === true) {\n throw new Error('AbortError');\n }\n }\n}\n\nclass LibreChatOpenAIResponses extends OriginalChatOpenAIResponses {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n}\n\nclass LibreChatAzureOpenAICompletions extends OriginalAzureChatOpenAICompletions {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.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']}: librechat-azure-openai-v2`\n : 'librechat-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\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n}\n\nclass LibreChatAzureOpenAIResponses extends OriginalAzureChatOpenAIResponses {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.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']}: librechat-azure-openai-v2`\n : 'librechat-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}\n\nfunction withLibreChatOpenAIFields(\n fields?: LibreChatOpenAIFields\n): LibreChatOpenAIFields {\n const nextFields = fields ?? {};\n return {\n ...nextFields,\n completions:\n nextFields.completions ?? new LibreChatOpenAICompletions(nextFields),\n responses: nextFields.responses ?? new LibreChatOpenAIResponses(nextFields),\n };\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: LibreChatOpenAIFields & t.OpenAIChatInput['modelKwargs']\n ) {\n super(withLibreChatOpenAIFields(fields));\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return getExposedOpenAIClient(\n this.completions as OpenAIClientDelegate,\n this.responses as OpenAIClientDelegate,\n this._useResponsesApi(undefined)\n ) as CustomOpenAIClient;\n }\n static lc_name(): string {\n return 'LibreChatOpenAI';\n }\n _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 /**\n * Returns backwards compatible reasoning parameters from constructor params and call options\n * @internal\n */\n getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return this.getReasoningParams(options);\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\n\nexport class AzureChatOpenAI extends OriginalAzureChatOpenAI {\n _lc_stream_delay?: number;\n\n constructor(fields?: LibreChatAzureOpenAIFields) {\n super(fields);\n this.completions = new LibreChatAzureOpenAICompletions(fields);\n this.responses = new LibreChatAzureOpenAIResponses(fields);\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return getExposedOpenAIClient(\n this.completions as OpenAIClientDelegate,\n this.responses as OpenAIClientDelegate,\n this._useResponsesApi(undefined)\n ) as CustomOpenAIClient;\n }\n static lc_name(): 'LibreChatAzureOpenAI' {\n return 'LibreChatAzureOpenAI';\n }\n /**\n * Returns backwards compatible reasoning parameters from constructor params and call options\n * @internal\n */\n getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return this.getReasoningParams(options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.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']}: librechat-azure-openai-v2`\n : 'librechat-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 yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\nexport class ChatDeepSeek extends OriginalChatDeepSeek {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: ConstructorParameters<typeof OriginalChatDeepSeek>[0] & {\n _lc_stream_delay?: number;\n }\n ) {\n super(fields);\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n static lc_name(): 'LibreChatDeepSeek' {\n return 'LibreChatDeepSeek';\n }\n\n protected _convertDeepSeekMessages(\n messages: BaseMessage[]\n ): OpenAICompletionParam[] {\n return _convertMessagesToOpenAIParams(messages, this.model, {\n includeReasoningContent: true,\n });\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n options.signal?.throwIfAborted();\n const params = this.invocationParams(options);\n\n if (params.stream === true) {\n return super._generate(messages, options, runManager);\n }\n\n const messagesMapped = this._convertDeepSeekMessages(messages);\n const response = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n\n const usageMetadata = createUsageMetadata(response.usage);\n\n const generations: ChatGeneration[] = response.choices.map((part) => {\n const text = part.message.content ?? '';\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message,\n response\n ),\n };\n generation.generationInfo = {\n finish_reason: part.finish_reason,\n ...(part.logprobs != null ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith('lc_')\n )\n )\n );\n return generation;\n });\n\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n _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 yield* delayStreamChunks(\n this._streamResponseChunksWithReasoning(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n\n /** Parses raw `<think>` fallback tags across chunks and emits sanitized DeepSeek stream chunks. */\n protected async *_streamResponseChunksWithReasoning(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const stream = this._streamResponseChunksFromReasoningMessages(\n messages,\n options\n );\n const thinkStartTag = '<think>';\n const thinkEndTag = '</think>';\n let tokensBuffer = '';\n let isThinking = false;\n\n for await (const chunk of stream) {\n if (options.signal?.aborted === true) {\n throw new Error('AbortError');\n }\n\n const reasoningContent =\n chunk.message.additional_kwargs.reasoning_content;\n if (reasoningContent != null && reasoningContent !== '') {\n yield* this._yieldDeepSeekStreamChunk(chunk, runManager);\n continue;\n }\n\n const text = chunk.text;\n if (text === '') {\n yield* this._yieldDeepSeekStreamChunk(chunk, runManager);\n continue;\n }\n\n tokensBuffer += text;\n\n while (tokensBuffer !== '') {\n if (isThinking) {\n const thinkEndIndex = tokensBuffer.indexOf(thinkEndTag);\n if (thinkEndIndex !== -1) {\n const thoughtContent = tokensBuffer.substring(0, thinkEndIndex);\n if (thoughtContent !== '') {\n yield* this._yieldDeepSeekReasoningText(\n chunk,\n thoughtContent,\n runManager\n );\n }\n\n tokensBuffer = tokensBuffer.substring(\n thinkEndIndex + thinkEndTag.length\n );\n isThinking = false;\n continue;\n }\n\n const splitIndex = this._getDeepSeekPartialTagSplitIndex(\n tokensBuffer,\n thinkEndTag\n );\n if (splitIndex !== -1) {\n const safeToYield = tokensBuffer.substring(0, splitIndex);\n if (safeToYield !== '') {\n yield* this._yieldDeepSeekReasoningText(\n chunk,\n safeToYield,\n runManager\n );\n }\n tokensBuffer = tokensBuffer.substring(splitIndex);\n break;\n }\n\n yield* this._yieldDeepSeekReasoningText(\n chunk,\n tokensBuffer,\n runManager\n );\n tokensBuffer = '';\n break;\n }\n\n const thinkStartIndex = tokensBuffer.indexOf(thinkStartTag);\n if (thinkStartIndex !== -1) {\n const beforeThink = tokensBuffer.substring(0, thinkStartIndex);\n if (beforeThink !== '') {\n yield* this._yieldDeepSeekStreamChunk(\n this._createDeepSeekStreamChunk(chunk, beforeThink),\n runManager\n );\n }\n\n tokensBuffer = tokensBuffer.substring(\n thinkStartIndex + thinkStartTag.length\n );\n isThinking = true;\n continue;\n }\n\n const splitIndex = this._getDeepSeekPartialTagSplitIndex(\n tokensBuffer,\n thinkStartTag\n );\n if (splitIndex !== -1) {\n const safeToYield = tokensBuffer.substring(0, splitIndex);\n if (safeToYield !== '') {\n yield* this._yieldDeepSeekStreamChunk(\n this._createDeepSeekStreamChunk(chunk, safeToYield),\n runManager\n );\n }\n tokensBuffer = tokensBuffer.substring(splitIndex);\n break;\n }\n\n yield* this._yieldDeepSeekStreamChunk(\n this._createDeepSeekStreamChunk(chunk, tokensBuffer),\n runManager\n );\n tokensBuffer = '';\n break;\n }\n }\n\n if (tokensBuffer === '') {\n return;\n }\n\n if (isThinking) {\n yield* this._yieldDeepSeekStreamChunk(\n new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: '',\n additional_kwargs: {\n reasoning_content: tokensBuffer,\n },\n }),\n text: '',\n }),\n runManager\n );\n return;\n }\n\n yield* this._yieldDeepSeekStreamChunk(\n new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: tokensBuffer,\n }),\n text: tokensBuffer,\n }),\n runManager\n );\n }\n\n protected async *_streamResponseChunksFromReasoningMessages(\n messages: BaseMessage[],\n options: this['ParsedCallOptions']\n ): AsyncGenerator<ChatGenerationChunk> {\n const params = {\n ...this.invocationParams(options, { streaming: true }),\n stream: true as const,\n };\n const messagesMapped = this._convertDeepSeekMessages(messages);\n const streamIterable = await this.completionWithRetry(\n {\n ...params,\n messages: messagesMapped,\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n\n let defaultRole:\n | OpenAIClient.Chat.Completions.ChatCompletionRole\n | undefined;\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n\n for await (const data of streamIterable) {\n if (options.signal?.aborted === true) {\n throw new Error('AbortError');\n }\n\n if (data.usage != null) {\n usage = data.usage;\n }\n\n if (data.choices.length === 0) {\n continue;\n }\n\n const choice = data.choices[0];\n const { delta } = choice;\n const messageChunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n\n if (typeof messageChunk.content !== 'string') {\n continue;\n }\n\n const messageText = messageChunk.content;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index,\n };\n const generationInfo = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n Object.assign(generationInfo, {\n finish_reason: choice.finish_reason,\n system_fingerprint: data.system_fingerprint,\n model_name: data.model,\n service_tier: data.service_tier,\n });\n }\n if (this.logprobs === true) {\n Object.assign(generationInfo, { logprobs: choice.logprobs });\n }\n\n const generationChunk = new ChatGenerationChunk({\n message: messageChunk,\n text: messageText,\n generationInfo,\n });\n\n yield generationChunk;\n }\n\n if (usage != null) {\n const usageMetadata = createUsageMetadata(usage);\n\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: '',\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: usageMetadata,\n }),\n text: '',\n generationInfo: {\n prompt: 0,\n completion: 0,\n },\n });\n\n yield generationChunk;\n }\n\n if (options.signal?.aborted === true) {\n throw new Error('AbortError');\n }\n }\n\n protected _createDeepSeekStreamChunk(\n chunk: ChatGenerationChunk,\n content: string,\n additionalKwargs?: AIMessageChunk['additional_kwargs'],\n text = content\n ): ChatGenerationChunk {\n if (!(chunk.message instanceof AIMessageChunk)) {\n return new ChatGenerationChunk({\n message: new AIMessageChunk({\n content,\n additional_kwargs:\n additionalKwargs ?? chunk.message.additional_kwargs,\n response_metadata: chunk.message.response_metadata,\n id: chunk.message.id,\n }),\n text,\n generationInfo: chunk.generationInfo,\n });\n }\n\n const message = chunk.message;\n return new ChatGenerationChunk({\n message: new AIMessageChunk({\n content,\n additional_kwargs: additionalKwargs ?? message.additional_kwargs,\n response_metadata: message.response_metadata,\n tool_calls: message.tool_calls,\n tool_call_chunks: message.tool_call_chunks,\n id: message.id,\n }),\n text,\n generationInfo: chunk.generationInfo,\n });\n }\n\n protected _createDeepSeekReasoningStreamChunk(\n chunk: ChatGenerationChunk,\n reasoningContent: string\n ): ChatGenerationChunk {\n return this._createDeepSeekStreamChunk(\n chunk,\n '',\n {\n ...chunk.message.additional_kwargs,\n reasoning_content: reasoningContent,\n },\n ''\n );\n }\n\n protected async *_yieldDeepSeekReasoningText(\n chunk: ChatGenerationChunk,\n reasoningContent: string,\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield* this._yieldDeepSeekStreamChunk(\n this._createDeepSeekReasoningStreamChunk(chunk, reasoningContent),\n runManager\n );\n }\n\n protected async *_yieldDeepSeekStreamChunk(\n chunk: ChatGenerationChunk,\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield chunk;\n await runManager?.handleLLMNewToken(\n chunk.text,\n this._getDeepSeekTokenIndices(chunk),\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n }\n\n protected _getDeepSeekTokenIndices(\n chunk: ChatGenerationChunk\n ): { prompt: number; completion: number } | undefined {\n const prompt = chunk.generationInfo?.prompt;\n const completion = chunk.generationInfo?.completion;\n\n if (typeof prompt === 'number' && typeof completion === 'number') {\n return { prompt, completion };\n }\n\n return undefined;\n }\n\n protected _getDeepSeekPartialTagSplitIndex(\n text: string,\n tag: string\n ): number {\n for (let i = tag.length - 1; i >= 1; i--) {\n if (text.endsWith(tag.substring(0, i))) {\n return text.length - i;\n }\n }\n\n return -1;\n }\n}\n\n/** xAI-specific usage metadata type */\nexport interface XAIUsageMetadata\n extends OpenAIClient.Completions.CompletionUsage {\n prompt_tokens_details?: {\n audio_tokens?: number;\n cached_tokens?: number;\n text_tokens?: number;\n image_tokens?: number;\n };\n completion_tokens_details?: {\n audio_tokens?: number;\n reasoning_tokens?: number;\n accepted_prediction_tokens?: number;\n rejected_prediction_tokens?: number;\n };\n num_sources_used?: number;\n}\n\nexport class ChatMoonshot extends ChatOpenAI {\n constructor(\n fields?: LibreChatOpenAIFields & t.OpenAIChatInput['modelKwargs']\n ) {\n super({\n ...fields,\n includeReasoningContent: true,\n });\n }\n\n static lc_name(): 'LibreChatMoonshot' {\n return 'LibreChatMoonshot';\n }\n}\n\nexport class ChatXAI extends OriginalChatXAI {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: Partial<ChatXAIInput> & {\n configuration?: { baseURL?: string };\n clientConfig?: { baseURL?: string };\n _lc_stream_delay?: number;\n }\n ) {\n super(fields);\n this._lc_stream_delay = fields?._lc_stream_delay;\n const customBaseURL =\n fields?.configuration?.baseURL ?? fields?.clientConfig?.baseURL;\n if (customBaseURL != null && customBaseURL) {\n this.clientConfig = {\n ...this.clientConfig,\n baseURL: customBaseURL,\n };\n // Reset the client to force recreation with new config\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.client = undefined as any;\n }\n }\n\n static lc_name(): 'LibreChatXAI' {\n return 'LibreChatXAI';\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return this.client;\n }\n\n _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 yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, runManager),\n this._lc_stream_delay\n );\n }\n}\n"],"names":["AzureOpenAIClient","OriginalChatOpenAICompletions","OriginalChatOpenAIResponses","OriginalAzureChatOpenAICompletions","OriginalAzureChatOpenAIResponses","OriginalChatOpenAI","OriginalAzureChatOpenAI","OriginalChatDeepSeek","OriginalChatXAI"],"mappings":"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"}
package/dist/esm/main.mjs CHANGED
@@ -4,14 +4,16 @@ export { SEPARATORS, SplitStreamHandler } from './splitStream.mjs';
4
4
  export { HandlerRegistry, LLMStreamHandler, ModelEndHandler, TestChatStreamHandler, TestLLMStreamHandler, ToolEndHandler, createMetadataAggregator } from './events.mjs';
5
5
  export { convertMessagesToContent, findLastIndex, formatAnthropicArtifactContent, formatAnthropicMessage, formatArtifactPayload, getConverseOverrideMessage, modifyDeltaProperties } from './messages/core.mjs';
6
6
  export { getMessageId } from './messages/ids.mjs';
7
- export { DEFAULT_RESERVE_RATIO, calculateTotalTokens, checkValidNumber, createPruneMessages, getMessagesWithinTokenLimit, maskConsumedToolResults, preFlightTruncateToolCallInputs, preFlightTruncateToolResults, repairOrphanedToolMessages, sanitizeOrphanToolBlocks } from './messages/prune.mjs';
7
+ export { DEFAULT_RESERVE_RATIO, ORIGINAL_CONTENT_MAX_CHARS, calculateTotalTokens, checkValidNumber, createPruneMessages, enforceOriginalContentCap, getMessagesWithinTokenLimit, maskConsumedToolResults, preFlightTruncateToolCallInputs, preFlightTruncateToolResults, repairOrphanedToolMessages, sanitizeOrphanToolBlocks } from './messages/prune.mjs';
8
8
  export { ensureThinkingBlockInMessages, formatAgentMessages, formatFromLangChain, formatLangChainMessages, formatMediaMessage, formatMessage, labelContentByAgent, shiftIndexTokenCountMap } from './messages/format.mjs';
9
9
  export { addBedrockCacheControl, addCacheControl, stripAnthropicCacheControl, stripBedrockCacheControl } from './messages/cache.mjs';
10
+ export { makeIsDeferred, partitionAndMarkAnthropicToolCache } from './messages/anthropicToolCache.mjs';
10
11
  export { formatContentStrings } from './messages/content.mjs';
11
12
  export { extractToolDiscoveries, hasToolSearchInCurrentTurn } from './messages/tools.mjs';
12
13
  export { applyContextPruning } from './messages/contextPruning.mjs';
13
14
  export { DEFAULT_CONTEXT_PRUNING_SETTINGS, resolveContextPruningSettings } from './messages/contextPruningSettings.mjs';
14
15
  export { REMOVE_ALL_MESSAGES, createRemoveAllMessage, messagesStateReducer } from './messages/reducer.mjs';
16
+ export { splitAtRecencyBoundary } from './messages/recency.mjs';
15
17
  export { Graph, StandardGraph } from './graphs/Graph.mjs';
16
18
  export { MultiAgentGraph } from './graphs/MultiAgentGraph.mjs';
17
19
  export { _resetUnrecognizedTriggerWarnings, shouldTriggerSummarization } from './summarization/index.mjs';
@@ -29,10 +31,22 @@ export { ToolSearchToolDefinition, ToolSearchToolDescription, ToolSearchToolName
29
31
  export { ToolNode, toolsCondition } from './tools/ToolNode.mjs';
30
32
  export { createSchemaOnlyTool, createSchemaOnlyTools } from './tools/schema.mjs';
31
33
  export { handleServerToolResult, handleToolCallChunks, handleToolCalls, toolResultTypes } from './tools/handlers.mjs';
34
+ export { CompileCheckToolName, createCompileCheckTool, createCompileCheckToolDefinition } from './tools/local/CompileCheckTool.mjs';
35
+ export { LocalFileCheckpointerImpl, createLocalFileCheckpointer } from './tools/local/FileCheckpointer.mjs';
36
+ export { LocalEditFileToolName, LocalEditFileToolSchema, LocalGlobSearchToolName, LocalGlobSearchToolSchema, LocalGrepSearchToolName, LocalGrepSearchToolSchema, LocalListDirectoryToolName, LocalListDirectoryToolSchema, LocalReadFileToolSchema, LocalWriteFileToolName, LocalWriteFileToolSchema, _resetRipgrepCacheForTests, createLocalCodingToolBundle, createLocalCodingToolDefinitions, createLocalCodingToolRegistry, createLocalCodingTools, createLocalEditFileTool, createLocalGlobSearchTool, createLocalGrepSearchTool, createLocalListDirectoryTool, createLocalReadFileTool, createLocalWriteFileTool } from './tools/local/LocalCodingTools.mjs';
37
+ export { _resetLocalEngineWarningsForTests, buildSandboxRuntimeConfig, executeLocalBash, executeLocalBashWithArgs, executeLocalCode, getLocalCwd, getLocalSessionId, getReadRoots, getSpawn, getWorkspaceFS, getWorkspaceRoots, getWriteRoots, resolveLocalExecutionConfig, resolveWorkspacePath, resolveWorkspacePathSafe, shellQuote, spawnLocalProcess, truncateLocalOutput, validateBashCommand } from './tools/local/LocalExecutionEngine.mjs';
38
+ export { LocalBashExecutionToolDescription, LocalCodeExecutionToolDescription, createLocalBashExecutionTool, createLocalCodeExecutionTool } from './tools/local/LocalExecutionTools.mjs';
39
+ export { _createBashProgramForTests, applyPreToolUseHooksForBridge, createLocalBashProgrammaticToolCallingTool, createLocalProgrammaticToolCallingTool } from './tools/local/LocalProgrammaticToolCalling.mjs';
40
+ export { resolveLocalExecutionTools, resolveLocalToolRegistry, resolveLocalToolsForBinding } from './tools/local/resolveLocalExecutionTools.mjs';
41
+ export { classifyAttachment, imageAttachmentContent } from './tools/local/attachments.mjs';
42
+ export { bashAstFindingsToErrors, runBashAstChecks } from './tools/local/bashAst.mjs';
43
+ export { applyEdit, locateEdit } from './tools/local/editStrategies.mjs';
44
+ export { _resetSyntaxCheckProbeCacheForTests, runPostEditSyntaxCheck } from './tools/local/syntaxCheck.mjs';
45
+ export { decodeFile, encodeFile } from './tools/local/textEncoding.mjs';
32
46
  export { createSearchTool } from './tools/search/tool.mjs';
33
47
  export { DATE_RANGE, DEFAULT_COUNTRY_DESCRIPTION, DEFAULT_QUERY_DESCRIPTION, WebSearchToolDefinition, WebSearchToolDescription, WebSearchToolName, WebSearchToolSchema, countrySchema, dateSchema, imagesSchema, newsSchema, querySchema, videosSchema } from './tools/search/schema.mjs';
34
48
  export { ANTHROPIC_TOOL_TOKEN_MULTIPLIER, DEFAULT_TOOL_TOKEN_MULTIPLIER } from './common/constants.mjs';
35
- export { CODE_EXECUTION_TOOLS, Callback, CommonEvents, Constants, ContentTypes, EnvVar, GraphEvents, GraphNodeActions, GraphNodeKeys, Providers, StepTypes, TitleMethod, ToolCallTypes } from './common/enum.mjs';
49
+ export { CODE_EXECUTION_TOOLS, Callback, CommonEvents, Constants, ContentTypes, EnvVar, GraphEvents, GraphNodeActions, GraphNodeKeys, LOCAL_CODING_BUNDLE_NAMES, LOCAL_CODING_TOOL_NAMES, Providers, StepTypes, TitleMethod, ToolCallTypes } from './common/enum.mjs';
36
50
  export { joinKeys, resetIfNotEmpty } from './utils/graph.mjs';
37
51
  export { isAnthropicLike, isGoogleLike, isOpenAILike } from './utils/llm.mjs';
38
52
  export { isPresent, unescapeObject } from './utils/misc.mjs';
@@ -46,6 +60,7 @@ export { HookRegistry } from './hooks/HookRegistry.mjs';
46
60
  export { DEFAULT_HOOK_TIMEOUT_MS, executeHooks } from './hooks/executeHooks.mjs';
47
61
  export { MAX_CACHE_SIZE, MAX_PATTERN_LENGTH, hasNestedQuantifier, matchesQuery } from './hooks/matchers.mjs';
48
62
  export { createToolPolicyHook } from './hooks/createToolPolicyHook.mjs';
63
+ export { createWorkspacePolicyHook } from './hooks/createWorkspacePolicyHook.mjs';
49
64
  export { HOOK_EVENTS } from './hooks/types.mjs';
50
65
  export { askUserQuestion } from './hitl/askUserQuestion.mjs';
51
66
  export { AIMessage, AIMessageChunk, BaseMessage, BaseMessageChunk, HumanMessage, SystemMessage, ToolMessage, getBufferString, isAIMessage, isBaseMessage, isToolMessage } from '@langchain/core/messages';
@@ -1 +1 @@
1
- {"version":3,"file":"main.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"main.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Anthropic prompt-caching helper for the `tools[]` request field.
3
+ *
4
+ * Anthropic accepts `cache_control: { type: 'ephemeral' }` on individual
5
+ * tool definitions. Whichever tool carries the marker becomes the end of
6
+ * a cached prefix: `tools[0..N]` (everything up to and including the
7
+ * marked tool) is cached and rebated on subsequent matching requests.
8
+ *
9
+ * For agents that mix static and deferred (lazily-discovered) tools, the
10
+ * winning configuration is:
11
+ *
12
+ * 1. Stable-partition tools so all *static* (non-deferred) tools come
13
+ * first and discovered-deferred tools come last.
14
+ * 2. Stamp `cache_control` on the LAST static tool.
15
+ *
16
+ * That way, the cached prefix covers exactly the static tool inventory.
17
+ * Discovered tools that show up later (or vary turn-to-turn as new ones
18
+ * get discovered) never invalidate the prefix because they sit *after*
19
+ * the breakpoint.
20
+ *
21
+ * LangChain's Anthropic adapter passes the marker through via
22
+ * `tool.extras.cache_control` (`AnthropicToolExtrasSchema`), so we set
23
+ * it as an `extras` field on a fresh wrapper around the tool — never
24
+ * mutating the original tool instance, since callers may share them
25
+ * across runs.
26
+ */
27
+ /**
28
+ * Returns a callable that reports whether a given tool *name* is deferred
29
+ * according to the supplied registry of tool definitions. Tools without
30
+ * a registry entry are treated as non-deferred (i.e. static), matching
31
+ * the host-supplied `graphTools` semantics elsewhere in the SDK.
32
+ */
33
+ function makeIsDeferred(toolDefinitions) {
34
+ if (toolDefinitions == null || toolDefinitions.length === 0) {
35
+ return () => false;
36
+ }
37
+ const deferred = new Set();
38
+ for (const def of toolDefinitions) {
39
+ if (def.defer_loading === true)
40
+ deferred.add(def.name);
41
+ }
42
+ if (deferred.size === 0)
43
+ return () => false;
44
+ return (name) => deferred.has(name);
45
+ }
46
+ /**
47
+ * Stable-partition `tools` into [static..., deferred...] and stamp the
48
+ * Anthropic `cache_control: ephemeral` marker on the last static tool.
49
+ *
50
+ * If `tools` is undefined or empty, or no entry has a usable `.name`,
51
+ * returns the input unchanged. If there are no static tools at all,
52
+ * also returns unchanged (nothing to cache).
53
+ *
54
+ * The original tool instances are never mutated. The marked entry is a
55
+ * shallow wrapper that preserves the prototype chain so downstream
56
+ * `instanceof` checks still pass. `extras` is merged so any existing
57
+ * `providerToolDefinition` / other extras the host attached are kept.
58
+ */
59
+ function partitionAndMarkAnthropicToolCache(tools, isDeferred) {
60
+ if (tools == null || tools.length === 0)
61
+ return tools;
62
+ // Use unknown[] internally to avoid GraphTools' union-array variance
63
+ // (each member is one of three array types). We cast back to
64
+ // GraphTools when returning.
65
+ const staticTools = [];
66
+ const deferredTools = [];
67
+ for (const tool of tools) {
68
+ const name = tool.name;
69
+ if (typeof name === 'string' && isDeferred(name)) {
70
+ deferredTools.push(tool);
71
+ }
72
+ else {
73
+ staticTools.push(tool);
74
+ }
75
+ }
76
+ if (staticTools.length === 0) {
77
+ return tools;
78
+ }
79
+ const last = staticTools[staticTools.length - 1];
80
+ // Already marked? Don't double-clone.
81
+ if (last.extras != null &&
82
+ 'cache_control' in last.extras &&
83
+ last.extras.cache_control != null) {
84
+ if (deferredTools.length === 0)
85
+ return tools;
86
+ return [...staticTools, ...deferredTools];
87
+ }
88
+ const wrapped = Object.assign(Object.create(Object.getPrototypeOf(last) ?? Object.prototype), last, {
89
+ extras: {
90
+ ...(last.extras ?? {}),
91
+ cache_control: { type: 'ephemeral' },
92
+ },
93
+ });
94
+ staticTools[staticTools.length - 1] = wrapped;
95
+ return [...staticTools, ...deferredTools];
96
+ }
97
+
98
+ export { makeIsDeferred, partitionAndMarkAnthropicToolCache };
99
+ //# sourceMappingURL=anthropicToolCache.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropicToolCache.mjs","sources":["../../../src/messages/anthropicToolCache.ts"],"sourcesContent":["/**\n * Anthropic prompt-caching helper for the `tools[]` request field.\n *\n * Anthropic accepts `cache_control: { type: 'ephemeral' }` on individual\n * tool definitions. Whichever tool carries the marker becomes the end of\n * a cached prefix: `tools[0..N]` (everything up to and including the\n * marked tool) is cached and rebated on subsequent matching requests.\n *\n * For agents that mix static and deferred (lazily-discovered) tools, the\n * winning configuration is:\n *\n * 1. Stable-partition tools so all *static* (non-deferred) tools come\n * first and discovered-deferred tools come last.\n * 2. Stamp `cache_control` on the LAST static tool.\n *\n * That way, the cached prefix covers exactly the static tool inventory.\n * Discovered tools that show up later (or vary turn-to-turn as new ones\n * get discovered) never invalidate the prefix because they sit *after*\n * the breakpoint.\n *\n * LangChain's Anthropic adapter passes the marker through via\n * `tool.extras.cache_control` (`AnthropicToolExtrasSchema`), so we set\n * it as an `extras` field on a fresh wrapper around the tool — never\n * mutating the original tool instance, since callers may share them\n * across runs.\n */\n\nimport type { GraphTools } from '@/types';\n\n/**\n * Returns a callable that reports whether a given tool *name* is deferred\n * according to the supplied registry of tool definitions. Tools without\n * a registry entry are treated as non-deferred (i.e. static), matching\n * the host-supplied `graphTools` semantics elsewhere in the SDK.\n */\nexport function makeIsDeferred(\n toolDefinitions:\n | ReadonlyArray<{ name: string; defer_loading?: boolean }>\n | undefined\n): (toolName: string) => boolean {\n if (toolDefinitions == null || toolDefinitions.length === 0) {\n return () => false;\n }\n const deferred = new Set<string>();\n for (const def of toolDefinitions) {\n if (def.defer_loading === true) deferred.add(def.name);\n }\n if (deferred.size === 0) return () => false;\n return (name) => deferred.has(name);\n}\n\n/**\n * Stable-partition `tools` into [static..., deferred...] and stamp the\n * Anthropic `cache_control: ephemeral` marker on the last static tool.\n *\n * If `tools` is undefined or empty, or no entry has a usable `.name`,\n * returns the input unchanged. If there are no static tools at all,\n * also returns unchanged (nothing to cache).\n *\n * The original tool instances are never mutated. The marked entry is a\n * shallow wrapper that preserves the prototype chain so downstream\n * `instanceof` checks still pass. `extras` is merged so any existing\n * `providerToolDefinition` / other extras the host attached are kept.\n */\nexport function partitionAndMarkAnthropicToolCache(\n tools: GraphTools | undefined,\n isDeferred: (toolName: string) => boolean\n): GraphTools | undefined {\n if (tools == null || tools.length === 0) return tools;\n\n // Use unknown[] internally to avoid GraphTools' union-array variance\n // (each member is one of three array types). We cast back to\n // GraphTools when returning.\n const staticTools: unknown[] = [];\n const deferredTools: unknown[] = [];\n\n for (const tool of tools) {\n const name = (tool as { name?: unknown }).name;\n if (typeof name === 'string' && isDeferred(name)) {\n deferredTools.push(tool);\n } else {\n staticTools.push(tool);\n }\n }\n\n if (staticTools.length === 0) {\n return tools;\n }\n\n const last = staticTools[staticTools.length - 1] as {\n extras?: Record<string, unknown>;\n };\n // Already marked? Don't double-clone.\n if (\n last.extras != null &&\n 'cache_control' in last.extras &&\n (last.extras as { cache_control?: unknown }).cache_control != null\n ) {\n if (deferredTools.length === 0) return tools;\n return [...staticTools, ...deferredTools] as GraphTools;\n }\n\n const wrapped = Object.assign(\n Object.create(Object.getPrototypeOf(last) ?? Object.prototype),\n last,\n {\n extras: {\n ...((last.extras as Record<string, unknown> | undefined) ?? {}),\n cache_control: { type: 'ephemeral' as const },\n },\n }\n );\n\n staticTools[staticTools.length - 1] = wrapped;\n return [...staticTools, ...deferredTools] as GraphTools;\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AAIH;;;;;AAKG;AACG,SAAU,cAAc,CAC5B,eAEa,EAAA;IAEb,IAAI,eAAe,IAAI,IAAI,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3D,QAAA,OAAO,MAAM,KAAK;IACpB;AACA,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU;AAClC,IAAA,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE;AACjC,QAAA,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI;AAAE,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;IACxD;AACA,IAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;AAAE,QAAA,OAAO,MAAM,KAAK;IAC3C,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACrC;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,kCAAkC,CAChD,KAA6B,EAC7B,UAAyC,EAAA;IAEzC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK;;;;IAKrD,MAAM,WAAW,GAAc,EAAE;IACjC,MAAM,aAAa,GAAc,EAAE;AAEnC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI;QAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;AAChD,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B;aAAO;AACL,YAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB;IACF;AAEA,IAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAE9C;;AAED,IAAA,IACE,IAAI,CAAC,MAAM,IAAI,IAAI;QACnB,eAAe,IAAI,IAAI,CAAC,MAAM;AAC7B,QAAA,IAAI,CAAC,MAAsC,CAAC,aAAa,IAAI,IAAI,EAClE;AACA,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAC5C,QAAA,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAe;IACzD;IAEA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,EAC9D,IAAI,EACJ;AACE,QAAA,MAAM,EAAE;AACN,YAAA,IAAK,IAAI,CAAC,MAA8C,IAAI,EAAE,CAAC;AAC/D,YAAA,aAAa,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE;AAC9C,SAAA;AACF,KAAA,CACF;IAED,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO;AAC7C,IAAA,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,aAAa,CAAe;AACzD;;;;"}
@@ -27,6 +27,31 @@ const PRESSURE_BANDS = [
27
27
  const MASKED_RESULT_MAX_CHARS = 300;
28
28
  /** Hard cap for the originalToolContent store (~2 MB estimated from char length). */
29
29
  const ORIGINAL_CONTENT_MAX_CHARS = 2_000_000;
30
+ /**
31
+ * Evicts oldest entries from `map` (in Map-iteration / insertion order) until
32
+ * the cumulative char length of remaining values fits within
33
+ * `ORIGINAL_CONTENT_MAX_CHARS`. Used by the recency-window carry-over merge
34
+ * path in Graph.ts to bound long-running session memory: the pruner enforces
35
+ * the cap inside its own `originalToolContent` map, but a key-wise union with
36
+ * recency carry-over bypasses that cap unless re-applied here.
37
+ */
38
+ function enforceOriginalContentCap(map) {
39
+ let total = 0;
40
+ for (const v of map.values()) {
41
+ total += v.length;
42
+ }
43
+ while (total > ORIGINAL_CONTENT_MAX_CHARS && map.size > 0) {
44
+ const oldest = map.keys().next();
45
+ if (oldest.done === true) {
46
+ break;
47
+ }
48
+ const removed = map.get(oldest.value);
49
+ if (removed != null) {
50
+ total -= removed.length;
51
+ }
52
+ map.delete(oldest.value);
53
+ }
54
+ }
30
55
  /** Minimum cumulative calibration ratio — provider can't count fewer tokens
31
56
  * than our raw estimate (within reason). Prevents divide-by-zero edge cases. */
32
57
  const CALIBRATION_RATIO_MIN = 0.5;
@@ -1503,5 +1528,5 @@ function createPruneMessages(factoryParams) {
1503
1528
  };
1504
1529
  }
1505
1530
 
1506
- export { DEFAULT_RESERVE_RATIO, calculateTotalTokens, checkValidNumber, createPruneMessages, getMessagesWithinTokenLimit, maskConsumedToolResults, preFlightTruncateToolCallInputs, preFlightTruncateToolResults, repairOrphanedToolMessages, sanitizeOrphanToolBlocks };
1531
+ export { DEFAULT_RESERVE_RATIO, ORIGINAL_CONTENT_MAX_CHARS, calculateTotalTokens, checkValidNumber, createPruneMessages, enforceOriginalContentCap, getMessagesWithinTokenLimit, maskConsumedToolResults, preFlightTruncateToolCallInputs, preFlightTruncateToolResults, repairOrphanedToolMessages, sanitizeOrphanToolBlocks };
1507
1532
  //# sourceMappingURL=prune.mjs.map