@librechat/agents 3.2.21 → 3.2.32

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 (402) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +3 -2
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/events.cjs.map +1 -1
  4. package/dist/cjs/graphs/Graph.cjs +200 -54
  5. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  6. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  7. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +13 -7
  8. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  9. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  10. package/dist/cjs/hooks/types.cjs.map +1 -1
  11. package/dist/cjs/instrumentation.cjs +2 -2
  12. package/dist/cjs/instrumentation.cjs.map +1 -1
  13. package/dist/cjs/langfuse.cjs +17 -1
  14. package/dist/cjs/langfuse.cjs.map +1 -1
  15. package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
  16. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  17. package/dist/cjs/llm/anthropic/index.cjs +1 -1
  18. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +38 -3
  20. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +6 -2
  22. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  23. package/dist/cjs/llm/bedrock/index.cjs +2 -2
  24. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  25. package/dist/cjs/llm/bedrock/toolCache.cjs +8 -5
  26. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  27. package/dist/cjs/llm/fake.cjs +16 -14
  28. package/dist/cjs/llm/fake.cjs.map +1 -1
  29. package/dist/cjs/llm/google/index.cjs +22 -0
  30. package/dist/cjs/llm/google/index.cjs.map +1 -1
  31. package/dist/cjs/llm/google/utils/common.cjs +88 -27
  32. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  33. package/dist/cjs/llm/init.cjs +2 -2
  34. package/dist/cjs/llm/invoke.cjs +108 -11
  35. package/dist/cjs/llm/invoke.cjs.map +1 -1
  36. package/dist/cjs/llm/openai/index.cjs +1 -1
  37. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  38. package/dist/cjs/llm/openai/utils/index.cjs +1 -1
  39. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  40. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  41. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  42. package/dist/cjs/main.cjs +1 -0
  43. package/dist/cjs/main.cjs.map +1 -1
  44. package/dist/cjs/messages/cache.cjs +29 -8
  45. package/dist/cjs/messages/cache.cjs.map +1 -1
  46. package/dist/cjs/messages/content.cjs.map +1 -1
  47. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  48. package/dist/cjs/messages/format.cjs +129 -17
  49. package/dist/cjs/messages/format.cjs.map +1 -1
  50. package/dist/cjs/messages/prune.cjs.map +1 -1
  51. package/dist/cjs/messages/reducer.cjs +1 -1
  52. package/dist/cjs/messages/reducer.cjs.map +1 -1
  53. package/dist/cjs/messages/tools.cjs +1 -1
  54. package/dist/cjs/messages/tools.cjs.map +1 -1
  55. package/dist/cjs/openai/index.cjs.map +1 -1
  56. package/dist/cjs/responses/index.cjs.map +1 -1
  57. package/dist/cjs/run.cjs +41 -20
  58. package/dist/cjs/run.cjs.map +1 -1
  59. package/dist/cjs/session/AgentSession.cjs +4 -4
  60. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  61. package/dist/cjs/session/JsonlSessionStore.cjs +2 -2
  62. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  63. package/dist/cjs/session/handlers.cjs +2 -2
  64. package/dist/cjs/session/handlers.cjs.map +1 -1
  65. package/dist/cjs/stream.cjs +248 -25
  66. package/dist/cjs/stream.cjs.map +1 -1
  67. package/dist/cjs/summarization/node.cjs.map +1 -1
  68. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +1 -1
  69. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  70. package/dist/cjs/tools/Calculator.cjs +1 -1
  71. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  72. package/dist/cjs/tools/CodeExecutor.cjs +1 -1
  73. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  74. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  75. package/dist/cjs/tools/ToolNode.cjs +37 -18
  76. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  77. package/dist/cjs/tools/ToolSearch.cjs +1 -1
  78. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  79. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +7 -4
  80. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  81. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +4 -4
  82. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  83. package/dist/cjs/tools/handlers.cjs +2 -1
  84. package/dist/cjs/tools/handlers.cjs.map +1 -1
  85. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  86. package/dist/cjs/tools/local/FileCheckpointer.cjs +2 -1
  87. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  88. package/dist/cjs/tools/local/LocalCodingTools.cjs +45 -19
  89. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  90. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +3 -3
  91. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  92. package/dist/cjs/tools/local/LocalExecutionTools.cjs +2 -2
  93. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  94. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +4 -3
  95. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  96. package/dist/cjs/tools/local/attachments.cjs +0 -5
  97. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  98. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +4 -4
  99. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  100. package/dist/cjs/tools/search/firecrawl.cjs +1 -1
  101. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  102. package/dist/cjs/tools/search/rerankers.cjs +7 -3
  103. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  104. package/dist/cjs/tools/search/tavily-search.cjs +1 -1
  105. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  106. package/dist/cjs/tools/search/utils.cjs +76 -8
  107. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  108. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -1
  109. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  110. package/dist/cjs/utils/handlers.cjs +1 -1
  111. package/dist/cjs/utils/handlers.cjs.map +1 -1
  112. package/dist/cjs/utils/run.cjs +1 -1
  113. package/dist/cjs/utils/run.cjs.map +1 -1
  114. package/dist/esm/agents/AgentContext.mjs +3 -2
  115. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  116. package/dist/esm/events.mjs.map +1 -1
  117. package/dist/esm/graphs/Graph.mjs +200 -54
  118. package/dist/esm/graphs/Graph.mjs.map +1 -1
  119. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  120. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +13 -7
  121. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  122. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  123. package/dist/esm/hooks/types.mjs.map +1 -1
  124. package/dist/esm/instrumentation.mjs +2 -2
  125. package/dist/esm/instrumentation.mjs.map +1 -1
  126. package/dist/esm/langfuse.mjs +17 -2
  127. package/dist/esm/langfuse.mjs.map +1 -1
  128. package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
  129. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  130. package/dist/esm/llm/anthropic/index.mjs +1 -1
  131. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  132. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +38 -3
  133. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  134. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +6 -2
  135. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/index.mjs +2 -2
  137. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  138. package/dist/esm/llm/bedrock/toolCache.mjs +8 -5
  139. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  140. package/dist/esm/llm/fake.mjs +16 -14
  141. package/dist/esm/llm/fake.mjs.map +1 -1
  142. package/dist/esm/llm/google/index.mjs +23 -1
  143. package/dist/esm/llm/google/index.mjs.map +1 -1
  144. package/dist/esm/llm/google/utils/common.mjs +88 -27
  145. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  146. package/dist/esm/llm/init.mjs +2 -2
  147. package/dist/esm/llm/invoke.mjs +104 -7
  148. package/dist/esm/llm/invoke.mjs.map +1 -1
  149. package/dist/esm/llm/openai/index.mjs +1 -1
  150. package/dist/esm/llm/openai/index.mjs.map +1 -1
  151. package/dist/esm/llm/openai/utils/index.mjs +1 -1
  152. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  153. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  154. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  155. package/dist/esm/main.mjs +1 -1
  156. package/dist/esm/messages/cache.mjs +29 -8
  157. package/dist/esm/messages/cache.mjs.map +1 -1
  158. package/dist/esm/messages/content.mjs.map +1 -1
  159. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  160. package/dist/esm/messages/format.mjs +129 -18
  161. package/dist/esm/messages/format.mjs.map +1 -1
  162. package/dist/esm/messages/prune.mjs.map +1 -1
  163. package/dist/esm/messages/reducer.mjs +1 -1
  164. package/dist/esm/messages/reducer.mjs.map +1 -1
  165. package/dist/esm/messages/tools.mjs +1 -1
  166. package/dist/esm/messages/tools.mjs.map +1 -1
  167. package/dist/esm/openai/index.mjs.map +1 -1
  168. package/dist/esm/responses/index.mjs.map +1 -1
  169. package/dist/esm/run.mjs +41 -20
  170. package/dist/esm/run.mjs.map +1 -1
  171. package/dist/esm/session/AgentSession.mjs +4 -4
  172. package/dist/esm/session/AgentSession.mjs.map +1 -1
  173. package/dist/esm/session/JsonlSessionStore.mjs +2 -2
  174. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  175. package/dist/esm/session/handlers.mjs +2 -2
  176. package/dist/esm/session/handlers.mjs.map +1 -1
  177. package/dist/esm/stream.mjs +248 -25
  178. package/dist/esm/stream.mjs.map +1 -1
  179. package/dist/esm/summarization/node.mjs.map +1 -1
  180. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +1 -1
  181. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  182. package/dist/esm/tools/Calculator.mjs +1 -1
  183. package/dist/esm/tools/Calculator.mjs.map +1 -1
  184. package/dist/esm/tools/CodeExecutor.mjs +1 -1
  185. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  186. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  187. package/dist/esm/tools/ToolNode.mjs +37 -18
  188. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  189. package/dist/esm/tools/ToolSearch.mjs +1 -1
  190. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  191. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +7 -4
  192. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  193. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +4 -4
  194. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  195. package/dist/esm/tools/handlers.mjs +2 -1
  196. package/dist/esm/tools/handlers.mjs.map +1 -1
  197. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  198. package/dist/esm/tools/local/FileCheckpointer.mjs +2 -1
  199. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  200. package/dist/esm/tools/local/LocalCodingTools.mjs +45 -19
  201. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  202. package/dist/esm/tools/local/LocalExecutionEngine.mjs +3 -3
  203. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  204. package/dist/esm/tools/local/LocalExecutionTools.mjs +2 -2
  205. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  206. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +4 -3
  207. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  208. package/dist/esm/tools/local/attachments.mjs +0 -5
  209. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  210. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +4 -4
  211. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  212. package/dist/esm/tools/search/firecrawl.mjs +1 -1
  213. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  214. package/dist/esm/tools/search/rerankers.mjs +8 -4
  215. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  216. package/dist/esm/tools/search/tavily-search.mjs +1 -1
  217. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  218. package/dist/esm/tools/search/utils.mjs +76 -9
  219. package/dist/esm/tools/search/utils.mjs.map +1 -1
  220. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -1
  221. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  222. package/dist/esm/utils/handlers.mjs +1 -1
  223. package/dist/esm/utils/handlers.mjs.map +1 -1
  224. package/dist/esm/utils/run.mjs +1 -1
  225. package/dist/esm/utils/run.mjs.map +1 -1
  226. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +1 -1
  227. package/dist/types/events.d.ts +1 -1
  228. package/dist/types/graphs/Graph.d.ts +7 -1
  229. package/dist/types/hooks/executeHooks.d.ts +1 -1
  230. package/dist/types/hooks/types.d.ts +5 -0
  231. package/dist/types/langfuse.d.ts +4 -0
  232. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  233. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
  234. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +2 -2
  235. package/dist/types/llm/bedrock/index.d.ts +2 -2
  236. package/dist/types/llm/fake.d.ts +3 -3
  237. package/dist/types/llm/google/index.d.ts +1 -0
  238. package/dist/types/llm/google/types.d.ts +1 -1
  239. package/dist/types/llm/google/utils/common.d.ts +2 -2
  240. package/dist/types/llm/google/utils/tools.d.ts +1 -1
  241. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +1 -1
  242. package/dist/types/llm/openai/index.d.ts +2 -2
  243. package/dist/types/llm/openai/utils/index.d.ts +1 -1
  244. package/dist/types/llm/openrouter/index.d.ts +4 -4
  245. package/dist/types/messages/contextPruning.d.ts +1 -1
  246. package/dist/types/messages/format.d.ts +14 -4
  247. package/dist/types/messages/prune.d.ts +1 -1
  248. package/dist/types/session/JsonlSessionStore.d.ts +1 -1
  249. package/dist/types/session/handlers.d.ts +1 -1
  250. package/dist/types/session/types.d.ts +1 -1
  251. package/dist/types/summarization/node.d.ts +1 -1
  252. package/dist/types/tools/SubagentTool.d.ts +2 -2
  253. package/dist/types/tools/ToolNode.d.ts +9 -2
  254. package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +1 -1
  255. package/dist/types/tools/search/types.d.ts +1 -1
  256. package/dist/types/tools/search/utils.d.ts +11 -0
  257. package/dist/types/types/graph.d.ts +4 -4
  258. package/dist/types/types/llm.d.ts +4 -3
  259. package/dist/types/types/messages.d.ts +1 -1
  260. package/dist/types/types/run.d.ts +6 -6
  261. package/dist/types/types/stream.d.ts +2 -2
  262. package/dist/types/types/tools.d.ts +5 -1
  263. package/dist/types/utils/handlers.d.ts +2 -2
  264. package/dist/types/utils/run.d.ts +1 -1
  265. package/package.json +13 -10
  266. package/src/__tests__/stream.eagerEventExecution.test.ts +543 -6
  267. package/src/agents/AgentContext.ts +2 -2
  268. package/src/agents/__tests__/AgentContext.test.ts +3 -3
  269. package/src/agents/__tests__/promptCacheLiveHelpers.ts +1 -1
  270. package/src/events.ts +1 -1
  271. package/src/graphs/Graph.ts +329 -72
  272. package/src/graphs/MultiAgentGraph.ts +1 -1
  273. package/src/graphs/__tests__/Graph.reasoning.test.ts +919 -6
  274. package/src/graphs/__tests__/MultiAgentGraph.test.ts +1 -1
  275. package/src/graphs/__tests__/composition.smoke.test.ts +1 -1
  276. package/src/hooks/__tests__/HookRegistry.test.ts +1 -1
  277. package/src/hooks/__tests__/compactHooks.test.ts +8 -8
  278. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +34 -22
  279. package/src/hooks/__tests__/executeHooks.test.ts +3 -3
  280. package/src/hooks/__tests__/integration.test.ts +3 -3
  281. package/src/hooks/__tests__/toolHooks.test.ts +10 -10
  282. package/src/hooks/createWorkspacePolicyHook.ts +17 -14
  283. package/src/hooks/executeHooks.ts +1 -1
  284. package/src/hooks/types.ts +5 -0
  285. package/src/instrumentation.ts +11 -11
  286. package/src/langfuse.ts +35 -1
  287. package/src/langfuseToolOutputTracing.ts +2 -2
  288. package/src/llm/anthropic/index.ts +1 -1
  289. package/src/llm/anthropic/llm.spec.ts +36 -0
  290. package/src/llm/anthropic/utils/message_inputs.ts +46 -4
  291. package/src/llm/anthropic/utils/message_outputs.ts +9 -7
  292. package/src/llm/anthropic/utils/output_parsers.ts +5 -5
  293. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +186 -0
  294. package/src/llm/bedrock/index.ts +4 -4
  295. package/src/llm/bedrock/toolCache.test.ts +48 -9
  296. package/src/llm/bedrock/toolCache.ts +11 -6
  297. package/src/llm/fake.ts +30 -25
  298. package/src/llm/google/index.ts +43 -1
  299. package/src/llm/google/llm.spec.ts +173 -1
  300. package/src/llm/google/types.ts +1 -1
  301. package/src/llm/google/utils/common.ts +154 -45
  302. package/src/llm/google/utils/tools.ts +8 -8
  303. package/src/llm/google/utils/zod_to_genai_parameters.ts +4 -4
  304. package/src/llm/invoke.test.ts +3 -3
  305. package/src/llm/invoke.ts +170 -10
  306. package/src/llm/openai/index.ts +4 -4
  307. package/src/llm/openai/utils/index.ts +14 -14
  308. package/src/llm/openrouter/index.ts +4 -4
  309. package/src/llm/openrouter/reasoning.test.ts +2 -2
  310. package/src/llm/vertexai/fixThoughtSignatures.test.ts +1 -1
  311. package/src/llm/vertexai/index.ts +1 -1
  312. package/src/messages/cache.test.ts +144 -0
  313. package/src/messages/cache.ts +50 -13
  314. package/src/messages/content.ts +1 -1
  315. package/src/messages/contextPruning.ts +1 -1
  316. package/src/messages/format.ts +236 -43
  317. package/src/messages/formatAgentMessages.skills.test.ts +205 -26
  318. package/src/messages/formatAgentMessages.test.ts +841 -10
  319. package/src/messages/labelContentByAgent.test.ts +2 -2
  320. package/src/messages/prune.ts +1 -1
  321. package/src/messages/reducer.ts +1 -1
  322. package/src/messages/tools.ts +1 -1
  323. package/src/openai/__tests__/openai.test.ts +2 -2
  324. package/src/openai/index.ts +1 -1
  325. package/src/responses/__tests__/responses.test.ts +2 -2
  326. package/src/responses/index.ts +1 -1
  327. package/src/run.ts +68 -41
  328. package/src/session/AgentSession.ts +6 -6
  329. package/src/session/JsonlSessionStore.ts +3 -3
  330. package/src/session/__tests__/JsonlSessionStore.test.ts +5 -5
  331. package/src/session/__tests__/handlers.test.ts +2 -2
  332. package/src/session/handlers.ts +5 -5
  333. package/src/session/types.ts +1 -1
  334. package/src/specs/agent-handoffs.test.ts +1 -1
  335. package/src/specs/langfuse-callbacks.test.ts +2 -2
  336. package/src/specs/langfuse-metadata.test.ts +39 -0
  337. package/src/specs/langfuse-tool-output-tracing.test.ts +1 -1
  338. package/src/specs/multi-agent-summarization.test.ts +4 -4
  339. package/src/specs/subagent.test.ts +3 -3
  340. package/src/specs/summarization-unit.test.ts +1 -1
  341. package/src/specs/thinking-handoff.test.ts +1 -1
  342. package/src/splitStream.test.ts +48 -0
  343. package/src/stream.test.ts +53 -3
  344. package/src/stream.ts +450 -39
  345. package/src/summarization/__tests__/aggregator.test.ts +2 -2
  346. package/src/summarization/__tests__/node.test.ts +2 -2
  347. package/src/summarization/node.ts +1 -1
  348. package/src/tools/BashProgrammaticToolCalling.ts +5 -5
  349. package/src/tools/Calculator.ts +1 -1
  350. package/src/tools/CodeExecutor.ts +2 -4
  351. package/src/tools/SubagentTool.ts +2 -2
  352. package/src/tools/ToolNode.ts +37 -16
  353. package/src/tools/ToolSearch.ts +1 -1
  354. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +4 -4
  355. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +12 -12
  356. package/src/tools/__tests__/LocalExecutionTools.test.ts +125 -93
  357. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +29 -5
  358. package/src/tools/__tests__/ReadFile.test.ts +1 -1
  359. package/src/tools/__tests__/SkillTool.test.ts +4 -4
  360. package/src/tools/__tests__/SubagentExecutor.test.ts +17 -13
  361. package/src/tools/__tests__/SubagentTool.test.ts +2 -2
  362. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +1 -1
  363. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +2 -5
  364. package/src/tools/__tests__/ToolNode.session.test.ts +1 -1
  365. package/src/tools/__tests__/ToolSearch.test.ts +1 -1
  366. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +1 -1
  367. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +35 -32
  368. package/src/tools/__tests__/directToolHooks.test.ts +41 -0
  369. package/src/tools/__tests__/handlers.test.ts +2 -2
  370. package/src/tools/__tests__/hitl.test.ts +11 -11
  371. package/src/tools/__tests__/localToolNames.test.ts +8 -6
  372. package/src/tools/__tests__/skillCatalog.test.ts +1 -1
  373. package/src/tools/__tests__/subagentHooks.test.ts +20 -10
  374. package/src/tools/__tests__/workspaceSeam.test.ts +20 -7
  375. package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +9 -6
  376. package/src/tools/cloudflare/CloudflareSandboxTools.ts +19 -19
  377. package/src/tools/handlers.ts +5 -5
  378. package/src/tools/local/CompileCheckTool.ts +4 -7
  379. package/src/tools/local/FileCheckpointer.ts +6 -5
  380. package/src/tools/local/LocalCodingTools.ts +100 -45
  381. package/src/tools/local/LocalExecutionEngine.ts +5 -5
  382. package/src/tools/local/LocalExecutionTools.ts +9 -9
  383. package/src/tools/local/LocalProgrammaticToolCalling.ts +5 -4
  384. package/src/tools/local/attachments.ts +0 -6
  385. package/src/tools/local/resolveLocalExecutionTools.ts +15 -15
  386. package/src/tools/search/firecrawl.ts +1 -1
  387. package/src/tools/search/jina-reranker.test.ts +148 -37
  388. package/src/tools/search/rerankers.ts +14 -4
  389. package/src/tools/search/tavily-search.ts +2 -2
  390. package/src/tools/search/types.ts +1 -1
  391. package/src/tools/search/utils.ts +99 -9
  392. package/src/tools/subagent/SubagentExecutor.ts +12 -6
  393. package/src/types/graph.ts +12 -12
  394. package/src/types/llm.ts +7 -6
  395. package/src/types/messages.ts +1 -1
  396. package/src/types/run.ts +7 -7
  397. package/src/types/stream.ts +2 -2
  398. package/src/types/tools.ts +5 -1
  399. package/src/utils/handlers.ts +2 -2
  400. package/src/utils/llmConfig.ts +1 -1
  401. package/src/utils/logging.ts +20 -10
  402. package/src/utils/run.ts +2 -2
