@librechat/agents 3.2.32 → 3.2.34

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 (597) 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 -731
  53. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -256
  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 +214 -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 +141 -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 +404 -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 +1035 -1273
  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 +446 -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 +305 -418
  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 -1387
  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 +874 -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 +2146 -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 +46 -34
  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 -725
  324. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  325. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -253
  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 +214 -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 +140 -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 +403 -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 +1035 -1268
  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 +446 -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 +305 -416
  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 -1383
  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 +872 -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 +2144 -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 +42 -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/llm/bedrock/utils/index.d.ts +1 -1
  545. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +9 -0
  546. package/dist/types/llm/vertexai/index.d.ts +10 -0
  547. package/dist/types/tools/ToolNode.d.ts +8 -0
  548. package/dist/types/tools/search/tool.d.ts +17 -0
  549. package/dist/types/tools/search/types.d.ts +4 -0
  550. package/dist/types/tools/streamedToolCallSeals.d.ts +5 -1
  551. package/dist/types/types/tools.d.ts +10 -0
  552. package/package.json +4 -10
  553. package/src/__tests__/stream.eagerEventExecution.test.ts +703 -0
  554. package/src/llm/bedrock/index.ts +40 -0
  555. package/src/llm/bedrock/streamSealDispatch.test.ts +158 -0
  556. package/src/llm/bedrock/utils/index.ts +1 -0
  557. package/src/llm/bedrock/utils/message_outputs.test.ts +85 -0
  558. package/src/llm/bedrock/utils/message_outputs.ts +43 -0
  559. package/src/llm/google/utils/common.test.ts +64 -0
  560. package/src/llm/google/utils/common.ts +18 -0
  561. package/src/llm/openai/index.ts +95 -1
  562. package/src/llm/openai/sequentialToolCallSeals.test.ts +199 -0
  563. package/src/llm/vertexai/index.ts +31 -0
  564. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +88 -0
  565. package/src/llm/vertexai/streamSealDispatch.test.ts +148 -0
  566. package/src/stream.ts +40 -6
  567. package/src/tools/ToolNode.ts +85 -3
  568. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +368 -0
  569. package/src/tools/search/highlights.ts +9 -1
  570. package/src/tools/search/search.ts +41 -3
  571. package/src/tools/search/source-processing.test.ts +373 -0
  572. package/src/tools/search/tool.ts +22 -2
  573. package/src/tools/search/types.ts +4 -0
  574. package/src/tools/streamedToolCallSeals.ts +37 -9
  575. package/src/types/tools.ts +10 -0
  576. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  577. package/dist/cjs/langchain/index.cjs.map +0 -1
  578. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  579. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  580. package/dist/cjs/langchain/messages.cjs.map +0 -1
  581. package/dist/cjs/langchain/openai.cjs.map +0 -1
  582. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  583. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  584. package/dist/cjs/langchain/tools.cjs.map +0 -1
  585. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  586. package/dist/cjs/main.cjs.map +0 -1
  587. package/dist/esm/langchain/google-common.mjs.map +0 -1
  588. package/dist/esm/langchain/index.mjs.map +0 -1
  589. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  590. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  591. package/dist/esm/langchain/messages.mjs.map +0 -1
  592. package/dist/esm/langchain/openai.mjs.map +0 -1
  593. package/dist/esm/langchain/prompts.mjs.map +0 -1
  594. package/dist/esm/langchain/runnables.mjs.map +0 -1
  595. package/dist/esm/langchain/tools.mjs.map +0 -1
  596. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  597. package/dist/esm/main.mjs.map +0 -1
@@ -1,610 +1,480 @@
1
- 'use strict';
2
-
3
- var messages = require('@langchain/core/messages');
4
- var anthropic = require('@langchain/anthropic');
5
- var outputs = require('@langchain/core/outputs');
6
- var message_inputs = require('./utils/message_inputs.cjs');
7
- var message_outputs = require('./utils/message_outputs.cjs');
8
- var tools = require('./utils/tools.cjs');
9
-
1
+ const require_message_inputs = require("./utils/message_inputs.cjs");
2
+ const require_message_outputs = require("./utils/message_outputs.cjs");
3
+ const require_tools = require("./utils/tools.cjs");
4
+ let _langchain_core_messages = require("@langchain/core/messages");
5
+ let _langchain_core_outputs = require("@langchain/core/outputs");
6
+ let _langchain_anthropic = require("@langchain/anthropic");
7
+ //#region src/llm/anthropic/index.ts
10
8
  const DEFAULT_STREAM_DELAY = 25;
11
9
  const MAX_STREAM_QUEUE_CHUNKS = 256;
12
10
  const MAX_STREAM_QUEUE_TEXT_CHARS = 8192;
13
11
  const STREAM_CHUNK_MIN_SIZE = 4;
14
- const STREAM_BOUNDARIES = new Set([' ', '.', ',', '!', '?', ';', ':']);
12
+ const STREAM_BOUNDARIES = new Set([
13
+ " ",
14
+ ".",
15
+ ",",
16
+ "!",
17
+ "?",
18
+ ";",
19
+ ":"
20
+ ]);
15
21
  const ANTHROPIC_TOOL_BETAS = {
16
- tool_search_tool_regex_20251119: 'advanced-tool-use-2025-11-20',
17
- tool_search_tool_bm25_20251119: 'advanced-tool-use-2025-11-20',
18
- memory_20250818: 'context-management-2025-06-27',
19
- web_fetch_20250910: 'web-fetch-2025-09-10',
20
- code_execution_20250825: 'code-execution-2025-08-25',
21
- computer_20251124: 'computer-use-2025-11-24',
22
- computer_20250124: 'computer-use-2025-01-24',
23
- mcp_toolset: 'mcp-client-2025-11-20',
22
+ tool_search_tool_regex_20251119: "advanced-tool-use-2025-11-20",
23
+ tool_search_tool_bm25_20251119: "advanced-tool-use-2025-11-20",
24
+ memory_20250818: "context-management-2025-06-27",
25
+ web_fetch_20250910: "web-fetch-2025-09-10",
26
+ code_execution_20250825: "code-execution-2025-08-25",
27
+ computer_20251124: "computer-use-2025-11-24",
28
+ computer_20250124: "computer-use-2025-01-24",
29
+ mcp_toolset: "mcp-client-2025-11-20"
24
30
  };
