@librechat/agents 3.2.32 → 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 (573) 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 +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 +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 +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 -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 +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 +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 +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/tools/search/tool.d.ts +17 -0
  545. package/dist/types/tools/search/types.d.ts +4 -0
  546. package/package.json +4 -10
  547. package/src/tools/search/highlights.ts +9 -1
  548. package/src/tools/search/search.ts +41 -3
  549. package/src/tools/search/source-processing.test.ts +373 -0
  550. package/src/tools/search/tool.ts +22 -2
  551. package/src/tools/search/types.ts +4 -0
  552. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  553. package/dist/cjs/langchain/index.cjs.map +0 -1
  554. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  555. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  556. package/dist/cjs/langchain/messages.cjs.map +0 -1
  557. package/dist/cjs/langchain/openai.cjs.map +0 -1
  558. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  559. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  560. package/dist/cjs/langchain/tools.cjs.map +0 -1
  561. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  562. package/dist/cjs/main.cjs.map +0 -1
  563. package/dist/esm/langchain/google-common.mjs.map +0 -1
  564. package/dist/esm/langchain/index.mjs.map +0 -1
  565. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  566. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  567. package/dist/esm/langchain/messages.mjs.map +0 -1
  568. package/dist/esm/langchain/openai.mjs.map +0 -1
  569. package/dist/esm/langchain/prompts.mjs.map +0 -1
  570. package/dist/esm/langchain/runnables.mjs.map +0 -1
  571. package/dist/esm/langchain/tools.mjs.map +0 -1
  572. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  573. package/dist/esm/main.mjs.map +0 -1
@@ -1,461 +1,435 @@
1
- 'use strict';
2
-
3
- var googleGauth = require('@langchain/google-gauth');
4
- var googleCommon = require('@langchain/google-common');
5
- var messages = require('@langchain/core/messages');
6
-
1
+ let _langchain_core_messages = require("@langchain/core/messages");
2
+ let _langchain_google_gauth = require("@langchain/google-gauth");
3
+ let _langchain_google_common = require("@langchain/google-common");
4
+ //#region src/llm/vertexai/index.ts
7
5
  /**
8
- * `@langchain/google-common`'s `_streamResponseChunks` emits usage on TWO
9
- * different paths within the same stream:
10
- *
11
- * - Streaming chunks set `chunk.generationInfo.usage_metadata` via
12
- * `responseToUsageMetadata`, which correctly sums
13
- * `candidatesTokenCount + thoughtsTokenCount` and includes
14
- * `output_token_details.reasoning`.
15
- * - The trailing fallback chunk (emitted after the API stream exhausts)
16
- * attaches its own `chunk.message.usage_metadata` built inline as
17
- * `output_tokens = candidatesTokenCount` only — dropping
18
- * `thoughtsTokenCount` and `output_token_details` entirely.
19
- *
20
- * After `AIMessageChunk.concat`, only `message.usage_metadata` survives —
21
- * which is the buggy fallback value. This breaks the documented
22
- * `total_tokens === input_tokens + output_tokens` invariant and silently
23
- * undercharges thinking models for reasoning tokens.
24
- *
25
- * The repair: track the last `generationInfo.usage_metadata` we see, and
26
- * when the fallback chunk arrives with its buggy `message.usage_metadata`,
27
- * replace it with the tracked good value. `CustomChatGoogleGenerativeAI`
28
- * solves the same problem for the Google API path differently — by
29
- * overriding `_convertToUsageMetadata`.
30
- */
6
+ * `@langchain/google-common`'s `_streamResponseChunks` emits usage on TWO
7
+ * different paths within the same stream:
8
+ *
9
+ * - Streaming chunks set `chunk.generationInfo.usage_metadata` via
10
+ * `responseToUsageMetadata`, which correctly sums
11
+ * `candidatesTokenCount + thoughtsTokenCount` and includes
12
+ * `output_token_details.reasoning`.
13
+ * - The trailing fallback chunk (emitted after the API stream exhausts)
14
+ * attaches its own `chunk.message.usage_metadata` built inline as
15
+ * `output_tokens = candidatesTokenCount` only — dropping
16
+ * `thoughtsTokenCount` and `output_token_details` entirely.
17
+ *
18
+ * After `AIMessageChunk.concat`, only `message.usage_metadata` survives —
19
+ * which is the buggy fallback value. This breaks the documented
20
+ * `total_tokens === input_tokens + output_tokens` invariant and silently
21
+ * undercharges thinking models for reasoning tokens.
22
+ *
23
+ * The repair: track the last `generationInfo.usage_metadata` we see, and
24
+ * when the fallback chunk arrives with its buggy `message.usage_metadata`,
25
+ * replace it with the tracked good value. `CustomChatGoogleGenerativeAI`
26
+ * solves the same problem for the Google API path differently — by
27
+ * overriding `_convertToUsageMetadata`.
28
+ */
31
29
  function repairStreamUsageMetadata(current, generationInfoUsage) {
32
- if (!current)
33
- return current;
34
- if (!generationInfoUsage)
35
- return current;
36
- if (generationInfoUsage.total_tokens !== current.total_tokens)
37
- return current;
38
- if (generationInfoUsage.output_tokens <= current.output_tokens)
39
- return current;
40
- return generationInfoUsage;
30
+ if (!current) return current;
31
+ if (!generationInfoUsage) return current;
32
+ if (generationInfoUsage.total_tokens !== current.total_tokens) return current;
33
+ if (generationInfoUsage.output_tokens <= current.output_tokens) return current;
34
+ return generationInfoUsage;
41
35
  }