@@ -29,7 +29,12 @@ import type {
29
29
  } from '@google/generative-ai';
30
30
  import type { ContentBlock } from '@langchain/core/messages';
31
31
  import { CustomChatGoogleGenerativeAI as ChatGoogleGenerativeAI } from './index';
32
- import { _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY } from './utils/common';
32
+ import {
33
+ convertMessageContentToParts,
34
+ convertResponseContentToChatGenerationChunk,
35
+ mapGenerateContentResultToChatResult,
36
+ _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY,
37
+ } from './utils/common';
33
38
 
34
39
  // Save the original value of the 'LANGCHAIN_CALLBACKS_BACKGROUND' environment variable
35
40
  const originalBackground = process.env.LANGCHAIN_CALLBACKS_BACKGROUND;
@@ -731,6 +736,173 @@ test('Invoke with JSON mode', async () => {
731
736
  );
732
737
  });
733
738
 
739
+ test('Includes server-side tool invocation config when enabled', () => {
740
+ const model = new ChatGoogleGenerativeAI({
741
+ apiKey: 'test-key',
742
+ model: 'gemini-3.5-flash',
743
+ includeServerSideToolInvocations: true,
744
+ });
745
+ const getWeather = {
746
+ name: 'get_weather',
747
+ description: 'Get the weather',
748
+ };
749
+
750
+ const request = model.invocationParams({
751
+ tools: [{ googleSearch: {} }, { functionDeclarations: [getWeather] }],
752
+ });
753
+
754
+ expect(request.toolConfig).toEqual(
755
+ expect.objectContaining({
756
+ includeServerSideToolInvocations: true,
757
+ })
758
+ );
759
+ });
760
+
761
+ test('Normalizes auto tool choice when server-side tool invocation config is enabled', () => {
762
+ const model = new ChatGoogleGenerativeAI({
763
+ apiKey: 'test-key',
764
+ model: 'gemini-3.5-flash',
765
+ includeServerSideToolInvocations: true,
766
+ });
767
+ const getWeather = {
768
+ name: 'get_weather',
769
+ description: 'Get the weather',
770
+ };
771
+
772
+ const request = model.invocationParams({
773
+ tools: [{ googleSearch: {} }, { functionDeclarations: [getWeather] }],
774
+ tool_choice: 'auto',
775
+ });
776
+ const toolConfig = request.toolConfig as
777
+ | {
778
+ includeServerSideToolInvocations?: boolean;
779
+ functionCallingConfig?: { mode?: string };
780
+ }
781
+ | undefined;
782
+
783
+ expect(toolConfig).toEqual(
784
+ expect.objectContaining({
785
+ includeServerSideToolInvocations: true,
786
+ })
787
+ );
788
+ expect(toolConfig?.functionCallingConfig?.mode).toBe('VALIDATED');
789
+ });
790
+
791
+ test('Preserves Gemini server-side tool context parts in history', () => {
792
+ const toolCallPart = {
793
+ type: 'toolCall',
794
+ agentId: 'agent_1',
795
+ groupId: 1,
796
+ thoughtSignature: 'signature-1',
797
+ toolCall: {
798
+ id: 'server-search-1',
799
+ name: 'google_search',
800
+ args: {},
801
+ },
802
+ } as const;
803
+ const toolResponsePart = {
804
+ type: 'toolResponse',
805
+ agentId: 'agent_1',
806
+ groupId: 1,
807
+ toolResponse: {
808
+ id: 'server-search-1',
809
+ name: 'google_search',
810
+ response: { results: [] },
811
+ },
812
+ } as const;
813
+ const message = new AIMessage({
814
+ content: [toolCallPart, toolResponsePart],
815
+ });
816
+
817
+ expect(convertMessageContentToParts(message, true, [])).toEqual([
818
+ {
819
+ toolCall: toolCallPart.toolCall,
820
+ thoughtSignature: 'signature-1',
821
+ },
822
+ {
823
+ toolResponse: toolResponsePart.toolResponse,
824
+ },
825
+ ]);
826
+ });
827
+
828
+ test('Preserves Gemini function-call ids in history', () => {
829
+ const aiMessage = new AIMessage({
830
+ content: '',
831
+ tool_calls: [
832
+ {
833
+ id: 'call_weather_1',
834
+ name: 'get_weather',
835
+ args: { city: 'NYC' },
836
+ },
837
+ ],
838
+ });
839
+ const toolMessage = new ToolMessage({
840
+ content: 'sunny',
841
+ name: 'get_weather',
842
+ tool_call_id: 'call_weather_1',
843
+ });
844
+
845
+ expect(convertMessageContentToParts(aiMessage, true, [])).toEqual([
846
+ {
847
+ functionCall: {
848
+ id: 'call_weather_1',
849
+ name: 'get_weather',
850
+ args: { city: 'NYC' },
851
+ },
852
+ },
853
+ ]);
854
+ expect(convertMessageContentToParts(toolMessage, true, [aiMessage])).toEqual([
855
+ {
856
+ functionResponse: {
857
+ id: 'call_weather_1',
858
+ name: 'get_weather',
859
+ response: { result: 'sunny' },
860
+ },
861
+ },
862
+ ]);
863
+ });
864
+
865
+ test('Preserves Gemini server-side tool context parts from responses', () => {
866
+ const toolCallPart = {
867
+ toolCall: {
868
+ id: 'server-search-1',
869
+ name: 'google_search',
870
+ args: {},
871
+ },
872
+ };
873
+ const toolResponsePart = {
874
+ toolResponse: {
875
+ id: 'server-search-1',
876
+ name: 'google_search',
877
+ response: { results: [] },
878
+ },
879
+ };
880
+ const response = {
881
+ candidates: [
882
+ {
883
+ content: {
884
+ role: 'model',
885
+ parts: [toolCallPart, toolResponsePart],
886
+ },
887
+ },
888
+ ],
889
+ } as unknown as Parameters<
890
+ typeof convertResponseContentToChatGenerationChunk
891
+ >[0];
892
+
893
+ const chunk = convertResponseContentToChatGenerationChunk(response, {
894
+ index: 0,
895
+ });
896
+ const result = mapGenerateContentResultToChatResult(response);
897
+
898
+ const expectedContent = [
899
+ { ...toolCallPart, type: 'toolCall' },
900
+ { ...toolResponsePart, type: 'toolResponse' },
901
+ ];
902
+ expect(chunk?.message.content).toEqual(expectedContent);
903
+ expect(result.generations[0].message.content).toEqual(expectedContent);
904
+ });
905
+
734
906
  test('Supports tool_choice', async () => {
735
907
  const model = createGoogleModel({
736
908
  model: 'gemini-2.0-flash',
@@ -1,9 +1,9 @@
1
+ import { BindToolsInput } from '@langchain/core/language_models/chat_models';
1
2
  import {
2
3
  CodeExecutionTool,
3
4
  FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool,
4
5
  GoogleSearchRetrievalTool,
5
6
  } from '@google/generative-ai';
6
- import { BindToolsInput } from '@langchain/core/language_models/chat_models';
7
7
 
8
8
  /** New GoogleSearch tool for Gemini 2.0+ models */
9
9
  export interface GoogleSearchTool {
@@ -1,16 +1,8 @@
1
- import {
2
- POSSIBLE_ROLES,
3
- type Part,
4
- type Content,
5
- type TextPart,
6
- type FileDataPart,
7
- type InlineDataPart,
8
- type FunctionCallPart,
9
- type GenerateContentCandidate,
10
- type EnhancedGenerateContentResponse,
11
- type FunctionDeclaration as GenerativeAIFunctionDeclaration,
12
- type FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool,
13
- } from '@google/generative-ai';
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { ChatGenerationChunk } from '@langchain/core/outputs';
3
+ import { ToolCallChunk } from '@langchain/core/messages/tool';
4
+ import { isOpenAITool } from '@langchain/core/language_models/base';
5
+ import { isLangChainTool } from '@langchain/core/utils/function_calling';
14
6
  import {
15
7
  AIMessage,
16
8
  AIMessageChunk,
@@ -29,18 +21,26 @@ import {
29
21
  convertToProviderContentBlock,
30
22
  isDataContentBlock,
31
23
  } from '@langchain/core/messages';
32
- import { ChatGenerationChunk } from '@langchain/core/outputs';
24
+ import {
25
+ POSSIBLE_ROLES,
26
+ type Part,
27
+ type Content,
28
+ type TextPart,
29
+ type FileDataPart,
30
+ type InlineDataPart,
31
+ type FunctionCallPart,
32
+ type GenerateContentCandidate,
33
+ type EnhancedGenerateContentResponse,
34
+ type FunctionDeclaration as GenerativeAIFunctionDeclaration,
35
+ type FunctionDeclarationsTool as GoogleGenerativeAIFunctionDeclarationsTool,
36
+ } from '@google/generative-ai';
33
37
  import type { ChatGeneration, ChatResult } from '@langchain/core/outputs';
34
- import { isLangChainTool } from '@langchain/core/utils/function_calling';
35
- import { isOpenAITool } from '@langchain/core/language_models/base';
36
- import { ToolCallChunk } from '@langchain/core/messages/tool';
37
- import { v4 as uuidv4 } from 'uuid';
38
38
  import {
39
39
  jsonSchemaToGeminiParameters,
40
40
  schemaToGenerativeAIParameters,
41
41
  } from './zod_to_genai_parameters';
42
- import { GoogleGenerativeAIToolType } from '../types';
43
42
  import { toLangChainContent } from '@/messages/langchain';
43
+ import { GoogleGenerativeAIToolType } from '../types';
44
44
 
45
45
  export const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY =
46
46
  '__gemini_function_call_thought_signatures__';
@@ -48,6 +48,49 @@ export const _FUNCTION_CALL_THOUGHT_SIGNATURES_MAP_KEY =
48
48
  const DUMMY_SIGNATURE =
49
49
  'ErYCCrMCAdHtim9kOoOkrPiCNVsmlpMIKd7ZMxgiFbVQOkgp7nlLcDMzVsZwIzvuT7nQROivoXA72ccC2lSDvR0Gh7dkWaGuj7ctv6t7ZceHnecx0QYa+ix8tYpRfjhyWozQ49lWiws6+YGjCt10KRTyWsZ2h6O7iHTYJwKIRwGUHRKy/qK/6kFxJm5ML00gLq4D8s5Z6DBpp2ZlR+uF4G8jJgeWQgyHWVdx2wGYElaceVAc66tZdPQRdOHpWtgYSI1YdaXgVI8KHY3/EfNc2YqqMIulvkDBAnuMhkAjV9xmBa54Tq+ih3Im4+r3DzqhGqYdsSkhS0kZMwte4Hjs65dZzCw9lANxIqYi1DJ639WNPYihp/DCJCos7o+/EeSPJaio5sgWDyUnMGkY1atsJZ+m7pj7DD5tvQ==';
50
50
 
51
+ type GoogleServerSideToolPart = Part & {
52
+ type?: 'toolCall' | 'toolResponse';
53
+ toolCall?: object;
54
+ toolResponse?: object;
55
+ };
56
+
57
+ type GoogleServerSideToolPartMetadata = {
58
+ thought?: boolean;
59
+ thoughtSignature?: string;
60
+ };
61
+
62
+ type GoogleFunctionCallWithId = FunctionCallPart['functionCall'] & {
63
+ id?: string;
64
+ };
65
+
66
+ type GoogleFunctionResponseWithId = {
67
+ name: string;
68
+ response: object;
69
+ id?: string;
70
+ };
71
+
72
+ function getGoogleFunctionId(id?: string): string | undefined {
73
+ return id != null && id !== '' ? id : undefined;
74
+ }
75
+
76
+ function createGoogleFunctionResponsePart({
77
+ name,
78
+ response,
79
+ id,
80
+ }: {
81
+ name: string;
82
+ response: object;
83
+ id?: string;
84
+ }): Part {
85
+ const functionId = getGoogleFunctionId(id);
86
+ const functionResponse: GoogleFunctionResponseWithId = {
87
+ name,
88
+ response,
89
+ ...(functionId != null ? { id: functionId } : {}),
90
+ };
91
+ return { functionResponse };
92
+ }
93
+
51
94
  /**
52
95
  * Executes a function immediately and returns its result.
53
96
  * Functional utility similar to an Immediately Invoked Function Expression (IIFE).
@@ -118,6 +161,63 @@ function messageContentMedia(content: MessageContentComplex): Part {
118
161
  throw new Error('Invalid media content');
119
162
  }
120
163
 
164
+ function isGoogleServerSideToolPart(
165
+ content: MessageContentComplex
166
+ ): content is MessageContentComplex & GoogleServerSideToolPart {
167
+ return (
168
+ 'toolCall' in content ||
169
+ 'toolResponse' in content ||
170
+ content.type === 'toolCall' ||
171
+ content.type === 'toolResponse'
172
+ );
173
+ }
174
+
175
+ function convertGoogleServerSideToolPart(
176
+ content: MessageContentComplex & GoogleServerSideToolPart
177
+ ): Part {
178
+ const metadata: GoogleServerSideToolPartMetadata = {};
179
+ if ('thought' in content && typeof content.thought === 'boolean') {
180
+ metadata.thought = content.thought;
181
+ }
182
+ if (
183
+ 'thoughtSignature' in content &&
184
+ typeof content.thoughtSignature === 'string'
185
+ ) {
186
+ metadata.thoughtSignature = content.thoughtSignature;
187
+ }
188
+ if ('toolCall' in content && content.toolCall != null) {
189
+ return { toolCall: content.toolCall, ...metadata } as unknown as Part;
190
+ }
191
+ if ('toolResponse' in content && content.toolResponse != null) {
192
+ return {
193
+ toolResponse: content.toolResponse,
194
+ ...metadata,
195
+ } as unknown as Part;
196
+ }
197
+
198
+ return content as Part;
199
+ }
200
+
201
+ function convertGoogleServerSideToolResponsePart(
202
+ part: Part
203
+ ): GoogleServerSideToolPart | undefined {
204
+ if (
205
+ 'toolCall' in part &&
206
+ typeof part.toolCall === 'object' &&
207
+ part.toolCall != null
208
+ ) {
209
+ return { ...part, type: 'toolCall', toolCall: part.toolCall };
210
+ }
211
+ if (
212
+ 'toolResponse' in part &&
213
+ typeof part.toolResponse === 'object' &&
214
+ part.toolResponse != null
215
+ ) {
216
+ return { ...part, type: 'toolResponse', toolResponse: part.toolResponse };
217
+ }
218
+ return undefined;
219
+ }
220
+
121
221
  function inferToolNameFromPreviousMessages(
122
222
  message: ToolMessage | ToolMessageChunk,
123
223
  previousMessages: BaseMessage[]
@@ -280,6 +380,10 @@ function _convertLangChainContentToPart(
280
380
  );
281
381
  }
282
382
 
383
+ if (isGoogleServerSideToolPart(content)) {
384
+ return convertGoogleServerSideToolPart(content);
385
+ }
386
+
283
387
  if (content.type === 'text') {
284
388
  return { text: content.text };
285
389
  } else if (content.type === 'executableCode') {
@@ -375,25 +479,23 @@ export function convertMessageContentToParts(
375
479
 
376
480
  if (message.status === 'error') {
377
481
  return [
378
- {
379
- functionResponse: {
380
- name: messageName,
381
- // The API expects an object with an `error` field if the function call fails.
382
- // `error` must be a valid object (not a string or array), so we wrap `message.content` here
383
- response: { error: { details: result } },
384
- },
385
- },
482
+ createGoogleFunctionResponsePart({
483
+ name: messageName,
484
+ // The API expects an object with an `error` field if the function call fails.
485
+ // `error` must be a valid object (not a string or array), so we wrap `message.content` here
486
+ response: { error: { details: result } },
487
+ id: message.tool_call_id,
488
+ }),
386
489
  ];
387
490
  }
388
491
 
389
492
  return [
390
- {
391
- functionResponse: {
392
- name: messageName,
393
- // again, can't have a string or array value for `response`, so we wrap it as an object here
394
- response: { result },
395
- },
396
- },
493
+ createGoogleFunctionResponsePart({
494
+ name: messageName,
495
+ // again, can't have a string or array value for `response`, so we wrap it as an object here
496
+ response: { result },
497
+ id: message.tool_call_id,
498
+ }),
397
499
  ];
398
500
  }
399
501
 
@@ -432,12 +534,15 @@ export function convertMessageContentToParts(
432
534
  }
433
535
  return '';
434
536
  });
537
+ const functionId = getGoogleFunctionId(tc.id);
538
+ const functionCall: GoogleFunctionCallWithId = {
539
+ name: tc.name,
540
+ args: tc.args,
541
+ ...(functionId != null ? { id: functionId } : {}),
542
+ };
435
543
 
436
544
  return {
437
- functionCall: {
438
- name: tc.name,
439
- args: tc.args,
440
- },
545
+ functionCall,
441
546
  ...(thoughtSignature ? { thoughtSignature } : {}),
442
547
  };
443
548
  });
@@ -598,6 +703,10 @@ export function convertResponseContentToChatGenerationChunk(
598
703
  codeExecutionResult: p.codeExecutionResult,
599
704
  };
600
705
  }
706
+ const serverSideToolPart = convertGoogleServerSideToolResponsePart(p);
707
+ if (serverSideToolPart !== undefined) {
708
+ return serverSideToolPart;
709
+ }
601
710
  return p;
602
711
  })
603
712
  .filter((p) => p !== undefined)
@@ -685,11 +794,7 @@ export function mapGenerateContentResultToChatResult(
685
794
  usageMetadata: UsageMetadata | undefined;
686
795
  }
687
796
  ): ChatResult {
688
- if (
689
- !response.candidates ||
690
- response.candidates.length === 0 ||
691
- !response.candidates[0]
692
- ) {
797
+ if (!response.candidates || response.candidates.length === 0) {
693
798
  return {
694
799
  generations: [],
695
800
  llmOutput: {
@@ -725,7 +830,7 @@ export function mapGenerateContentResultToChatResult(
725
830
  if (
726
831
  Array.isArray(candidateContent?.parts) &&
727
832
  candidateContent.parts.length === 1 &&
728
- candidateContent.parts[0].text &&
833
+ (candidateContent.parts[0].text ?? '') !== '' &&
729
834
  !(
730
835
  'thought' in candidateContent.parts[0] &&
731
836
  candidateContent.parts[0].thought === true
@@ -758,6 +863,10 @@ export function mapGenerateContentResultToChatResult(
758
863
  codeExecutionResult: p.codeExecutionResult,
759
864
  };
760
865
  }
866
+ const serverSideToolPart = convertGoogleServerSideToolResponsePart(p);
867
+ if (serverSideToolPart !== undefined) {
868
+ return serverSideToolPart;
869
+ }
761
870
  return p;
762
871
  })
763
872
  .filter((p) => p !== undefined)
@@ -807,7 +916,7 @@ export function mapGenerateContentResultToChatResult(
807
916
  const generation: ChatGeneration = {
808
917
  text,
809
918
  message: new AIMessage({
810
- content: content ?? '',
919
+ content,
811
920
  tool_calls,
812
921
  additional_kwargs,
813
922
  usage_metadata: extra?.usageMetadata,
@@ -1,3 +1,10 @@
1
+ import { StructuredToolInterface } from '@langchain/core/tools';
2
+ import { ToolChoice } from '@langchain/core/language_models/chat_models';
3
+ import { isLangChainTool } from '@langchain/core/utils/function_calling';
4
+ import {
5
+ isOpenAITool,
6
+ ToolDefinition,
7
+ } from '@langchain/core/language_models/base';
1
8
  import {
2
9
  Tool as GenerativeAITool,
3
10
  ToolConfig,
@@ -6,16 +13,9 @@ import {
6
13
  FunctionDeclarationsTool,
7
14
  FunctionDeclarationSchema,
8
15
  } from '@google/generative-ai';
9
- import { ToolChoice } from '@langchain/core/language_models/chat_models';
10
- import { StructuredToolInterface } from '@langchain/core/tools';
11
- import { isLangChainTool } from '@langchain/core/utils/function_calling';
12
- import {
13
- isOpenAITool,
14
- ToolDefinition,
15
- } from '@langchain/core/language_models/base';
16
+ import { removeAdditionalProperties } from './zod_to_genai_parameters';
16
17
  import { convertToGenerativeAITools } from './common';
17
18
  import { GoogleGenerativeAIToolType } from '../types';
18
- import { removeAdditionalProperties } from './zod_to_genai_parameters';
19
19
 
20
20
  export function convertToolsToGenAI(
21
21
  tools: GoogleGenerativeAIToolType[],
@@ -1,7 +1,3 @@
1
- import {
2
- type FunctionDeclarationSchema as GenerativeAIFunctionDeclarationSchema,
3
- type SchemaType as FunctionDeclarationSchemaType,
4
- } from '@google/generative-ai';
5
1
  import {
6
2
  InteropZodType,
7
3
  isInteropZodSchema,
@@ -10,6 +6,10 @@ import {
10
6
  type JsonSchema7Type,
11
7
  toJsonSchema,
12
8
  } from '@langchain/core/utils/json_schema';
9
+ import {
10
+ type FunctionDeclarationSchema as GenerativeAIFunctionDeclarationSchema,
11
+ type SchemaType as FunctionDeclarationSchemaType,
12
+ } from '@google/generative-ai';
13
13
 
14
14
  export interface GenerativeAIJsonSchema extends Record<string, unknown> {
15
15
  properties?: Record<string, GenerativeAIJsonSchema>;
@@ -1,17 +1,17 @@
1
1
  import { z } from 'zod';
2
2
  import { tool } from '@langchain/core/tools';
3
+ import { describe, it, expect, jest } from '@jest/globals';
3
4
  import {
4
5
  AIMessage,
5
6
  AIMessageChunk,
6
7
  HumanMessage,
7
8
  ToolMessage,
8
9
  } from '@langchain/core/messages';
9
- import { describe, it, expect, jest } from '@jest/globals';
10
- import type { BaseMessage } from '@langchain/core/messages';
11
10
  import type { StructuredToolInterface } from '@langchain/core/tools';
11
+ import type { BaseMessage } from '@langchain/core/messages';
12
12
  import type * as t from '@/types';
13
- import { attemptInvoke, tryFallbackProviders } from '@/llm/invoke';
14
13
  import { ToolOutputReferenceRegistry } from '@/tools/toolOutputReferences';
14
+ import { attemptInvoke, tryFallbackProviders } from '@/llm/invoke';
15
15
  import { ToolNode } from '@/tools/ToolNode';
16
16
  import { Providers } from '@/common';
17
17