25
31
  function _toolsInParams(params) {
26
- return !!(params.tools && params.tools.length > 0);
32
+ return !!(params.tools && params.tools.length > 0);
27
33
  }
28
34
  function _documentsInParams(params) {
29
- for (const message of params.messages) {
30
- if (typeof message.content === 'string') {
31
- continue;
32
- }
33
- for (const block of message.content) {
34
- const maybeBlock = block;
35
- if (typeof maybeBlock === 'object' &&
36
- maybeBlock !== null &&
37
- 'type' in maybeBlock &&
38
- maybeBlock.type === 'document' &&
39
- 'citations' in maybeBlock &&
40
- maybeBlock.citations != null &&
41
- typeof maybeBlock.citations === 'object' &&
42
- 'enabled' in maybeBlock.citations &&
43
- maybeBlock.citations.enabled === true) {
44
- return true;
45
- }
46
- }
47
- }
48
- return false;
35
+ for (const message of params.messages) {
36
+ if (typeof message.content === "string") continue;
37
+ for (const block of message.content) {
38
+ const maybeBlock = block;
39
+ if (typeof maybeBlock === "object" && maybeBlock !== null && "type" in maybeBlock && maybeBlock.type === "document" && "citations" in maybeBlock && maybeBlock.citations != null && typeof maybeBlock.citations === "object" && "enabled" in maybeBlock.citations && maybeBlock.citations.enabled === true) return true;
40
+ }
41
+ }
42
+ return false;
49
43
  }
50
44
  function _thinkingInParams(params) {
51
- return !!(params.thinking &&
52
- (params.thinking.type === 'enabled' || params.thinking.type === 'adaptive'));
45
+ return !!(params.thinking && (params.thinking.type === "enabled" || params.thinking.type === "adaptive"));
53
46
  }
54
47
  function _compactionInParams(params) {
55
- return (params.context_management?.edits?.some((edit) => edit.type === 'compact_20260112') === true);
48
+ return params.context_management?.edits?.some((edit) => edit.type === "compact_20260112") === true;
56
49
  }
57
50
  function isThinkingEnabled(thinking) {
58
- return thinking.type === 'enabled' || thinking.type === 'adaptive';
51
+ return thinking.type === "enabled" || thinking.type === "adaptive";
59
52
  }
60
53
  function isOpus47Model(model) {
61
- return /^claude-opus-4-7(?:-|$)/.test(model ?? '');
54
+ return /^claude-opus-4-7(?:-|$)/.test(model ?? "");
62
55
  }
63
56
  function combineBetas(...betaGroups) {
64
- const betas = new Set();
65
- for (const betaGroup of betaGroups) {
66
- for (const beta of betaGroup ?? []) {
67
- betas.add(beta);
68
- }
69
- }
70
- return [...betas];
57
+ const betas = /* @__PURE__ */ new Set();
58
+ for (const betaGroup of betaGroups) for (const beta of betaGroup ?? []) betas.add(beta);
59
+ return [...betas];
71
60
  }
72
61
  function getToolBetas(tools) {
73
- const betas = new Set();
74
- for (const tool of tools ?? []) {
75
- if (typeof tool !== 'object' || !('type' in tool)) {
76
- continue;
77
- }
78
- const beta = ANTHROPIC_TOOL_BETAS[String(tool.type)];
79
- if (beta != null) {
80
- betas.add(beta);
81
- }
82
- }
83
- return [...betas];
62
+ const betas = /* @__PURE__ */ new Set();
63
+ for (const tool of tools ?? []) {
64
+ if (typeof tool !== "object" || !("type" in tool)) continue;
65
+ const beta = ANTHROPIC_TOOL_BETAS[String(tool.type)];
66
+ if (beta != null) betas.add(beta);
67
+ }
68
+ return [...betas];
84
69
  }
85
70
  function getCompactionBetas(contextManagement) {
86
- return contextManagement?.edits?.some((edit) => edit.type === 'compact_20260112') === true
87
- ? ['compact-2026-01-12']
88
- : [];
71
+ return contextManagement?.edits?.some((edit) => edit.type === "compact_20260112") === true ? ["compact-2026-01-12"] : [];
89
72
  }
90
73
  function getTaskBudgetBetas(model, outputConfig) {
91
- return isOpus47Model(model) &&
92
- outputConfig != null &&
93
- 'task_budget' in outputConfig &&
94
- outputConfig.task_budget != null
95
- ? ['task-budgets-2026-03-13']
96
- : [];
74
+ return isOpus47Model(model) && outputConfig != null && "task_budget" in outputConfig && outputConfig.task_budget != null ? ["task-budgets-2026-03-13"] : [];
97
75
  }
98
76
  function isSetSamplingValue(value) {
99
- return value != null && value !== -1;
77
+ return value != null && value !== -1;
100
78
  }
101
79
  function isNonDefaultTemperature(value) {
102
- return isSetSamplingValue(value) && value !== 1;
80
+ return isSetSamplingValue(value) && value !== 1;
103
81
  }
