@librechat/agents 3.3.11 → 3.3.12

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 (192) hide show
  1. package/dist/cjs/graphs/Graph.cjs +246 -25
  2. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  3. package/dist/cjs/llm/bedrock/index.cjs +13 -2
  4. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  5. package/dist/cjs/llm/invoke.cjs +146 -36
  6. package/dist/cjs/llm/invoke.cjs.map +1 -1
  7. package/dist/cjs/llm/openai/index.cjs +2 -2
  8. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  9. package/dist/cjs/llm/streamLimits.cjs +723 -0
  10. package/dist/cjs/llm/streamLimits.cjs.map +1 -0
  11. package/dist/cjs/main.cjs +8 -0
  12. package/dist/cjs/run.cjs +6 -2
  13. package/dist/cjs/run.cjs.map +1 -1
  14. package/dist/cjs/session/AgentSession.cjs +4 -1
  15. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  16. package/dist/cjs/stream.cjs +103 -12
  17. package/dist/cjs/stream.cjs.map +1 -1
  18. package/dist/cjs/summarization/node.cjs +157 -37
  19. package/dist/cjs/summarization/node.cjs.map +1 -1
  20. package/dist/cjs/tools/BashExecutor.cjs +3 -2
  21. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  22. package/dist/cjs/tools/CodeExecutor.cjs +4 -3
  23. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  24. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +5 -3
  25. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  26. package/dist/cjs/tools/ToolNode.cjs +76 -3
  27. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  28. package/dist/cjs/tools/ToolSearch.cjs +3 -2
  29. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  30. package/dist/cjs/tools/search/crw-scraper.cjs +7 -1
  31. package/dist/cjs/tools/search/crw-scraper.cjs.map +1 -1
  32. package/dist/cjs/tools/search/crw-search.cjs +3 -1
  33. package/dist/cjs/tools/search/crw-search.cjs.map +1 -1
  34. package/dist/cjs/tools/search/firecrawl.cjs +7 -1
  35. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  36. package/dist/cjs/tools/search/keenable-scraper.cjs +7 -1
  37. package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -1
  38. package/dist/cjs/tools/search/keenable-search.cjs +3 -1
  39. package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
  40. package/dist/cjs/tools/search/rerankers.cjs +26 -8
  41. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  42. package/dist/cjs/tools/search/search.cjs +30 -10
  43. package/dist/cjs/tools/search/search.cjs.map +1 -1
  44. package/dist/cjs/tools/search/serper-scraper.cjs +7 -1
  45. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  46. package/dist/cjs/tools/search/tavily-scraper.cjs +7 -1
  47. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  48. package/dist/cjs/tools/search/tavily-search.cjs +3 -1
  49. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  50. package/dist/cjs/tools/search/tool.cjs +16 -2
  51. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  52. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +54 -3
  53. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  54. package/dist/cjs/utils/index.cjs +1 -0
  55. package/dist/cjs/utils/misc.cjs +12 -0
  56. package/dist/cjs/utils/misc.cjs.map +1 -1
  57. package/dist/cjs/utils/proxy.cjs +63 -0
  58. package/dist/cjs/utils/proxy.cjs.map +1 -0
  59. package/dist/esm/graphs/Graph.mjs +245 -24
  60. package/dist/esm/graphs/Graph.mjs.map +1 -1
  61. package/dist/esm/llm/bedrock/index.mjs +13 -2
  62. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  63. package/dist/esm/llm/invoke.mjs +146 -36
  64. package/dist/esm/llm/invoke.mjs.map +1 -1
  65. package/dist/esm/llm/openai/index.mjs +2 -2
  66. package/dist/esm/llm/openai/index.mjs.map +1 -1
  67. package/dist/esm/llm/streamLimits.mjs +704 -0
  68. package/dist/esm/llm/streamLimits.mjs.map +1 -0
  69. package/dist/esm/main.mjs +4 -2
  70. package/dist/esm/run.mjs +6 -2
  71. package/dist/esm/run.mjs.map +1 -1
  72. package/dist/esm/session/AgentSession.mjs +4 -1
  73. package/dist/esm/session/AgentSession.mjs.map +1 -1
  74. package/dist/esm/stream.mjs +103 -12
  75. package/dist/esm/stream.mjs.map +1 -1
  76. package/dist/esm/summarization/node.mjs +157 -37
  77. package/dist/esm/summarization/node.mjs.map +1 -1
  78. package/dist/esm/tools/BashExecutor.mjs +3 -2
  79. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  80. package/dist/esm/tools/CodeExecutor.mjs +4 -3
  81. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  82. package/dist/esm/tools/ProgrammaticToolCalling.mjs +5 -3
  83. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  84. package/dist/esm/tools/ToolNode.mjs +76 -3
  85. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  86. package/dist/esm/tools/ToolSearch.mjs +3 -2
  87. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  88. package/dist/esm/tools/search/crw-scraper.mjs +7 -1
  89. package/dist/esm/tools/search/crw-scraper.mjs.map +1 -1
  90. package/dist/esm/tools/search/crw-search.mjs +3 -1
  91. package/dist/esm/tools/search/crw-search.mjs.map +1 -1
  92. package/dist/esm/tools/search/firecrawl.mjs +7 -1
  93. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  94. package/dist/esm/tools/search/keenable-scraper.mjs +7 -1
  95. package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -1
  96. package/dist/esm/tools/search/keenable-search.mjs +3 -1
  97. package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
  98. package/dist/esm/tools/search/rerankers.mjs +26 -8
  99. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  100. package/dist/esm/tools/search/search.mjs +30 -10
  101. package/dist/esm/tools/search/search.mjs.map +1 -1
  102. package/dist/esm/tools/search/serper-scraper.mjs +7 -1
  103. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  104. package/dist/esm/tools/search/tavily-scraper.mjs +7 -1
  105. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  106. package/dist/esm/tools/search/tavily-search.mjs +3 -1
  107. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  108. package/dist/esm/tools/search/tool.mjs +16 -2
  109. package/dist/esm/tools/search/tool.mjs.map +1 -1
  110. package/dist/esm/tools/subagent/SubagentExecutor.mjs +54 -3
  111. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  112. package/dist/esm/utils/index.mjs +1 -0
  113. package/dist/esm/utils/misc.mjs +12 -1
  114. package/dist/esm/utils/misc.mjs.map +1 -1
  115. package/dist/esm/utils/proxy.mjs +62 -0
  116. package/dist/esm/utils/proxy.mjs.map +1 -0
  117. package/dist/types/graphs/Graph.d.ts +53 -1
  118. package/dist/types/index.d.ts +2 -0
  119. package/dist/types/llm/invoke.d.ts +25 -4
  120. package/dist/types/llm/openai/index.d.ts +3 -0
  121. package/dist/types/llm/streamLimits.d.ts +314 -0
  122. package/dist/types/run.d.ts +1 -0
  123. package/dist/types/summarization/node.d.ts +27 -2
  124. package/dist/types/tools/BashExecutor.d.ts +2 -2
  125. package/dist/types/tools/CodeExecutor.d.ts +3 -3
  126. package/dist/types/tools/ToolNode.d.ts +11 -1
  127. package/dist/types/tools/search/crw-scraper.d.ts +2 -0
  128. package/dist/types/tools/search/firecrawl.d.ts +2 -0
  129. package/dist/types/tools/search/keenable-scraper.d.ts +2 -0
  130. package/dist/types/tools/search/rerankers.d.ts +9 -5
  131. package/dist/types/tools/search/serper-scraper.d.ts +2 -0
  132. package/dist/types/tools/search/tavily-scraper.d.ts +2 -0
  133. package/dist/types/tools/search/types.d.ts +28 -33
  134. package/dist/types/tools/subagent/SubagentExecutor.d.ts +44 -0
  135. package/dist/types/types/graph.d.ts +7 -1
  136. package/dist/types/types/run.d.ts +46 -1
  137. package/dist/types/types/tools.d.ts +21 -0
  138. package/dist/types/utils/index.d.ts +1 -0
  139. package/dist/types/utils/misc.d.ts +7 -0
  140. package/dist/types/utils/proxy.d.ts +31 -0
  141. package/package.json +2 -1
  142. package/src/__tests__/stream.eagerArgsDivergence.test.ts +158 -0
  143. package/src/__tests__/stream.eagerEventExecution.test.ts +1 -0
  144. package/src/__tests__/stream.streamLimits.test.ts +1982 -0
  145. package/src/graphs/Graph.ts +302 -27
  146. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +234 -0
  147. package/src/index.ts +11 -0
  148. package/src/llm/bedrock/index.ts +22 -2
  149. package/src/llm/invoke.streamLimits.test.ts +142 -0
  150. package/src/llm/invoke.test.ts +89 -1
  151. package/src/llm/invoke.ts +197 -20
  152. package/src/llm/openai/cacheWriteTokens.test.ts +112 -0
  153. package/src/llm/openai/index.ts +14 -6
  154. package/src/llm/streamLimits.test.ts +450 -0
  155. package/src/llm/streamLimits.ts +1158 -0
  156. package/src/run.ts +4 -0
  157. package/src/session/AgentSession.ts +5 -0
  158. package/src/stream.ts +141 -6
  159. package/src/summarization/__tests__/node.test.ts +269 -0
  160. package/src/summarization/chunkHandler.test.ts +196 -0
  161. package/src/summarization/node.ts +203 -6
  162. package/src/tools/BashExecutor.ts +4 -3
  163. package/src/tools/CodeExecutor.ts +5 -4
  164. package/src/tools/ProgrammaticToolCalling.ts +7 -5
  165. package/src/tools/ToolNode.ts +109 -6
  166. package/src/tools/ToolSearch.ts +4 -3
  167. package/src/tools/__tests__/BashExecutor.test.ts +2 -2
  168. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +2 -4
  169. package/src/tools/__tests__/SubagentExecutor.test.ts +126 -0
  170. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +389 -0
  171. package/src/tools/__tests__/ToolNode.streamLimits.test.ts +69 -0
  172. package/src/tools/search/crw-scraper.ts +6 -0
  173. package/src/tools/search/crw-search.ts +6 -1
  174. package/src/tools/search/firecrawl.ts +6 -0
  175. package/src/tools/search/http-agent.test.ts +133 -0
  176. package/src/tools/search/keenable-scraper.ts +6 -0
  177. package/src/tools/search/keenable-search.ts +6 -1
  178. package/src/tools/search/rerankers.ts +36 -10
  179. package/src/tools/search/search.ts +29 -11
  180. package/src/tools/search/serper-scraper.ts +6 -0
  181. package/src/tools/search/tavily-scraper.ts +6 -0
  182. package/src/tools/search/tavily-search.ts +2 -0
  183. package/src/tools/search/tool.ts +16 -0
  184. package/src/tools/search/types.ts +31 -33
  185. package/src/tools/subagent/SubagentExecutor.ts +96 -3
  186. package/src/types/graph.ts +7 -0
  187. package/src/types/run.ts +49 -1
  188. package/src/types/tools.ts +21 -0
  189. package/src/utils/index.ts +1 -0
  190. package/src/utils/misc.ts +19 -0
  191. package/src/utils/proxy.test.ts +176 -0
  192. package/src/utils/proxy.ts +93 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["record","AzureOpenAIClient","OriginalChatOpenAICompletions","OriginalChatOpenAIResponses","OriginalAzureChatOpenAICompletions","OriginalAzureChatOpenAIResponses","ChatOpenAI","OriginalChatOpenAI","AzureChatOpenAI","OriginalAzureChatOpenAI","ChatDeepSeek","OriginalChatDeepSeek","ChatXAI","OriginalChatXAI"],"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 { ToolDefinition } from '@langchain/core/language_models/base';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport {\n AIMessage,\n AIMessageChunk,\n isAIMessage,\n} from '@langchain/core/messages';\nimport {\n convertToOpenAITool,\n isLangChainTool,\n} from '@langchain/core/utils/function_calling';\nimport {\n getEndpoint,\n OpenAIClient,\n wrapOpenAIClientError,\n getHeadersWithUserAgent,\n convertMessagesToResponsesInput,\n convertResponsesDeltaToChatGenerationChunk,\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 {\n BaseMessage,\n BaseMessageChunk,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { ChatModelStreamEvent } from '@langchain/core/language_models/event';\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 type { ResponsesReplayPosition } from '@/messages/core';\nimport type { SeenScalarMetadata } from './streamMetadata';\nimport type { HeaderValue, HeadersLike } from './types';\nimport type { PromptCacheTtl } from '@/messages/cache';\nimport {\n OPENAI_RESPONSES_REPLAY_POSITIONS_KEY,\n projectOpenAIResponsesToolMessageContent,\n projectToolStreamContentForProvider,\n} from '@/messages/core';\nimport {\n buildAnthropicCacheControl,\n resolvePromptCacheTtl,\n stripAnthropicCacheControl,\n stripBedrockCacheControl,\n} from '@/messages/cache';\nimport {\n STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY,\n OPENAI_CHAT_SEQUENTIAL_STREAMED_TOOL_CALL_ADAPTER,\n} from '@/tools/streamedToolCallSeals';\nimport { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';\nimport { INTENT_ARG, isIntentLabelProperty } from '@/tools/intentArg';\nimport { dropRepeatedScalarMetadata } from './streamMetadata';\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst iife = <T>(fn: () => T) => fn();\n\nconst STREAM_CHUNK_MIN_SIZE = 4;\nconst STREAM_BOUNDARIES = new Set([' ', '.', ',', '!', '?', ';', ':']);\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 preserveToolCacheControl?: boolean;\n responsesPromptCache?: boolean;\n responsesPromptCacheTtl?: PromptCacheTtl;\n promptCacheExplicit?: boolean;\n safety_identifier?: string;\n};\ntype LibreChatAzureOpenAIFields = t.AzureOpenAIInput & {\n _lc_stream_delay?: number;\n promptCacheExplicit?: boolean;\n safety_identifier?: string;\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 PromptTokensDetailsWithCacheWrite = NonNullable<\n OpenAIClient.Completions.CompletionUsage['prompt_tokens_details']\n> & {\n cache_write_tokens?: number;\n};\ntype OpenAIChatCompletionRetry = (\n request: OpenAIChatCompletionRequest,\n requestOptions?: OpenAICoreRequestOptions\n) => Promise<\n AsyncIterable<OpenAIChatCompletionStreamItem> | OpenAIChatCompletion\n>;\ntype OpenAIManagedRequestFields = {\n promptCacheExplicit?: boolean;\n safetyIdentifier?: string;\n};\ntype OpenAIManagedRequestParams = {\n prompt_cache_options?: {\n mode: 'explicit';\n ttl: '30m';\n };\n safety_identifier?: string;\n};\n\nfunction stripResponsesToolCacheControl<T>(tools: T): T {\n if (!Array.isArray(tools)) {\n return tools;\n }\n\n return tools.map((tool) => {\n if (tool == null || typeof tool !== 'object') {\n return tool;\n }\n const clone = { ...(tool as Record<string, unknown>) };\n delete clone.cache_control;\n if (\n clone.extras != null &&\n typeof clone.extras === 'object' &&\n !Array.isArray(clone.extras)\n ) {\n clone.extras = { ...(clone.extras as Record<string, unknown>) };\n delete (clone.extras as Record<string, unknown>).cache_control;\n }\n return clone;\n }) as T;\n}\n\nfunction projectOpenAIResponsesProviderMessages(\n messages: BaseMessage[]\n): BaseMessage[] {\n return projectOpenAIResponsesToolMessageContent(\n stripAnthropicCacheControl(\n stripBedrockCacheControl(projectToolStreamContentForProvider(messages))\n )\n );\n}\n\ntype ResponsesRequest =\n | OpenAIClient.Responses.ResponseCreateParamsStreaming\n | OpenAIClient.Responses.ResponseCreateParamsNonStreaming;\ntype ResponsesResult =\n | AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>\n | OpenAIClient.Responses.Response;\ntype ResponsesStreamChunkOptions = {\n promptIndex?: number;\n signal?: AbortSignal;\n};\ntype CacheableChatPart = {\n type: 'text' | 'image_url' | 'input_audio' | 'file' | 'refusal';\n prompt_cache_breakpoint?: { mode: 'explicit' };\n [key: string]: unknown;\n};\ntype CacheableResponsePart = (\n | OpenAIClient.Responses.ResponseInputText\n | OpenAIClient.Responses.ResponseInputImage\n | OpenAIClient.Responses.ResponseInputFile\n) & {\n prompt_cache_breakpoint?: { mode: 'explicit' };\n};\ntype ResponsesUsageWithCacheWrite = OpenAIClient.Responses.ResponseUsage & {\n input_tokens_details?: OpenAIClient.Responses.ResponseUsage['input_tokens_details'] & {\n cache_write_tokens?: number;\n };\n};\nconst CACHE_WRITE_METADATA_KEY = '__librechat_cache_write_tokens';\n\nfunction applyManagedRequestParams<T extends object>(\n params: T,\n fields: OpenAIManagedRequestFields\n): T & OpenAIManagedRequestParams {\n return {\n ...params,\n ...(fields.promptCacheExplicit === true && {\n prompt_cache_options: {\n mode: 'explicit' as const,\n ttl: '30m' as const,\n },\n }),\n ...(fields.safetyIdentifier != null && {\n safety_identifier: fields.safetyIdentifier,\n }),\n };\n}\n\nfunction isCacheableChatPart(part: unknown): part is CacheableChatPart {\n if (typeof part !== 'object' || part == null || !('type' in part)) {\n return false;\n }\n return (\n part.type === 'text' ||\n part.type === 'image_url' ||\n part.type === 'input_audio' ||\n part.type === 'file' ||\n part.type === 'refusal'\n );\n}\n\nfunction canAddChatBreakpoint(\n message: OpenAIClient.Chat.Completions.ChatCompletionMessageParam\n): boolean {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'user' &&\n message.role !== 'assistant' &&\n message.role !== 'tool'\n ) {\n return false;\n }\n if (typeof message.content === 'string') {\n return message.content.length > 0;\n }\n return (\n Array.isArray(message.content) &&\n message.content.some((part) => isCacheableChatPart(part))\n );\n}\n\nfunction addChatBreakpoint(\n message: OpenAIClient.Chat.Completions.ChatCompletionMessageParam\n): OpenAIClient.Chat.Completions.ChatCompletionMessageParam {\n if (!canAddChatBreakpoint(message)) {\n return message;\n }\n\n if (typeof message.content === 'string') {\n return {\n ...message,\n content: [\n {\n type: 'text',\n text: message.content,\n prompt_cache_breakpoint: { mode: 'explicit' },\n },\n ],\n } as unknown as OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n }\n if (!Array.isArray(message.content) || message.content.length === 0) {\n return message;\n }\n\n const content = [...message.content] as unknown as CacheableChatPart[];\n let index = content.length - 1;\n while (index >= 0 && !isCacheableChatPart(content[index])) {\n index--;\n }\n if (index < 0) {\n return message;\n }\n content[index] = {\n ...content[index],\n prompt_cache_breakpoint: { mode: 'explicit' },\n };\n return {\n ...message,\n content,\n } as unknown as OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n}\n\nfunction selectCacheBreakpointIndexes(\n roles: Array<string | undefined>,\n cacheable: boolean[]\n): number[] {\n let instructionIndex = -1;\n let latestUserIndex = -1;\n for (let index = 0; index < roles.length; index++) {\n const role = roles[index];\n if ((role === 'system' || role === 'developer') && cacheable[index]) {\n instructionIndex = index;\n }\n if (role === 'user') {\n latestUserIndex = index;\n }\n }\n\n const indexes = new Set<number>();\n if (instructionIndex >= 0) {\n indexes.add(instructionIndex);\n }\n for (let index = latestUserIndex - 1; index >= 0; index--) {\n if (cacheable[index]) {\n indexes.add(index);\n break;\n }\n }\n return [...indexes];\n}\n\n/** @internal */\nexport function addChatCacheBreakpoints(\n messages: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[]\n): OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] {\n const indexes = new Set(\n selectCacheBreakpointIndexes(\n messages.map((message) => message.role),\n messages.map((message) => canAddChatBreakpoint(message))\n )\n );\n return messages.map((message, index) =>\n indexes.has(index) ? addChatBreakpoint(message) : message\n );\n}\n\nfunction isResponseMessage(\n item: OpenAIClient.Responses.ResponseInputItem\n): item is OpenAIClient.Responses.ResponseInputItem.Message {\n return item.type === 'message';\n}\n\nfunction isResponseInputRole(role: string): boolean {\n return role === 'system' || role === 'developer' || role === 'user';\n}\n\n/** Only `input_text`/`input_image`/`input_file` accept a Responses breakpoint;\n * `output_text`/`refusal` (replayed assistant blocks) are rejected with a 400. */\nfunction isCacheableResponsePart(part: unknown): part is CacheableResponsePart {\n if (typeof part !== 'object' || part == null || !('type' in part)) {\n return false;\n }\n return (\n part.type === 'input_text' ||\n part.type === 'input_image' ||\n part.type === 'input_file'\n );\n}\n\nfunction addResponseBreakpoint(\n item: OpenAIClient.Responses.ResponseInputItem\n): OpenAIClient.Responses.ResponseInputItem {\n if (!isResponseMessage(item)) {\n return item;\n }\n const rawContent = item.content as\n | string\n | OpenAIClient.Responses.ResponseInputMessageContentList;\n if (typeof rawContent === 'string') {\n if (rawContent.length === 0) {\n return item;\n }\n return {\n ...item,\n content: [\n {\n type: 'input_text',\n text: rawContent,\n prompt_cache_breakpoint: { mode: 'explicit' },\n },\n ],\n } as OpenAIClient.Responses.ResponseInputItem;\n }\n if (!Array.isArray(rawContent) || rawContent.length === 0) {\n return item;\n }\n\n const content = [...rawContent];\n let index = content.length - 1;\n while (index >= 0 && !isCacheableResponsePart(content[index])) {\n index--;\n }\n if (index < 0) {\n return item;\n }\n content[index] = {\n ...(content[index] as CacheableResponsePart),\n prompt_cache_breakpoint: { mode: 'explicit' },\n };\n return { ...item, content };\n}\n\n/** @internal */\nexport function addResponseCacheBreakpoints(\n input: OpenAIClient.Responses.ResponseCreateParams['input']\n): OpenAIClient.Responses.ResponseCreateParams['input'] {\n if (!Array.isArray(input)) {\n return input;\n }\n const indexes = new Set(\n selectCacheBreakpointIndexes(\n input.map((item) => (isResponseMessage(item) ? item.role : undefined)),\n input.map((item) => {\n if (!isResponseMessage(item)) {\n return false;\n }\n /** Only input roles take a Responses breakpoint. Assistant/tool turns\n * carry output content (string or output_text) that the API rejects\n * under an input marker, so they're never eligible. */\n if (!isResponseInputRole(item.role)) {\n return false;\n }\n const content = item.content as\n | string\n | OpenAIClient.Responses.ResponseInputMessageContentList;\n return typeof content === 'string'\n ? content.length > 0\n : Array.isArray(content) &&\n content.some((part) => isCacheableResponsePart(part));\n })\n )\n );\n return input.map((item, index) =>\n indexes.has(index) ? addResponseBreakpoint(item) : item\n );\n}\n\n/** @internal */\nexport function shouldIncludeEncryptedReasoning(\n model: string,\n params: {\n store?: boolean | null;\n reasoning?: unknown;\n }\n): boolean {\n const reasoningContext = (\n params.reasoning as\n | { context?: 'auto' | 'current_turn' | 'all_turns' }\n | undefined\n )?.context;\n return (\n /^gpt-5\\.6(?:-|$)/i.test(model) &&\n (params.store === false || reasoningContext !== 'current_turn')\n );\n}\n\nfunction getCacheWriteTokens(message: BaseMessage): number | undefined {\n const responseMetadata = message.response_metadata as {\n usage?: ResponsesUsageWithCacheWrite;\n metadata?: Record<string, string>;\n };\n const reported =\n responseMetadata.usage?.input_tokens_details.cache_write_tokens;\n if (reported != null) {\n return reported;\n }\n const serialized = responseMetadata.metadata?.[CACHE_WRITE_METADATA_KEY];\n if (serialized == null) {\n return;\n }\n const parsed = Number(serialized);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction attachCacheWriteUsage(message: BaseMessage): void {\n const cacheWriteTokens = getCacheWriteTokens(message);\n if (\n cacheWriteTokens == null ||\n !isAIMessage(message) ||\n message.usage_metadata == null\n ) {\n return;\n }\n message.usage_metadata.input_token_details = {\n ...message.usage_metadata.input_token_details,\n cache_creation: cacheWriteTokens,\n };\n const responseMetadata = message.response_metadata as {\n metadata?: Record<string, string>;\n };\n if (responseMetadata.metadata?.[CACHE_WRITE_METADATA_KEY] == null) {\n return;\n }\n const metadata = { ...responseMetadata.metadata };\n delete metadata[CACHE_WRITE_METADATA_KEY];\n message.response_metadata = {\n ...message.response_metadata,\n metadata,\n };\n}\n\nfunction attachCacheWriteMetadata(\n response: OpenAIClient.Responses.Response\n): OpenAIClient.Responses.Response {\n const usage = response.usage as ResponsesUsageWithCacheWrite | undefined;\n const cacheWriteTokens = usage?.input_tokens_details.cache_write_tokens;\n if (cacheWriteTokens == null) {\n return response;\n }\n return {\n ...response,\n metadata: {\n ...(response.metadata ?? {}),\n [CACHE_WRITE_METADATA_KEY]: String(cacheWriteTokens),\n },\n };\n}\n\nfunction isResponsesStream(\n result: ResponsesResult\n): result is AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent> {\n return Symbol.asyncIterator in result;\n}\n\nconst RESPONSES_REPLAY_OUTPUT_ITEM_TYPES = new Set([\n 'local_shell_call_output',\n 'shell_call_output',\n 'apply_patch_call_output',\n 'program_output',\n]);\n\nfunction isResponsesReplayOutputItem(item: unknown): boolean {\n return (\n typeof item === 'object' &&\n item != null &&\n 'type' in item &&\n typeof item.type === 'string' &&\n RESPONSES_REPLAY_OUTPUT_ITEM_TYPES.has(item.type)\n );\n}\n\n/**\n * LangChain's Responses converter places the authoritative terminal output in\n * response_metadata.output. Its chunk merge has no way to delete provisional\n * tool_outputs or replay-position sidecars, so remove those preemption-only\n * captures once that terminal output arrives. An interrupted stream has no\n * terminal chunk and keeps the captures for replay.\n */\nclass ResponsesReplayAIMessageChunk extends AIMessageChunk {\n override get lc_id(): string[] {\n return [...this.lc_namespace, AIMessageChunk.lc_name()];\n }\n\n override concat(chunk: AIMessageChunk): this {\n const combined = super.concat(chunk);\n if (!Array.isArray(chunk.response_metadata.output)) {\n return combined;\n }\n delete combined.additional_kwargs[OPENAI_RESPONSES_REPLAY_POSITIONS_KEY];\n const toolOutputs = combined.additional_kwargs.tool_outputs;\n if (!Array.isArray(toolOutputs)) {\n return combined;\n }\n const retainedToolOutputs = toolOutputs.filter(\n (item) => !isResponsesReplayOutputItem(item)\n );\n if (retainedToolOutputs.length === toolOutputs.length) {\n return combined;\n }\n if (retainedToolOutputs.length > 0) {\n combined.additional_kwargs.tool_outputs = retainedToolOutputs;\n } else {\n delete combined.additional_kwargs.tool_outputs;\n }\n return combined;\n }\n}\n\nfunction makeResponsesReplayAggregationSafe(\n chunk: ChatGenerationChunk\n): ChatGenerationChunk {\n if (!AIMessageChunk.isInstance(chunk.message)) {\n return chunk;\n }\n const message = chunk.message;\n chunk.message = new ResponsesReplayAIMessageChunk({\n id: message.id,\n name: message.name,\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n response_metadata: message.response_metadata,\n tool_calls: message.tool_calls,\n invalid_tool_calls: message.invalid_tool_calls,\n tool_call_chunks: message.tool_call_chunks,\n usage_metadata: message.usage_metadata,\n });\n return chunk;\n}\n\nfunction remapResponsesTextBlockIndex(\n chunk: ChatGenerationChunk,\n event: OpenAIClient.Responses.ResponseStreamEvent,\n textBlockIndices: Map<string, number>\n): void {\n const position = iife(() => {\n if (\n event.type === 'response.output_text.delta' ||\n event.type === 'response.output_text.annotation.added'\n ) {\n return {\n contentIndex: event.content_index,\n outputIndex: event.output_index,\n };\n }\n if (\n event.type === 'response.output_item.added' &&\n event.item.type === 'message'\n ) {\n return { contentIndex: 0, outputIndex: event.output_index };\n }\n return undefined;\n });\n if (position == null || !Array.isArray(chunk.message.content)) {\n return;\n }\n const key = `${position.outputIndex}:${position.contentIndex}`;\n let blockIndex = textBlockIndices.get(key);\n if (blockIndex == null) {\n blockIndex = textBlockIndices.size;\n textBlockIndices.set(key, blockIndex);\n }\n const content = chunk.message.content.map((block) =>\n typeof block === 'object' && block.type === 'text'\n ? { ...block, index: blockIndex }\n : block\n );\n chunk.message.content = content;\n chunk.message.lc_kwargs.content = content;\n}\n\nfunction convertDroppedResponsesReplayOutput(\n event: OpenAIClient.Responses.ResponseStreamEvent\n): ChatGenerationChunk | null {\n if (event.type !== 'response.output_item.done') {\n return null;\n }\n if (event.item.type === 'reasoning') {\n // Added/summary events already stream id, type, and summary. Only merge\n // terminal fields here so chunk concatenation does not duplicate summary.\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: [],\n additional_kwargs: {\n reasoning: {\n status: event.item.status,\n ...(typeof event.item.encrypted_content === 'string'\n ? { encrypted_content: event.item.encrypted_content }\n : {}),\n },\n },\n response_metadata: { model_provider: 'openai' },\n }),\n });\n }\n if (!RESPONSES_REPLAY_OUTPUT_ITEM_TYPES.has(event.item.type)) {\n return null;\n }\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: [],\n additional_kwargs: { tool_outputs: [event.item] },\n response_metadata: { model_provider: 'openai' },\n }),\n });\n}\n\nfunction attachResponsesReplayPosition(\n chunk: ChatGenerationChunk,\n event: OpenAIClient.Responses.ResponseStreamEvent,\n seenPositions: Set<string>\n): void {\n let position: ResponsesReplayPosition | undefined;\n if (event.type === 'response.output_text.delta' && event.delta.length > 0) {\n position = {\n contentIndex: event.content_index,\n itemId: event.item_id,\n kind: 'text',\n outputIndex: event.output_index,\n };\n } else if (\n event.type === 'response.output_item.added' &&\n event.item.type === 'message' &&\n typeof event.item.id === 'string' &&\n event.item.id.length > 0\n ) {\n position = {\n itemId: event.item.id,\n kind: 'message',\n outputIndex: event.output_index,\n };\n } else if (\n event.type === 'response.output_item.added' &&\n event.item.type === 'reasoning' &&\n typeof event.item.id === 'string' &&\n event.item.id.length > 0\n ) {\n position = {\n itemId: event.item.id,\n kind: 'reasoning',\n outputIndex: event.output_index,\n };\n } else if (\n event.type === 'response.output_item.done' &&\n (RESPONSES_REPLAY_OUTPUT_ITEM_TYPES.has(event.item.type) ||\n Array.isArray(chunk.message.additional_kwargs.tool_outputs))\n ) {\n let itemId: string | undefined;\n if (typeof event.item.id === 'string' && event.item.id.length > 0) {\n itemId = event.item.id;\n } else if (\n 'call_id' in event.item &&\n typeof event.item.call_id === 'string' &&\n event.item.call_id.length > 0\n ) {\n itemId = event.item.call_id;\n }\n if (itemId != null) {\n position = {\n itemId,\n kind: 'output',\n outputIndex: event.output_index,\n };\n }\n }\n if (position == null) {\n return;\n }\n const positionKey = `${position.kind}:${position.itemId}:${position.outputIndex}:${position.contentIndex ?? ''}`;\n if (seenPositions.has(positionKey)) {\n return;\n }\n seenPositions.add(positionKey);\n const existing = chunk.message.additional_kwargs[\n OPENAI_RESPONSES_REPLAY_POSITIONS_KEY\n ] as unknown;\n const additionalKwargs = {\n ...chunk.message.additional_kwargs,\n [OPENAI_RESPONSES_REPLAY_POSITIONS_KEY]: [\n ...(Array.isArray(existing) ? existing : []),\n position,\n ],\n };\n chunk.message.additional_kwargs = additionalKwargs;\n chunk.message.lc_kwargs.additional_kwargs = additionalKwargs;\n}\n\nasync function* convertLibreChatResponsesStream(\n stream: AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>,\n options: ResponsesStreamChunkOptions,\n runManager?: CallbackManagerForLLMRun\n): AsyncGenerator<ChatGenerationChunk> {\n const seenReplayPositions = new Set<string>();\n const responsesTextBlockIndices = new Map<string, number>();\n try {\n for await (const event of stream) {\n options.signal?.throwIfAborted();\n const convertedChunk =\n convertResponsesDeltaToChatGenerationChunk(event) ??\n convertDroppedResponsesReplayOutput(event);\n if (convertedChunk == null) {\n continue;\n }\n const chunk = makeResponsesReplayAggregationSafe(convertedChunk);\n remapResponsesTextBlockIndex(chunk, event, responsesTextBlockIndices);\n attachResponsesReplayPosition(chunk, event, seenReplayPositions);\n attachCacheWriteUsage(chunk.message);\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n {\n prompt: options.promptIndex ?? 0,\n completion: 0,\n },\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n yield chunk;\n }\n } catch (e) {\n throw wrapOpenAIClientError(e);\n }\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 promptTokenDetails = usage.prompt_tokens_details as\n | PromptTokensDetailsWithCacheWrite\n | undefined;\n const audioInputTokens = promptTokenDetails?.audio_tokens;\n const cachedInputTokens = promptTokenDetails?.cached_tokens;\n const cacheWriteInputTokens = promptTokenDetails?.cache_write_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 (cacheWriteInputTokens != null) {\n inputTokenDetails.cache_creation = cacheWriteInputTokens;\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\nfunction findStreamChunkBoundary(text: string, minSize: number): number {\n if (minSize >= text.length) {\n return text.length;\n }\n\n for (let position = minSize; position < text.length; position++) {\n if (STREAM_BOUNDARIES.has(text[position])) {\n return position + 1;\n }\n }\n\n return text.length;\n}\n\nfunction splitStreamToken(text: string): string[] {\n const chunks: string[] = [];\n let currentIndex = 0;\n\n while (currentIndex < text.length) {\n const remainingText = text.slice(currentIndex);\n const chunkSize = findStreamChunkBoundary(\n remainingText,\n STREAM_CHUNK_MIN_SIZE\n );\n chunks.push(text.slice(currentIndex, currentIndex + chunkSize));\n currentIndex += chunkSize;\n }\n\n return chunks;\n}\n\nfunction splitTextGenerationChunk(\n chunk: ChatGenerationChunk\n): ChatGenerationChunk[] {\n const { message } = chunk;\n if (\n !chunk.text ||\n !(message instanceof AIMessageChunk) ||\n typeof message.content !== 'string' ||\n message.content !== chunk.text ||\n chunk.generationInfo?.logprobs != null ||\n chunk.generationInfo?.finish_reason != null\n ) {\n return [chunk];\n }\n\n const tokenChunks = splitStreamToken(chunk.text);\n if (tokenChunks.length <= 1) {\n return [chunk];\n }\n\n let emittedUsage = false;\n return tokenChunks.map((token) => {\n const usageMetadata =\n emittedUsage && message.usage_metadata != null\n ? undefined\n : message.usage_metadata;\n if (message.usage_metadata != null && !emittedUsage) {\n emittedUsage = true;\n }\n\n return new ChatGenerationChunk({\n text: token,\n generationInfo: chunk.generationInfo,\n message: new AIMessageChunk(\n Object.assign({}, message, {\n content: token,\n usage_metadata: usageMetadata,\n })\n ),\n });\n });\n}\n\nexport async function emitStreamChunkCallback(\n chunk: ChatGenerationChunk,\n runManager?: CallbackManagerForLLMRun\n): Promise<void> {\n await runManager?.handleLLMNewToken(\n chunk.text,\n getStreamChunkTokenIndices(chunk),\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n}\n\nfunction getStreamChunkTokenIndices(\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\nasync function* delayStreamChunks(\n chunks: AsyncGenerator<ChatGenerationChunk>,\n delay?: number,\n signal?: AbortSignal,\n runManager?: CallbackManagerForLLMRun,\n // When provided, de-duplicate repeated scalar metadata just before emitting,\n // so token callbacks and the yielded chunk observe the same cleaned data.\n // Omitted by callers that wrap this stream and finalize downstream (e.g.\n // `ChatOpenRouter`, which needs the raw `finish_reason` as its flush signal\n // and de-duplicates after its own processing).\n seenScalarMetadata?: SeenScalarMetadata\n): AsyncGenerator<ChatGenerationChunk> {\n let lastYieldedAt: number | undefined;\n for await (const chunk of chunks) {\n const outputChunks =\n delay != null && delay > 0 ? splitTextGenerationChunk(chunk) : [chunk];\n for (const outputChunk of outputChunks) {\n signal?.throwIfAborted();\n if (delay != null && delay > 0 && lastYieldedAt != null) {\n const timeSinceLastYield = Date.now() - lastYieldedAt;\n const timeToWait = Math.max(0, delay - timeSinceLastYield);\n if (timeToWait > 0) {\n await sleepWithAbort(timeToWait, signal);\n }\n }\n signal?.throwIfAborted();\n lastYieldedAt = Date.now();\n if (seenScalarMetadata != null) {\n dropRepeatedScalarMetadata(outputChunk, seenScalarMetadata);\n }\n await emitStreamChunkCallback(outputChunk, runManager);\n signal?.throwIfAborted();\n yield outputChunk;\n }\n }\n}\n\nasync function sleepWithAbort(\n delay: number,\n signal?: AbortSignal\n): Promise<void> {\n if (delay <= 0) {\n return;\n }\n signal?.throwIfAborted();\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, delay);\n const onAbort = (): void => {\n clearTimeout(timeout);\n signal?.removeEventListener('abort', onAbort);\n reject(signal?.reason ?? new Error('AbortError: User aborted request.'));\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n if (signal?.aborted === true) {\n onAbort();\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 */\n/**\n * OpenAI strict function schemas require every property to appear in\n * `required`. The optional `intent` label (see `tools/intentArg.ts`) is\n * deliberately NOT required — the same schema is callable from programmatic\n * tool calling — so a tool auto-marked `strict: true` (the non-streaming\n * `json_schema` structured-output path) would be rejected as invalid before\n * execution. That path never streams a live label anyway, so the\n * marker-identified property is dropped there; every other path keeps it.\n */\nfunction stripIntentFromStrictTools<T extends object>(params: T): T {\n const record = params as { tools?: unknown[] };\n const tools = record.tools;\n if (!Array.isArray(tools) || tools.length === 0) {\n return params;\n }\n const nextTools = tools.map((tool) => {\n const candidate = tool as {\n strict?: boolean;\n parameters?: { properties?: Record<string, unknown>; required?: unknown };\n function?: {\n strict?: boolean;\n parameters?: {\n properties?: Record<string, unknown>;\n required?: unknown;\n };\n };\n };\n /** Chat-completions tools nest under `function`; responses-API tools are flat. */\n const holder = candidate.function ?? candidate;\n if (holder.strict !== true) {\n return tool;\n }\n const parameters = holder.parameters;\n const properties = parameters?.properties;\n if (properties == null || !isIntentLabelProperty(properties[INTENT_ARG])) {\n return tool;\n }\n const required = Array.isArray(parameters?.required)\n ? (parameters.required as unknown[])\n : [];\n if (required.includes(INTENT_ARG)) {\n return tool;\n }\n const { [INTENT_ARG]: _omit, ...restProps } = properties;\n const nextParams = { ...parameters, properties: restProps };\n if (candidate.function != null) {\n return {\n ...candidate,\n function: { ...candidate.function, parameters: nextParams },\n };\n }\n return { ...candidate, parameters: nextParams };\n });\n if (nextTools.every((tool, index) => tool === tools[index])) {\n return params;\n }\n return { ...params, tools: nextTools } as T;\n}\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\nconst OFFICIAL_OPENAI_BASE_URL_PATTERN = /^https:\\/\\/api\\.openai\\.com(\\/|$)/;\n\n/**\n * Official OpenAI (api.openai.com) and Azure OpenAI Chat Completions streams\n * emit tool-call deltas strictly sequentially by index: once a delta for a\n * later index appears, a prior index's arguments never change. Stamping this\n * adapter lets the stream handler seal a prior call for eager execution the\n * moment the next call begins. OpenAI-compatible endpoints (custom baseURL)\n * must NOT be stamped — e.g. live Kimi/Moonshot streams revise prior-index\n * args after advancing — so callers gate on the wire endpoint, not the class.\n */\nfunction stampSequentialStreamedToolCallAdapter(\n message: BaseMessageChunk\n): BaseMessageChunk {\n if (\n message instanceof AIMessageChunk &&\n (message.tool_call_chunks?.length ?? 0) > 0\n ) {\n message.response_metadata = {\n ...message.response_metadata,\n [STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY]:\n OPENAI_CHAT_SEQUENTIAL_STREAMED_TOOL_CALL_ADAPTER,\n };\n }\n return message;\n}\n\nfunction isOfficialOpenAIBaseURL(baseURL: string | null | undefined): boolean {\n // The OpenAI SDK falls back to OPENAI_BASE_URL when the client has no\n // explicit baseURL, so an unset constructor value can still route to an\n // OpenAI-compatible endpoint.\n const effectiveBaseURL =\n baseURL != null && baseURL !== '' ? baseURL : process.env.OPENAI_BASE_URL;\n if (effectiveBaseURL == null || effectiveBaseURL === '') {\n return true;\n }\n return OFFICIAL_OPENAI_BASE_URL_PATTERN.test(effectiveBaseURL);\n}\n\nconst AZURE_FIRST_PARTY_BASE_PATH_PATTERN =\n /^https:\\/\\/[^/]+\\.(openai\\.azure\\.com|cognitiveservices\\.azure\\.com|api\\.cognitive\\.microsoft\\.com)(:\\d+)?(\\/|$)/;\n\n/**\n * Azure OpenAI is first-party when requests resolve to an instance-name\n * endpoint or an *.openai.azure.com / *.cognitiveservices.azure.com /\n * regional *.api.cognitive.microsoft.com base path. A custom\n * `clientConfig.baseURL` or a non-Azure `azureOpenAIBasePath` routes through\n * a proxy or Azure-compatible endpoint whose stream contract is unknown, so\n * those are not stamped.\n */\nfunction isFirstPartyAzureEndpoint(args: {\n baseURL: string | null | undefined;\n azureOpenAIBasePath: string | undefined;\n}): boolean {\n if (args.baseURL != null && args.baseURL !== '') {\n return false;\n }\n if (args.azureOpenAIBasePath == null || args.azureOpenAIBasePath === '') {\n return true;\n }\n return AZURE_FIRST_PARTY_BASE_PATH_PATTERN.test(args.azureOpenAIBasePath);\n}\n\nclass LibreChatOpenAICompletions extends OriginalChatOpenAICompletions {\n private includeReasoningContent?: boolean;\n private includeReasoningDetails?: boolean;\n private convertReasoningDetailsToContent?: boolean;\n private preserveToolCacheControl?: boolean;\n private promptCacheExplicit?: boolean;\n private safetyIdentifier?: string;\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 this.preserveToolCacheControl = fields?.preserveToolCacheControl;\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions'],\n extra?: { streaming?: boolean }\n ): ReturnType<OriginalChatOpenAICompletions['invocationParams']> {\n return stripIntentFromStrictTools(\n applyManagedRequestParams(super.invocationParams(options, extra), {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n })\n );\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 this.promptCacheExplicit === true\n ? { ...request, messages: addChatCacheBreakpoints(request.messages) }\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 const message = attachLibreChatDeltaFields(\n super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n ),\n delta\n );\n if (isOfficialOpenAIBaseURL(this.clientConfig.baseURL)) {\n return stampSequentialStreamedToolCallAdapter(message);\n }\n return message;\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 preserveToolCacheControl: this.preserveToolCacheControl,\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 const promptTokensDetailsWithCacheWrite = promptTokensDetails as\n | PromptTokensDetailsWithCacheWrite\n | undefined;\n if (\n promptTokensDetailsWithCacheWrite?.audio_tokens != null ||\n promptTokensDetailsWithCacheWrite?.cached_tokens != null ||\n promptTokensDetailsWithCacheWrite?.cache_write_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetailsWithCacheWrite.audio_tokens != null && {\n audio: promptTokensDetailsWithCacheWrite.audio_tokens,\n }),\n ...(promptTokensDetailsWithCacheWrite.cached_tokens != null && {\n cache_read: promptTokensDetailsWithCacheWrite.cached_tokens,\n }),\n ...(promptTokensDetailsWithCacheWrite.cache_write_tokens != null && {\n cache_creation: promptTokensDetailsWithCacheWrite.cache_write_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 preserveToolCacheControl: this.preserveToolCacheControl,\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 promptTokenDetails = usage.prompt_tokens_details as\n | PromptTokensDetailsWithCacheWrite\n | undefined;\n const inputTokenDetails = {\n ...(promptTokenDetails?.audio_tokens != null && {\n audio: promptTokenDetails.audio_tokens,\n }),\n ...(promptTokenDetails?.cached_tokens != null && {\n cache_read: promptTokenDetails.cached_tokens,\n }),\n ...(promptTokenDetails?.cache_write_tokens != null && {\n cache_creation: promptTokenDetails.cache_write_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 private promptCacheExplicit?: boolean;\n private responsesPromptCache?: boolean;\n private responsesPromptCacheTtl?: PromptCacheTtl;\n private safetyIdentifier?: string;\n\n constructor(fields?: LibreChatOpenAIFields) {\n super(fields);\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.responsesPromptCache = fields?.responsesPromptCache;\n this.responsesPromptCacheTtl = fields?.responsesPromptCacheTtl;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions']\n ): ReturnType<OriginalChatOpenAIResponses['invocationParams']> {\n const cacheOptions = options as\n | {\n promptCache?: boolean;\n promptCacheTtl?: PromptCacheTtl;\n }\n | undefined;\n const promptCache = cacheOptions?.promptCache ?? this.responsesPromptCache;\n const cacheControl =\n promptCache === true\n ? buildAnthropicCacheControl(\n resolvePromptCacheTtl(\n cacheOptions?.promptCacheTtl ?? this.responsesPromptCacheTtl\n )\n )\n : undefined;\n const baseParams = applyManagedRequestParams(\n super.invocationParams(options),\n {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n }\n );\n const params = {\n ...baseParams,\n ...(baseParams.tools != null && {\n tools: stripResponsesToolCacheControl(baseParams.tools),\n }),\n ...(cacheControl != null && {\n cache_control: cacheControl,\n }),\n };\n if (shouldIncludeEncryptedReasoning(this.model, params)) {\n params.include = [\n ...new Set([\n ...(params.include ?? []),\n 'reasoning.encrypted_content' as const,\n ]),\n ];\n }\n return stripIntentFromStrictTools(params);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>>;\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Responses.Response>;\n async completionWithRetry(\n request: ResponsesRequest,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<ResponsesResult> {\n const managedRequest = {\n ...request,\n input:\n this.promptCacheExplicit === true\n ? addResponseCacheBreakpoints(request.input)\n : request.input,\n };\n const result = await super.completionWithRetry(\n managedRequest as OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions\n );\n return isResponsesStream(result)\n ? result\n : attachCacheWriteMetadata(result);\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const result = await super._generate(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\n for (const generation of result.generations) {\n attachCacheWriteUsage(generation.message);\n }\n return result;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const projectedMessages = projectOpenAIResponsesProviderMessages(messages);\n const stream = await this.completionWithRetry(\n {\n ...this.invocationParams(options),\n input: convertMessagesToResponsesInput({\n messages: projectedMessages,\n zdrEnabled: this.zdrEnabled ?? false,\n model: this.model,\n }),\n stream: true,\n },\n options\n );\n yield* convertLibreChatResponsesStream(stream, options, runManager);\n }\n\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n yield* super._streamChatModelEvents(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\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\nclass LibreChatAzureOpenAICompletions extends OriginalAzureChatOpenAICompletions {\n private promptCacheExplicit?: boolean;\n private safetyIdentifier?: string;\n\n constructor(fields?: LibreChatAzureOpenAIFields) {\n super(fields);\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions'],\n extra?: { streaming?: boolean }\n ): ReturnType<OriginalAzureChatOpenAICompletions['invocationParams']> {\n return stripIntentFromStrictTools(\n applyManagedRequestParams(super.invocationParams(options, extra), {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n })\n );\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n protected _convertCompletionsDeltaToBaseMessageChunk(\n delta: Record<string, unknown>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n const message = super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n );\n if (\n isFirstPartyAzureEndpoint({\n baseURL: this.clientConfig.baseURL,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n })\n ) {\n // First-party Azure OpenAI: same sequential-by-index stream contract\n // as api.openai.com.\n return stampSequentialStreamedToolCallAdapter(message);\n }\n return message;\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 this.promptCacheExplicit === true\n ? { ...request, messages: addChatCacheBreakpoints(request.messages) }\n : request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n}\n\nclass LibreChatAzureOpenAIResponses extends OriginalAzureChatOpenAIResponses {\n private promptCacheExplicit?: boolean;\n private safetyIdentifier?: string;\n\n constructor(fields?: LibreChatAzureOpenAIFields) {\n super(fields);\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions']\n ): ReturnType<OriginalAzureChatOpenAIResponses['invocationParams']> {\n const params = applyManagedRequestParams(super.invocationParams(options), {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n });\n if (shouldIncludeEncryptedReasoning(this.model, params)) {\n params.include = [\n ...new Set([\n ...(params.include ?? []),\n 'reasoning.encrypted_content' as const,\n ]),\n ];\n }\n return stripIntentFromStrictTools(params);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>>;\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Responses.Response>;\n async completionWithRetry(\n request: ResponsesRequest,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<ResponsesResult> {\n const managedRequest = {\n ...request,\n input:\n this.promptCacheExplicit === true\n ? addResponseCacheBreakpoints(request.input)\n : request.input,\n };\n const result = await super.completionWithRetry(\n managedRequest as OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions\n );\n return isResponsesStream(result)\n ? result\n : attachCacheWriteMetadata(result);\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const result = await super._generate(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\n for (const generation of result.generations) {\n attachCacheWriteUsage(generation.message);\n }\n return result;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const projectedMessages = projectOpenAIResponsesProviderMessages(messages);\n const stream = await this.completionWithRetry(\n {\n ...this.invocationParams(options),\n input: convertMessagesToResponsesInput({\n messages: projectedMessages,\n zdrEnabled: this.zdrEnabled ?? false,\n model: this.model,\n }),\n stream: true,\n },\n options\n );\n yield* convertLibreChatResponsesStream(stream, options, runManager);\n }\n\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n yield* super._streamChatModelEvents(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\n }\n\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\n );\n }\n\n /**\n * Raw variant that skips scalar-metadata de-duplication. Used by subclasses\n * (e.g. `ChatOpenRouter`) that read `finish_reason` as a control signal and\n * must de-duplicate only after their own finalization.\n */\n protected _streamRawResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n return delayStreamChunks(\n super._streamResponseChunks(messages, options, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\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 return getStreamChunkTokenIndices(chunk);\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["record","AzureOpenAIClient","OriginalChatOpenAICompletions","OriginalChatOpenAIResponses","OriginalAzureChatOpenAICompletions","OriginalAzureChatOpenAIResponses","ChatOpenAI","OriginalChatOpenAI","AzureChatOpenAI","OriginalAzureChatOpenAI","ChatDeepSeek","OriginalChatDeepSeek","ChatXAI","OriginalChatXAI"],"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 { ToolDefinition } from '@langchain/core/language_models/base';\nimport { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport {\n AIMessage,\n AIMessageChunk,\n isAIMessage,\n} from '@langchain/core/messages';\nimport {\n convertToOpenAITool,\n isLangChainTool,\n} from '@langchain/core/utils/function_calling';\nimport {\n getEndpoint,\n OpenAIClient,\n wrapOpenAIClientError,\n getHeadersWithUserAgent,\n convertMessagesToResponsesInput,\n convertResponsesDeltaToChatGenerationChunk,\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 {\n BaseMessage,\n BaseMessageChunk,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { ChatModelStreamEvent } from '@langchain/core/language_models/event';\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 type { ResponsesReplayPosition } from '@/messages/core';\nimport type { SeenScalarMetadata } from './streamMetadata';\nimport type { HeaderValue, HeadersLike } from './types';\nimport type { PromptCacheTtl } from '@/messages/cache';\nimport {\n OPENAI_RESPONSES_REPLAY_POSITIONS_KEY,\n projectOpenAIResponsesToolMessageContent,\n projectToolStreamContentForProvider,\n} from '@/messages/core';\nimport {\n buildAnthropicCacheControl,\n resolvePromptCacheTtl,\n stripAnthropicCacheControl,\n stripBedrockCacheControl,\n} from '@/messages/cache';\nimport {\n STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY,\n OPENAI_CHAT_SEQUENTIAL_STREAMED_TOOL_CALL_ADAPTER,\n} from '@/tools/streamedToolCallSeals';\nimport { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';\nimport { INTENT_ARG, isIntentLabelProperty } from '@/tools/intentArg';\nimport { dropRepeatedScalarMetadata } from './streamMetadata';\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nconst iife = <T>(fn: () => T) => fn();\n\nconst STREAM_CHUNK_MIN_SIZE = 4;\nconst STREAM_BOUNDARIES = new Set([' ', '.', ',', '!', '?', ';', ':']);\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 preserveToolCacheControl?: boolean;\n responsesPromptCache?: boolean;\n responsesPromptCacheTtl?: PromptCacheTtl;\n promptCacheExplicit?: boolean;\n safety_identifier?: string;\n};\ntype LibreChatAzureOpenAIFields = t.AzureOpenAIInput & {\n _lc_stream_delay?: number;\n promptCacheExplicit?: boolean;\n safety_identifier?: string;\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 PromptTokensDetailsWithCacheWrite = NonNullable<\n OpenAIClient.Completions.CompletionUsage['prompt_tokens_details']\n> & {\n cache_write_tokens?: number;\n};\ntype OpenAIChatCompletionRetry = (\n request: OpenAIChatCompletionRequest,\n requestOptions?: OpenAICoreRequestOptions\n) => Promise<\n AsyncIterable<OpenAIChatCompletionStreamItem> | OpenAIChatCompletion\n>;\ntype OpenAIManagedRequestFields = {\n promptCacheExplicit?: boolean;\n safetyIdentifier?: string;\n};\ntype OpenAIManagedRequestParams = {\n prompt_cache_options?: {\n mode: 'explicit';\n ttl: '30m';\n };\n safety_identifier?: string;\n};\n\nfunction stripResponsesToolCacheControl<T>(tools: T): T {\n if (!Array.isArray(tools)) {\n return tools;\n }\n\n return tools.map((tool) => {\n if (tool == null || typeof tool !== 'object') {\n return tool;\n }\n const clone = { ...(tool as Record<string, unknown>) };\n delete clone.cache_control;\n if (\n clone.extras != null &&\n typeof clone.extras === 'object' &&\n !Array.isArray(clone.extras)\n ) {\n clone.extras = { ...(clone.extras as Record<string, unknown>) };\n delete (clone.extras as Record<string, unknown>).cache_control;\n }\n return clone;\n }) as T;\n}\n\nfunction projectOpenAIResponsesProviderMessages(\n messages: BaseMessage[]\n): BaseMessage[] {\n return projectOpenAIResponsesToolMessageContent(\n stripAnthropicCacheControl(\n stripBedrockCacheControl(projectToolStreamContentForProvider(messages))\n )\n );\n}\n\ntype ResponsesRequest =\n | OpenAIClient.Responses.ResponseCreateParamsStreaming\n | OpenAIClient.Responses.ResponseCreateParamsNonStreaming;\ntype ResponsesResult =\n | AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>\n | OpenAIClient.Responses.Response;\ntype ResponsesStreamChunkOptions = {\n promptIndex?: number;\n signal?: AbortSignal;\n};\ntype CacheableChatPart = {\n type: 'text' | 'image_url' | 'input_audio' | 'file' | 'refusal';\n prompt_cache_breakpoint?: { mode: 'explicit' };\n [key: string]: unknown;\n};\ntype CacheableResponsePart = (\n | OpenAIClient.Responses.ResponseInputText\n | OpenAIClient.Responses.ResponseInputImage\n | OpenAIClient.Responses.ResponseInputFile\n) & {\n prompt_cache_breakpoint?: { mode: 'explicit' };\n};\n// `Omit` before re-adding `input_tokens_details` as optional matters: the SDK's own\n// `ResponseUsage` declares it required (true for OpenAI itself), so a plain intersection\n// would keep it required in the merged type despite the `?:` here — masking, at the type\n// level, that OpenAI-*compatible* servers (e.g. mlx_vlm.server) may omit it entirely.\n// Mirrors `CompletionUsageWithCacheWrite`'s handling of the analogous Completions API field.\ntype ResponsesUsageWithCacheWrite = Omit<\n OpenAIClient.Responses.ResponseUsage,\n 'input_tokens_details'\n> & {\n input_tokens_details?: OpenAIClient.Responses.ResponseUsage['input_tokens_details'] & {\n cache_write_tokens?: number;\n };\n};\nconst CACHE_WRITE_METADATA_KEY = '__librechat_cache_write_tokens';\n\nfunction applyManagedRequestParams<T extends object>(\n params: T,\n fields: OpenAIManagedRequestFields\n): T & OpenAIManagedRequestParams {\n return {\n ...params,\n ...(fields.promptCacheExplicit === true && {\n prompt_cache_options: {\n mode: 'explicit' as const,\n ttl: '30m' as const,\n },\n }),\n ...(fields.safetyIdentifier != null && {\n safety_identifier: fields.safetyIdentifier,\n }),\n };\n}\n\nfunction isCacheableChatPart(part: unknown): part is CacheableChatPart {\n if (typeof part !== 'object' || part == null || !('type' in part)) {\n return false;\n }\n return (\n part.type === 'text' ||\n part.type === 'image_url' ||\n part.type === 'input_audio' ||\n part.type === 'file' ||\n part.type === 'refusal'\n );\n}\n\nfunction canAddChatBreakpoint(\n message: OpenAIClient.Chat.Completions.ChatCompletionMessageParam\n): boolean {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'user' &&\n message.role !== 'assistant' &&\n message.role !== 'tool'\n ) {\n return false;\n }\n if (typeof message.content === 'string') {\n return message.content.length > 0;\n }\n return (\n Array.isArray(message.content) &&\n message.content.some((part) => isCacheableChatPart(part))\n );\n}\n\nfunction addChatBreakpoint(\n message: OpenAIClient.Chat.Completions.ChatCompletionMessageParam\n): OpenAIClient.Chat.Completions.ChatCompletionMessageParam {\n if (!canAddChatBreakpoint(message)) {\n return message;\n }\n\n if (typeof message.content === 'string') {\n return {\n ...message,\n content: [\n {\n type: 'text',\n text: message.content,\n prompt_cache_breakpoint: { mode: 'explicit' },\n },\n ],\n } as unknown as OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n }\n if (!Array.isArray(message.content) || message.content.length === 0) {\n return message;\n }\n\n const content = [...message.content] as unknown as CacheableChatPart[];\n let index = content.length - 1;\n while (index >= 0 && !isCacheableChatPart(content[index])) {\n index--;\n }\n if (index < 0) {\n return message;\n }\n content[index] = {\n ...content[index],\n prompt_cache_breakpoint: { mode: 'explicit' },\n };\n return {\n ...message,\n content,\n } as unknown as OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n}\n\nfunction selectCacheBreakpointIndexes(\n roles: Array<string | undefined>,\n cacheable: boolean[]\n): number[] {\n let instructionIndex = -1;\n let latestUserIndex = -1;\n for (let index = 0; index < roles.length; index++) {\n const role = roles[index];\n if ((role === 'system' || role === 'developer') && cacheable[index]) {\n instructionIndex = index;\n }\n if (role === 'user') {\n latestUserIndex = index;\n }\n }\n\n const indexes = new Set<number>();\n if (instructionIndex >= 0) {\n indexes.add(instructionIndex);\n }\n for (let index = latestUserIndex - 1; index >= 0; index--) {\n if (cacheable[index]) {\n indexes.add(index);\n break;\n }\n }\n return [...indexes];\n}\n\n/** @internal */\nexport function addChatCacheBreakpoints(\n messages: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[]\n): OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] {\n const indexes = new Set(\n selectCacheBreakpointIndexes(\n messages.map((message) => message.role),\n messages.map((message) => canAddChatBreakpoint(message))\n )\n );\n return messages.map((message, index) =>\n indexes.has(index) ? addChatBreakpoint(message) : message\n );\n}\n\nfunction isResponseMessage(\n item: OpenAIClient.Responses.ResponseInputItem\n): item is OpenAIClient.Responses.ResponseInputItem.Message {\n return item.type === 'message';\n}\n\nfunction isResponseInputRole(role: string): boolean {\n return role === 'system' || role === 'developer' || role === 'user';\n}\n\n/** Only `input_text`/`input_image`/`input_file` accept a Responses breakpoint;\n * `output_text`/`refusal` (replayed assistant blocks) are rejected with a 400. */\nfunction isCacheableResponsePart(part: unknown): part is CacheableResponsePart {\n if (typeof part !== 'object' || part == null || !('type' in part)) {\n return false;\n }\n return (\n part.type === 'input_text' ||\n part.type === 'input_image' ||\n part.type === 'input_file'\n );\n}\n\nfunction addResponseBreakpoint(\n item: OpenAIClient.Responses.ResponseInputItem\n): OpenAIClient.Responses.ResponseInputItem {\n if (!isResponseMessage(item)) {\n return item;\n }\n const rawContent = item.content as\n | string\n | OpenAIClient.Responses.ResponseInputMessageContentList;\n if (typeof rawContent === 'string') {\n if (rawContent.length === 0) {\n return item;\n }\n return {\n ...item,\n content: [\n {\n type: 'input_text',\n text: rawContent,\n prompt_cache_breakpoint: { mode: 'explicit' },\n },\n ],\n } as OpenAIClient.Responses.ResponseInputItem;\n }\n if (!Array.isArray(rawContent) || rawContent.length === 0) {\n return item;\n }\n\n const content = [...rawContent];\n let index = content.length - 1;\n while (index >= 0 && !isCacheableResponsePart(content[index])) {\n index--;\n }\n if (index < 0) {\n return item;\n }\n content[index] = {\n ...(content[index] as CacheableResponsePart),\n prompt_cache_breakpoint: { mode: 'explicit' },\n };\n return { ...item, content };\n}\n\n/** @internal */\nexport function addResponseCacheBreakpoints(\n input: OpenAIClient.Responses.ResponseCreateParams['input']\n): OpenAIClient.Responses.ResponseCreateParams['input'] {\n if (!Array.isArray(input)) {\n return input;\n }\n const indexes = new Set(\n selectCacheBreakpointIndexes(\n input.map((item) => (isResponseMessage(item) ? item.role : undefined)),\n input.map((item) => {\n if (!isResponseMessage(item)) {\n return false;\n }\n /** Only input roles take a Responses breakpoint. Assistant/tool turns\n * carry output content (string or output_text) that the API rejects\n * under an input marker, so they're never eligible. */\n if (!isResponseInputRole(item.role)) {\n return false;\n }\n const content = item.content as\n | string\n | OpenAIClient.Responses.ResponseInputMessageContentList;\n return typeof content === 'string'\n ? content.length > 0\n : Array.isArray(content) &&\n content.some((part) => isCacheableResponsePart(part));\n })\n )\n );\n return input.map((item, index) =>\n indexes.has(index) ? addResponseBreakpoint(item) : item\n );\n}\n\n/** @internal */\nexport function shouldIncludeEncryptedReasoning(\n model: string,\n params: {\n store?: boolean | null;\n reasoning?: unknown;\n }\n): boolean {\n const reasoningContext = (\n params.reasoning as\n | { context?: 'auto' | 'current_turn' | 'all_turns' }\n | undefined\n )?.context;\n return (\n /^gpt-5\\.6(?:-|$)/i.test(model) &&\n (params.store === false || reasoningContext !== 'current_turn')\n );\n}\n\nexport function getCacheWriteTokens(message: BaseMessage): number | undefined {\n const responseMetadata = message.response_metadata as {\n usage?: ResponsesUsageWithCacheWrite;\n metadata?: Record<string, string>;\n };\n const reported =\n responseMetadata.usage?.input_tokens_details?.cache_write_tokens;\n if (reported != null) {\n return reported;\n }\n const serialized = responseMetadata.metadata?.[CACHE_WRITE_METADATA_KEY];\n if (serialized == null) {\n return;\n }\n const parsed = Number(serialized);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nexport function attachCacheWriteUsage(message: BaseMessage): void {\n const cacheWriteTokens = getCacheWriteTokens(message);\n if (\n cacheWriteTokens == null ||\n !isAIMessage(message) ||\n message.usage_metadata == null\n ) {\n return;\n }\n message.usage_metadata.input_token_details = {\n ...message.usage_metadata.input_token_details,\n cache_creation: cacheWriteTokens,\n };\n const responseMetadata = message.response_metadata as {\n metadata?: Record<string, string>;\n };\n if (responseMetadata.metadata?.[CACHE_WRITE_METADATA_KEY] == null) {\n return;\n }\n const metadata = { ...responseMetadata.metadata };\n delete metadata[CACHE_WRITE_METADATA_KEY];\n message.response_metadata = {\n ...message.response_metadata,\n metadata,\n };\n}\n\nexport function attachCacheWriteMetadata(\n response: OpenAIClient.Responses.Response\n): OpenAIClient.Responses.Response {\n const usage = response.usage as ResponsesUsageWithCacheWrite | undefined;\n const cacheWriteTokens = usage?.input_tokens_details?.cache_write_tokens;\n if (cacheWriteTokens == null) {\n return response;\n }\n return {\n ...response,\n metadata: {\n ...(response.metadata ?? {}),\n [CACHE_WRITE_METADATA_KEY]: String(cacheWriteTokens),\n },\n };\n}\n\nfunction isResponsesStream(\n result: ResponsesResult\n): result is AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent> {\n return Symbol.asyncIterator in result;\n}\n\nconst RESPONSES_REPLAY_OUTPUT_ITEM_TYPES = new Set([\n 'local_shell_call_output',\n 'shell_call_output',\n 'apply_patch_call_output',\n 'program_output',\n]);\n\nfunction isResponsesReplayOutputItem(item: unknown): boolean {\n return (\n typeof item === 'object' &&\n item != null &&\n 'type' in item &&\n typeof item.type === 'string' &&\n RESPONSES_REPLAY_OUTPUT_ITEM_TYPES.has(item.type)\n );\n}\n\n/**\n * LangChain's Responses converter places the authoritative terminal output in\n * response_metadata.output. Its chunk merge has no way to delete provisional\n * tool_outputs or replay-position sidecars, so remove those preemption-only\n * captures once that terminal output arrives. An interrupted stream has no\n * terminal chunk and keeps the captures for replay.\n */\nclass ResponsesReplayAIMessageChunk extends AIMessageChunk {\n override get lc_id(): string[] {\n return [...this.lc_namespace, AIMessageChunk.lc_name()];\n }\n\n override concat(chunk: AIMessageChunk): this {\n const combined = super.concat(chunk);\n if (!Array.isArray(chunk.response_metadata.output)) {\n return combined;\n }\n delete combined.additional_kwargs[OPENAI_RESPONSES_REPLAY_POSITIONS_KEY];\n const toolOutputs = combined.additional_kwargs.tool_outputs;\n if (!Array.isArray(toolOutputs)) {\n return combined;\n }\n const retainedToolOutputs = toolOutputs.filter(\n (item) => !isResponsesReplayOutputItem(item)\n );\n if (retainedToolOutputs.length === toolOutputs.length) {\n return combined;\n }\n if (retainedToolOutputs.length > 0) {\n combined.additional_kwargs.tool_outputs = retainedToolOutputs;\n } else {\n delete combined.additional_kwargs.tool_outputs;\n }\n return combined;\n }\n}\n\nfunction makeResponsesReplayAggregationSafe(\n chunk: ChatGenerationChunk\n): ChatGenerationChunk {\n if (!AIMessageChunk.isInstance(chunk.message)) {\n return chunk;\n }\n const message = chunk.message;\n chunk.message = new ResponsesReplayAIMessageChunk({\n id: message.id,\n name: message.name,\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n response_metadata: message.response_metadata,\n tool_calls: message.tool_calls,\n invalid_tool_calls: message.invalid_tool_calls,\n tool_call_chunks: message.tool_call_chunks,\n usage_metadata: message.usage_metadata,\n });\n return chunk;\n}\n\nfunction remapResponsesTextBlockIndex(\n chunk: ChatGenerationChunk,\n event: OpenAIClient.Responses.ResponseStreamEvent,\n textBlockIndices: Map<string, number>\n): void {\n const position = iife(() => {\n if (\n event.type === 'response.output_text.delta' ||\n event.type === 'response.output_text.annotation.added'\n ) {\n return {\n contentIndex: event.content_index,\n outputIndex: event.output_index,\n };\n }\n if (\n event.type === 'response.output_item.added' &&\n event.item.type === 'message'\n ) {\n return { contentIndex: 0, outputIndex: event.output_index };\n }\n return undefined;\n });\n if (position == null || !Array.isArray(chunk.message.content)) {\n return;\n }\n const key = `${position.outputIndex}:${position.contentIndex}`;\n let blockIndex = textBlockIndices.get(key);\n if (blockIndex == null) {\n blockIndex = textBlockIndices.size;\n textBlockIndices.set(key, blockIndex);\n }\n const content = chunk.message.content.map((block) =>\n typeof block === 'object' && block.type === 'text'\n ? { ...block, index: blockIndex }\n : block\n );\n chunk.message.content = content;\n chunk.message.lc_kwargs.content = content;\n}\n\nfunction convertDroppedResponsesReplayOutput(\n event: OpenAIClient.Responses.ResponseStreamEvent\n): ChatGenerationChunk | null {\n if (event.type !== 'response.output_item.done') {\n return null;\n }\n if (event.item.type === 'reasoning') {\n // Added/summary events already stream id, type, and summary. Only merge\n // terminal fields here so chunk concatenation does not duplicate summary.\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: [],\n additional_kwargs: {\n reasoning: {\n status: event.item.status,\n ...(typeof event.item.encrypted_content === 'string'\n ? { encrypted_content: event.item.encrypted_content }\n : {}),\n },\n },\n response_metadata: { model_provider: 'openai' },\n }),\n });\n }\n if (!RESPONSES_REPLAY_OUTPUT_ITEM_TYPES.has(event.item.type)) {\n return null;\n }\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: [],\n additional_kwargs: { tool_outputs: [event.item] },\n response_metadata: { model_provider: 'openai' },\n }),\n });\n}\n\nfunction attachResponsesReplayPosition(\n chunk: ChatGenerationChunk,\n event: OpenAIClient.Responses.ResponseStreamEvent,\n seenPositions: Set<string>\n): void {\n let position: ResponsesReplayPosition | undefined;\n if (event.type === 'response.output_text.delta' && event.delta.length > 0) {\n position = {\n contentIndex: event.content_index,\n itemId: event.item_id,\n kind: 'text',\n outputIndex: event.output_index,\n };\n } else if (\n event.type === 'response.output_item.added' &&\n event.item.type === 'message' &&\n typeof event.item.id === 'string' &&\n event.item.id.length > 0\n ) {\n position = {\n itemId: event.item.id,\n kind: 'message',\n outputIndex: event.output_index,\n };\n } else if (\n event.type === 'response.output_item.added' &&\n event.item.type === 'reasoning' &&\n typeof event.item.id === 'string' &&\n event.item.id.length > 0\n ) {\n position = {\n itemId: event.item.id,\n kind: 'reasoning',\n outputIndex: event.output_index,\n };\n } else if (\n event.type === 'response.output_item.done' &&\n (RESPONSES_REPLAY_OUTPUT_ITEM_TYPES.has(event.item.type) ||\n Array.isArray(chunk.message.additional_kwargs.tool_outputs))\n ) {\n let itemId: string | undefined;\n if (typeof event.item.id === 'string' && event.item.id.length > 0) {\n itemId = event.item.id;\n } else if (\n 'call_id' in event.item &&\n typeof event.item.call_id === 'string' &&\n event.item.call_id.length > 0\n ) {\n itemId = event.item.call_id;\n }\n if (itemId != null) {\n position = {\n itemId,\n kind: 'output',\n outputIndex: event.output_index,\n };\n }\n }\n if (position == null) {\n return;\n }\n const positionKey = `${position.kind}:${position.itemId}:${position.outputIndex}:${position.contentIndex ?? ''}`;\n if (seenPositions.has(positionKey)) {\n return;\n }\n seenPositions.add(positionKey);\n const existing = chunk.message.additional_kwargs[\n OPENAI_RESPONSES_REPLAY_POSITIONS_KEY\n ] as unknown;\n const additionalKwargs = {\n ...chunk.message.additional_kwargs,\n [OPENAI_RESPONSES_REPLAY_POSITIONS_KEY]: [\n ...(Array.isArray(existing) ? existing : []),\n position,\n ],\n };\n chunk.message.additional_kwargs = additionalKwargs;\n chunk.message.lc_kwargs.additional_kwargs = additionalKwargs;\n}\n\nasync function* convertLibreChatResponsesStream(\n stream: AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>,\n options: ResponsesStreamChunkOptions,\n runManager?: CallbackManagerForLLMRun\n): AsyncGenerator<ChatGenerationChunk> {\n const seenReplayPositions = new Set<string>();\n const responsesTextBlockIndices = new Map<string, number>();\n try {\n for await (const event of stream) {\n options.signal?.throwIfAborted();\n const convertedChunk =\n convertResponsesDeltaToChatGenerationChunk(event) ??\n convertDroppedResponsesReplayOutput(event);\n if (convertedChunk == null) {\n continue;\n }\n const chunk = makeResponsesReplayAggregationSafe(convertedChunk);\n remapResponsesTextBlockIndex(chunk, event, responsesTextBlockIndices);\n attachResponsesReplayPosition(chunk, event, seenReplayPositions);\n attachCacheWriteUsage(chunk.message);\n await runManager?.handleLLMNewToken(\n chunk.text || '',\n {\n prompt: options.promptIndex ?? 0,\n completion: 0,\n },\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n yield chunk;\n }\n } catch (e) {\n throw wrapOpenAIClientError(e);\n }\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 promptTokenDetails = usage.prompt_tokens_details as\n | PromptTokensDetailsWithCacheWrite\n | undefined;\n const audioInputTokens = promptTokenDetails?.audio_tokens;\n const cachedInputTokens = promptTokenDetails?.cached_tokens;\n const cacheWriteInputTokens = promptTokenDetails?.cache_write_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 (cacheWriteInputTokens != null) {\n inputTokenDetails.cache_creation = cacheWriteInputTokens;\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\nfunction findStreamChunkBoundary(text: string, minSize: number): number {\n if (minSize >= text.length) {\n return text.length;\n }\n\n for (let position = minSize; position < text.length; position++) {\n if (STREAM_BOUNDARIES.has(text[position])) {\n return position + 1;\n }\n }\n\n return text.length;\n}\n\nfunction splitStreamToken(text: string): string[] {\n const chunks: string[] = [];\n let currentIndex = 0;\n\n while (currentIndex < text.length) {\n const remainingText = text.slice(currentIndex);\n const chunkSize = findStreamChunkBoundary(\n remainingText,\n STREAM_CHUNK_MIN_SIZE\n );\n chunks.push(text.slice(currentIndex, currentIndex + chunkSize));\n currentIndex += chunkSize;\n }\n\n return chunks;\n}\n\nfunction splitTextGenerationChunk(\n chunk: ChatGenerationChunk\n): ChatGenerationChunk[] {\n const { message } = chunk;\n if (\n !chunk.text ||\n !(message instanceof AIMessageChunk) ||\n typeof message.content !== 'string' ||\n message.content !== chunk.text ||\n chunk.generationInfo?.logprobs != null ||\n chunk.generationInfo?.finish_reason != null\n ) {\n return [chunk];\n }\n\n const tokenChunks = splitStreamToken(chunk.text);\n if (tokenChunks.length <= 1) {\n return [chunk];\n }\n\n let emittedUsage = false;\n return tokenChunks.map((token) => {\n const usageMetadata =\n emittedUsage && message.usage_metadata != null\n ? undefined\n : message.usage_metadata;\n if (message.usage_metadata != null && !emittedUsage) {\n emittedUsage = true;\n }\n\n return new ChatGenerationChunk({\n text: token,\n generationInfo: chunk.generationInfo,\n message: new AIMessageChunk(\n Object.assign({}, message, {\n content: token,\n usage_metadata: usageMetadata,\n })\n ),\n });\n });\n}\n\nexport async function emitStreamChunkCallback(\n chunk: ChatGenerationChunk,\n runManager?: CallbackManagerForLLMRun\n): Promise<void> {\n await runManager?.handleLLMNewToken(\n chunk.text,\n getStreamChunkTokenIndices(chunk),\n undefined,\n undefined,\n undefined,\n { chunk }\n );\n}\n\nfunction getStreamChunkTokenIndices(\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\nasync function* delayStreamChunks(\n chunks: AsyncGenerator<ChatGenerationChunk>,\n delay?: number,\n signal?: AbortSignal,\n runManager?: CallbackManagerForLLMRun,\n // When provided, de-duplicate repeated scalar metadata just before emitting,\n // so token callbacks and the yielded chunk observe the same cleaned data.\n // Omitted by callers that wrap this stream and finalize downstream (e.g.\n // `ChatOpenRouter`, which needs the raw `finish_reason` as its flush signal\n // and de-duplicates after its own processing).\n seenScalarMetadata?: SeenScalarMetadata\n): AsyncGenerator<ChatGenerationChunk> {\n let lastYieldedAt: number | undefined;\n for await (const chunk of chunks) {\n const outputChunks =\n delay != null && delay > 0 ? splitTextGenerationChunk(chunk) : [chunk];\n for (const outputChunk of outputChunks) {\n signal?.throwIfAborted();\n if (delay != null && delay > 0 && lastYieldedAt != null) {\n const timeSinceLastYield = Date.now() - lastYieldedAt;\n const timeToWait = Math.max(0, delay - timeSinceLastYield);\n if (timeToWait > 0) {\n await sleepWithAbort(timeToWait, signal);\n }\n }\n signal?.throwIfAborted();\n lastYieldedAt = Date.now();\n if (seenScalarMetadata != null) {\n dropRepeatedScalarMetadata(outputChunk, seenScalarMetadata);\n }\n await emitStreamChunkCallback(outputChunk, runManager);\n signal?.throwIfAborted();\n yield outputChunk;\n }\n }\n}\n\nasync function sleepWithAbort(\n delay: number,\n signal?: AbortSignal\n): Promise<void> {\n if (delay <= 0) {\n return;\n }\n signal?.throwIfAborted();\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, delay);\n const onAbort = (): void => {\n clearTimeout(timeout);\n signal?.removeEventListener('abort', onAbort);\n reject(signal?.reason ?? new Error('AbortError: User aborted request.'));\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n if (signal?.aborted === true) {\n onAbort();\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 */\n/**\n * OpenAI strict function schemas require every property to appear in\n * `required`. The optional `intent` label (see `tools/intentArg.ts`) is\n * deliberately NOT required — the same schema is callable from programmatic\n * tool calling — so a tool auto-marked `strict: true` (the non-streaming\n * `json_schema` structured-output path) would be rejected as invalid before\n * execution. That path never streams a live label anyway, so the\n * marker-identified property is dropped there; every other path keeps it.\n */\nfunction stripIntentFromStrictTools<T extends object>(params: T): T {\n const record = params as { tools?: unknown[] };\n const tools = record.tools;\n if (!Array.isArray(tools) || tools.length === 0) {\n return params;\n }\n const nextTools = tools.map((tool) => {\n const candidate = tool as {\n strict?: boolean;\n parameters?: { properties?: Record<string, unknown>; required?: unknown };\n function?: {\n strict?: boolean;\n parameters?: {\n properties?: Record<string, unknown>;\n required?: unknown;\n };\n };\n };\n /** Chat-completions tools nest under `function`; responses-API tools are flat. */\n const holder = candidate.function ?? candidate;\n if (holder.strict !== true) {\n return tool;\n }\n const parameters = holder.parameters;\n const properties = parameters?.properties;\n if (properties == null || !isIntentLabelProperty(properties[INTENT_ARG])) {\n return tool;\n }\n const required = Array.isArray(parameters?.required)\n ? (parameters.required as unknown[])\n : [];\n if (required.includes(INTENT_ARG)) {\n return tool;\n }\n const { [INTENT_ARG]: _omit, ...restProps } = properties;\n const nextParams = { ...parameters, properties: restProps };\n if (candidate.function != null) {\n return {\n ...candidate,\n function: { ...candidate.function, parameters: nextParams },\n };\n }\n return { ...candidate, parameters: nextParams };\n });\n if (nextTools.every((tool, index) => tool === tools[index])) {\n return params;\n }\n return { ...params, tools: nextTools } as T;\n}\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\nconst OFFICIAL_OPENAI_BASE_URL_PATTERN = /^https:\\/\\/api\\.openai\\.com(\\/|$)/;\n\n/**\n * Official OpenAI (api.openai.com) and Azure OpenAI Chat Completions streams\n * emit tool-call deltas strictly sequentially by index: once a delta for a\n * later index appears, a prior index's arguments never change. Stamping this\n * adapter lets the stream handler seal a prior call for eager execution the\n * moment the next call begins. OpenAI-compatible endpoints (custom baseURL)\n * must NOT be stamped — e.g. live Kimi/Moonshot streams revise prior-index\n * args after advancing — so callers gate on the wire endpoint, not the class.\n */\nfunction stampSequentialStreamedToolCallAdapter(\n message: BaseMessageChunk\n): BaseMessageChunk {\n if (\n message instanceof AIMessageChunk &&\n (message.tool_call_chunks?.length ?? 0) > 0\n ) {\n message.response_metadata = {\n ...message.response_metadata,\n [STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY]:\n OPENAI_CHAT_SEQUENTIAL_STREAMED_TOOL_CALL_ADAPTER,\n };\n }\n return message;\n}\n\nfunction isOfficialOpenAIBaseURL(baseURL: string | null | undefined): boolean {\n // The OpenAI SDK falls back to OPENAI_BASE_URL when the client has no\n // explicit baseURL, so an unset constructor value can still route to an\n // OpenAI-compatible endpoint.\n const effectiveBaseURL =\n baseURL != null && baseURL !== '' ? baseURL : process.env.OPENAI_BASE_URL;\n if (effectiveBaseURL == null || effectiveBaseURL === '') {\n return true;\n }\n return OFFICIAL_OPENAI_BASE_URL_PATTERN.test(effectiveBaseURL);\n}\n\nconst AZURE_FIRST_PARTY_BASE_PATH_PATTERN =\n /^https:\\/\\/[^/]+\\.(openai\\.azure\\.com|cognitiveservices\\.azure\\.com|api\\.cognitive\\.microsoft\\.com)(:\\d+)?(\\/|$)/;\n\n/**\n * Azure OpenAI is first-party when requests resolve to an instance-name\n * endpoint or an *.openai.azure.com / *.cognitiveservices.azure.com /\n * regional *.api.cognitive.microsoft.com base path. A custom\n * `clientConfig.baseURL` or a non-Azure `azureOpenAIBasePath` routes through\n * a proxy or Azure-compatible endpoint whose stream contract is unknown, so\n * those are not stamped.\n */\nfunction isFirstPartyAzureEndpoint(args: {\n baseURL: string | null | undefined;\n azureOpenAIBasePath: string | undefined;\n}): boolean {\n if (args.baseURL != null && args.baseURL !== '') {\n return false;\n }\n if (args.azureOpenAIBasePath == null || args.azureOpenAIBasePath === '') {\n return true;\n }\n return AZURE_FIRST_PARTY_BASE_PATH_PATTERN.test(args.azureOpenAIBasePath);\n}\n\nclass LibreChatOpenAICompletions extends OriginalChatOpenAICompletions {\n private includeReasoningContent?: boolean;\n private includeReasoningDetails?: boolean;\n private convertReasoningDetailsToContent?: boolean;\n private preserveToolCacheControl?: boolean;\n private promptCacheExplicit?: boolean;\n private safetyIdentifier?: string;\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 this.preserveToolCacheControl = fields?.preserveToolCacheControl;\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions'],\n extra?: { streaming?: boolean }\n ): ReturnType<OriginalChatOpenAICompletions['invocationParams']> {\n return stripIntentFromStrictTools(\n applyManagedRequestParams(super.invocationParams(options, extra), {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n })\n );\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 this.promptCacheExplicit === true\n ? { ...request, messages: addChatCacheBreakpoints(request.messages) }\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 const message = attachLibreChatDeltaFields(\n super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n ),\n delta\n );\n if (isOfficialOpenAIBaseURL(this.clientConfig.baseURL)) {\n return stampSequentialStreamedToolCallAdapter(message);\n }\n return message;\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 preserveToolCacheControl: this.preserveToolCacheControl,\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 const promptTokensDetailsWithCacheWrite = promptTokensDetails as\n | PromptTokensDetailsWithCacheWrite\n | undefined;\n if (\n promptTokensDetailsWithCacheWrite?.audio_tokens != null ||\n promptTokensDetailsWithCacheWrite?.cached_tokens != null ||\n promptTokensDetailsWithCacheWrite?.cache_write_tokens != null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetailsWithCacheWrite.audio_tokens != null && {\n audio: promptTokensDetailsWithCacheWrite.audio_tokens,\n }),\n ...(promptTokensDetailsWithCacheWrite.cached_tokens != null && {\n cache_read: promptTokensDetailsWithCacheWrite.cached_tokens,\n }),\n ...(promptTokensDetailsWithCacheWrite.cache_write_tokens != null && {\n cache_creation: promptTokensDetailsWithCacheWrite.cache_write_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 preserveToolCacheControl: this.preserveToolCacheControl,\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 promptTokenDetails = usage.prompt_tokens_details as\n | PromptTokensDetailsWithCacheWrite\n | undefined;\n const inputTokenDetails = {\n ...(promptTokenDetails?.audio_tokens != null && {\n audio: promptTokenDetails.audio_tokens,\n }),\n ...(promptTokenDetails?.cached_tokens != null && {\n cache_read: promptTokenDetails.cached_tokens,\n }),\n ...(promptTokenDetails?.cache_write_tokens != null && {\n cache_creation: promptTokenDetails.cache_write_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 private promptCacheExplicit?: boolean;\n private responsesPromptCache?: boolean;\n private responsesPromptCacheTtl?: PromptCacheTtl;\n private safetyIdentifier?: string;\n\n constructor(fields?: LibreChatOpenAIFields) {\n super(fields);\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.responsesPromptCache = fields?.responsesPromptCache;\n this.responsesPromptCacheTtl = fields?.responsesPromptCacheTtl;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions']\n ): ReturnType<OriginalChatOpenAIResponses['invocationParams']> {\n const cacheOptions = options as\n | {\n promptCache?: boolean;\n promptCacheTtl?: PromptCacheTtl;\n }\n | undefined;\n const promptCache = cacheOptions?.promptCache ?? this.responsesPromptCache;\n const cacheControl =\n promptCache === true\n ? buildAnthropicCacheControl(\n resolvePromptCacheTtl(\n cacheOptions?.promptCacheTtl ?? this.responsesPromptCacheTtl\n )\n )\n : undefined;\n const baseParams = applyManagedRequestParams(\n super.invocationParams(options),\n {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n }\n );\n const params = {\n ...baseParams,\n ...(baseParams.tools != null && {\n tools: stripResponsesToolCacheControl(baseParams.tools),\n }),\n ...(cacheControl != null && {\n cache_control: cacheControl,\n }),\n };\n if (shouldIncludeEncryptedReasoning(this.model, params)) {\n params.include = [\n ...new Set([\n ...(params.include ?? []),\n 'reasoning.encrypted_content' as const,\n ]),\n ];\n }\n return stripIntentFromStrictTools(params);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>>;\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Responses.Response>;\n async completionWithRetry(\n request: ResponsesRequest,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<ResponsesResult> {\n const managedRequest = {\n ...request,\n input:\n this.promptCacheExplicit === true\n ? addResponseCacheBreakpoints(request.input)\n : request.input,\n };\n const result = await super.completionWithRetry(\n managedRequest as OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions\n );\n return isResponsesStream(result)\n ? result\n : attachCacheWriteMetadata(result);\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const result = await super._generate(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\n for (const generation of result.generations) {\n attachCacheWriteUsage(generation.message);\n }\n return result;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const projectedMessages = projectOpenAIResponsesProviderMessages(messages);\n const stream = await this.completionWithRetry(\n {\n ...this.invocationParams(options),\n input: convertMessagesToResponsesInput({\n messages: projectedMessages,\n zdrEnabled: this.zdrEnabled ?? false,\n model: this.model,\n }),\n stream: true,\n },\n options\n );\n yield* convertLibreChatResponsesStream(stream, options, runManager);\n }\n\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n yield* super._streamChatModelEvents(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\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\nclass LibreChatAzureOpenAICompletions extends OriginalAzureChatOpenAICompletions {\n private promptCacheExplicit?: boolean;\n private safetyIdentifier?: string;\n\n constructor(fields?: LibreChatAzureOpenAIFields) {\n super(fields);\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions'],\n extra?: { streaming?: boolean }\n ): ReturnType<OriginalAzureChatOpenAICompletions['invocationParams']> {\n return stripIntentFromStrictTools(\n applyManagedRequestParams(super.invocationParams(options, extra), {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n })\n );\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n protected _convertCompletionsDeltaToBaseMessageChunk(\n delta: Record<string, unknown>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n const message = super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n );\n if (\n isFirstPartyAzureEndpoint({\n baseURL: this.clientConfig.baseURL,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n })\n ) {\n // First-party Azure OpenAI: same sequential-by-index stream contract\n // as api.openai.com.\n return stampSequentialStreamedToolCallAdapter(message);\n }\n return message;\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 this.promptCacheExplicit === true\n ? { ...request, messages: addChatCacheBreakpoints(request.messages) }\n : request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n}\n\nclass LibreChatAzureOpenAIResponses extends OriginalAzureChatOpenAIResponses {\n private promptCacheExplicit?: boolean;\n private safetyIdentifier?: string;\n\n constructor(fields?: LibreChatAzureOpenAIFields) {\n super(fields);\n this.promptCacheExplicit = fields?.promptCacheExplicit;\n this.safetyIdentifier = fields?.safety_identifier;\n }\n\n invocationParams(\n options?: this['ParsedCallOptions']\n ): ReturnType<OriginalAzureChatOpenAIResponses['invocationParams']> {\n const params = applyManagedRequestParams(super.invocationParams(options), {\n promptCacheExplicit: this.promptCacheExplicit,\n safetyIdentifier: this.safetyIdentifier,\n });\n if (shouldIncludeEncryptedReasoning(this.model, params)) {\n params.include = [\n ...new Set([\n ...(params.include ?? []),\n 'reasoning.encrypted_content' as const,\n ]),\n ];\n }\n return stripIntentFromStrictTools(params);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Responses.ResponseStreamEvent>>;\n async completionWithRetry(\n request: OpenAIClient.Responses.ResponseCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIClient.Responses.Response>;\n async completionWithRetry(\n request: ResponsesRequest,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<ResponsesResult> {\n const managedRequest = {\n ...request,\n input:\n this.promptCacheExplicit === true\n ? addResponseCacheBreakpoints(request.input)\n : request.input,\n };\n const result = await super.completionWithRetry(\n managedRequest as OpenAIClient.Responses.ResponseCreateParamsStreaming,\n requestOptions\n );\n return isResponsesStream(result)\n ? result\n : attachCacheWriteMetadata(result);\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const result = await super._generate(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\n for (const generation of result.generations) {\n attachCacheWriteUsage(generation.message);\n }\n return result;\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const projectedMessages = projectOpenAIResponsesProviderMessages(messages);\n const stream = await this.completionWithRetry(\n {\n ...this.invocationParams(options),\n input: convertMessagesToResponsesInput({\n messages: projectedMessages,\n zdrEnabled: this.zdrEnabled ?? false,\n model: this.model,\n }),\n stream: true,\n },\n options\n );\n yield* convertLibreChatResponsesStream(stream, options, runManager);\n }\n\n async *_streamChatModelEvents(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatModelStreamEvent> {\n yield* super._streamChatModelEvents(\n projectOpenAIResponsesProviderMessages(messages),\n options,\n runManager\n );\n }\n\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\n );\n }\n\n /**\n * Raw variant that skips scalar-metadata de-duplication. Used by subclasses\n * (e.g. `ChatOpenRouter`) that read `finish_reason` as a control signal and\n * must de-duplicate only after their own finalization.\n */\n protected _streamRawResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n return delayStreamChunks(\n super._streamResponseChunks(messages, options, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\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 return getStreamChunkTokenIndices(chunk);\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, undefined),\n this._lc_stream_delay,\n options.signal,\n runManager,\n new Map()\n );\n }\n}\n"],"mappings":"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"}