@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,709 +1,439 @@
1
- 'use strict';
2
-
3
- var uuid = require('uuid');
4
- var outputs = require('@langchain/core/outputs');
5
- require('@langchain/core/language_models/base');
6
- require('@langchain/core/utils/function_calling');
7
- var messages = require('@langchain/core/messages');
8
- require('@langchain/core/utils/types');
9
- require('@langchain/core/utils/json_schema');
10
- var langchain = require('../../../messages/langchain.cjs');
11
-
12
- const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY = '__gemini_function_call_thought_signatures__';
13
- const DUMMY_SIGNATURE = 'ErYCCrMCAdHtim9kOoOkrPiCNVsmlpMIKd7ZMxgiFbVQOkgp7nlLcDMzVsZwIzvuT7nQROivoXA72ccC2lSDvR0Gh7dkWaGuj7ctv6t7ZceHnecx0QYa+ix8tYpRfjhyWozQ49lWiws6+YGjCt10KRTyWsZ2h6O7iHTYJwKIRwGUHRKy/qK/6kFxJm5ML00gLq4D8s5Z6DBpp2ZlR+uF4G8jJgeWQgyHWVdx2wGYElaceVAc66tZdPQRdOHpWtgYSI1YdaXgVI8KHY3/EfNc2YqqMIulvkDBAnuMhkAjV9xmBa54Tq+ih3Im4+r3DzqhGqYdsSkhS0kZMwte4Hjs65dZzCw9lANxIqYi1DJ639WNPYihp/DCJCos7o+/EeSPJaio5sgWDyUnMGkY1atsJZ+m7pj7DD5tvQ==';
1
+ const require_langchain = require("../../../messages/langchain.cjs");
2
+ const require_streamedToolCallSeals = require("../../../tools/streamedToolCallSeals.cjs");
3
+ require("./zod_to_genai_parameters.cjs");
4
+ let _langchain_core_messages = require("@langchain/core/messages");
5
+ let uuid = require("uuid");
6
+ let _langchain_core_outputs = require("@langchain/core/outputs");
7
+ require("@langchain/core/utils/function_calling");
8
+ require("@langchain/core/language_models/base");
9
+ //#region src/llm/google/utils/common.ts
10
+ const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY = "__gemini_function_call_thought_signatures__";
11
+ const DUMMY_SIGNATURE = "ErYCCrMCAdHtim9kOoOkrPiCNVsmlpMIKd7ZMxgiFbVQOkgp7nlLcDMzVsZwIzvuT7nQROivoXA72ccC2lSDvR0Gh7dkWaGuj7ctv6t7ZceHnecx0QYa+ix8tYpRfjhyWozQ49lWiws6+YGjCt10KRTyWsZ2h6O7iHTYJwKIRwGUHRKy/qK/6kFxJm5ML00gLq4D8s5Z6DBpp2ZlR+uF4G8jJgeWQgyHWVdx2wGYElaceVAc66tZdPQRdOHpWtgYSI1YdaXgVI8KHY3/EfNc2YqqMIulvkDBAnuMhkAjV9xmBa54Tq+ih3Im4+r3DzqhGqYdsSkhS0kZMwte4Hjs65dZzCw9lANxIqYi1DJ639WNPYihp/DCJCos7o+/EeSPJaio5sgWDyUnMGkY1atsJZ+m7pj7DD5tvQ==";
14
12
  function getGoogleFunctionId(id) {
15
- return id != null && id !== '' ? id : undefined;
13
+ return id != null && id !== "" ? id : void 0;
16
14
  }