42
36
  /**
43
- * Fixes thought signatures on functionCall parts in the formatted Gemini request.
44
- *
45
- * `@langchain/google-common` stores signatures as a flat array in
46
- * `additional_kwargs.signatures` (one per response part) and re-attaches them
47
- * by index only when `signatures.length === parts.length`. This fails when:
48
- * - The API omits a signature (length mismatch)
49
- * - Streaming chunks merge with different part counts
50
- * - The signature for a functionCall part is an empty string
51
- *
52
- * This function correlates each "model" content block in the formatted request
53
- * back to its originating AI message by *position*, then re-attaches non-empty
54
- * signatures that the library failed to apply. AI messages without signatures
55
- * still consume their slot — filtering them out shifted later messages onto
56
- * the wrong content block and dropped real signatures on the floor.
57
- */
37
+ * Fixes thought signatures on functionCall parts in the formatted Gemini request.
38
+ *
39
+ * `@langchain/google-common` stores signatures as a flat array in
40
+ * `additional_kwargs.signatures` (one per response part) and re-attaches them
41
+ * by index only when `signatures.length === parts.length`. This fails when:
42
+ * - The API omits a signature (length mismatch)
43
+ * - Streaming chunks merge with different part counts
44
+ * - The signature for a functionCall part is an empty string
45
+ *
46
+ * This function correlates each "model" content block in the formatted request
47
+ * back to its originating AI message by *position*, then re-attaches non-empty
48
+ * signatures that the library failed to apply. AI messages without signatures
49
+ * still consume their slot — filtering them out shifted later messages onto
50
+ * the wrong content block and dropped real signatures on the floor.
51
+ */
58
52
  function fixThoughtSignatures(contents, input) {
59
- // All AI messages, in order — non-signature ones still consume positional
60
- // slots so later messages line up with their model content blocks.
61
- const aiMessages = input.filter(messages.isAIMessage);
62
- const modelContents = contents.filter((c) => c.role === 'model');
63
- const count = Math.min(aiMessages.length, modelContents.length);
64
- for (let i = 0; i < count; i++) {
65
- const signatures = aiMessages[i].additional_kwargs
66
- ?.signatures;
67
- if (!Array.isArray(signatures) || signatures.length === 0)
68
- continue;
69
- const content = modelContents[i];
70
- const attachedSignatures = new Set(content.parts
71
- .map((p) => p.thoughtSignature)
72
- .filter((s) => s != null && s !== ''));
73
- const availableSignatures = signatures.filter((s) => s != null && s !== '' && !attachedSignatures.has(s));
74
- let sigIdx = 0;
75
- for (const part of content.parts) {
76
- if ('functionCall' in part &&
77
- (part.thoughtSignature == null || part.thoughtSignature === '') &&
78
- sigIdx < availableSignatures.length) {
79
- part.thoughtSignature = availableSignatures[sigIdx];
80
- sigIdx++;
81
- }
82
- }
83
- }
84
- }
85
- class CustomChatConnection extends googleCommon.ChatConnection {
86
- thinkingConfig;
87
- async formatData(input, parameters) {
88
- const formattedData = (await super.formatData(input, parameters));
89
- if (formattedData.generationConfig?.thinkingConfig?.thinkingBudget === -1) {
90
- // -1 means "let the model decide" - delete the property so the API doesn't receive an invalid value
91
- if (formattedData.generationConfig.thinkingConfig.includeThoughts === false) {
92
- formattedData.generationConfig.thinkingConfig.includeThoughts = true;
93
- }
94
- delete formattedData.generationConfig.thinkingConfig.thinkingBudget;
95
- }
96
- if (this.thinkingConfig?.thinkingLevel != null) {
97
- formattedData.generationConfig ??= {};
98
- // thinkingLevel and thinkingBudget cannot coexist — the API rejects the request.
99
- // Remove thinkingBudget when thinkingLevel is set.
100
- const { thinkingBudget: _, ...existingThinkingConfig } = formattedData.generationConfig.thinkingConfig ?? {};
101
- formattedData.generationConfig.thinkingConfig = {
102
- ...existingThinkingConfig,
103
- thinkingLevel: this.thinkingConfig.thinkingLevel,
104
- ...(this.thinkingConfig.includeThoughts != null && {
105
- includeThoughts: this.thinkingConfig.includeThoughts,
106
- }),
107
- };
108
- }
109
- if (formattedData.contents) {
110
- fixThoughtSignatures(formattedData.contents, input);
111
- // gemini-3.1+ models reject role="function"; convert to role="user"
112
- for (const content of formattedData.contents) {
113
- if (content.role === 'function') {
114
- content.role = 'user';
115
- }
116
- }
117
- }
118
- return formattedData;
119
- }
53
+ const aiMessages = input.filter(_langchain_core_messages.isAIMessage);
54
+ const modelContents = contents.filter((c) => c.role === "model");
55
+ const count = Math.min(aiMessages.length, modelContents.length);
56
+ for (let i = 0; i < count; i++) {
57
+ const signatures = aiMessages[i].additional_kwargs?.signatures;
58
+ if (!Array.isArray(signatures) || signatures.length === 0) continue;
59
+ const content = modelContents[i];
60
+ const attachedSignatures = new Set(content.parts.map((p) => p.thoughtSignature).filter((s) => s != null && s !== ""));
61
+ const availableSignatures = signatures.filter((s) => s != null && s !== "" && !attachedSignatures.has(s));
62
+ let sigIdx = 0;
63
+ for (const part of content.parts) if ("functionCall" in part && (part.thoughtSignature == null || part.thoughtSignature === "") && sigIdx < availableSignatures.length) {
64
+ part.thoughtSignature = availableSignatures[sigIdx];
65
+ sigIdx++;
66
+ }
67
+ }
120
68
  }
