@librechat/agents 3.2.31 → 3.2.33

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 (582) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/cjs/agents/AgentContext.cjs +844 -1046
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/constants.cjs +13 -13
  5. package/dist/cjs/common/constants.cjs.map +1 -1
  6. package/dist/cjs/common/enum.cjs +233 -240
  7. package/dist/cjs/common/enum.cjs.map +1 -1
  8. package/dist/cjs/common/index.cjs +2 -0
  9. package/dist/cjs/events.cjs +121 -169
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1389 -1807
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/index.cjs +2 -0
  16. package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
  17. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  18. package/dist/cjs/hitl/index.cjs +1 -0
  19. package/dist/cjs/hooks/HookRegistry.cjs +176 -202
  20. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  21. package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
  22. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  23. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
  24. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  25. package/dist/cjs/hooks/executeHooks.cjs +227 -282
  26. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  27. package/dist/cjs/hooks/index.cjs +6 -0
  28. package/dist/cjs/hooks/matchers.cjs +196 -230
  29. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  30. package/dist/cjs/hooks/types.cjs +24 -24
  31. package/dist/cjs/hooks/types.cjs.map +1 -1
  32. package/dist/cjs/instrumentation.cjs +110 -137
  33. package/dist/cjs/instrumentation.cjs.map +1 -1
  34. package/dist/cjs/langchain/google-common.cjs +0 -3
  35. package/dist/cjs/langchain/index.cjs +80 -43
  36. package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
  37. package/dist/cjs/langchain/messages/tool.cjs +0 -3
  38. package/dist/cjs/langchain/messages.cjs +35 -18
  39. package/dist/cjs/langchain/openai.cjs +0 -3
  40. package/dist/cjs/langchain/prompts.cjs +5 -8
  41. package/dist/cjs/langchain/runnables.cjs +11 -10
  42. package/dist/cjs/langchain/tools.cjs +14 -11
  43. package/dist/cjs/langchain/utils/env.cjs +5 -8
  44. package/dist/cjs/langfuse.cjs +60 -79
  45. package/dist/cjs/langfuse.cjs.map +1 -1
  46. package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
  47. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  48. package/dist/cjs/llm/anthropic/index.cjs +432 -562
  49. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  50. package/dist/cjs/llm/anthropic/types.cjs +23 -47
  51. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -696
  53. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -252
  55. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  56. package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
  57. package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
  58. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  59. package/dist/cjs/llm/bedrock/index.cjs +195 -240
  60. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  61. package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
  62. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
  64. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
  65. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +105 -149
  67. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  68. package/dist/cjs/llm/fake.cjs +86 -96
  69. package/dist/cjs/llm/fake.cjs.map +1 -1
  70. package/dist/cjs/llm/google/index.cjs +183 -237
  71. package/dist/cjs/llm/google/index.cjs.map +1 -1
  72. package/dist/cjs/llm/google/utils/common.cjs +398 -674
  73. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  74. package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
  75. package/dist/cjs/llm/init.cjs +44 -53
  76. package/dist/cjs/llm/init.cjs.map +1 -1
  77. package/dist/cjs/llm/invoke.cjs +142 -182
  78. package/dist/cjs/llm/invoke.cjs.map +1 -1
  79. package/dist/cjs/llm/openai/index.cjs +991 -1276
  80. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  81. package/dist/cjs/llm/openai/utils/index.cjs +189 -316
  82. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  83. package/dist/cjs/llm/openrouter/index.cjs +102 -153
  84. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  85. package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
  86. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  87. package/dist/cjs/llm/providers.cjs +29 -37
  88. package/dist/cjs/llm/providers.cjs.map +1 -1
  89. package/dist/cjs/llm/request.cjs +20 -33
  90. package/dist/cjs/llm/request.cjs.map +1 -1
  91. package/dist/cjs/llm/vertexai/index.cjs +427 -453
  92. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  93. package/dist/cjs/main.cjs +547 -528
  94. package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
  95. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  96. package/dist/cjs/messages/cache.cjs +308 -401
  97. package/dist/cjs/messages/cache.cjs.map +1 -1
  98. package/dist/cjs/messages/content.cjs +36 -49
  99. package/dist/cjs/messages/content.cjs.map +1 -1
  100. package/dist/cjs/messages/contextPruning.cjs +112 -145
  101. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  102. package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
  103. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  104. package/dist/cjs/messages/core.cjs +256 -397
  105. package/dist/cjs/messages/core.cjs.map +1 -1
  106. package/dist/cjs/messages/format.cjs +904 -1382
  107. package/dist/cjs/messages/format.cjs.map +1 -1
  108. package/dist/cjs/messages/ids.cjs +16 -20
  109. package/dist/cjs/messages/ids.cjs.map +1 -1
  110. package/dist/cjs/messages/index.cjs +12 -0
  111. package/dist/cjs/messages/langchain.cjs +18 -18
  112. package/dist/cjs/messages/langchain.cjs.map +1 -1
  113. package/dist/cjs/messages/prune.cjs +1054 -1517
  114. package/dist/cjs/messages/prune.cjs.map +1 -1
  115. package/dist/cjs/messages/recency.cjs +77 -95
  116. package/dist/cjs/messages/recency.cjs.map +1 -1
  117. package/dist/cjs/messages/reducer.cjs +63 -78
  118. package/dist/cjs/messages/reducer.cjs.map +1 -1
  119. package/dist/cjs/messages/tools.cjs +51 -79
  120. package/dist/cjs/messages/tools.cjs.map +1 -1
  121. package/dist/cjs/openai/index.cjs +171 -217
  122. package/dist/cjs/openai/index.cjs.map +1 -1
  123. package/dist/cjs/responses/index.cjs +302 -391
  124. package/dist/cjs/responses/index.cjs.map +1 -1
  125. package/dist/cjs/run.cjs +903 -1113
  126. package/dist/cjs/run.cjs.map +1 -1
  127. package/dist/cjs/session/AgentSession.cjs +805 -986
  128. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  129. package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
  130. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  131. package/dist/cjs/session/handlers.cjs +192 -208
  132. package/dist/cjs/session/handlers.cjs.map +1 -1
  133. package/dist/cjs/session/ids.cjs +9 -10
  134. package/dist/cjs/session/ids.cjs.map +1 -1
  135. package/dist/cjs/session/index.cjs +4 -0
  136. package/dist/cjs/session/messageSerialization.cjs +94 -156
  137. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  138. package/dist/cjs/splitStream.cjs +147 -206
  139. package/dist/cjs/splitStream.cjs.map +1 -1
  140. package/dist/cjs/stream.cjs +856 -1344
  141. package/dist/cjs/stream.cjs.map +1 -1
  142. package/dist/cjs/summarization/index.cjs +57 -101
  143. package/dist/cjs/summarization/index.cjs.map +1 -1
  144. package/dist/cjs/summarization/node.cjs +643 -796
  145. package/dist/cjs/summarization/node.cjs.map +1 -1
  146. package/dist/cjs/tools/BashExecutor.cjs +110 -136
  147. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  148. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
  149. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  150. package/dist/cjs/tools/Calculator.cjs +36 -57
  151. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  152. package/dist/cjs/tools/CodeExecutor.cjs +126 -168
  153. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  154. package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
  155. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  156. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
  157. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  158. package/dist/cjs/tools/ReadFile.cjs +17 -20
  159. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  160. package/dist/cjs/tools/SkillTool.cjs +26 -27
  161. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  162. package/dist/cjs/tools/SubagentTool.cjs +59 -61
  163. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  164. package/dist/cjs/tools/ToolNode.cjs +2109 -2686
  165. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  166. package/dist/cjs/tools/ToolSearch.cjs +663 -825
  167. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  168. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
  169. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  170. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
  171. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  172. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
  173. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  174. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
  175. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  176. package/dist/cjs/tools/cloudflare/index.cjs +4 -0
  177. package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
  178. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  179. package/dist/cjs/tools/handlers.cjs +200 -262
  180. package/dist/cjs/tools/handlers.cjs.map +1 -1
  181. package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
  182. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  183. package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
  184. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  185. package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
  186. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  187. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
  188. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  189. package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
  190. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  191. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
  192. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  193. package/dist/cjs/tools/local/attachments.cjs +108 -165
  194. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  195. package/dist/cjs/tools/local/bashAst.cjs +99 -113
  196. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  197. package/dist/cjs/tools/local/editStrategies.cjs +126 -169
  198. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  199. package/dist/cjs/tools/local/index.cjs +12 -0
  200. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
  201. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  202. package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
  203. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  204. package/dist/cjs/tools/local/textEncoding.cjs +25 -23
  205. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  206. package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
  207. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  208. package/dist/cjs/tools/ptcTimeout.cjs +27 -47
  209. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  210. package/dist/cjs/tools/schema.cjs +24 -23
  211. package/dist/cjs/tools/schema.cjs.map +1 -1
  212. package/dist/cjs/tools/search/anthropic.cjs +24 -33
  213. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  214. package/dist/cjs/tools/search/content.cjs +95 -137
  215. package/dist/cjs/tools/search/content.cjs.map +1 -1
  216. package/dist/cjs/tools/search/firecrawl.cjs +141 -172
  217. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  218. package/dist/cjs/tools/search/format.cjs +128 -196
  219. package/dist/cjs/tools/search/format.cjs.map +1 -1
  220. package/dist/cjs/tools/search/highlights.cjs +165 -232
  221. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  222. package/dist/cjs/tools/search/index.cjs +2 -0
  223. package/dist/cjs/tools/search/rerankers.cjs +151 -174
  224. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  225. package/dist/cjs/tools/search/schema.cjs +40 -39
  226. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  227. package/dist/cjs/tools/search/search.cjs +428 -530
  228. package/dist/cjs/tools/search/search.cjs.map +1 -1
  229. package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
  230. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  231. package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
  232. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/tavily-search.cjs +295 -359
  234. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/tool.cjs +260 -299
  236. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  237. package/dist/cjs/tools/search/utils.cjs +74 -117
  238. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  239. package/dist/cjs/tools/skillCatalog.cjs +54 -72
  240. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  241. package/dist/cjs/tools/streamedToolCallSeals.cjs +19 -36
  242. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  243. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
  244. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  245. package/dist/cjs/tools/subagent/index.cjs +1 -0
  246. package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
  247. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  248. package/dist/cjs/utils/callbacks.cjs +11 -21
  249. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  250. package/dist/cjs/utils/errors.cjs +70 -95
  251. package/dist/cjs/utils/errors.cjs.map +1 -1
  252. package/dist/cjs/utils/events.cjs +32 -42
  253. package/dist/cjs/utils/events.cjs.map +1 -1
  254. package/dist/cjs/utils/graph.cjs +8 -12
  255. package/dist/cjs/utils/graph.cjs.map +1 -1
  256. package/dist/cjs/utils/handlers.cjs +60 -82
  257. package/dist/cjs/utils/handlers.cjs.map +1 -1
  258. package/dist/cjs/utils/index.cjs +9 -0
  259. package/dist/cjs/utils/llm.cjs +19 -27
  260. package/dist/cjs/utils/llm.cjs.map +1 -1
  261. package/dist/cjs/utils/misc.cjs +30 -46
  262. package/dist/cjs/utils/misc.cjs.map +1 -1
  263. package/dist/cjs/utils/run.cjs +50 -66
  264. package/dist/cjs/utils/run.cjs.map +1 -1
  265. package/dist/cjs/utils/schema.cjs +11 -19
  266. package/dist/cjs/utils/schema.cjs.map +1 -1
  267. package/dist/cjs/utils/title.cjs +71 -106
  268. package/dist/cjs/utils/title.cjs.map +1 -1
  269. package/dist/cjs/utils/tokens.cjs +186 -283
  270. package/dist/cjs/utils/tokens.cjs.map +1 -1
  271. package/dist/cjs/utils/truncation.cjs +95 -114
  272. package/dist/cjs/utils/truncation.cjs.map +1 -1
  273. package/dist/esm/agents/AgentContext.mjs +844 -1044
  274. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  275. package/dist/esm/common/constants.mjs +13 -11
  276. package/dist/esm/common/constants.mjs.map +1 -1
  277. package/dist/esm/common/enum.mjs +221 -238
  278. package/dist/esm/common/enum.mjs.map +1 -1
  279. package/dist/esm/common/index.mjs +3 -0
  280. package/dist/esm/events.mjs +121 -167
  281. package/dist/esm/events.mjs.map +1 -1
  282. package/dist/esm/graphs/Graph.mjs +1388 -1804
  283. package/dist/esm/graphs/Graph.mjs.map +1 -1
  284. package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
  285. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  286. package/dist/esm/graphs/index.mjs +3 -0
  287. package/dist/esm/hitl/askUserQuestion.mjs +60 -60
  288. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  289. package/dist/esm/hitl/index.mjs +2 -0
  290. package/dist/esm/hooks/HookRegistry.mjs +176 -200
  291. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  292. package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
  293. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  294. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
  295. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  296. package/dist/esm/hooks/executeHooks.mjs +227 -280
  297. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  298. package/dist/esm/hooks/index.mjs +7 -0
  299. package/dist/esm/hooks/matchers.mjs +196 -228
  300. package/dist/esm/hooks/matchers.mjs.map +1 -1
  301. package/dist/esm/hooks/types.mjs +24 -22
  302. package/dist/esm/hooks/types.mjs.map +1 -1
  303. package/dist/esm/instrumentation.mjs +109 -132
  304. package/dist/esm/instrumentation.mjs.map +1 -1
  305. package/dist/esm/langchain/google-common.mjs +1 -2
  306. package/dist/esm/langchain/index.mjs +5 -5
  307. package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
  308. package/dist/esm/langchain/messages/tool.mjs +1 -2
  309. package/dist/esm/langchain/messages.mjs +2 -2
  310. package/dist/esm/langchain/openai.mjs +1 -2
  311. package/dist/esm/langchain/prompts.mjs +2 -2
  312. package/dist/esm/langchain/runnables.mjs +2 -2
  313. package/dist/esm/langchain/tools.mjs +2 -2
  314. package/dist/esm/langchain/utils/env.mjs +2 -2
  315. package/dist/esm/langfuse.mjs +60 -76
  316. package/dist/esm/langfuse.mjs.map +1 -1
  317. package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
  318. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  319. package/dist/esm/llm/anthropic/index.mjs +432 -559
  320. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  321. package/dist/esm/llm/anthropic/types.mjs +23 -45
  322. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  323. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -690
  324. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  325. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -249
  326. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  327. package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
  328. package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
  329. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  330. package/dist/esm/llm/bedrock/index.mjs +195 -238
  331. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  332. package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
  333. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  334. package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
  335. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
  336. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  337. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +105 -147
  338. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  339. package/dist/esm/llm/fake.mjs +86 -94
  340. package/dist/esm/llm/fake.mjs.map +1 -1
  341. package/dist/esm/llm/google/index.mjs +183 -235
  342. package/dist/esm/llm/google/index.mjs.map +1 -1
  343. package/dist/esm/llm/google/utils/common.mjs +397 -666
  344. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  345. package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
  346. package/dist/esm/llm/init.mjs +44 -51
  347. package/dist/esm/llm/init.mjs.map +1 -1
  348. package/dist/esm/llm/invoke.mjs +142 -180
  349. package/dist/esm/llm/invoke.mjs.map +1 -1
  350. package/dist/esm/llm/openai/index.mjs +991 -1271
  351. package/dist/esm/llm/openai/index.mjs.map +1 -1
  352. package/dist/esm/llm/openai/utils/index.mjs +188 -312
  353. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  354. package/dist/esm/llm/openrouter/index.mjs +102 -151
  355. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  356. package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
  357. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  358. package/dist/esm/llm/providers.mjs +29 -34
  359. package/dist/esm/llm/providers.mjs.map +1 -1
  360. package/dist/esm/llm/request.mjs +20 -31
  361. package/dist/esm/llm/request.mjs.map +1 -1
  362. package/dist/esm/llm/vertexai/index.mjs +427 -449
  363. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  364. package/dist/esm/main.mjs +99 -87
  365. package/dist/esm/messages/anthropicToolCache.mjs +68 -117
  366. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  367. package/dist/esm/messages/cache.mjs +308 -399
  368. package/dist/esm/messages/cache.mjs.map +1 -1
  369. package/dist/esm/messages/content.mjs +36 -47
  370. package/dist/esm/messages/content.mjs.map +1 -1
  371. package/dist/esm/messages/contextPruning.mjs +112 -143
  372. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  373. package/dist/esm/messages/contextPruningSettings.mjs +36 -44
  374. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  375. package/dist/esm/messages/core.mjs +254 -393
  376. package/dist/esm/messages/core.mjs.map +1 -1
  377. package/dist/esm/messages/format.mjs +902 -1378
  378. package/dist/esm/messages/format.mjs.map +1 -1
  379. package/dist/esm/messages/ids.mjs +16 -18
  380. package/dist/esm/messages/ids.mjs.map +1 -1
  381. package/dist/esm/messages/index.mjs +13 -0
  382. package/dist/esm/messages/langchain.mjs +18 -16
  383. package/dist/esm/messages/langchain.mjs.map +1 -1
  384. package/dist/esm/messages/prune.mjs +1053 -1514
  385. package/dist/esm/messages/prune.mjs.map +1 -1
  386. package/dist/esm/messages/recency.mjs +77 -93
  387. package/dist/esm/messages/recency.mjs.map +1 -1
  388. package/dist/esm/messages/reducer.mjs +63 -76
  389. package/dist/esm/messages/reducer.mjs.map +1 -1
  390. package/dist/esm/messages/tools.mjs +49 -75
  391. package/dist/esm/messages/tools.mjs.map +1 -1
  392. package/dist/esm/openai/index.mjs +170 -215
  393. package/dist/esm/openai/index.mjs.map +1 -1
  394. package/dist/esm/responses/index.mjs +301 -389
  395. package/dist/esm/responses/index.mjs.map +1 -1
  396. package/dist/esm/run.mjs +903 -1111
  397. package/dist/esm/run.mjs.map +1 -1
  398. package/dist/esm/session/AgentSession.mjs +806 -985
  399. package/dist/esm/session/AgentSession.mjs.map +1 -1
  400. package/dist/esm/session/JsonlSessionStore.mjs +326 -407
  401. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  402. package/dist/esm/session/handlers.mjs +192 -206
  403. package/dist/esm/session/handlers.mjs.map +1 -1
  404. package/dist/esm/session/ids.mjs +9 -8
  405. package/dist/esm/session/ids.mjs.map +1 -1
  406. package/dist/esm/session/index.mjs +5 -0
  407. package/dist/esm/session/messageSerialization.mjs +94 -154
  408. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  409. package/dist/esm/splitStream.mjs +147 -204
  410. package/dist/esm/splitStream.mjs.map +1 -1
  411. package/dist/esm/stream.mjs +854 -1341
  412. package/dist/esm/stream.mjs.map +1 -1
  413. package/dist/esm/summarization/index.mjs +57 -99
  414. package/dist/esm/summarization/index.mjs.map +1 -1
  415. package/dist/esm/summarization/node.mjs +640 -790
  416. package/dist/esm/summarization/node.mjs.map +1 -1
  417. package/dist/esm/tools/BashExecutor.mjs +103 -129
  418. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  419. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
  420. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  421. package/dist/esm/tools/Calculator.mjs +34 -36
  422. package/dist/esm/tools/Calculator.mjs.map +1 -1
  423. package/dist/esm/tools/CodeExecutor.mjs +123 -164
  424. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  425. package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
  426. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  427. package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
  428. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  429. package/dist/esm/tools/ReadFile.mjs +17 -18
  430. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  431. package/dist/esm/tools/SkillTool.mjs +26 -25
  432. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  433. package/dist/esm/tools/SubagentTool.mjs +59 -59
  434. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  435. package/dist/esm/tools/ToolNode.mjs +2107 -2684
  436. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  437. package/dist/esm/tools/ToolSearch.mjs +659 -804
  438. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  439. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
  440. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  441. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
  442. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  443. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
  444. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  445. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
  446. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  447. package/dist/esm/tools/cloudflare/index.mjs +5 -0
  448. package/dist/esm/tools/eagerEventExecution.mjs +75 -96
  449. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  450. package/dist/esm/tools/handlers.mjs +200 -260
  451. package/dist/esm/tools/handlers.mjs.map +1 -1
  452. package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
  453. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  454. package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
  455. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  456. package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
  457. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  458. package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
  459. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  460. package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
  461. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  462. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
  463. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  464. package/dist/esm/tools/local/attachments.mjs +108 -163
  465. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  466. package/dist/esm/tools/local/bashAst.mjs +99 -111
  467. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  468. package/dist/esm/tools/local/editStrategies.mjs +126 -167
  469. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  470. package/dist/esm/tools/local/index.mjs +13 -0
  471. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
  472. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  473. package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
  474. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  475. package/dist/esm/tools/local/textEncoding.mjs +25 -21
  476. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  477. package/dist/esm/tools/local/workspaceFS.mjs +38 -44
  478. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  479. package/dist/esm/tools/ptcTimeout.mjs +27 -42
  480. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  481. package/dist/esm/tools/schema.mjs +24 -21
  482. package/dist/esm/tools/schema.mjs.map +1 -1
  483. package/dist/esm/tools/search/anthropic.mjs +24 -31
  484. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  485. package/dist/esm/tools/search/content.mjs +93 -116
  486. package/dist/esm/tools/search/content.mjs.map +1 -1
  487. package/dist/esm/tools/search/firecrawl.mjs +139 -169
  488. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  489. package/dist/esm/tools/search/format.mjs +128 -194
  490. package/dist/esm/tools/search/format.mjs.map +1 -1
  491. package/dist/esm/tools/search/highlights.mjs +165 -230
  492. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  493. package/dist/esm/tools/search/index.mjs +3 -0
  494. package/dist/esm/tools/search/rerankers.mjs +149 -168
  495. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  496. package/dist/esm/tools/search/schema.mjs +39 -37
  497. package/dist/esm/tools/search/schema.mjs.map +1 -1
  498. package/dist/esm/tools/search/search.mjs +426 -528
  499. package/dist/esm/tools/search/search.mjs.map +1 -1
  500. package/dist/esm/tools/search/serper-scraper.mjs +104 -124
  501. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  502. package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
  503. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  504. package/dist/esm/tools/search/tavily-search.mjs +293 -357
  505. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  506. package/dist/esm/tools/search/tool.mjs +259 -297
  507. package/dist/esm/tools/search/tool.mjs.map +1 -1
  508. package/dist/esm/tools/search/utils.mjs +74 -115
  509. package/dist/esm/tools/search/utils.mjs.map +1 -1
  510. package/dist/esm/tools/skillCatalog.mjs +54 -70
  511. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  512. package/dist/esm/tools/streamedToolCallSeals.mjs +19 -31
  513. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  514. package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
  515. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  516. package/dist/esm/tools/subagent/index.mjs +2 -0
  517. package/dist/esm/tools/toolOutputReferences.mjs +523 -624
  518. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  519. package/dist/esm/utils/callbacks.mjs +11 -19
  520. package/dist/esm/utils/callbacks.mjs.map +1 -1
  521. package/dist/esm/utils/errors.mjs +70 -93
  522. package/dist/esm/utils/errors.mjs.map +1 -1
  523. package/dist/esm/utils/events.mjs +32 -40
  524. package/dist/esm/utils/events.mjs.map +1 -1
  525. package/dist/esm/utils/graph.mjs +8 -10
  526. package/dist/esm/utils/graph.mjs.map +1 -1
  527. package/dist/esm/utils/handlers.mjs +60 -80
  528. package/dist/esm/utils/handlers.mjs.map +1 -1
  529. package/dist/esm/utils/index.mjs +10 -0
  530. package/dist/esm/utils/llm.mjs +19 -25
  531. package/dist/esm/utils/llm.mjs.map +1 -1
  532. package/dist/esm/utils/misc.mjs +30 -44
  533. package/dist/esm/utils/misc.mjs.map +1 -1
  534. package/dist/esm/utils/run.mjs +50 -64
  535. package/dist/esm/utils/run.mjs.map +1 -1
  536. package/dist/esm/utils/schema.mjs +11 -17
  537. package/dist/esm/utils/schema.mjs.map +1 -1
  538. package/dist/esm/utils/title.mjs +71 -104
  539. package/dist/esm/utils/title.mjs.map +1 -1
  540. package/dist/esm/utils/tokens.mjs +186 -281
  541. package/dist/esm/utils/tokens.mjs.map +1 -1
  542. package/dist/esm/utils/truncation.mjs +95 -112
  543. package/dist/esm/utils/truncation.mjs.map +1 -1
  544. package/dist/types/messages/format.d.ts +5 -0
  545. package/dist/types/tools/search/tool.d.ts +17 -0
  546. package/dist/types/tools/search/types.d.ts +4 -0
  547. package/package.json +11 -17
  548. package/src/llm/anthropic/llm.spec.ts +36 -0
  549. package/src/llm/anthropic/utils/message_inputs.ts +45 -3
  550. package/src/llm/anthropic/utils/message_outputs.ts +6 -2
  551. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +186 -0
  552. package/src/messages/cache.test.ts +122 -0
  553. package/src/messages/cache.ts +25 -1
  554. package/src/messages/format.ts +9 -0
  555. package/src/messages/formatAgentMessages.skills.test.ts +100 -0
  556. package/src/tools/search/highlights.ts +9 -1
  557. package/src/tools/search/search.ts +41 -3
  558. package/src/tools/search/source-processing.test.ts +373 -0
  559. package/src/tools/search/tool.ts +22 -2
  560. package/src/tools/search/types.ts +4 -0
  561. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  562. package/dist/cjs/langchain/index.cjs.map +0 -1
  563. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  564. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  565. package/dist/cjs/langchain/messages.cjs.map +0 -1
  566. package/dist/cjs/langchain/openai.cjs.map +0 -1
  567. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  568. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  569. package/dist/cjs/langchain/tools.cjs.map +0 -1
  570. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  571. package/dist/cjs/main.cjs.map +0 -1
  572. package/dist/esm/langchain/google-common.mjs.map +0 -1
  573. package/dist/esm/langchain/index.mjs.map +0 -1
  574. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  575. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  576. package/dist/esm/langchain/messages.mjs.map +0 -1
  577. package/dist/esm/langchain/openai.mjs.map +0 -1
  578. package/dist/esm/langchain/prompts.mjs.map +0 -1
  579. package/dist/esm/langchain/runnables.mjs.map +0 -1
  580. package/dist/esm/langchain/tools.mjs.map +0 -1
  581. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  582. package/dist/esm/main.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/llm/openai/index.ts"],"sourcesContent":["import { AzureOpenAI as AzureOpenAIClient } from 'openai';\nimport { ChatXAI as OriginalChatXAI } from '@langchain/xai';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { 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 getHeadersWithUserAgent,\n ChatOpenAI as OriginalChatOpenAI,\n ChatOpenAIResponses as OriginalChatOpenAIResponses,\n ChatOpenAICompletions as OriginalChatOpenAICompletions,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n AzureChatOpenAIResponses as OriginalAzureChatOpenAIResponses,\n AzureChatOpenAICompletions as OriginalAzureChatOpenAICompletions,\n} from '@langchain/openai';\nimport type {\n BaseMessage,\n BaseMessageChunk,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { ChatGeneration, ChatResult } from '@langchain/core/outputs';\nimport type { ChatXAIInput } from '@langchain/xai';\nimport type * as t from '@langchain/openai';\nimport type { HeaderValue, HeadersLike } from './types';\nimport { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';\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};\ntype LibreChatAzureOpenAIFields = t.AzureOpenAIInput & {\n _lc_stream_delay?: number;\n};\ntype ReasoningCallOptions = {\n reasoning?: OpenAIClient.Reasoning;\n reasoningEffort?: OpenAIClient.Reasoning['effort'];\n};\ntype OpenAIDeltaWithLibreChatFields = Record<string, unknown> & {\n reasoning?: unknown;\n reasoning_details?: unknown;\n provider_specific_fields?: unknown;\n};\ntype OpenAIClientOwner = {\n client?: OpenAIClient;\n clientConfig: OpenAIClientConfig;\n timeout?: number;\n};\ntype AbortableOpenAIClient = CustomOpenAIClient | CustomAzureOpenAIClient;\ntype OpenAIClientDelegate = {\n client?: AbortableOpenAIClient;\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions;\n};\ntype OpenAIChatCompletion = OpenAIClient.Chat.Completions.ChatCompletion;\ntype OpenAIChatCompletionChunk =\n OpenAIClient.Chat.Completions.ChatCompletionChunk;\ntype OpenAIChatCompletionStreamItem =\n | OpenAIChatCompletionChunk\n | {\n event: string;\n data?: unknown;\n };\ntype OpenAIChatCompletionRequest =\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming;\ntype OpenAIChatCompletionResult =\n | AsyncIterable<OpenAIChatCompletionChunk>\n | OpenAIChatCompletion;\ntype 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>;\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): 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 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 */\nexport function _convertToOpenAITool(\n tool: BindToolsInput,\n fields?: {\n /**\n * If `true`, model output is guaranteed to exactly match the JSON Schema\n * provided in the function definition.\n */\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n let toolDef: OpenAIClient.ChatCompletionTool | undefined;\n\n if (isLangChainTool(tool)) {\n toolDef = convertToOpenAITool(tool);\n } else {\n toolDef = tool as ToolDefinition;\n }\n\n if (fields?.strict !== undefined) {\n toolDef.function.strict = fields.strict;\n }\n\n return toolDef;\n}\nexport class CustomOpenAIClient extends OpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\nexport class CustomAzureOpenAIClient extends AzureOpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\n\nclass LibreChatOpenAICompletions extends OriginalChatOpenAICompletions {\n private includeReasoningContent?: boolean;\n private includeReasoningDetails?: boolean;\n private convertReasoningDetailsToContent?: boolean;\n\n constructor(fields?: LibreChatOpenAIFields) {\n super(fields);\n this.includeReasoningContent = fields?.includeReasoningContent;\n this.includeReasoningDetails = fields?.includeReasoningDetails;\n this.convertReasoningDetailsToContent =\n fields?.convertReasoningDetailsToContent;\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n\n protected _convertCompletionsDeltaToBaseMessageChunk(\n delta: Record<string, unknown>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return attachLibreChatDeltaFields(\n super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n ),\n delta\n );\n }\n\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return attachLibreChatMessageFields(\n super._convertCompletionsMessageToBaseMessage(message, rawResponse),\n message as unknown as Record<string, unknown>\n );\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (\n this.includeReasoningContent !== true &&\n this.includeReasoningDetails !== true\n ) {\n return super._generate(messages, options, runManager);\n }\n\n options.signal?.throwIfAborted();\n const usageMetadata: Partial<UsageMetadata> = {};\n const params = this.invocationParams(options);\n const messagesMapped = _convertMessagesToOpenAIParams(\n messages,\n this.model,\n {\n includeReasoningContent: this.includeReasoningContent,\n includeReasoningDetails: this.includeReasoningDetails,\n convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,\n }\n );\n\n if (params.stream === true) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks = new Map<number, ChatGenerationChunk>();\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n typeof chunk.generationInfo?.completion === 'number'\n ? chunk.generationInfo.completion\n : 0;\n const existingChunk = finalChunks.get(index);\n if (existingChunk == null) {\n finalChunks.set(index, chunk);\n } else {\n finalChunks.set(index, existingChunk.concat(chunk));\n }\n }\n const generations = Array.from(finalChunks.entries())\n .sort(([aKey], [bKey]) => aKey - bKey)\n .map(([, value]) => value);\n const { functions, function_call } = this.invocationParams(options);\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data.usage ?? {};\n\n if (completionTokens != null) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n if (promptTokens != null) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n if (totalTokens != null) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n 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 });\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 protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n}\n\nclass LibreChatAzureOpenAICompletions extends OriginalAzureChatOpenAICompletions {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: librechat-azure-openai-v2`\n : 'librechat-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n}\n\nclass LibreChatAzureOpenAIResponses extends OriginalAzureChatOpenAIResponses {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: librechat-azure-openai-v2`\n : 'librechat-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n}\n\nfunction withLibreChatOpenAIFields(\n fields?: LibreChatOpenAIFields\n): LibreChatOpenAIFields {\n const nextFields = fields ?? {};\n return {\n ...nextFields,\n completions:\n nextFields.completions ?? new LibreChatOpenAICompletions(nextFields),\n responses: nextFields.responses ?? new LibreChatOpenAIResponses(nextFields),\n };\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: LibreChatOpenAIFields & t.OpenAIChatInput['modelKwargs']\n ) {\n super(withLibreChatOpenAIFields(fields));\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return getExposedOpenAIClient(\n this.completions as OpenAIClientDelegate,\n this.responses as OpenAIClientDelegate,\n this._useResponsesApi(undefined)\n ) as CustomOpenAIClient;\n }\n static lc_name(): string {\n return 'LibreChatOpenAI';\n }\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n /**\n * Returns backwards compatible reasoning parameters from constructor params and call options\n * @internal\n */\n getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return this.getReasoningParams(options);\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, 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 );\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 );\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 );\n }\n}\n"],"names":["AzureOpenAIClient","OriginalChatOpenAICompletions","OriginalChatOpenAIResponses","OriginalAzureChatOpenAICompletions","OriginalAzureChatOpenAIResponses","OriginalChatOpenAI","OriginalAzureChatOpenAI","OriginalChatDeepSeek","OriginalChatXAI"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["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 getHeadersWithUserAgent,\n ChatOpenAI as OriginalChatOpenAI,\n ChatOpenAIResponses as OriginalChatOpenAIResponses,\n ChatOpenAICompletions as OriginalChatOpenAICompletions,\n AzureChatOpenAI as OriginalAzureChatOpenAI,\n AzureChatOpenAIResponses as OriginalAzureChatOpenAIResponses,\n AzureChatOpenAICompletions as OriginalAzureChatOpenAICompletions,\n} from '@langchain/openai';\nimport type {\n BaseMessage,\n BaseMessageChunk,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { ChatGeneration, ChatResult } from '@langchain/core/outputs';\nimport type { ChatXAIInput } from '@langchain/xai';\nimport type * as t from '@langchain/openai';\nimport type { HeaderValue, HeadersLike } from './types';\nimport { isReasoningModel, _convertMessagesToOpenAIParams } from './utils';\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};\ntype LibreChatAzureOpenAIFields = t.AzureOpenAIInput & {\n _lc_stream_delay?: number;\n};\ntype ReasoningCallOptions = {\n reasoning?: OpenAIClient.Reasoning;\n reasoningEffort?: OpenAIClient.Reasoning['effort'];\n};\ntype OpenAIDeltaWithLibreChatFields = Record<string, unknown> & {\n reasoning?: unknown;\n reasoning_details?: unknown;\n provider_specific_fields?: unknown;\n};\ntype OpenAIClientOwner = {\n client?: OpenAIClient;\n clientConfig: OpenAIClientConfig;\n timeout?: number;\n};\ntype AbortableOpenAIClient = CustomOpenAIClient | CustomAzureOpenAIClient;\ntype OpenAIClientDelegate = {\n client?: AbortableOpenAIClient;\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions;\n};\ntype OpenAIChatCompletion = OpenAIClient.Chat.Completions.ChatCompletion;\ntype OpenAIChatCompletionChunk =\n OpenAIClient.Chat.Completions.ChatCompletionChunk;\ntype OpenAIChatCompletionStreamItem =\n | OpenAIChatCompletionChunk\n | {\n event: string;\n data?: unknown;\n };\ntype OpenAIChatCompletionRequest =\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming;\ntype OpenAIChatCompletionResult =\n | AsyncIterable<OpenAIChatCompletionChunk>\n | OpenAIChatCompletion;\ntype 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>;\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): 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 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 */\nexport function _convertToOpenAITool(\n tool: BindToolsInput,\n fields?: {\n /**\n * If `true`, model output is guaranteed to exactly match the JSON Schema\n * provided in the function definition.\n */\n strict?: boolean;\n }\n): OpenAIClient.ChatCompletionTool {\n let toolDef: OpenAIClient.ChatCompletionTool | undefined;\n\n if (isLangChainTool(tool)) {\n toolDef = convertToOpenAITool(tool);\n } else {\n toolDef = tool as ToolDefinition;\n }\n\n if (fields?.strict !== undefined) {\n toolDef.function.strict = fields.strict;\n }\n\n return toolDef;\n}\nexport class CustomOpenAIClient extends OpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\nexport class CustomAzureOpenAIClient extends AzureOpenAIClient {\n abortHandler?: () => void;\n async fetchWithTimeout(\n url: RequestInfo,\n init: RequestInit | undefined,\n ms: number,\n controller: AbortController\n ): Promise<Response> {\n const { signal, ...options } = init || {};\n const handler = createAbortHandler(controller);\n this.abortHandler = handler;\n if (signal) signal.addEventListener('abort', handler, { once: true });\n\n const timeout = setTimeout(handler, ms);\n\n const fetchOptions = {\n signal: controller.signal as AbortSignal,\n ...options,\n };\n if (fetchOptions.method != null) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = fetchOptions.method.toUpperCase();\n }\n\n return (\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n this.fetch.call(undefined, url, fetchOptions).finally(() => {\n clearTimeout(timeout);\n })\n );\n }\n}\n\nclass LibreChatOpenAICompletions extends OriginalChatOpenAICompletions {\n private includeReasoningContent?: boolean;\n private includeReasoningDetails?: boolean;\n private convertReasoningDetailsToContent?: boolean;\n\n constructor(fields?: LibreChatOpenAIFields) {\n super(fields);\n this.includeReasoningContent = fields?.includeReasoningContent;\n this.includeReasoningDetails = fields?.includeReasoningDetails;\n this.convertReasoningDetailsToContent =\n fields?.convertReasoningDetailsToContent;\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n\n protected _convertCompletionsDeltaToBaseMessageChunk(\n delta: Record<string, unknown>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return attachLibreChatDeltaFields(\n super._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n ),\n delta\n );\n }\n\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return attachLibreChatMessageFields(\n super._convertCompletionsMessageToBaseMessage(message, rawResponse),\n message as unknown as Record<string, unknown>\n );\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n if (\n this.includeReasoningContent !== true &&\n this.includeReasoningDetails !== true\n ) {\n return super._generate(messages, options, runManager);\n }\n\n options.signal?.throwIfAborted();\n const usageMetadata: Partial<UsageMetadata> = {};\n const params = this.invocationParams(options);\n const messagesMapped = _convertMessagesToOpenAIParams(\n messages,\n this.model,\n {\n includeReasoningContent: this.includeReasoningContent,\n includeReasoningDetails: this.includeReasoningDetails,\n convertReasoningDetailsToContent: this.convertReasoningDetailsToContent,\n }\n );\n\n if (params.stream === true) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks = new Map<number, ChatGenerationChunk>();\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n typeof chunk.generationInfo?.completion === 'number'\n ? chunk.generationInfo.completion\n : 0;\n const existingChunk = finalChunks.get(index);\n if (existingChunk == null) {\n finalChunks.set(index, chunk);\n } else {\n finalChunks.set(index, existingChunk.concat(chunk));\n }\n }\n const generations = Array.from(finalChunks.entries())\n .sort(([aKey], [bKey]) => aKey - bKey)\n .map(([, value]) => value);\n const { functions, function_call } = this.invocationParams(options);\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage =\n await this._getNumTokensFromGenerations(generations);\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options.signal,\n ...options.options,\n }\n );\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data.usage ?? {};\n\n if (completionTokens != null) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n if (promptTokens != null) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n if (totalTokens != null) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n 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 });\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 protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n return getCustomOpenAIClientOptions(this, options);\n }\n}\n\nclass LibreChatAzureOpenAICompletions extends OriginalAzureChatOpenAICompletions {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: librechat-azure-openai-v2`\n : 'librechat-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk>>;\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<OpenAIChatCompletion>;\n async completionWithRetry(\n request:\n | OpenAIClient.Chat.ChatCompletionCreateParamsStreaming\n | OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAICoreRequestOptions\n ): Promise<AsyncIterable<OpenAIChatCompletionChunk> | OpenAIChatCompletion> {\n return completionWithFilteredOpenAIStream(\n request,\n requestOptions,\n super.completionWithRetry.bind(this) as OpenAIChatCompletionRetry\n );\n }\n}\n\nclass LibreChatAzureOpenAIResponses extends OriginalAzureChatOpenAIResponses {\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getGatedReasoningParams(this.model, this.reasoning, options);\n }\n\n _getClientOptions(\n options: OpenAICoreRequestOptions | undefined\n ): OpenAICoreRequestOptions {\n if (!(this.client as unknown as AzureOpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n azureOpenAIApiDeploymentName: this.azureOpenAIApiDeploymentName,\n azureOpenAIApiInstanceName: this.azureOpenAIApiInstanceName,\n azureOpenAIApiKey: this.azureOpenAIApiKey,\n azureOpenAIBasePath: this.azureOpenAIBasePath,\n azureADTokenProvider: this.azureADTokenProvider,\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n\n if (!this.azureADTokenProvider) {\n params.apiKey = openAIEndpointConfig.azureOpenAIApiKey;\n }\n\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n const defaultHeaders = normalizeHeaders(params.defaultHeaders);\n params.defaultHeaders = {\n ...params.defaultHeaders,\n 'User-Agent':\n defaultHeaders['User-Agent'] != null\n ? `${defaultHeaders['User-Agent']}: librechat-azure-openai-v2`\n : 'librechat-azure-openai-v2',\n };\n\n this.client = new CustomAzureOpenAIClient({\n apiVersion: this.azureOpenAIApiVersion,\n azureADTokenProvider: this.azureADTokenProvider,\n ...(params as t.AzureOpenAIInput),\n }) as unknown as CustomOpenAIClient;\n }\n\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n if (this.azureOpenAIApiKey != null) {\n requestOptions.headers = {\n 'api-key': this.azureOpenAIApiKey,\n ...requestOptions.headers,\n };\n requestOptions.query = {\n 'api-version': this.azureOpenAIApiVersion,\n ...requestOptions.query,\n };\n }\n return requestOptions;\n }\n}\n\nfunction withLibreChatOpenAIFields(\n fields?: LibreChatOpenAIFields\n): LibreChatOpenAIFields {\n const nextFields = fields ?? {};\n return {\n ...nextFields,\n completions:\n nextFields.completions ?? new LibreChatOpenAICompletions(nextFields),\n responses: nextFields.responses ?? new LibreChatOpenAIResponses(nextFields),\n };\n}\n\nexport class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {\n _lc_stream_delay?: number;\n\n constructor(\n fields?: LibreChatOpenAIFields & t.OpenAIChatInput['modelKwargs']\n ) {\n super(withLibreChatOpenAIFields(fields));\n this._lc_stream_delay = fields?._lc_stream_delay;\n }\n\n public get exposedClient(): CustomOpenAIClient {\n return getExposedOpenAIClient(\n this.completions as OpenAIClientDelegate,\n this.responses as OpenAIClientDelegate,\n this._useResponsesApi(undefined)\n ) as CustomOpenAIClient;\n }\n static lc_name(): string {\n return 'LibreChatOpenAI';\n }\n _getClientOptions(\n options?: OpenAICoreRequestOptions\n ): OpenAICoreRequestOptions {\n if (!(this.client as OpenAIClient | undefined)) {\n const openAIEndpointConfig: t.OpenAIEndpointConfig = {\n baseURL: this.clientConfig.baseURL,\n };\n\n const endpoint = getEndpoint(openAIEndpointConfig);\n const params = {\n ...this.clientConfig,\n baseURL: endpoint,\n timeout: this.timeout,\n maxRetries: 0,\n };\n if (params.baseURL == null) {\n delete params.baseURL;\n }\n\n this.client = new CustomOpenAIClient(params);\n }\n const requestOptions = {\n ...this.clientConfig,\n ...options,\n } as OpenAICoreRequestOptions;\n return requestOptions;\n }\n\n /**\n * Returns backwards compatible reasoning parameters from constructor params and call options\n * @internal\n */\n getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return getReasoningParams(this.reasoning, options);\n }\n\n protected _getReasoningParams(\n options?: this['ParsedCallOptions']\n ): OpenAIClient.Reasoning | undefined {\n return this.getReasoningParams(options);\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield* delayStreamChunks(\n super._streamResponseChunks(messages, options, 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 );\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 );\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 );\n }\n}\n"],"mappings":"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"}