17
- function createGoogleFunctionResponsePart({ name, response, id, }) {
18
- const functionId = getGoogleFunctionId(id);
19
- const functionResponse = {
20
- name,
21
- response,
22
- ...(functionId != null ? { id: functionId } : {}),
23
- };
24
- return { functionResponse };
15
+ function createGoogleFunctionResponsePart({ name, response, id }) {
16
+ const functionId = getGoogleFunctionId(id);
17
+ return { functionResponse: {
18
+ name,
19
+ response,
20
+ ...functionId != null ? { id: functionId } : {}
21
+ } };
25
22
  }
26
23
  /**
27
- * Executes a function immediately and returns its result.
28
- * Functional utility similar to an Immediately Invoked Function Expression (IIFE).
29
- * @param fn The function to execute.
30
- * @returns The result of invoking fn.
31
- */
24
+ * Executes a function immediately and returns its result.
25
+ * Functional utility similar to an Immediately Invoked Function Expression (IIFE).
26
+ * @param fn The function to execute.
27
+ * @returns The result of invoking fn.
28
+ */
32
29
  const iife = (fn) => fn();
33
30
  function getMessageAuthor(message) {
34
- const type = message._getType();
35
- if (messages.ChatMessage.isInstance(message)) {
36
- return message.role;
37
- }
38
- if (type === 'tool') {
39
- return type;
40
- }
41
- return message.name ?? type;
31
+ const type = message._getType();
32
+ if (_langchain_core_messages.ChatMessage.isInstance(message)) return message.role;
33
+ if (type === "tool") return type;
34
+ return message.name ?? type;
42
35
  }
43
36
  /**
44
- * Maps a message type to a Google Generative AI chat author.
45
- * @param message The message to map.
46
- * @param model The model to use for mapping.
47
- * @returns The message type mapped to a Google Generative AI chat author.
48
- */
37
+ * Maps a message type to a Google Generative AI chat author.
38
+ * @param message The message to map.
39
+ * @param model The model to use for mapping.
40
+ * @returns The message type mapped to a Google Generative AI chat author.
41
+ */
49
42
  function convertAuthorToRole(author) {
50
- switch (author) {
51
- /**
52
- * Note: Gemini currently is not supporting system messages
53
- * we will convert them to human messages and merge with following
54
- * */
55
- case 'supervisor':
56
- case 'ai':
57
- case 'model': // getMessageAuthor returns message.name. code ex.: return message.name ?? type;
58
- return 'model';
59
- case 'system':
60
- return 'system';
61
- case 'human':
62
- return 'user';
63
- case 'tool':
64
- case 'function':
65
- return 'function';
66
- default:
67
- throw new Error(`Unknown / unsupported author: ${author}`);
68
- }
43
+ switch (author) {
44
+ /**
45
+ * Note: Gemini currently is not supporting system messages
46
+ * we will convert them to human messages and merge with following
47
+ * */
48
+ case "supervisor":
49
+ case "ai":
50
+ case "model": return "model";
51
+ case "system": return "system";
52
+ case "human": return "user";
53
+ case "tool":
54
+ case "function": return "function";
55
+ default: throw new Error(`Unknown / unsupported author: ${author}`);
56
+ }
69
57
  }
70
58
  function messageContentMedia(content) {
71
- if ('mimeType' in content && 'data' in content) {
72
- return {
73
- inlineData: {
74
- mimeType: content.mimeType,
75
- data: content.data,
76
- },
77
- };
78
- }
79
- if ('mimeType' in content && 'fileUri' in content) {
80
- return {
81
- fileData: {
82
- mimeType: content.mimeType,
83
- fileUri: content.fileUri,
84
- },
85
- };
86
- }
87
- throw new Error('Invalid media content');
59
+ if ("mimeType" in content && "data" in content) return { inlineData: {
60
+ mimeType: content.mimeType,
61
+ data: content.data
62
+ } };
63
+ if ("mimeType" in content && "fileUri" in content) return { fileData: {
64
+ mimeType: content.mimeType,
65
+ fileUri: content.fileUri
66
+ } };
67
+ throw new Error("Invalid media content");
88
68
  }
89
69
  function isGoogleServerSideToolPart(content) {
90
- return ('toolCall' in content ||
91
- 'toolResponse' in content ||
92
- content.type === 'toolCall' ||
93
- content.type === 'toolResponse');
70
+ return "toolCall" in content || "toolResponse" in content || content.type === "toolCall" || content.type === "toolResponse";
94
71
  }
95
72
  function convertGoogleServerSideToolPart(content) {
96
- const metadata = {};
97
- if ('thought' in content && typeof content.thought === 'boolean') {
98
- metadata.thought = content.thought;
99
- }
100
- if ('thoughtSignature' in content &&
101
- typeof content.thoughtSignature === 'string') {
102
- metadata.thoughtSignature = content.thoughtSignature;
103
- }
104
- if ('toolCall' in content && content.toolCall != null) {
105
- return { toolCall: content.toolCall, ...metadata };
106
- }
107
- if ('toolResponse' in content && content.toolResponse != null) {
108
- return {
109
- toolResponse: content.toolResponse,
110
- ...metadata,
111
- };
112
- }
113
- return content;
73
+ const metadata = {};
74
+ if ("thought" in content && typeof content.thought === "boolean") metadata.thought = content.thought;
75
+ if ("thoughtSignature" in content && typeof content.thoughtSignature === "string") metadata.thoughtSignature = content.thoughtSignature;
76
+ if ("toolCall" in content && content.toolCall != null) return {
77
+ toolCall: content.toolCall,
78
+ ...metadata
79
+ };
80
+ if ("toolResponse" in content && content.toolResponse != null) return {
81
+ toolResponse: content.toolResponse,
82
+ ...metadata
83
+ };
84
+ return content;
114
85
  }
115
86
  function convertGoogleServerSideToolResponsePart(part) {
116
- if ('toolCall' in part &&
117
- typeof part.toolCall === 'object' &&
118
- part.toolCall != null) {
119
- return { ...part, type: 'toolCall', toolCall: part.toolCall };
120
- }
121
- if ('toolResponse' in part &&
122
- typeof part.toolResponse === 'object' &&
123
- part.toolResponse != null) {
124
- return { ...part, type: 'toolResponse', toolResponse: part.toolResponse };
125
- }
126
- return undefined;
87
+ if ("toolCall" in part && typeof part.toolCall === "object" && part.toolCall != null) return {
88
+ ...part,
89
+ type: "toolCall",
90
+ toolCall: part.toolCall
91
+ };
92
+ if ("toolResponse" in part && typeof part.toolResponse === "object" && part.toolResponse != null) return {
93
+ ...part,
94
+ type: "toolResponse",
95
+ toolResponse: part.toolResponse
96
+ };
127
97
  }
128
98
  function inferToolNameFromPreviousMessages(message, previousMessages) {
129
- return previousMessages
130
- .map((msg) => {
131
- if (messages.isAIMessage(msg)) {
132
- return msg.tool_calls ?? [];
133
- }
134
- return [];
135
- })
136
- .flat()
137
- .find((toolCall) => {
138
- return toolCall.id === message.tool_call_id;
139
- })?.name;
99
+ return previousMessages.map((msg) => {
100
+ if ((0, _langchain_core_messages.isAIMessage)(msg)) return msg.tool_calls ?? [];
101
+ return [];
102
+ }).flat().find((toolCall) => {
103
+ return toolCall.id === message.tool_call_id;
104
+ })?.name;
140
105
  }
141
106
  function _getStandardContentBlockConverter(isMultimodalModel) {
142
- const standardContentBlockConverter = {
143
- providerName: 'Google Gemini',
144
- fromStandardTextBlock(block) {
145
- return {
146
- text: block.text,
147
- };
148
- },
149
- fromStandardImageBlock(block) {
150
- if (!isMultimodalModel) {
151
- throw new Error('This model does not support images');
152
- }
153
- if (block.source_type === 'url') {
154
- const data = messages.parseBase64DataUrl({ dataUrl: block.url });
155
- if (data) {
156
- return {
157
- inlineData: {
158
- mimeType: data.mime_type,
159
- data: data.data,
160
- },
161
- };
162
- }
163
- else {
164
- return {
165
- fileData: {
166
- mimeType: block.mime_type ?? '',
167
- fileUri: block.url,
168
- },
169
- };
170
- }
171
- }
172
- if (block.source_type === 'base64') {
173
- return {
174
- inlineData: {
175
- mimeType: block.mime_type ?? '',
176
- data: block.data,
177
- },
178
- };
179
- }
180
- throw new Error(`Unsupported source type: ${block.source_type}`);
181
- },
182
- fromStandardAudioBlock(block) {
183
- if (!isMultimodalModel) {
184
- throw new Error('This model does not support audio');
185
- }
186
- if (block.source_type === 'url') {
187
- const data = messages.parseBase64DataUrl({ dataUrl: block.url });
188
- if (data) {
189
- return {
190
- inlineData: {
191
- mimeType: data.mime_type,
192
- data: data.data,
193
- },
194
- };
195
- }
196
- else {
197
- return {
198
- fileData: {
199
- mimeType: block.mime_type ?? '',
200
- fileUri: block.url,
201
- },
202
- };
203
- }
204
- }
205
- if (block.source_type === 'base64') {
206
- return {
207
- inlineData: {
208
- mimeType: block.mime_type ?? '',
209
- data: block.data,
210
- },
211
- };
212
- }
213
- throw new Error(`Unsupported source type: ${block.source_type}`);
214
- },
215
- fromStandardFileBlock(block) {
216
- if (!isMultimodalModel) {
217
- throw new Error('This model does not support files');
218
- }
219
- if (block.source_type === 'text') {
220
- return {
221
- text: block.text,
222
- };
223
- }
224
- if (block.source_type === 'url') {
225
- const data = messages.parseBase64DataUrl({ dataUrl: block.url });
226
- if (data) {
227
- return {
228
- inlineData: {
229
- mimeType: data.mime_type,
230
- data: data.data,
231
- },
232
- };
233
- }
234
- else {
235
- return {
236
- fileData: {
237
- mimeType: block.mime_type ?? '',
238
- fileUri: block.url,
239
- },
240
- };
241
- }
242
- }
243
- if (block.source_type === 'base64') {
244
- return {
245
- inlineData: {
246
- mimeType: block.mime_type ?? '',
247
- data: block.data,
248
- },
249
- };
250
- }
251
- throw new Error(`Unsupported source type: ${block.source_type}`);
252
- },
253
- };
254
- return standardContentBlockConverter;
107
+ return {
108
+ providerName: "Google Gemini",
109
+ fromStandardTextBlock(block) {
110
+ return { text: block.text };
111
+ },
112
+ fromStandardImageBlock(block) {
113
+ if (!isMultimodalModel) throw new Error("This model does not support images");
114
+ if (block.source_type === "url") {
115
+ const data = (0, _langchain_core_messages.parseBase64DataUrl)({ dataUrl: block.url });
116
+ if (data) return { inlineData: {
117
+ mimeType: data.mime_type,
118
+ data: data.data
119
+ } };
120
+ else return { fileData: {
121
+ mimeType: block.mime_type ?? "",
122
+ fileUri: block.url
123
+ } };
124
+ }
125
+ if (block.source_type === "base64") return { inlineData: {
126
+ mimeType: block.mime_type ?? "",
127
+ data: block.data
128
+ } };
129
+ throw new Error(`Unsupported source type: ${block.source_type}`);
130
+ },
131
+ fromStandardAudioBlock(block) {
132
+ if (!isMultimodalModel) throw new Error("This model does not support audio");
133
+ if (block.source_type === "url") {
134
+ const data = (0, _langchain_core_messages.parseBase64DataUrl)({ dataUrl: block.url });
135
+ if (data) return { inlineData: {
136
+ mimeType: data.mime_type,
137
+ data: data.data
138
+ } };
139
+ else return { fileData: {
140
+ mimeType: block.mime_type ?? "",
141
+ fileUri: block.url
142
+ } };
143
+ }
144
+ if (block.source_type === "base64") return { inlineData: {
145
+ mimeType: block.mime_type ?? "",
146
+ data: block.data
147
+ } };
148
+ throw new Error(`Unsupported source type: ${block.source_type}`);
149
+ },
150
+ fromStandardFileBlock(block) {
151
+ if (!isMultimodalModel) throw new Error("This model does not support files");
152
+ if (block.source_type === "text") return { text: block.text };
153
+ if (block.source_type === "url") {
154
+ const data = (0, _langchain_core_messages.parseBase64DataUrl)({ dataUrl: block.url });
155
+ if (data) return { inlineData: {
156
+ mimeType: data.mime_type,
157
+ data: data.data
158
+ } };
159
+ else return { fileData: {
160
+ mimeType: block.mime_type ?? "",
161
+ fileUri: block.url
162
+ } };
163
+ }
164
+ if (block.source_type === "base64") return { inlineData: {
165
+ mimeType: block.mime_type ?? "",
166
+ data: block.data
167
+ } };
168
+ throw new Error(`Unsupported source type: ${block.source_type}`);
169
+ }
170
+ };
255
171
  }
256
172
  function _convertLangChainContentToPart(content, isMultimodalModel) {
257
- if (messages.isDataContentBlock(content)) {
258
- return messages.convertToProviderContentBlock(content, _getStandardContentBlockConverter(isMultimodalModel));
259
- }
260
- if (isGoogleServerSideToolPart(content)) {
261
- return convertGoogleServerSideToolPart(content);
262
- }
263
- if (content.type === 'text') {
264
- return { text: content.text };
265
- }
266
- else if (content.type === 'executableCode') {
267
- return { executableCode: content.executableCode };
268
- }
269
- else if (content.type === 'codeExecutionResult') {
270
- return { codeExecutionResult: content.codeExecutionResult };
271
- }
272
- else if (content.type === 'image_url') {
273
- if (!isMultimodalModel) {
274
- throw new Error('This model does not support images');
275
- }
276
- let source;
277
- if (typeof content.image_url === 'string') {
278
- source = content.image_url;
279
- }
280
- else if (typeof content.image_url === 'object' &&
281
- 'url' in content.image_url) {
282
- source = content.image_url.url;
283
- }
284
- else {
285
- throw new Error('Please provide image as base64 encoded data URL');
286
- }
287
- const [dm, data] = source.split(',');
288
- if (!dm.startsWith('data:')) {
289
- throw new Error('Please provide image as base64 encoded data URL');
290
- }
291
- const [mimeType, encoding] = dm.replace(/^data:/, '').split(';');
292
- if (encoding !== 'base64') {
293
- throw new Error('Please provide image as base64 encoded data URL');
294
- }
295
- return {
296
- inlineData: {
297
- data,
298
- mimeType,
299
- },
300
- };
301
- }
302
- else if (content.type === 'media') {
303
- return messageContentMedia(content);
304
- }
305
- else if (content.type === 'tool_use') {
306
- return {
307
- functionCall: {
308
- name: content.name,
309
- args: content.input,
310
- },
311
- };
312
- }
313
- else if (content.type?.includes('/') === true &&
314
- // Ensure it's a single slash.
315
- content.type.split('/').length === 2 &&
316
- 'data' in content &&
317
- typeof content.data === 'string') {
318
- return {
319
- inlineData: {
320
- mimeType: content.type,
321
- data: content.data,
322
- },
323
- };
324
- }
325
- else if ('functionCall' in content) {
326
- // No action needed here — function calls will be added later from message.tool_calls
327
- return undefined;
328
- }
329
- else {
330
- if ('type' in content) {
331
- throw new Error(`Unknown content type ${content.type}`);
332
- }
333
- else {
334
- throw new Error(`Unknown content ${JSON.stringify(content)}`);
335
- }
336
- }
173
+ if ((0, _langchain_core_messages.isDataContentBlock)(content)) return (0, _langchain_core_messages.convertToProviderContentBlock)(content, _getStandardContentBlockConverter(isMultimodalModel));
174
+ if (isGoogleServerSideToolPart(content)) return convertGoogleServerSideToolPart(content);
175
+ if (content.type === "text") return { text: content.text };
176
+ else if (content.type === "executableCode") return { executableCode: content.executableCode };
177
+ else if (content.type === "codeExecutionResult") return { codeExecutionResult: content.codeExecutionResult };
178
+ else if (content.type === "image_url") {
179
+ if (!isMultimodalModel) throw new Error("This model does not support images");
180
+ let source;
181
+ if (typeof content.image_url === "string") source = content.image_url;
182
+ else if (typeof content.image_url === "object" && "url" in content.image_url) source = content.image_url.url;
183
+ else throw new Error("Please provide image as base64 encoded data URL");
184
+ const [dm, data] = source.split(",");
185
+ if (!dm.startsWith("data:")) throw new Error("Please provide image as base64 encoded data URL");
186
+ const [mimeType, encoding] = dm.replace(/^data:/, "").split(";");
187
+ if (encoding !== "base64") throw new Error("Please provide image as base64 encoded data URL");
188
+ return { inlineData: {
189
+ data,
190
+ mimeType
191
+ } };
192
+ } else if (content.type === "media") return messageContentMedia(content);
193
+ else if (content.type === "tool_use") return { functionCall: {
194
+ name: content.name,
195
+ args: content.input
196
+ } };
197
+ else if (content.type?.includes("/") === true && content.type.split("/").length === 2 && "data" in content && typeof content.data === "string") return { inlineData: {
198
+ mimeType: content.type,
199
+ data: content.data
200
+ } };
201
+ else if ("functionCall" in content) return;
202
+ else if ("type" in content) throw new Error(`Unknown content type ${content.type}`);
203
+ else throw new Error(`Unknown content ${JSON.stringify(content)}`);
337
204
  }
338
205
  function convertMessageContentToParts(message, isMultimodalModel, previousMessages, model) {
339
- if (messages.isToolMessage(message)) {
340
- const messageName = message.name ??
341
- inferToolNameFromPreviousMessages(message, previousMessages);
342
- if (messageName === undefined) {
343
- throw new Error(`Google requires a tool name for each tool call response, and we could not infer a called tool name for ToolMessage "${message.id}" from your passed messages. Please populate a "name" field on that ToolMessage explicitly.`);
344
- }
345
- const result = Array.isArray(message.content)
346
- ? message.content
347
- .map((c) => _convertLangChainContentToPart(c, isMultimodalModel))
348
- .filter((p) => p !== undefined)
349
- : message.content;
350
- if (message.status === 'error') {
351
- return [
352
- createGoogleFunctionResponsePart({
353
- name: messageName,
354
- // The API expects an object with an `error` field if the function call fails.
355
- // `error` must be a valid object (not a string or array), so we wrap `message.content` here
356
- response: { error: { details: result } },
357
- id: message.tool_call_id,
358
- }),
359
- ];
360
- }
361
- return [
362
- createGoogleFunctionResponsePart({
363
- name: messageName,
364
- // again, can't have a string or array value for `response`, so we wrap it as an object here
365
- response: { result },
366
- id: message.tool_call_id,
367
- }),
368
- ];
369
- }
370
- let functionCalls = [];
371
- const messageParts = [];
372
- if (typeof message.content === 'string' && message.content) {
373
- messageParts.push({ text: message.content });
374
- }
375
- if (Array.isArray(message.content)) {
376
- messageParts.push(...message.content
377
- .map((c) => _convertLangChainContentToPart(c, isMultimodalModel))
378
- .filter((p) => p !== undefined));
379
- }
380
- const functionThoughtSignatures = message.additional_kwargs?.[_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY];
381
- if (messages.isAIMessage(message) && (message.tool_calls?.length ?? 0) > 0) {
382
- functionCalls = (message.tool_calls ?? []).map((tc) => {
383
- const thoughtSignature = iife(() => {
384
- if (tc.id != null && tc.id !== '') {
385
- const signature = functionThoughtSignatures?.[tc.id];
386
- if (signature != null && signature !== '') {
387
- return signature;
388
- }
389
- }
390
- if (model?.includes('gemini-3') === true) {
391
- return DUMMY_SIGNATURE;
392
- }
393
- return '';
394
- });
395
- const functionId = getGoogleFunctionId(tc.id);
396
- const functionCall = {
397
- name: tc.name,
398
- args: tc.args,
399
- ...(functionId != null ? { id: functionId } : {}),
400
- };
401
- return {
402
- functionCall,
403
- ...(thoughtSignature ? { thoughtSignature } : {}),
404
- };
405
- });
406
- }
407
- return [...messageParts, ...functionCalls];
206
+ if ((0, _langchain_core_messages.isToolMessage)(message)) {
207
+ const messageName = message.name ?? inferToolNameFromPreviousMessages(message, previousMessages);
208
+ if (messageName === void 0) throw new Error(`Google requires a tool name for each tool call response, and we could not infer a called tool name for ToolMessage "${message.id}" from your passed messages. Please populate a "name" field on that ToolMessage explicitly.`);
209
+ const result = Array.isArray(message.content) ? message.content.map((c) => _convertLangChainContentToPart(c, isMultimodalModel)).filter((p) => p !== void 0) : message.content;
210
+ if (message.status === "error") return [createGoogleFunctionResponsePart({
211
+ name: messageName,
212
+ response: { error: { details: result } },
213
+ id: message.tool_call_id
214
+ })];
215
+ return [createGoogleFunctionResponsePart({
216
+ name: messageName,
217
+ response: { result },
218
+ id: message.tool_call_id
219
+ })];
220
+ }
221
+ let functionCalls = [];
222
+ const messageParts = [];
223
+ if (typeof message.content === "string" && message.content) messageParts.push({ text: message.content });
224
+ if (Array.isArray(message.content)) messageParts.push(...message.content.map((c) => _convertLangChainContentToPart(c, isMultimodalModel)).filter((p) => p !== void 0));
225
+ const functionThoughtSignatures = message.additional_kwargs?.[_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY];
226
+ if ((0, _langchain_core_messages.isAIMessage)(message) && (message.tool_calls?.length ?? 0) > 0) functionCalls = (message.tool_calls ?? []).map((tc) => {
227
+ const thoughtSignature = iife(() => {
228
+ if (tc.id != null && tc.id !== "") {
229
+ const signature = functionThoughtSignatures?.[tc.id];
230
+ if (signature != null && signature !== "") return signature;
231
+ }
232
+ if (model?.includes("gemini-3") === true) return DUMMY_SIGNATURE;
233
+ return "";
234
+ });
235
+ const functionId = getGoogleFunctionId(tc.id);
236
+ return {
237
+ functionCall: {
238
+ name: tc.name,
239
+ args: tc.args,
240
+ ...functionId != null ? { id: functionId } : {}
241
+ },
242
+ ...thoughtSignature ? { thoughtSignature } : {}
243
+ };
244
+ });
245
+ return [...messageParts, ...functionCalls];
408
246
  }
409
- function convertBaseMessagesToContent(messages$1, isMultimodalModel, convertSystemMessageToHumanContent = false, model) {
410
- return messages$1.reduce((acc, message, index) => {
411
- if (!messages.isBaseMessage(message)) {
412
- throw new Error('Unsupported message input');
413
- }
414
- const author = getMessageAuthor(message);
415
- if (author === 'system' && index !== 0) {
416
- throw new Error('System message should be the first one');
417
- }
418
- const role = convertAuthorToRole(author);
419
- const prevContent = acc.content?.[acc.content.length];
420
- if (!acc.mergeWithPreviousContent &&
421
- prevContent &&
422
- prevContent.role === role) {
423
- throw new Error('Google Generative AI requires alternate messages between authors');
424
- }
425
- const parts = convertMessageContentToParts(message, isMultimodalModel, messages$1.slice(0, index), model);
426
- if (acc.mergeWithPreviousContent) {
427
- const prevContent = acc.content?.[acc.content.length - 1];
428
- if (!prevContent) {
429
- throw new Error('There was a problem parsing your system message. Please try a prompt without one.');
430
- }
431
- prevContent.parts.push(...parts);
432
- return {
433
- mergeWithPreviousContent: false,
434
- content: acc.content,
435
- };
436
- }
437
- let actualRole = role;
438
- if (actualRole === 'function' ||
439
- (actualRole === 'system' && !convertSystemMessageToHumanContent)) {
440
- // GenerativeAI API will throw an error if the role is not "user" or "model."
441
- actualRole = 'user';
442
- }
443
- const content = {
444
- role: actualRole,
445
- parts,
446
- };
447
- return {
448
- mergeWithPreviousContent: author === 'system' && !convertSystemMessageToHumanContent,
449
- content: [...(acc.content ?? []), content],
450
- };
451
- }, { content: [], mergeWithPreviousContent: false }).content;
247
+ function convertBaseMessagesToContent(messages, isMultimodalModel, convertSystemMessageToHumanContent = false, model) {
248
+ return messages.reduce((acc, message, index) => {
249
+ if (!(0, _langchain_core_messages.isBaseMessage)(message)) throw new Error("Unsupported message input");
250
+ const author = getMessageAuthor(message);
251
+ if (author === "system" && index !== 0) throw new Error("System message should be the first one");
252
+ const role = convertAuthorToRole(author);
253
+ const prevContent = acc.content?.[acc.content.length];
254
+ if (!acc.mergeWithPreviousContent && prevContent && prevContent.role === role) throw new Error("Google Generative AI requires alternate messages between authors");
255
+ const parts = convertMessageContentToParts(message, isMultimodalModel, messages.slice(0, index), model);
256
+ if (acc.mergeWithPreviousContent) {
257
+ const prevContent = acc.content?.[acc.content.length - 1];
258
+ if (!prevContent) throw new Error("There was a problem parsing your system message. Please try a prompt without one.");
259
+ prevContent.parts.push(...parts);
260
+ return {
261
+ mergeWithPreviousContent: false,
262
+ content: acc.content
263
+ };
264
+ }
265
+ let actualRole = role;
266
+ if (actualRole === "function" || actualRole === "system" && !convertSystemMessageToHumanContent) actualRole = "user";
267
+ const content = {
268
+ role: actualRole,
269
+ parts
270
+ };
271
+ return {
272
+ mergeWithPreviousContent: author === "system" && !convertSystemMessageToHumanContent,
273
+ content: [...acc.content ?? [], content]
274
+ };
275
+ }, {
276
+ content: [],
277
+ mergeWithPreviousContent: false
278
+ }).content;
452
279
  }
453
280
  function convertResponseContentToChatGenerationChunk(response, extra) {
454
- if (!response.candidates || response.candidates.length === 0) {
455
- return null;
456
- }
457
- const [candidate] = response.candidates;
458
- const { content: candidateContent, ...generationInfo } = candidate ?? {};
459
- // Extract function calls directly from parts to preserve thoughtSignature
460
- const functionCalls = candidateContent?.parts?.reduce((acc, p) => {
461
- if ('functionCall' in p && p.functionCall) {
462
- acc.push({
463
- ...p,
464
- id: 'id' in p.functionCall && typeof p.functionCall.id === 'string'
465
- ? p.functionCall.id
466
- : uuid.v4(),
467
- });
468
- }
469
- return acc;
470
- }, []) ?? [];
471
- let content;
472
- // Checks if some parts do not have text. If false, it means that the content is a string.
473
- const reasoningParts = [];
474
- if (candidateContent != null &&
475
- Array.isArray(candidateContent.parts) &&
476
- candidateContent.parts.every((p) => 'text' in p)) {
477
- // content = candidateContent.parts.map((p) => p.text).join('');
478
- const textParts = [];
479
- for (const part of candidateContent.parts) {
480
- if ('thought' in part && part.thought === true) {
481
- reasoningParts.push(part.text ?? '');
482
- continue;
483
- }
484
- textParts.push(part.text ?? '');
485
- }
486
- content = textParts.join('');
487
- }
488
- else if (candidateContent && Array.isArray(candidateContent.parts)) {
489
- content = langchain.toLangChainContent(candidateContent.parts
490
- .map((p) => {
491
- if ('text' in p && 'thought' in p && p.thought === true) {
492
- reasoningParts.push(p.text ?? '');
493
- return undefined;
494
- }
495
- else if ('text' in p) {
496
- return {
497
- type: 'text',
498
- text: p.text,
499
- };
500
- }
501
- else if ('executableCode' in p) {
502
- return {
503
- type: 'executableCode',
504
- executableCode: p.executableCode,
505
- };
506
- }
507
- else if ('codeExecutionResult' in p) {
508
- return {
509
- type: 'codeExecutionResult',
510
- codeExecutionResult: p.codeExecutionResult,
511
- };
512
- }
513
- const serverSideToolPart = convertGoogleServerSideToolResponsePart(p);
514
- if (serverSideToolPart !== undefined) {
515
- return serverSideToolPart;
516
- }
517
- return p;
518
- })
519
- .filter((p) => p !== undefined));
520
- }
521
- else {
522
- // no content returned - likely due to abnormal stop reason, e.g. malformed function call
523
- content = [];
524
- }
525
- let text = '';
526
- if (typeof content === 'string' && content) {
527
- text = content;
528
- }
529
- else if (Array.isArray(content)) {
530
- const block = content.find((b) => 'text' in b);
531
- text = block?.text ?? '';
532
- }
533
- const toolCallChunks = [];
534
- if (functionCalls.length > 0) {
535
- toolCallChunks.push(...functionCalls.map((fc) => ({
536
- type: 'tool_call_chunk',
537
- id: fc?.id,
538
- name: fc?.functionCall.name,
539
- args: JSON.stringify(fc?.functionCall.args),
540
- })));
541
- }
542
- // Extract thought signatures from function calls for Gemini 3+
543
- const functionThoughtSignatures = functionCalls.reduce((acc, fc) => {
544
- if (fc &&
545
- 'thoughtSignature' in fc &&
546
- typeof fc.thoughtSignature === 'string') {
547
- acc[fc.id] = fc.thoughtSignature;
548
- }
549
- return acc;
550
- }, {});
551
- const additional_kwargs = {
552
- [_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY]: functionThoughtSignatures,
553
- };
554
- if (reasoningParts.length > 0) {
555
- additional_kwargs.reasoning = reasoningParts.join('');
556
- }
557
- if (candidate?.groundingMetadata) {
558
- additional_kwargs.groundingMetadata = candidate.groundingMetadata;
559
- }
560
- const isFinalChunk = response.candidates[0]?.finishReason === 'STOP' ||
561
- response.candidates[0]?.finishReason === 'MAX_TOKENS' ||
562
- response.candidates[0]?.finishReason === 'SAFETY';
563
- return new outputs.ChatGenerationChunk({
564
- text,
565
- message: new messages.AIMessageChunk({
566
- content: content,
567
- name: !candidateContent ? undefined : candidateContent.role,
568
- tool_call_chunks: toolCallChunks,
569
- // Each chunk can have unique "generationInfo", and merging strategy is unclear,
570
- // so leave blank for now.
571
- additional_kwargs,
572
- usage_metadata: isFinalChunk ? extra.usageMetadata : undefined,
573
- }),
574
- generationInfo,
575
- });
281
+ if (!response.candidates || response.candidates.length === 0) return null;
282
+ const [candidate] = response.candidates;
283
+ const { content: candidateContent, ...generationInfo } = candidate ?? {};
284
+ const functionCalls = (candidateContent?.parts)?.reduce((acc, p) => {
285
+ if ("functionCall" in p && p.functionCall) acc.push({
286
+ ...p,
287
+ id: "id" in p.functionCall && typeof p.functionCall.id === "string" ? p.functionCall.id : (0, uuid.v4)()
288
+ });
289
+ return acc;
290
+ }, []) ?? [];
291
+ let content;
292
+ const reasoningParts = [];
293
+ if (candidateContent != null && Array.isArray(candidateContent.parts) && candidateContent.parts.every((p) => "text" in p)) {
294
+ const textParts = [];
295
+ for (const part of candidateContent.parts) {
296
+ if ("thought" in part && part.thought === true) {
297
+ reasoningParts.push(part.text ?? "");
298
+ continue;
299
+ }
300
+ textParts.push(part.text ?? "");
301
+ }
302
+ content = textParts.join("");
303
+ } else if (candidateContent && Array.isArray(candidateContent.parts)) content = require_langchain.toLangChainContent(candidateContent.parts.map((p) => {
304
+ if ("text" in p && "thought" in p && p.thought === true) {
305
+ reasoningParts.push(p.text ?? "");
306
+ return;
307
+ } else if ("text" in p) return {
308
+ type: "text",
309
+ text: p.text
310
+ };
311
+ else if ("executableCode" in p) return {
312
+ type: "executableCode",
313
+ executableCode: p.executableCode
314
+ };
315
+ else if ("codeExecutionResult" in p) return {
316
+ type: "codeExecutionResult",
317
+ codeExecutionResult: p.codeExecutionResult
318
+ };
319
+ const serverSideToolPart = convertGoogleServerSideToolResponsePart(p);
320
+ if (serverSideToolPart !== void 0) return serverSideToolPart;
321
+ return p;
322
+ }).filter((p) => p !== void 0));
323
+ else content = [];
324
+ let text = "";
325
+ if (typeof content === "string" && content) text = content;
326
+ else if (Array.isArray(content)) text = content.find((b) => "text" in b)?.text ?? "";
327
+ const toolCallChunks = [];
328
+ if (functionCalls.length > 0) toolCallChunks.push(...functionCalls.map((fc) => ({
329
+ type: "tool_call_chunk",
330
+ id: fc?.id,
331
+ name: fc?.functionCall.name,
332
+ args: JSON.stringify(fc?.functionCall.args)
333
+ })));
334
+ const functionThoughtSignatures = functionCalls.reduce((acc, fc) => {
335
+ if (fc && "thoughtSignature" in fc && typeof fc.thoughtSignature === "string") acc[fc.id] = fc.thoughtSignature;
336
+ return acc;
337
+ }, {});
338
+ const additional_kwargs = { [_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY]: functionThoughtSignatures };
339
+ if (reasoningParts.length > 0) additional_kwargs.reasoning = reasoningParts.join("");
340
+ if (candidate?.groundingMetadata) additional_kwargs.groundingMetadata = candidate.groundingMetadata;
341
+ const isFinalChunk = response.candidates[0]?.finishReason === "STOP" || response.candidates[0]?.finishReason === "MAX_TOKENS" || response.candidates[0]?.finishReason === "SAFETY";
342
+ const response_metadata = toolCallChunks.length > 0 ? {
343
+ [require_streamedToolCallSeals.STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY]: require_streamedToolCallSeals.GOOGLE_STREAMED_TOOL_CALL_ADAPTER,
344
+ [require_streamedToolCallSeals.STREAMED_TOOL_CALL_SEAL_METADATA_KEY]: { kind: "all" }
345
+ } : void 0;
346
+ return new _langchain_core_outputs.ChatGenerationChunk({
347
+ text,
348
+ message: new _langchain_core_messages.AIMessageChunk({
349
+ content,
350
+ name: !candidateContent ? void 0 : candidateContent.role,
351
+ tool_call_chunks: toolCallChunks,
352
+ additional_kwargs,
353
+ response_metadata,
354
+ usage_metadata: isFinalChunk ? extra.usageMetadata : void 0
355
+ }),
356
+ generationInfo
357
+ });
576
358
  }
577
359
  /**
578
- * Maps a Google GenerateContentResult to a LangChain ChatResult
579
- */
360
+ * Maps a Google GenerateContentResult to a LangChain ChatResult
361
+ */
580
362
  function mapGenerateContentResultToChatResult(response, extra) {
581
- if (!response.candidates || response.candidates.length === 0) {
582
- return {
583
- generations: [],
584
- llmOutput: {
585
- filters: response.promptFeedback,
586
- },
587
- };
588
- }
589
- const [candidate] = response.candidates;
590
- const { content: candidateContent, ...generationInfo } = candidate ?? {};
591
- // Extract function calls directly from parts to preserve thoughtSignature
592
- const functionCalls = candidateContent?.parts.reduce((acc, p) => {
593
- if ('functionCall' in p && p.functionCall) {
594
- acc.push({
595
- ...p,
596
- id: 'id' in p.functionCall && typeof p.functionCall.id === 'string'
597
- ? p.functionCall.id
598
- : uuid.v4(),
599
- });
600
- }
601
- return acc;
602
- }, []) ?? [];
603
- let content;
604
- const reasoningParts = [];
605
- if (Array.isArray(candidateContent?.parts) &&
606
- candidateContent.parts.length === 1 &&
607
- (candidateContent.parts[0].text ?? '') !== '' &&
608
- !('thought' in candidateContent.parts[0] &&
609
- candidateContent.parts[0].thought === true)) {
610
- content = candidateContent.parts[0].text;
611
- }
612
- else if (Array.isArray(candidateContent?.parts) &&
613
- candidateContent.parts.length > 0) {
614
- content = langchain.toLangChainContent(candidateContent.parts
615
- .map((p) => {
616
- if ('text' in p && 'thought' in p && p.thought === true) {
617
- reasoningParts.push(p.text ?? '');
618
- return undefined;
619
- }
620
- else if ('text' in p) {
621
- return {
622
- type: 'text',
623
- text: p.text,
624
- };
625
- }
626
- else if ('executableCode' in p) {
627
- return {
628
- type: 'executableCode',
629
- executableCode: p.executableCode,
630
- };
631
- }
632
- else if ('codeExecutionResult' in p) {
633
- return {
634
- type: 'codeExecutionResult',
635
- codeExecutionResult: p.codeExecutionResult,
636
- };
637
- }
638
- const serverSideToolPart = convertGoogleServerSideToolResponsePart(p);
639
- if (serverSideToolPart !== undefined) {
640
- return serverSideToolPart;
641
- }
642
- return p;
643
- })
644
- .filter((p) => p !== undefined));
645
- }
646
- else {
647
- content = [];
648
- }
649
- let text = '';
650
- if (typeof content === 'string') {
651
- text = content;
652
- }
653
- else if (Array.isArray(content) && content.length > 0) {
654
- const block = content.find((b) => 'text' in b);
655
- text = block?.text ?? text;
656
- }
657
- const additional_kwargs = {
658
- ...generationInfo,
659
- };
660
- if (reasoningParts.length > 0) {
661
- additional_kwargs.reasoning = reasoningParts.join('');
662
- }
663
- // Extract thought signatures from function calls for Gemini 3+
664
- const functionThoughtSignatures = functionCalls.reduce((acc, fc) => {
665
- if ('thoughtSignature' in fc && typeof fc.thoughtSignature === 'string') {
666
- acc[fc.id] = fc.thoughtSignature;
667
- }
668
- return acc;
669
- }, {});
670
- const tool_calls = functionCalls.map((fc) => ({
671
- type: 'tool_call',
672
- id: fc.id,
673
- name: fc.functionCall.name,
674
- args: fc.functionCall.args,
675
- }));
676
- // Store thought signatures map for later retrieval
677
- additional_kwargs[_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY] =
678
- functionThoughtSignatures;
679
- const generation = {
680
- text,
681
- message: new messages.AIMessage({
682
- content,
683
- tool_calls,
684
- additional_kwargs,
685
- usage_metadata: extra?.usageMetadata,
686
- }),
687
- generationInfo,
688
- };
689
- return {
690
- generations: [generation],
691
- llmOutput: {
692
- tokenUsage: {
693
- promptTokens: extra?.usageMetadata?.input_tokens,
694
- completionTokens: extra?.usageMetadata?.output_tokens,
695
- totalTokens: extra?.usageMetadata?.total_tokens,
696
- },
697
- },
698
- };
363
+ if (!response.candidates || response.candidates.length === 0) return {
364
+ generations: [],
365
+ llmOutput: { filters: response.promptFeedback }
366
+ };
367
+ const [candidate] = response.candidates;
368
+ const { content: candidateContent, ...generationInfo } = candidate ?? {};
369
+ const functionCalls = candidateContent?.parts.reduce((acc, p) => {
370
+ if ("functionCall" in p && p.functionCall) acc.push({
371
+ ...p,
372
+ id: "id" in p.functionCall && typeof p.functionCall.id === "string" ? p.functionCall.id : (0, uuid.v4)()
373
+ });
374
+ return acc;
375
+ }, []) ?? [];
376
+ let content;
377
+ const reasoningParts = [];
378
+ if (Array.isArray(candidateContent?.parts) && candidateContent.parts.length === 1 && (candidateContent.parts[0].text ?? "") !== "" && !("thought" in candidateContent.parts[0] && candidateContent.parts[0].thought === true)) content = candidateContent.parts[0].text;
379
+ else if (Array.isArray(candidateContent?.parts) && candidateContent.parts.length > 0) content = require_langchain.toLangChainContent(candidateContent.parts.map((p) => {
380
+ if ("text" in p && "thought" in p && p.thought === true) {
381
+ reasoningParts.push(p.text ?? "");
382
+ return;
383
+ } else if ("text" in p) return {
384
+ type: "text",
385
+ text: p.text
386
+ };
387
+ else if ("executableCode" in p) return {
388
+ type: "executableCode",
389
+ executableCode: p.executableCode
390
+ };
391
+ else if ("codeExecutionResult" in p) return {
392
+ type: "codeExecutionResult",
393
+ codeExecutionResult: p.codeExecutionResult
394
+ };
395
+ const serverSideToolPart = convertGoogleServerSideToolResponsePart(p);
396
+ if (serverSideToolPart !== void 0) return serverSideToolPart;
397
+ return p;
398
+ }).filter((p) => p !== void 0));
399
+ else content = [];
400
+ let text = "";
401
+ if (typeof content === "string") text = content;
402
+ else if (Array.isArray(content) && content.length > 0) text = content.find((b) => "text" in b)?.text ?? text;
403
+ const additional_kwargs = { ...generationInfo };
404
+ if (reasoningParts.length > 0) additional_kwargs.reasoning = reasoningParts.join("");
405
+ const functionThoughtSignatures = functionCalls.reduce((acc, fc) => {
406
+ if ("thoughtSignature" in fc && typeof fc.thoughtSignature === "string") acc[fc.id] = fc.thoughtSignature;
407
+ return acc;
408
+ }, {});
409
+ const tool_calls = functionCalls.map((fc) => ({
410
+ type: "tool_call",
411
+ id: fc.id,
412
+ name: fc.functionCall.name,
413
+ args: fc.functionCall.args
414
+ }));
415
+ additional_kwargs[_FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY] = functionThoughtSignatures;
416
+ return {
417
+ generations: [{
418
+ text,
419
+ message: new _langchain_core_messages.AIMessage({
420
+ content,
421
+ tool_calls,
422
+ additional_kwargs,
423
+ usage_metadata: extra?.usageMetadata
424
+ }),
425
+ generationInfo
426
+ }],
427
+ llmOutput: { tokenUsage: {
428
+ promptTokens: extra?.usageMetadata?.input_tokens,
429
+ completionTokens: extra?.usageMetadata?.output_tokens,
430
+ totalTokens: extra?.usageMetadata?.total_tokens
431
+ } }
432
+ };
699
433
  }
700
-
701
- exports._FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY = _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY;
702
- exports.convertAuthorToRole = convertAuthorToRole;
434
+ //#endregion
703
435
  exports.convertBaseMessagesToContent = convertBaseMessagesToContent;
704
- exports.convertMessageContentToParts = convertMessageContentToParts;
705
436
  exports.convertResponseContentToChatGenerationChunk = convertResponseContentToChatGenerationChunk;
706
- exports.getMessageAuthor = getMessageAuthor;
707
- exports.iife = iife;
708
437
  exports.mapGenerateContentResultToChatResult = mapGenerateContentResultToChatResult;
709
- //# sourceMappingURL=common.cjs.map
438
+
439
+ //# sourceMappingURL=common.cjs.map