104
- function validateInvocationParamCompatibility({ model, thinking, topK, topP, temperature, }) {
105
- const opus47 = isOpus47Model(model);
106
- if (opus47 && thinking.type === 'enabled') {
107
- throw new Error('thinking.type="enabled" is not supported for claude-opus-4-7; use thinking.type="adaptive" instead');
108
- }
109
- if (opus47 && 'budget_tokens' in thinking) {
110
- throw new Error('thinking.budget_tokens is not supported for claude-opus-4-7; use outputConfig.effort instead');
111
- }
112
- if (opus47) {
113
- if (isSetSamplingValue(topK)) {
114
- throw new Error('topK is not supported for claude-opus-4-7; omit topK/topP/temperature or use model prompting instead');
115
- }
116
- if (isSetSamplingValue(topP) && topP !== 1) {
117
- throw new Error('topP is not supported for claude-opus-4-7 when set to non-default values');
118
- }
119
- if (isNonDefaultTemperature(temperature)) {
120
- throw new Error('temperature is not supported for claude-opus-4-7 when set to non-default values');
121
- }
122
- }
123
- if (!isThinkingEnabled(thinking)) {
124
- return;
125
- }
126
- if (isSetSamplingValue(topK)) {
127
- throw new Error('topK is not supported when thinking is enabled');
128
- }
129
- if (isSetSamplingValue(topP)) {
130
- throw new Error('topP is not supported when thinking is enabled');
131
- }
132
- if (isNonDefaultTemperature(temperature)) {
133
- throw new Error('temperature is not supported when thinking is enabled');
134
- }
82
+ function validateInvocationParamCompatibility({ model, thinking, topK, topP, temperature }) {
83
+ const opus47 = isOpus47Model(model);
84
+ if (opus47 && thinking.type === "enabled") throw new Error("thinking.type=\"enabled\" is not supported for claude-opus-4-7; use thinking.type=\"adaptive\" instead");
85
+ if (opus47 && "budget_tokens" in thinking) throw new Error("thinking.budget_tokens is not supported for claude-opus-4-7; use outputConfig.effort instead");
86
+ if (opus47) {
87
+ if (isSetSamplingValue(topK)) throw new Error("topK is not supported for claude-opus-4-7; omit topK/topP/temperature or use model prompting instead");
88
+ if (isSetSamplingValue(topP) && topP !== 1) throw new Error("topP is not supported for claude-opus-4-7 when set to non-default values");
89
+ if (isNonDefaultTemperature(temperature)) throw new Error("temperature is not supported for claude-opus-4-7 when set to non-default values");
90
+ }
91
+ if (!isThinkingEnabled(thinking)) return;
92
+ if (isSetSamplingValue(topK)) throw new Error("topK is not supported when thinking is enabled");
93
+ if (isSetSamplingValue(topP)) throw new Error("topP is not supported when thinking is enabled");
94
+ if (isNonDefaultTemperature(temperature)) throw new Error("temperature is not supported when thinking is enabled");
135
95
  }
136
- function getSamplingParams({ model, thinking, topK, topP, temperature, }) {
137
- if (isThinkingEnabled(thinking) || isOpus47Model(model)) {
138
- return {};
139
- }
140
- return {
141
- ...(isSetSamplingValue(temperature) ? { temperature } : {}),
142
- ...(isSetSamplingValue(topK) ? { top_k: topK } : {}),
143
- ...(isSetSamplingValue(topP) ? { top_p: topP } : {}),
144
- };
96
+ function getSamplingParams({ model, thinking, topK, topP, temperature }) {
97
+ if (isThinkingEnabled(thinking) || isOpus47Model(model)) return {};
98
+ return {
99
+ ...isSetSamplingValue(temperature) ? { temperature } : {},
100
+ ...isSetSamplingValue(topK) ? { top_k: topK } : {},
101
+ ...isSetSamplingValue(topP) ? { top_p: topP } : {}
102
+ };
145
103
  }
146
104
  function findStreamChunkBoundary(text, minSize) {
147
- if (minSize >= text.length) {
148
- return text.length;
149
- }
150
- for (let position = minSize; position < text.length; position++) {
151
- if (STREAM_BOUNDARIES.has(text[position])) {
152
- return position + 1;
153
- }
154
- }
155
- return text.length;
105
+ if (minSize >= text.length) return text.length;
106
+ for (let position = minSize; position < text.length; position++) if (STREAM_BOUNDARIES.has(text[position])) return position + 1;
107
+ return text.length;
156
108
  }
157
109
  function splitStreamToken(text) {
158
- const chunks = [];
159
- let currentIndex = 0;
160
- while (currentIndex < text.length) {
161
- const remainingText = text.slice(currentIndex);
162
- const chunkSize = findStreamChunkBoundary(remainingText, STREAM_CHUNK_MIN_SIZE);
163
- chunks.push(text.slice(currentIndex, currentIndex + chunkSize));
164
- currentIndex += chunkSize;
165
- }
166
- return chunks;
110
+ const chunks = [];
111
+ let currentIndex = 0;
112
+ while (currentIndex < text.length) {
113
+ const chunkSize = findStreamChunkBoundary(text.slice(currentIndex), STREAM_CHUNK_MIN_SIZE);
114
+ chunks.push(text.slice(currentIndex, currentIndex + chunkSize));
115
+ currentIndex += chunkSize;
116
+ }
117
+ return chunks;
167
118
  }
168
- function getCadencedStreamDelay({ targetDelay, lastVisibleTextAt, now, }) {
169
- if (targetDelay <= 0 || lastVisibleTextAt == null) {
170
- return 0;
171
- }
172
- return Math.max(0, targetDelay - (now - lastVisibleTextAt));
119
+ function getCadencedStreamDelay({ targetDelay, lastVisibleTextAt, now }) {
120
+ if (targetDelay <= 0 || lastVisibleTextAt == null) return 0;
121
+ return Math.max(0, targetDelay - (now - lastVisibleTextAt));
173
122
  }
174
123
  async function waitForStreamDelay(delay, signal) {
175
- if (delay <= 0 || isSignalAborted(signal)) {
176
- return;
177
- }
178
- await new Promise((resolve) => {
179
- const timeoutRef = {};
180
- const onAbort = () => {
181
- if (timeoutRef.current) {
182
- clearTimeout(timeoutRef.current);
183
- }
184
- signal?.removeEventListener('abort', onAbort);
185
- resolve();
186
- };
187
- timeoutRef.current = setTimeout(() => {
188
- signal?.removeEventListener('abort', onAbort);
189
- resolve();
190
- }, delay);
191
- signal?.addEventListener('abort', onAbort, { once: true });
192
- if (isSignalAborted(signal)) {
193
- onAbort();
194
- }
195
- });
124
+ if (delay <= 0 || isSignalAborted(signal)) return;
125
+ await new Promise((resolve) => {
126
+ const timeoutRef = {};
127
+ const onAbort = () => {
128
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
129
+ signal?.removeEventListener("abort", onAbort);
130
+ resolve();
131
+ };
132
+ timeoutRef.current = setTimeout(() => {
133
+ signal?.removeEventListener("abort", onAbort);
134
+ resolve();
135
+ }, delay);
136
+ signal?.addEventListener("abort", onAbort, { once: true });
137
+ if (isSignalAborted(signal)) onAbort();
138
+ });
196
139
  }
197
140
  function isSignalAborted(signal) {
198
- return signal?.aborted === true;
141
+ return signal?.aborted === true;
199
142
  }
200
143
  function extractToken(chunk) {
201
- if (typeof chunk.content === 'string') {
202
- return [chunk.content, 'string'];
203
- }
204
- else if (Array.isArray(chunk.content) &&
205
- chunk.content.length >= 1 &&
206
- 'input' in chunk.content[0]) {
207
- return typeof chunk.content[0].input === 'string'
208
- ? [chunk.content[0].input, 'input']
209
- : [JSON.stringify(chunk.content[0].input), 'input'];
210
- }
211
- else if (Array.isArray(chunk.content) &&
212
- chunk.content.length >= 1 &&
213
- 'text' in chunk.content[0]) {
214
- const text = chunk.content[0].text;
215
- return typeof text === 'string' ? [text, 'content'] : [undefined];
216
- }
217
- else if (Array.isArray(chunk.content) &&
218
- chunk.content.length >= 1 &&
219
- 'thinking' in chunk.content[0]) {
220
- const thinking = chunk.content[0].thinking;
221
- return typeof thinking === 'string' ? [thinking, 'content'] : [undefined];
222
- }
223
- return [undefined];
144
+ if (typeof chunk.content === "string") return [chunk.content, "string"];
145
+ else if (Array.isArray(chunk.content) && chunk.content.length >= 1 && "input" in chunk.content[0]) return typeof chunk.content[0].input === "string" ? [chunk.content[0].input, "input"] : [JSON.stringify(chunk.content[0].input), "input"];
146
+ else if (Array.isArray(chunk.content) && chunk.content.length >= 1 && "text" in chunk.content[0]) {
147
+ const text = chunk.content[0].text;
148
+ return typeof text === "string" ? [text, "content"] : [void 0];
149
+ } else if (Array.isArray(chunk.content) && chunk.content.length >= 1 && "thinking" in chunk.content[0]) {
150
+ const thinking = chunk.content[0].thinking;
151
+ return typeof thinking === "string" ? [thinking, "content"] : [void 0];
152
+ }
153
+ return [void 0];
224
154
  }
225
155
  function cloneChunk(text, tokenType, chunk) {
226
- if (tokenType === 'string') {
227
- return new messages.AIMessageChunk(Object.assign({}, chunk, { content: text }));
228
- }
229
- else if (tokenType === 'input') {
230
- return chunk;
231
- }
232
- const content = chunk.content[0];
233
- if (content.type === 'text') {
234
- return new messages.AIMessageChunk(Object.assign({}, chunk, {
235
- content: [Object.assign({}, content, { text })],
236
- }));
237
- }
238
- else if (content.type === 'text_delta') {
239
- return new messages.AIMessageChunk(Object.assign({}, chunk, {
240
- content: [Object.assign({}, content, { text })],
241
- }));
242
- }
243
- else if (typeof content.type === 'string' &&
244
- content.type.startsWith('thinking')) {
245
- return new messages.AIMessageChunk(Object.assign({}, chunk, {
246
- content: [Object.assign({}, content, { thinking: text })],
247
- }));
248
- }
249
- return chunk;
156
+ if (tokenType === "string") return new _langchain_core_messages.AIMessageChunk(Object.assign({}, chunk, { content: text }));
157
+ else if (tokenType === "input") return chunk;
158
+ const content = chunk.content[0];
159
+ if (content.type === "text") return new _langchain_core_messages.AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { text })] }));
160
+ else if (content.type === "text_delta") return new _langchain_core_messages.AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { text })] }));
161
+ else if (typeof content.type === "string" && content.type.startsWith("thinking")) return new _langchain_core_messages.AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { thinking: text })] }));
162
+ return chunk;
250
163
  }