69
+ var CustomChatConnection = class extends _langchain_google_common.ChatConnection {
70
+ thinkingConfig;
71
+ async formatData(input, parameters) {
72
+ const formattedData = await super.formatData(input, parameters);
73
+ if (formattedData.generationConfig?.thinkingConfig?.thinkingBudget === -1) {
74
+ if (formattedData.generationConfig.thinkingConfig.includeThoughts === false) formattedData.generationConfig.thinkingConfig.includeThoughts = true;
75
+ delete formattedData.generationConfig.thinkingConfig.thinkingBudget;
76
+ }
77
+ if (this.thinkingConfig?.thinkingLevel != null) {
78
+ formattedData.generationConfig ??= {};
79
+ const { thinkingBudget: _, ...existingThinkingConfig } = formattedData.generationConfig.thinkingConfig ?? {};
80
+ formattedData.generationConfig.thinkingConfig = {
81
+ ...existingThinkingConfig,
82
+ thinkingLevel: this.thinkingConfig.thinkingLevel,
83
+ ...this.thinkingConfig.includeThoughts != null && { includeThoughts: this.thinkingConfig.includeThoughts }
84
+ };
85
+ }
86
+ if (formattedData.contents) {
87
+ fixThoughtSignatures(formattedData.contents, input);
88
+ for (const content of formattedData.contents) if (content.role === "function") content.role = "user";
89
+ }
90
+ return formattedData;
91
+ }
92
+ };
121
93
  /**
122
- * Integration with Google Vertex AI chat models.
123
- *
124
- * Setup:
125
- * Install `@langchain/google-vertexai` and set your stringified
126
- * Vertex AI credentials as an environment variable named `GOOGLE_APPLICATION_CREDENTIALS`.
127
- *
128
- * ```bash
129
- * npm install @langchain/google-vertexai
130
- * export GOOGLE_APPLICATION_CREDENTIALS="path/to/credentials"
131
- * ```
132
- *
133
- * ## [Constructor args](https://api.js.langchain.com/classes/_langchain_google_vertexai.index.ChatVertexAI.html#constructor.new_ChatVertexAI)
134
- *
135
- * ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_google_common_types.GoogleAIBaseLanguageModelCallOptions.html)
136
- *
137
- * Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.
138
- * They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:
139
- *
140
- * ```typescript
141
- * // When calling `.withConfig`, call options should be passed via the first argument
142
- * const llmWithArgsBound = llm.withConfig({
143
- * stop: ["\n"],
144
- * tools: [...],
145
- * });
146
- *
147
- * // When calling `.bindTools`, call options should be passed via the second argument
148
- * const llmWithTools = llm.bindTools(
149
- * [...],
150
- * {
151
- * tool_choice: "auto",
152
- * }
153
- * );
154
- * ```
155
- *
156
- * ## Examples
157
- *
158
- * <details open>
159
- * <summary><strong>Instantiate</strong></summary>
160
- *
161
- * ```typescript
162
- * import { ChatVertexAI } from '@langchain/google-vertexai';
163
- *
164
- * const llm = new ChatVertexAI({
165
- * model: "gemini-1.5-pro",
166
- * temperature: 0,
167
- * // other params...
168
- * });
169
- * ```
170
- * </details>
171
- *
172
- * <br />
173
- *
174
- * <details>
175
- * <summary><strong>Invoking</strong></summary>
176
- *
177
- * ```typescript
178
- * const input = `Translate "I love programming" into French.`;
179
- *
180
- * // Models also accept a list of chat messages or a formatted prompt
181
- * const result = await llm.invoke(input);
182
- * console.log(result);
183
- * ```
184
- *
185
- * ```txt
186
- * AIMessageChunk {
187
- * "content": "\"J'adore programmer\" \n\nHere's why this is the best translation:\n\n* **J'adore** means \"I love\" and conveys a strong passion.\n* **Programmer** is the French verb for \"to program.\"\n\nThis translation is natural and idiomatic in French. \n",
188
- * "additional_kwargs": {},
189
- * "response_metadata": {},
190
- * "tool_calls": [],
191
- * "tool_call_chunks": [],
192
- * "invalid_tool_calls": [],
193
- * "usage_metadata": {
194
- * "input_tokens": 9,
195
- * "output_tokens": 63,
196
- * "total_tokens": 72
197
- * }
198
- * }
199
- * ```
200
- * </details>
201
- *
202
- * <br />
203
- *
204
- * <details>
205
- * <summary><strong>Streaming Chunks</strong></summary>
206
- *
207
- * ```typescript
208
- * for await (const chunk of await llm.stream(input)) {
209
- * console.log(chunk);
210
- * }
211
- * ```
212
- *
213
- * ```txt
214
- * AIMessageChunk {
215
- * "content": "\"",
216
- * "additional_kwargs": {},
217
- * "response_metadata": {},
218
- * "tool_calls": [],
219
- * "tool_call_chunks": [],
220
- * "invalid_tool_calls": []
221
- * }
222
- * AIMessageChunk {
223
- * "content": "J'adore programmer\" \n",
224
- * "additional_kwargs": {},
225
- * "response_metadata": {},
226
- * "tool_calls": [],
227
- * "tool_call_chunks": [],
228
- * "invalid_tool_calls": []
229
- * }
230
- * AIMessageChunk {
231
- * "content": "",
232
- * "additional_kwargs": {},
233
- * "response_metadata": {},
234
- * "tool_calls": [],
235
- * "tool_call_chunks": [],
236
- * "invalid_tool_calls": []
237
- * }
238
- * AIMessageChunk {
239
- * "content": "",
240
- * "additional_kwargs": {},
241
- * "response_metadata": {
242
- * "finishReason": "stop"
243
- * },
244
- * "tool_calls": [],
245
- * "tool_call_chunks": [],
246
- * "invalid_tool_calls": [],
247
- * "usage_metadata": {
248
- * "input_tokens": 9,
249
- * "output_tokens": 8,
250
- * "total_tokens": 17
251
- * }
252
- * }
253
- * ```
254
- * </details>
255
- *
256
- * <br />
257
- *
258
- * <details>
259
- * <summary><strong>Aggregate Streamed Chunks</strong></summary>
260
- *
261
- * ```typescript
262
- * import { AIMessageChunk } from '@langchain/core/messages';
263
- * import { concat } from '@langchain/core/utils/stream';
264
- *
265
- * const stream = await llm.stream(input);
266
- * let full: AIMessageChunk | undefined;
267
- * for await (const chunk of stream) {
268
- * full = !full ? chunk : concat(full, chunk);
269
- * }
270
- * console.log(full);
271
- * ```
272
- *
273
- * ```txt
274
- * AIMessageChunk {
275
- * "content": "\"J'adore programmer\" \n",
276
- * "additional_kwargs": {},
277
- * "response_metadata": {
278
- * "finishReason": "stop"
279
- * },
280
- * "tool_calls": [],
281
- * "tool_call_chunks": [],
282
- * "invalid_tool_calls": [],
283
- * "usage_metadata": {
284
- * "input_tokens": 9,
285
- * "output_tokens": 8,
286
- * "total_tokens": 17
287
- * }
288
- * }
289
- * ```
290
- * </details>
291
- *
292
- * <br />
293
- *
294
- * <details>
295
- * <summary><strong>Bind tools</strong></summary>
296
- *
297
- * ```typescript
298
- * import { z } from 'zod';
299
- *
300
- * const GetWeather = {
301
- * name: "GetWeather",
302
- * description: "Get the current weather in a given location",
303
- * schema: z.object({
304
- * location: z.string().describe("The city and state, e.g. San Francisco, CA")
305
- * }),
306
- * }
307
- *
308
- * const GetPopulation = {
309
- * name: "GetPopulation",
310
- * description: "Get the current population in a given location",
311
- * schema: z.object({
312
- * location: z.string().describe("The city and state, e.g. San Francisco, CA")
313
- * }),
314
- * }
315
- *
316
- * const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);
317
- * const aiMsg = await llmWithTools.invoke(
318
- * "Which city is hotter today and which is bigger: LA or NY?"
319
- * );
320
- * console.log(aiMsg.tool_calls);
321
- * ```
322
- *
323
- * ```txt
324
- * [
325
- * {
326
- * name: 'GetPopulation',
327
- * args: { location: 'New York City, NY' },
328
- * id: '33c1c1f47e2f492799c77d2800a43912',
329
- * type: 'tool_call'
330
- * }
331
- * ]
332
- * ```
333
- * </details>
334
- *
335
- * <br />
336
- *
337
- * <details>
338
- * <summary><strong>Structured Output</strong></summary>
339
- *
340
- * ```typescript
341
- * import { z } from 'zod';
342
- *
343
- * const Joke = z.object({
344
- * setup: z.string().describe("The setup of the joke"),
345
- * punchline: z.string().describe("The punchline to the joke"),
346
- * rating: z.number().optional().describe("How funny the joke is, from 1 to 10")
347
- * }).describe('Joke to tell user.');
348
- *
349
- * const structuredLlm = llm.withStructuredOutput(Joke, { name: "Joke" });
350
- * const jokeResult = await structuredLlm.invoke("Tell me a joke about cats");
351
- * console.log(jokeResult);
352
- * ```
353
- *
354
- * ```txt
355
- * {
356
- * setup: 'What do you call a cat that loves to bowl?',
357
- * punchline: 'An alley cat!'
358
- * }
359
- * ```
360
- * </details>
361
- *
362
- * <br />
363
- *
364
- * <details>
365
- * <summary><strong>Usage Metadata</strong></summary>
366
- *
367
- * ```typescript
368
- * const aiMsgForMetadata = await llm.invoke(input);
369
- * console.log(aiMsgForMetadata.usage_metadata);
370
- * ```
371
- *
372
- * ```txt
373
- * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }
374
- * ```
375
- * </details>
376
- *
377
- * <br />
378
- *
379
- * <details>
380
- * <summary><strong>Stream Usage Metadata</strong></summary>
381
- *
382
- * ```typescript
383
- * const streamForMetadata = await llm.stream(
384
- * input,
385
- * {
386
- * streamUsage: true
387
- * }
388
- * );
389
- * let fullForMetadata: AIMessageChunk | undefined;
390
- * for await (const chunk of streamForMetadata) {
391
- * fullForMetadata = !fullForMetadata ? chunk : concat(fullForMetadata, chunk);
392
- * }
393
- * console.log(fullForMetadata?.usage_metadata);
394
- * ```
395
- *
396
- * ```txt
397
- * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }
398
- * ```
399
- * </details>
400
- *
401
- * <br />
402
- */
403
- class ChatVertexAI extends googleGauth.ChatGoogle {
404
- lc_namespace = ['langchain', 'chat_models', 'vertexai'];
405
- dynamicThinkingBudget = false;
406
- thinkingConfig;
407
- static lc_name() {
408
- return 'LibreChatVertexAI';
409
- }
410
- constructor(modelOrFields, params) {
411
- const fields = typeof modelOrFields === 'string'
412
- ? { ...(params ?? {}), model: modelOrFields }
413
- : modelOrFields;
414
- const dynamicThinkingBudget = fields?.thinkingBudget === -1;
415
- super({
416
- ...fields,
417
- platformType: 'gcp',
418
- });
419
- this.dynamicThinkingBudget = dynamicThinkingBudget;
420
- this.thinkingConfig = fields?.thinkingConfig;
421
- }
422
- invocationParams(options) {
423
- const params = super.invocationParams(options);
424
- if (this.dynamicThinkingBudget) {
425
- params.maxReasoningTokens = -1;
426
- }
427
- return params;
428
- }
429
- async *_streamResponseChunks(messages$1, options, runManager) {
430
- let lastGoodUsage;
431
- for await (const chunk of super._streamResponseChunks(messages$1, options, runManager)) {
432
- const genUsage = chunk.generationInfo?.usage_metadata;
433
- if (genUsage) {
434
- lastGoodUsage = genUsage;
435
- }
436
- if (chunk.message instanceof messages.AIMessageChunk) {
437
- const repaired = repairStreamUsageMetadata(chunk.message.usage_metadata, lastGoodUsage);
438
- if (repaired !== chunk.message.usage_metadata) {
439
- chunk.message.usage_metadata = repaired;
440
- }
441
- }
442
- yield chunk;
443
- }
444
- }
445
- buildConnection(fields, client) {
446
- // Note: buildConnection is called from super() BEFORE this.thinkingConfig is set,
447
- // so we must read thinkingConfig from `fields` directly.
448
- const thinkingConfig = fields?.thinkingConfig ?? this.thinkingConfig;
449
- const connection = new CustomChatConnection({ ...fields, ...this }, this.caller, client, false);
450
- connection.thinkingConfig = thinkingConfig;
451
- this.connection = connection;
452
- const streamedConnection = new CustomChatConnection({ ...fields, ...this }, this.caller, client, true);
453
- streamedConnection.thinkingConfig = thinkingConfig;
454
- this.streamedConnection = streamedConnection;
455
- }
456
- }
457
-
94
+ * Integration with Google Vertex AI chat models.
95
+ *
96
+ * Setup:
97
+ * Install `@langchain/google-vertexai` and set your stringified
98
+ * Vertex AI credentials as an environment variable named `GOOGLE_APPLICATION_CREDENTIALS`.
99
+ *
100
+ * ```bash
101
+ * npm install @langchain/google-vertexai
102
+ * export GOOGLE_APPLICATION_CREDENTIALS="path/to/credentials"
103
+ * ```
104
+ *
105
+ * ## [Constructor args](https://api.js.langchain.com/classes/_langchain_google_vertexai.index.ChatVertexAI.html#constructor.new_ChatVertexAI)
106
+ *
107
+ * ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_google_common_types.GoogleAIBaseLanguageModelCallOptions.html)
108
+ *
109
+ * Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.
110
+ * They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:
111
+ *
112
+ * ```typescript
113
+ * // When calling `.withConfig`, call options should be passed via the first argument
114
+ * const llmWithArgsBound = llm.withConfig({
115
+ * stop: ["\n"],
116
+ * tools: [...],
117
+ * });
118
+ *
119
+ * // When calling `.bindTools`, call options should be passed via the second argument
120
+ * const llmWithTools = llm.bindTools(
121
+ * [...],
122
+ * {
123
+ * tool_choice: "auto",
124
+ * }
125
+ * );
126
+ * ```
127
+ *
128
+ * ## Examples
129
+ *
130
+ * <details open>
131
+ * <summary><strong>Instantiate</strong></summary>
132
+ *
133
+ * ```typescript
134
+ * import { ChatVertexAI } from '@langchain/google-vertexai';
135
+ *
136
+ * const llm = new ChatVertexAI({
137
+ * model: "gemini-1.5-pro",
138
+ * temperature: 0,
139
+ * // other params...
140
+ * });
141
+ * ```
142
+ * </details>
143
+ *
144
+ * <br />
145
+ *
146
+ * <details>
147
+ * <summary><strong>Invoking</strong></summary>
148
+ *
149
+ * ```typescript
150
+ * const input = `Translate "I love programming" into French.`;
151
+ *
152
+ * // Models also accept a list of chat messages or a formatted prompt
153
+ * const result = await llm.invoke(input);
154
+ * console.log(result);
155
+ * ```
156
+ *
157
+ * ```txt
158
+ * AIMessageChunk {
159
+ * "content": "\"J'adore programmer\" \n\nHere's why this is the best translation:\n\n* **J'adore** means \"I love\" and conveys a strong passion.\n* **Programmer** is the French verb for \"to program.\"\n\nThis translation is natural and idiomatic in French. \n",
160
+ * "additional_kwargs": {},
161
+ * "response_metadata": {},
162
+ * "tool_calls": [],
163
+ * "tool_call_chunks": [],
164
+ * "invalid_tool_calls": [],
165
+ * "usage_metadata": {
166
+ * "input_tokens": 9,
167
+ * "output_tokens": 63,
168
+ * "total_tokens": 72
169
+ * }
170
+ * }
171
+ * ```
172
+ * </details>
173
+ *
174
+ * <br />
175
+ *
176
+ * <details>
177
+ * <summary><strong>Streaming Chunks</strong></summary>
178
+ *
179
+ * ```typescript
180
+ * for await (const chunk of await llm.stream(input)) {
181
+ * console.log(chunk);
182
+ * }
183
+ * ```
184
+ *
185
+ * ```txt
186
+ * AIMessageChunk {
187
+ * "content": "\"",
188
+ * "additional_kwargs": {},
189
+ * "response_metadata": {},
190
+ * "tool_calls": [],
191
+ * "tool_call_chunks": [],
192
+ * "invalid_tool_calls": []
193
+ * }
194
+ * AIMessageChunk {
195
+ * "content": "J'adore programmer\" \n",
196
+ * "additional_kwargs": {},
197
+ * "response_metadata": {},
198
+ * "tool_calls": [],
199
+ * "tool_call_chunks": [],
200
+ * "invalid_tool_calls": []
201
+ * }
202
+ * AIMessageChunk {
203
+ * "content": "",
204
+ * "additional_kwargs": {},
205
+ * "response_metadata": {},
206
+ * "tool_calls": [],
207
+ * "tool_call_chunks": [],
208
+ * "invalid_tool_calls": []
209
+ * }
210
+ * AIMessageChunk {
211
+ * "content": "",
212
+ * "additional_kwargs": {},
213
+ * "response_metadata": {
214
+ * "finishReason": "stop"
215
+ * },
216
+ * "tool_calls": [],
217
+ * "tool_call_chunks": [],
218
+ * "invalid_tool_calls": [],
219
+ * "usage_metadata": {
220
+ * "input_tokens": 9,
221
+ * "output_tokens": 8,
222
+ * "total_tokens": 17
223
+ * }
224
+ * }
225
+ * ```
226
+ * </details>
227
+ *
228
+ * <br />
229
+ *
230
+ * <details>
231
+ * <summary><strong>Aggregate Streamed Chunks</strong></summary>
232
+ *
233
+ * ```typescript
234
+ * import { AIMessageChunk } from '@langchain/core/messages';
235
+ * import { concat } from '@langchain/core/utils/stream';
236
+ *
237
+ * const stream = await llm.stream(input);
238
+ * let full: AIMessageChunk | undefined;
239
+ * for await (const chunk of stream) {
240
+ * full = !full ? chunk : concat(full, chunk);
241
+ * }
242
+ * console.log(full);
243
+ * ```
244
+ *
245
+ * ```txt
246
+ * AIMessageChunk {
247
+ * "content": "\"J'adore programmer\" \n",
248
+ * "additional_kwargs": {},
249
+ * "response_metadata": {
250
+ * "finishReason": "stop"
251
+ * },
252
+ * "tool_calls": [],
253
+ * "tool_call_chunks": [],
254
+ * "invalid_tool_calls": [],
255
+ * "usage_metadata": {
256
+ * "input_tokens": 9,
257
+ * "output_tokens": 8,
258
+ * "total_tokens": 17
259
+ * }
260
+ * }
261
+ * ```
262
+ * </details>
263
+ *
264
+ * <br />
265
+ *
266
+ * <details>
267
+ * <summary><strong>Bind tools</strong></summary>
268
+ *
269
+ * ```typescript
270
+ * import { z } from 'zod';
271
+ *
272
+ * const GetWeather = {
273
+ * name: "GetWeather",
274
+ * description: "Get the current weather in a given location",
275
+ * schema: z.object({
276
+ * location: z.string().describe("The city and state, e.g. San Francisco, CA")
277
+ * }),
278
+ * }
279
+ *
280
+ * const GetPopulation = {
281
+ * name: "GetPopulation",
282
+ * description: "Get the current population in a given location",
283
+ * schema: z.object({
284
+ * location: z.string().describe("The city and state, e.g. San Francisco, CA")
285
+ * }),
286
+ * }
287
+ *
288
+ * const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);
289
+ * const aiMsg = await llmWithTools.invoke(
290
+ * "Which city is hotter today and which is bigger: LA or NY?"
291
+ * );
292
+ * console.log(aiMsg.tool_calls);
293
+ * ```
294
+ *
295
+ * ```txt
296
+ * [
297
+ * {
298
+ * name: 'GetPopulation',
299
+ * args: { location: 'New York City, NY' },
300
+ * id: '33c1c1f47e2f492799c77d2800a43912',
301
+ * type: 'tool_call'
302
+ * }
303
+ * ]
304
+ * ```
305
+ * </details>
306
+ *
307
+ * <br />
308
+ *
309
+ * <details>
310
+ * <summary><strong>Structured Output</strong></summary>
311
+ *
312
+ * ```typescript
313
+ * import { z } from 'zod';
314
+ *
315
+ * const Joke = z.object({
316
+ * setup: z.string().describe("The setup of the joke"),
317
+ * punchline: z.string().describe("The punchline to the joke"),
318
+ * rating: z.number().optional().describe("How funny the joke is, from 1 to 10")
319
+ * }).describe('Joke to tell user.');
320
+ *
321
+ * const structuredLlm = llm.withStructuredOutput(Joke, { name: "Joke" });
322
+ * const jokeResult = await structuredLlm.invoke("Tell me a joke about cats");
323
+ * console.log(jokeResult);
324
+ * ```
325
+ *
326
+ * ```txt
327
+ * {
328
+ * setup: 'What do you call a cat that loves to bowl?',
329
+ * punchline: 'An alley cat!'
330
+ * }
331
+ * ```
332
+ * </details>
333
+ *
334
+ * <br />
335
+ *
336
+ * <details>
337
+ * <summary><strong>Usage Metadata</strong></summary>
338
+ *
339
+ * ```typescript
340
+ * const aiMsgForMetadata = await llm.invoke(input);
341
+ * console.log(aiMsgForMetadata.usage_metadata);
342
+ * ```
343
+ *
344
+ * ```txt
345
+ * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }
346
+ * ```
347
+ * </details>
348
+ *
349
+ * <br />
350
+ *
351
+ * <details>
352
+ * <summary><strong>Stream Usage Metadata</strong></summary>
353
+ *
354
+ * ```typescript
355
+ * const streamForMetadata = await llm.stream(
356
+ * input,
357
+ * {
358
+ * streamUsage: true
359
+ * }
360
+ * );
361
+ * let fullForMetadata: AIMessageChunk | undefined;
362
+ * for await (const chunk of streamForMetadata) {
363
+ * fullForMetadata = !fullForMetadata ? chunk : concat(fullForMetadata, chunk);
364
+ * }
365
+ * console.log(fullForMetadata?.usage_metadata);
366
+ * ```
367
+ *
368
+ * ```txt
369
+ * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }
370
+ * ```
371
+ * </details>
372
+ *
373
+ * <br />
374
+ */
375
+ var ChatVertexAI = class extends _langchain_google_gauth.ChatGoogle {
376
+ lc_namespace = [
377
+ "langchain",
378
+ "chat_models",
379
+ "vertexai"
380
+ ];
381
+ dynamicThinkingBudget = false;
382
+ thinkingConfig;
383
+ static lc_name() {
384
+ return "LibreChatVertexAI";
385
+ }
386
+ constructor(modelOrFields, params) {
387
+ const fields = typeof modelOrFields === "string" ? {
388
+ ...params ?? {},
389
+ model: modelOrFields
390
+ } : modelOrFields;
391
+ const dynamicThinkingBudget = fields?.thinkingBudget === -1;
392
+ super({
393
+ ...fields,
394
+ platformType: "gcp"
395
+ });
396
+ this.dynamicThinkingBudget = dynamicThinkingBudget;
397
+ this.thinkingConfig = fields?.thinkingConfig;
398
+ }
399
+ invocationParams(options) {
400
+ const params = super.invocationParams(options);
401
+ if (this.dynamicThinkingBudget) params.maxReasoningTokens = -1;
402
+ return params;
403
+ }
404
+ async *_streamResponseChunks(messages, options, runManager) {
405
+ let lastGoodUsage;
406
+ for await (const chunk of super._streamResponseChunks(messages, options, runManager)) {
407
+ const genUsage = chunk.generationInfo?.usage_metadata;
408
+ if (genUsage) lastGoodUsage = genUsage;
409
+ if (chunk.message instanceof _langchain_core_messages.AIMessageChunk) {
410
+ const repaired = repairStreamUsageMetadata(chunk.message.usage_metadata, lastGoodUsage);
411
+ if (repaired !== chunk.message.usage_metadata) chunk.message.usage_metadata = repaired;
412
+ }
413
+ yield chunk;
414
+ }
415
+ }
416
+ buildConnection(fields, client) {
417
+ const thinkingConfig = fields?.thinkingConfig ?? this.thinkingConfig;
418
+ const connection = new CustomChatConnection({
419
+ ...fields,
420
+ ...this
421
+ }, this.caller, client, false);
422
+ connection.thinkingConfig = thinkingConfig;
423
+ this.connection = connection;
424
+ const streamedConnection = new CustomChatConnection({
425
+ ...fields,
426
+ ...this
427
+ }, this.caller, client, true);
428
+ streamedConnection.thinkingConfig = thinkingConfig;
429
+ this.streamedConnection = streamedConnection;
430
+ }
431
+ };
432
+ //#endregion
458
433
  exports.ChatVertexAI = ChatVertexAI;
459
- exports.fixThoughtSignatures = fixThoughtSignatures;
460
- exports.repairStreamUsageMetadata = repairStreamUsageMetadata;
461
- //# sourceMappingURL=index.cjs.map
434
+
435
+ //# sourceMappingURL=index.cjs.map