251
164
  function withIncrementalMessageDeltaUsage(chunk, previousOutputTokens) {
252
- const usage = chunk.usage_metadata;
253
- if (usage == null) {
254
- return { chunk, outputTokens: previousOutputTokens };
255
- }
256
- const outputTokens = Math.max(0, usage.output_tokens - previousOutputTokens);
257
- return {
258
- chunk: new messages.AIMessageChunk(Object.assign({}, chunk, {
259
- usage_metadata: {
260
- ...usage,
261
- output_tokens: outputTokens,
262
- total_tokens: usage.input_tokens + outputTokens,
263
- },
264
- })),
265
- outputTokens: usage.output_tokens,
266
- };
267
- }
268
- class CustomAnthropic extends anthropic.ChatAnthropicMessages {
269
- _lc_stream_delay;
270
- tools_in_params;
271
- top_k;
272
- outputConfig;
273
- inferenceGeo;
274
- contextManagement;
275
- constructor(fields) {
276
- super(fields);
277
- this.resetTokenEvents();
278
- this.setDirectFields(fields);
279
- this._lc_stream_delay = Math.max(0, fields?._lc_stream_delay ?? DEFAULT_STREAM_DELAY);
280
- this.outputConfig = fields?.outputConfig;
281
- this.inferenceGeo = fields?.inferenceGeo;
282
- this.contextManagement = fields?.contextManagement;
283
- }
284
- static lc_name() {
285
- return 'LibreChatAnthropic';
286
- }
287
- /**
288
- * Get the parameters used to invoke the model
289
- */
290
- invocationParams(options) {
291
- const tool_choice = tools.handleToolChoice(options?.tool_choice);
292
- const callOptions = options;
293
- const mergedOutputConfig = (() => {
294
- const base = {
295
- ...this.outputConfig,
296
- ...callOptions?.outputConfig,
297
- };
298
- if (callOptions?.outputFormat && !base.format) {
299
- base.format = callOptions.outputFormat;
300
- }
301
- return Object.keys(base).length > 0 ? base : undefined;
302
- })();
303
- const inferenceGeo = callOptions?.inferenceGeo ?? this.inferenceGeo;
304
- const contextManagement = this.contextManagement;
305
- const toolBetas = getToolBetas(options?.tools);
306
- const compactionBetas = getCompactionBetas(contextManagement);
307
- const taskBudgetBetas = getTaskBudgetBetas(this.model, mergedOutputConfig);
308
- const formattedTools = this.formatStructuredToolToAnthropic(options?.tools);
309
- const sharedParams = {
310
- tools: formattedTools,
311
- tool_choice,
312
- thinking: this.thinking,
313
- context_management: contextManagement,
314
- ...this.invocationKwargs,
315
- container: callOptions?.container,
316
- betas: combineBetas(this.betas, callOptions?.betas, toolBetas, compactionBetas, taskBudgetBetas),
317
- output_config: mergedOutputConfig,
318
- inference_geo: inferenceGeo,
319
- mcp_servers: callOptions?.mcp_servers,
320
- };
321
- validateInvocationParamCompatibility({
322
- model: this.model,
323
- thinking: this.thinking,
324
- topK: this.top_k,
325
- topP: this.topP,
326
- temperature: this.temperature,
327
- });
328
- return {
329
- model: this.model,
330
- stop_sequences: options?.stop ?? this.stopSequences,
331
- stream: this.streaming,
332
- max_tokens: this.maxTokens,
333
- ...getSamplingParams({
334
- model: this.model,
335
- thinking: this.thinking,
336
- topK: this.top_k,
337
- topP: this.topP,
338
- temperature: this.temperature,
339
- }),
340
- ...sharedParams,
341
- };
342
- }
343
- resetTokenEvents() {
344
- this.tools_in_params = undefined;
345
- }
346
- setDirectFields(fields) {
347
- this.temperature = fields?.temperature ?? undefined;
348
- this.topP = fields?.topP ?? undefined;
349
- this.top_k = fields?.topK;
350
- if (this.temperature === -1 || this.temperature === 1) {
351
- this.temperature = undefined;
352
- }
353
- if (this.topP === -1) {
354
- this.topP = undefined;
355
- }
356
- if (this.top_k === -1) {
357
- this.top_k = undefined;
358
- }
359
- }
360
- createGenerationChunk({ token, chunk, shouldStreamUsage, }) {
361
- const usage_metadata = shouldStreamUsage ? chunk.usage_metadata : undefined;
362
- return new outputs.ChatGenerationChunk({
363
- message: new messages.AIMessageChunk({
364
- // Just yield chunk as it is and tool_use will be concat by BaseChatModel._generateUncached().
365
- content: chunk.content,
366
- additional_kwargs: chunk.additional_kwargs,
367
- tool_call_chunks: chunk.tool_call_chunks,
368
- response_metadata: chunk.response_metadata,
369
- usage_metadata,
370
- id: chunk.id,
371
- }),
372
- text: token ?? '',
373
- });
374
- }
375
- async createStreamWithRetry(request, options) {
376
- return super.createStreamWithRetry(message_inputs.stripUnsupportedAssistantPrefill(request), options);
377
- }
378
- async completionWithRetry(request, options) {
379
- return super.completionWithRetry(message_inputs.stripUnsupportedAssistantPrefill(request), options);
380
- }
381
- async *_streamResponseChunks(messages$1, options, runManager) {
382
- this.resetTokenEvents();
383
- const params = this.invocationParams(options);
384
- const formattedMessages = message_inputs._convertMessagesToAnthropicPayload(messages$1);
385
- const payload = message_inputs.stripUnsupportedAssistantPrefill({
386
- ...params,
387
- ...formattedMessages,
388
- stream: true,
389
- });
390
- const coerceContentToString = !_toolsInParams(payload) &&
391
- !_documentsInParams(payload) &&
392
- !_thinkingInParams(payload) &&
393
- !_compactionInParams(payload);
394
- const stream = await this.createStreamWithRetry(payload, {
395
- headers: options.headers,
396
- signal: options.signal,
397
- });
398
- const shouldStreamUsage = options.streamUsage ?? this.streamUsage;
399
- let messageDeltaOutputTokens = 0;
400
- const queuedChunks = [];
401
- const producerState = { done: false };
402
- let queuedChunkIndex = 0;
403
- let bufferedTextLength = 0;
404
- let consumerClosed = false;
405
- let notifyConsumer;
406
- let notifyProducer;
407
- const notifyConsumerForChunk = () => {
408
- notifyConsumer?.();
409
- notifyConsumer = undefined;
410
- };
411
- const notifyProducerForSpace = () => {
412
- notifyProducer?.();
413
- notifyProducer = undefined;
414
- };
415
- const hasQueuedChunks = () => queuedChunkIndex < queuedChunks.length;
416
- const getQueuedChunkCount = () => queuedChunks.length - queuedChunkIndex;
417
- const isQueueAtCapacity = () => getQueuedChunkCount() >= MAX_STREAM_QUEUE_CHUNKS ||
418
- bufferedTextLength >= MAX_STREAM_QUEUE_TEXT_CHARS;
419
- const waitForNextChunk = async () => {
420
- if (hasQueuedChunks() ||
421
- producerState.done ||
422
- producerState.error != null) {
423
- return;
424
- }
425
- await new Promise((resolve) => {
426
- notifyConsumer = resolve;
427
- });
428
- };
429
- const waitForQueueSpace = async () => {
430
- while (isQueueAtCapacity() &&
431
- !consumerClosed &&
432
- !isSignalAborted(options.signal)) {
433
- await new Promise((resolve) => {
434
- const signal = options.signal;
435
- const onAbort = () => {
436
- signal?.removeEventListener('abort', onAbort);
437
- resolve();
438
- };
439
- const onSpace = () => {
440
- signal?.removeEventListener('abort', onAbort);
441
- resolve();
442
- };
443
- notifyProducer = onSpace;
444
- signal?.addEventListener('abort', onAbort, { once: true });
445
- if (isSignalAborted(signal)) {
446
- onAbort();
447
- }
448
- });
449
- }
450
- };
451
- const dequeue = () => {
452
- if (!hasQueuedChunks()) {
453
- return undefined;
454
- }
455
- const queuedChunk = queuedChunks[queuedChunkIndex];
456
- queuedChunkIndex++;
457
- if (queuedChunkIndex > 128 &&
458
- queuedChunkIndex * 2 >= queuedChunks.length) {
459
- queuedChunks.splice(0, queuedChunkIndex);
460
- queuedChunkIndex = 0;
461
- }
462
- return queuedChunk;
463
- };
464
- const enqueue = async (queuedChunk) => {
465
- await waitForQueueSpace();
466
- if (consumerClosed || isSignalAborted(options.signal)) {
467
- stream.controller.abort();
468
- throw new Error('AbortError: User aborted the request.');
469
- }
470
- queuedChunks.push(queuedChunk);
471
- if (queuedChunk.smooth) {
472
- bufferedTextLength += queuedChunk.textLength;
473
- }
474
- notifyConsumerForChunk();
475
- };
476
- const enqueueChunk = async ({ token, chunk, smooth, }) => {
477
- await enqueue({
478
- token,
479
- smooth,
480
- textLength: smooth ? token.length : 0,
481
- chunk: this.createGenerationChunk({
482
- token,
483
- chunk,
484
- shouldStreamUsage,
485
- }),
486
- });
487
- };
488
- const enqueueTextChunks = (token, tokenType, chunk) => {
489
- if (token === '') {
490
- return Promise.resolve();
491
- }
492
- if (this._lc_stream_delay <= 0) {
493
- return enqueueChunk({ token, chunk, smooth: false });
494
- }
495
- const tokenChunks = splitStreamToken(token);
496
- if (tokenChunks.length <= 1) {
497
- return enqueueChunk({ token, chunk, smooth: true });
498
- }
499
- let emittedUsage = false;
500
- return tokenChunks.reduce(async (previous, currentToken) => {
501
- await previous;
502
- const newChunk = cloneChunk(currentToken, tokenType, chunk);
503
- const chunkForToken = emittedUsage && newChunk.usage_metadata != null
504
- ? new messages.AIMessageChunk(Object.assign({}, newChunk, { usage_metadata: undefined }))
505
- : newChunk;
506
- await enqueueChunk({
507
- token: currentToken,
508
- chunk: chunkForToken,
509
- smooth: true,
510
- });
511
- if (newChunk.usage_metadata != null && !emittedUsage) {
512
- emittedUsage = true;
513
- }
514
- }, Promise.resolve());
515
- };
516
- const producer = (async () => {
517
- try {
518
- for await (const data of stream) {
519
- if (isSignalAborted(options.signal)) {
520
- stream.controller.abort();
521
- throw new Error('AbortError: User aborted the request.');
522
- }
523
- const result = message_outputs._makeMessageChunkFromAnthropicEvent(data, {
524
- streamUsage: shouldStreamUsage,
525
- coerceContentToString,
526
- });
527
- if (!result) {
528
- continue;
529
- }
530
- let { chunk } = result;
531
- if (data.type === 'message_delta') {
532
- const incremental = withIncrementalMessageDeltaUsage(chunk, messageDeltaOutputTokens);
533
- chunk = incremental.chunk;
534
- messageDeltaOutputTokens = incremental.outputTokens;
535
- }
536
- const [token = '', tokenType] = extractToken(chunk);
537
- if (!tokenType ||
538
- tokenType === 'input' ||
539
- (token === '' && (chunk.usage_metadata != null || chunk.id != null))) {
540
- await enqueueChunk({ token, chunk, smooth: false });
541
- continue;
542
- }
543
- await enqueueTextChunks(token, tokenType, chunk);
544
- }
545
- }
546
- catch (error) {
547
- producerState.error = error;
548
- }
549
- finally {
550
- producerState.done = true;
551
- notifyConsumerForChunk();
552
- }
553
- })();
554
- let hasEmittedText = false;
555
- let lastVisibleTextAt;
556
- let keepStreaming = true;
557
- try {
558
- while (keepStreaming) {
559
- if (isSignalAborted(options.signal)) {
560
- stream.controller.abort();
561
- throw new Error('AbortError: User aborted the request.');
562
- }
563
- await waitForNextChunk();
564
- const queuedChunk = dequeue();
565
- if (!queuedChunk) {
566
- if (producerState.error != null) {
567
- throw producerState.error;
568
- }
569
- if (producerState.done) {
570
- keepStreaming = false;
571
- }
572
- continue;
573
- }
574
- if (queuedChunk.smooth) {
575
- bufferedTextLength = Math.max(0, bufferedTextLength - queuedChunk.textLength);
576
- notifyProducerForSpace();
577
- await waitForStreamDelay(getCadencedStreamDelay({
578
- targetDelay: hasEmittedText ? this._lc_stream_delay : 0,
579
- lastVisibleTextAt,
580
- now: Date.now(),
581
- }), options.signal);
582
- if (isSignalAborted(options.signal)) {
583
- stream.controller.abort();
584
- throw new Error('AbortError: User aborted the request.');
585
- }
586
- hasEmittedText = true;
587
- lastVisibleTextAt = Date.now();
588
- }
589
- else {
590
- notifyProducerForSpace();
591
- }
592
- yield queuedChunk.chunk;
593
- await runManager?.handleLLMNewToken(queuedChunk.token, undefined, undefined, undefined, undefined, { chunk: queuedChunk.chunk });
594
- }
595
- }
596
- finally {
597
- consumerClosed = true;
598
- if (!producerState.done) {
599
- stream.controller.abort();
600
- notifyProducerForSpace();
601
- }
602
- await producer;
603
- this.resetTokenEvents();
604
- }
605
- }
165
+ const usage = chunk.usage_metadata;
166
+ if (usage == null) return {
167
+ chunk,
168
+ outputTokens: previousOutputTokens
169
+ };
170
+ const outputTokens = Math.max(0, usage.output_tokens - previousOutputTokens);
171
+ return {
172
+ chunk: new _langchain_core_messages.AIMessageChunk(Object.assign({}, chunk, { usage_metadata: {
173
+ ...usage,
174
+ output_tokens: outputTokens,
175
+ total_tokens: usage.input_tokens + outputTokens
176
+ } })),
177
+ outputTokens: usage.output_tokens
178
+ };
606
179
  }
607
-
180
+ var CustomAnthropic = class extends _langchain_anthropic.ChatAnthropicMessages {
181
+ _lc_stream_delay;
182
+ tools_in_params;
183
+ top_k;
184
+ outputConfig;
185
+ inferenceGeo;
186
+ contextManagement;
187
+ constructor(fields) {
188
+ super(fields);
189
+ this.resetTokenEvents();
190
+ this.setDirectFields(fields);
191
+ this._lc_stream_delay = Math.max(0, fields?._lc_stream_delay ?? DEFAULT_STREAM_DELAY);
192
+ this.outputConfig = fields?.outputConfig;
193
+ this.inferenceGeo = fields?.inferenceGeo;
194
+ this.contextManagement = fields?.contextManagement;
195
+ }
196
+ static lc_name() {
197
+ return "LibreChatAnthropic";
198
+ }
199
+ /**
200
+ * Get the parameters used to invoke the model
201
+ */
202
+ invocationParams(options) {
203
+ const tool_choice = require_tools.handleToolChoice(options?.tool_choice);
204
+ const callOptions = options;
205
+ const mergedOutputConfig = (() => {
206
+ const base = {
207
+ ...this.outputConfig,
208
+ ...callOptions?.outputConfig
209
+ };
210
+ if (callOptions?.outputFormat && !base.format) base.format = callOptions.outputFormat;
211
+ return Object.keys(base).length > 0 ? base : void 0;
212
+ })();
213
+ const inferenceGeo = callOptions?.inferenceGeo ?? this.inferenceGeo;
214
+ const contextManagement = this.contextManagement;
215
+ const toolBetas = getToolBetas(options?.tools);
216
+ const compactionBetas = getCompactionBetas(contextManagement);
217
+ const taskBudgetBetas = getTaskBudgetBetas(this.model, mergedOutputConfig);
218
+ const sharedParams = {
219
+ tools: this.formatStructuredToolToAnthropic(options?.tools),
220
+ tool_choice,
221
+ thinking: this.thinking,
222
+ context_management: contextManagement,
223
+ ...this.invocationKwargs,
224
+ container: callOptions?.container,
225
+ betas: combineBetas(this.betas, callOptions?.betas, toolBetas, compactionBetas, taskBudgetBetas),
226
+ output_config: mergedOutputConfig,
227
+ inference_geo: inferenceGeo,
228
+ mcp_servers: callOptions?.mcp_servers
229
+ };
230
+ validateInvocationParamCompatibility({
231
+ model: this.model,
232
+ thinking: this.thinking,
233
+ topK: this.top_k,
234
+ topP: this.topP,
235
+ temperature: this.temperature
236
+ });
237
+ return {
238
+ model: this.model,
239
+ stop_sequences: options?.stop ?? this.stopSequences,
240
+ stream: this.streaming,
241
+ max_tokens: this.maxTokens,
242
+ ...getSamplingParams({
243
+ model: this.model,
244
+ thinking: this.thinking,
245
+ topK: this.top_k,
246
+ topP: this.topP,
247
+ temperature: this.temperature
248
+ }),
249
+ ...sharedParams
250
+ };
251
+ }
252
+ resetTokenEvents() {
253
+ this.tools_in_params = void 0;
254
+ }
255
+ setDirectFields(fields) {
256
+ this.temperature = fields?.temperature ?? void 0;
257
+ this.topP = fields?.topP ?? void 0;
258
+ this.top_k = fields?.topK;
259
+ if (this.temperature === -1 || this.temperature === 1) this.temperature = void 0;
260
+ if (this.topP === -1) this.topP = void 0;
261
+ if (this.top_k === -1) this.top_k = void 0;
262
+ }
263
+ createGenerationChunk({ token, chunk, shouldStreamUsage }) {
264
+ const usage_metadata = shouldStreamUsage ? chunk.usage_metadata : void 0;
265
+ return new _langchain_core_outputs.ChatGenerationChunk({
266
+ message: new _langchain_core_messages.AIMessageChunk({
267
+ content: chunk.content,
268
+ additional_kwargs: chunk.additional_kwargs,
269
+ tool_call_chunks: chunk.tool_call_chunks,
270
+ response_metadata: chunk.response_metadata,
271
+ usage_metadata,
272
+ id: chunk.id
273
+ }),
274
+ text: token ?? ""
275
+ });
276
+ }
277
+ async createStreamWithRetry(request, options) {
278
+ return super.createStreamWithRetry(require_message_inputs.stripUnsupportedAssistantPrefill(request), options);
279
+ }
280
+ async completionWithRetry(request, options) {
281
+ return super.completionWithRetry(require_message_inputs.stripUnsupportedAssistantPrefill(request), options);
282
+ }
283
+ async *_streamResponseChunks(messages, options, runManager) {
284
+ this.resetTokenEvents();
285
+ const params = this.invocationParams(options);
286
+ const formattedMessages = require_message_inputs._convertMessagesToAnthropicPayload(messages);
287
+ const payload = require_message_inputs.stripUnsupportedAssistantPrefill({
288
+ ...params,
289
+ ...formattedMessages,
290
+ stream: true
291
+ });
292
+ const coerceContentToString = !_toolsInParams(payload) && !_documentsInParams(payload) && !_thinkingInParams(payload) && !_compactionInParams(payload);
293
+ const stream = await this.createStreamWithRetry(payload, {
294
+ headers: options.headers,
295
+ signal: options.signal
296
+ });
297
+ const shouldStreamUsage = options.streamUsage ?? this.streamUsage;
298
+ let messageDeltaOutputTokens = 0;
299
+ const queuedChunks = [];
300
+ const producerState = { done: false };
301
+ let queuedChunkIndex = 0;
302
+ let bufferedTextLength = 0;
303
+ let consumerClosed = false;
304
+ let notifyConsumer;
305
+ let notifyProducer;
306
+ const notifyConsumerForChunk = () => {
307
+ notifyConsumer?.();
308
+ notifyConsumer = void 0;
309
+ };
310
+ const notifyProducerForSpace = () => {
311
+ notifyProducer?.();
312
+ notifyProducer = void 0;
313
+ };
314
+ const hasQueuedChunks = () => queuedChunkIndex < queuedChunks.length;
315
+ const getQueuedChunkCount = () => queuedChunks.length - queuedChunkIndex;
316
+ const isQueueAtCapacity = () => getQueuedChunkCount() >= MAX_STREAM_QUEUE_CHUNKS || bufferedTextLength >= MAX_STREAM_QUEUE_TEXT_CHARS;
317
+ const waitForNextChunk = async () => {
318
+ if (hasQueuedChunks() || producerState.done || producerState.error != null) return;
319
+ await new Promise((resolve) => {
320
+ notifyConsumer = resolve;
321
+ });
322
+ };
323
+ const waitForQueueSpace = async () => {
324
+ while (isQueueAtCapacity() && !consumerClosed && !isSignalAborted(options.signal)) await new Promise((resolve) => {
325
+ const signal = options.signal;
326
+ const onAbort = () => {
327
+ signal?.removeEventListener("abort", onAbort);
328
+ resolve();
329
+ };
330
+ const onSpace = () => {
331
+ signal?.removeEventListener("abort", onAbort);
332
+ resolve();
333
+ };
334
+ notifyProducer = onSpace;
335
+ signal?.addEventListener("abort", onAbort, { once: true });
336
+ if (isSignalAborted(signal)) onAbort();
337
+ });
338
+ };
339
+ const dequeue = () => {
340
+ if (!hasQueuedChunks()) return;
341
+ const queuedChunk = queuedChunks[queuedChunkIndex];
342
+ queuedChunkIndex++;
343
+ if (queuedChunkIndex > 128 && queuedChunkIndex * 2 >= queuedChunks.length) {
344
+ queuedChunks.splice(0, queuedChunkIndex);
345
+ queuedChunkIndex = 0;
346
+ }
347
+ return queuedChunk;
348
+ };
349
+ const enqueue = async (queuedChunk) => {
350
+ await waitForQueueSpace();
351
+ if (consumerClosed || isSignalAborted(options.signal)) {
352
+ stream.controller.abort();
353
+ throw new Error("AbortError: User aborted the request.");
354
+ }
355
+ queuedChunks.push(queuedChunk);
356
+ if (queuedChunk.smooth) bufferedTextLength += queuedChunk.textLength;
357
+ notifyConsumerForChunk();
358
+ };
359
+ const enqueueChunk = async ({ token, chunk, smooth }) => {
360
+ await enqueue({
361
+ token,
362
+ smooth,
363
+ textLength: smooth ? token.length : 0,
364
+ chunk: this.createGenerationChunk({
365
+ token,
366
+ chunk,
367
+ shouldStreamUsage
368
+ })
369
+ });
370
+ };
371
+ const enqueueTextChunks = (token, tokenType, chunk) => {
372
+ if (token === "") return Promise.resolve();
373
+ if (this._lc_stream_delay <= 0) return enqueueChunk({
374
+ token,
375
+ chunk,
376
+ smooth: false
377
+ });
378
+ const tokenChunks = splitStreamToken(token);
379
+ if (tokenChunks.length <= 1) return enqueueChunk({
380
+ token,
381
+ chunk,
382
+ smooth: true
383
+ });
384
+ let emittedUsage = false;
385
+ return tokenChunks.reduce(async (previous, currentToken) => {
386
+ await previous;
387
+ const newChunk = cloneChunk(currentToken, tokenType, chunk);
388
+ await enqueueChunk({
389
+ token: currentToken,
390
+ chunk: emittedUsage && newChunk.usage_metadata != null ? new _langchain_core_messages.AIMessageChunk(Object.assign({}, newChunk, { usage_metadata: void 0 })) : newChunk,
391
+ smooth: true
392
+ });
393
+ if (newChunk.usage_metadata != null && !emittedUsage) emittedUsage = true;
394
+ }, Promise.resolve());
395
+ };
396
+ const producer = (async () => {
397
+ try {
398
+ for await (const data of stream) {
399
+ if (isSignalAborted(options.signal)) {
400
+ stream.controller.abort();
401
+ throw new Error("AbortError: User aborted the request.");
402
+ }
403
+ const result = require_message_outputs._makeMessageChunkFromAnthropicEvent(data, {
404
+ streamUsage: shouldStreamUsage,
405
+ coerceContentToString
406
+ });
407
+ if (!result) continue;
408
+ let { chunk } = result;
409
+ if (data.type === "message_delta") {
410
+ const incremental = withIncrementalMessageDeltaUsage(chunk, messageDeltaOutputTokens);
411
+ chunk = incremental.chunk;
412
+ messageDeltaOutputTokens = incremental.outputTokens;
413
+ }
414
+ const [token = "", tokenType] = extractToken(chunk);
415
+ if (!tokenType || tokenType === "input" || token === "" && (chunk.usage_metadata != null || chunk.id != null)) {
416
+ await enqueueChunk({
417
+ token,
418
+ chunk,
419
+ smooth: false
420
+ });
421
+ continue;
422
+ }
423
+ await enqueueTextChunks(token, tokenType, chunk);
424
+ }
425
+ } catch (error) {
426
+ producerState.error = error;
427
+ } finally {
428
+ producerState.done = true;
429
+ notifyConsumerForChunk();
430
+ }
431
+ })();
432
+ let hasEmittedText = false;
433
+ let lastVisibleTextAt;
434
+ let keepStreaming = true;
435
+ try {
436
+ while (keepStreaming) {
437
+ if (isSignalAborted(options.signal)) {
438
+ stream.controller.abort();
439
+ throw new Error("AbortError: User aborted the request.");
440
+ }
441
+ await waitForNextChunk();
442
+ const queuedChunk = dequeue();
443
+ if (!queuedChunk) {
444
+ if (producerState.error != null) throw producerState.error;
445
+ if (producerState.done) keepStreaming = false;
446
+ continue;
447
+ }
448
+ if (queuedChunk.smooth) {
449
+ bufferedTextLength = Math.max(0, bufferedTextLength - queuedChunk.textLength);
450
+ notifyProducerForSpace();
451
+ await waitForStreamDelay(getCadencedStreamDelay({
452
+ targetDelay: hasEmittedText ? this._lc_stream_delay : 0,
453
+ lastVisibleTextAt,
454
+ now: Date.now()
455
+ }), options.signal);
456
+ if (isSignalAborted(options.signal)) {
457
+ stream.controller.abort();
458
+ throw new Error("AbortError: User aborted the request.");
459
+ }
460
+ hasEmittedText = true;
461
+ lastVisibleTextAt = Date.now();
462
+ } else notifyProducerForSpace();
463
+ yield queuedChunk.chunk;
464
+ await runManager?.handleLLMNewToken(queuedChunk.token, void 0, void 0, void 0, void 0, { chunk: queuedChunk.chunk });
465
+ }
466
+ } finally {
467
+ consumerClosed = true;
468
+ if (!producerState.done) {
469
+ stream.controller.abort();
470
+ notifyProducerForSpace();
471
+ }
472
+ await producer;
473
+ this.resetTokenEvents();
474
+ }
475
+ }
476
+ };
477
+ //#endregion
608
478
  exports.CustomAnthropic = CustomAnthropic;
609
- exports._documentsInParams = _documentsInParams;
610
- //# sourceMappingURL=index.cjs.map
479
+
480
+ //# sourceMappingURL=index.cjs.map