@librechat/agents 3.2.31 → 3.2.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/cjs/agents/AgentContext.cjs +844 -1046
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/constants.cjs +13 -13
  5. package/dist/cjs/common/constants.cjs.map +1 -1
  6. package/dist/cjs/common/enum.cjs +233 -240
  7. package/dist/cjs/common/enum.cjs.map +1 -1
  8. package/dist/cjs/common/index.cjs +2 -0
  9. package/dist/cjs/events.cjs +121 -169
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1389 -1807
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/index.cjs +2 -0
  16. package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
  17. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  18. package/dist/cjs/hitl/index.cjs +1 -0
  19. package/dist/cjs/hooks/HookRegistry.cjs +176 -202
  20. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  21. package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
  22. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  23. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
  24. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  25. package/dist/cjs/hooks/executeHooks.cjs +227 -282
  26. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  27. package/dist/cjs/hooks/index.cjs +6 -0
  28. package/dist/cjs/hooks/matchers.cjs +196 -230
  29. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  30. package/dist/cjs/hooks/types.cjs +24 -24
  31. package/dist/cjs/hooks/types.cjs.map +1 -1
  32. package/dist/cjs/instrumentation.cjs +110 -137
  33. package/dist/cjs/instrumentation.cjs.map +1 -1
  34. package/dist/cjs/langchain/google-common.cjs +0 -3
  35. package/dist/cjs/langchain/index.cjs +80 -43
  36. package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
  37. package/dist/cjs/langchain/messages/tool.cjs +0 -3
  38. package/dist/cjs/langchain/messages.cjs +35 -18
  39. package/dist/cjs/langchain/openai.cjs +0 -3
  40. package/dist/cjs/langchain/prompts.cjs +5 -8
  41. package/dist/cjs/langchain/runnables.cjs +11 -10
  42. package/dist/cjs/langchain/tools.cjs +14 -11
  43. package/dist/cjs/langchain/utils/env.cjs +5 -8
  44. package/dist/cjs/langfuse.cjs +60 -79
  45. package/dist/cjs/langfuse.cjs.map +1 -1
  46. package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
  47. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  48. package/dist/cjs/llm/anthropic/index.cjs +432 -562
  49. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  50. package/dist/cjs/llm/anthropic/types.cjs +23 -47
  51. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -696
  53. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -252
  55. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  56. package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
  57. package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
  58. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  59. package/dist/cjs/llm/bedrock/index.cjs +195 -240
  60. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  61. package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
  62. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
  64. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
  65. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +105 -149
  67. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  68. package/dist/cjs/llm/fake.cjs +86 -96
  69. package/dist/cjs/llm/fake.cjs.map +1 -1
  70. package/dist/cjs/llm/google/index.cjs +183 -237
  71. package/dist/cjs/llm/google/index.cjs.map +1 -1
  72. package/dist/cjs/llm/google/utils/common.cjs +398 -674
  73. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  74. package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
  75. package/dist/cjs/llm/init.cjs +44 -53
  76. package/dist/cjs/llm/init.cjs.map +1 -1
  77. package/dist/cjs/llm/invoke.cjs +142 -182
  78. package/dist/cjs/llm/invoke.cjs.map +1 -1
  79. package/dist/cjs/llm/openai/index.cjs +991 -1276
  80. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  81. package/dist/cjs/llm/openai/utils/index.cjs +189 -316
  82. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  83. package/dist/cjs/llm/openrouter/index.cjs +102 -153
  84. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  85. package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
  86. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  87. package/dist/cjs/llm/providers.cjs +29 -37
  88. package/dist/cjs/llm/providers.cjs.map +1 -1
  89. package/dist/cjs/llm/request.cjs +20 -33
  90. package/dist/cjs/llm/request.cjs.map +1 -1
  91. package/dist/cjs/llm/vertexai/index.cjs +427 -453
  92. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  93. package/dist/cjs/main.cjs +547 -528
  94. package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
  95. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  96. package/dist/cjs/messages/cache.cjs +308 -401
  97. package/dist/cjs/messages/cache.cjs.map +1 -1
  98. package/dist/cjs/messages/content.cjs +36 -49
  99. package/dist/cjs/messages/content.cjs.map +1 -1
  100. package/dist/cjs/messages/contextPruning.cjs +112 -145
  101. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  102. package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
  103. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  104. package/dist/cjs/messages/core.cjs +256 -397
  105. package/dist/cjs/messages/core.cjs.map +1 -1
  106. package/dist/cjs/messages/format.cjs +904 -1382
  107. package/dist/cjs/messages/format.cjs.map +1 -1
  108. package/dist/cjs/messages/ids.cjs +16 -20
  109. package/dist/cjs/messages/ids.cjs.map +1 -1
  110. package/dist/cjs/messages/index.cjs +12 -0
  111. package/dist/cjs/messages/langchain.cjs +18 -18
  112. package/dist/cjs/messages/langchain.cjs.map +1 -1
  113. package/dist/cjs/messages/prune.cjs +1054 -1517
  114. package/dist/cjs/messages/prune.cjs.map +1 -1
  115. package/dist/cjs/messages/recency.cjs +77 -95
  116. package/dist/cjs/messages/recency.cjs.map +1 -1
  117. package/dist/cjs/messages/reducer.cjs +63 -78
  118. package/dist/cjs/messages/reducer.cjs.map +1 -1
  119. package/dist/cjs/messages/tools.cjs +51 -79
  120. package/dist/cjs/messages/tools.cjs.map +1 -1
  121. package/dist/cjs/openai/index.cjs +171 -217
  122. package/dist/cjs/openai/index.cjs.map +1 -1
  123. package/dist/cjs/responses/index.cjs +302 -391
  124. package/dist/cjs/responses/index.cjs.map +1 -1
  125. package/dist/cjs/run.cjs +903 -1113
  126. package/dist/cjs/run.cjs.map +1 -1
  127. package/dist/cjs/session/AgentSession.cjs +805 -986
  128. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  129. package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
  130. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  131. package/dist/cjs/session/handlers.cjs +192 -208
  132. package/dist/cjs/session/handlers.cjs.map +1 -1
  133. package/dist/cjs/session/ids.cjs +9 -10
  134. package/dist/cjs/session/ids.cjs.map +1 -1
  135. package/dist/cjs/session/index.cjs +4 -0
  136. package/dist/cjs/session/messageSerialization.cjs +94 -156
  137. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  138. package/dist/cjs/splitStream.cjs +147 -206
  139. package/dist/cjs/splitStream.cjs.map +1 -1
  140. package/dist/cjs/stream.cjs +856 -1344
  141. package/dist/cjs/stream.cjs.map +1 -1
  142. package/dist/cjs/summarization/index.cjs +57 -101
  143. package/dist/cjs/summarization/index.cjs.map +1 -1
  144. package/dist/cjs/summarization/node.cjs +643 -796
  145. package/dist/cjs/summarization/node.cjs.map +1 -1
  146. package/dist/cjs/tools/BashExecutor.cjs +110 -136
  147. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  148. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
  149. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  150. package/dist/cjs/tools/Calculator.cjs +36 -57
  151. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  152. package/dist/cjs/tools/CodeExecutor.cjs +126 -168
  153. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  154. package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
  155. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  156. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
  157. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  158. package/dist/cjs/tools/ReadFile.cjs +17 -20
  159. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  160. package/dist/cjs/tools/SkillTool.cjs +26 -27
  161. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  162. package/dist/cjs/tools/SubagentTool.cjs +59 -61
  163. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  164. package/dist/cjs/tools/ToolNode.cjs +2109 -2686
  165. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  166. package/dist/cjs/tools/ToolSearch.cjs +663 -825
  167. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  168. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
  169. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  170. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
  171. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  172. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
  173. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  174. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
  175. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  176. package/dist/cjs/tools/cloudflare/index.cjs +4 -0
  177. package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
  178. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  179. package/dist/cjs/tools/handlers.cjs +200 -262
  180. package/dist/cjs/tools/handlers.cjs.map +1 -1
  181. package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
  182. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  183. package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
  184. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  185. package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
  186. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  187. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
  188. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  189. package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
  190. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  191. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
  192. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  193. package/dist/cjs/tools/local/attachments.cjs +108 -165
  194. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  195. package/dist/cjs/tools/local/bashAst.cjs +99 -113
  196. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  197. package/dist/cjs/tools/local/editStrategies.cjs +126 -169
  198. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  199. package/dist/cjs/tools/local/index.cjs +12 -0
  200. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
  201. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  202. package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
  203. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  204. package/dist/cjs/tools/local/textEncoding.cjs +25 -23
  205. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  206. package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
  207. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  208. package/dist/cjs/tools/ptcTimeout.cjs +27 -47
  209. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  210. package/dist/cjs/tools/schema.cjs +24 -23
  211. package/dist/cjs/tools/schema.cjs.map +1 -1
  212. package/dist/cjs/tools/search/anthropic.cjs +24 -33
  213. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  214. package/dist/cjs/tools/search/content.cjs +95 -137
  215. package/dist/cjs/tools/search/content.cjs.map +1 -1
  216. package/dist/cjs/tools/search/firecrawl.cjs +141 -172
  217. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  218. package/dist/cjs/tools/search/format.cjs +128 -196
  219. package/dist/cjs/tools/search/format.cjs.map +1 -1
  220. package/dist/cjs/tools/search/highlights.cjs +165 -232
  221. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  222. package/dist/cjs/tools/search/index.cjs +2 -0
  223. package/dist/cjs/tools/search/rerankers.cjs +151 -174
  224. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  225. package/dist/cjs/tools/search/schema.cjs +40 -39
  226. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  227. package/dist/cjs/tools/search/search.cjs +428 -530
  228. package/dist/cjs/tools/search/search.cjs.map +1 -1
  229. package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
  230. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  231. package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
  232. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/tavily-search.cjs +295 -359
  234. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/tool.cjs +260 -299
  236. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  237. package/dist/cjs/tools/search/utils.cjs +74 -117
  238. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  239. package/dist/cjs/tools/skillCatalog.cjs +54 -72
  240. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  241. package/dist/cjs/tools/streamedToolCallSeals.cjs +19 -36
  242. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  243. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
  244. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  245. package/dist/cjs/tools/subagent/index.cjs +1 -0
  246. package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
  247. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  248. package/dist/cjs/utils/callbacks.cjs +11 -21
  249. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  250. package/dist/cjs/utils/errors.cjs +70 -95
  251. package/dist/cjs/utils/errors.cjs.map +1 -1
  252. package/dist/cjs/utils/events.cjs +32 -42
  253. package/dist/cjs/utils/events.cjs.map +1 -1
  254. package/dist/cjs/utils/graph.cjs +8 -12
  255. package/dist/cjs/utils/graph.cjs.map +1 -1
  256. package/dist/cjs/utils/handlers.cjs +60 -82
  257. package/dist/cjs/utils/handlers.cjs.map +1 -1
  258. package/dist/cjs/utils/index.cjs +9 -0
  259. package/dist/cjs/utils/llm.cjs +19 -27
  260. package/dist/cjs/utils/llm.cjs.map +1 -1
  261. package/dist/cjs/utils/misc.cjs +30 -46
  262. package/dist/cjs/utils/misc.cjs.map +1 -1
  263. package/dist/cjs/utils/run.cjs +50 -66
  264. package/dist/cjs/utils/run.cjs.map +1 -1
  265. package/dist/cjs/utils/schema.cjs +11 -19
  266. package/dist/cjs/utils/schema.cjs.map +1 -1
  267. package/dist/cjs/utils/title.cjs +71 -106
  268. package/dist/cjs/utils/title.cjs.map +1 -1
  269. package/dist/cjs/utils/tokens.cjs +186 -283
  270. package/dist/cjs/utils/tokens.cjs.map +1 -1
  271. package/dist/cjs/utils/truncation.cjs +95 -114
  272. package/dist/cjs/utils/truncation.cjs.map +1 -1
  273. package/dist/esm/agents/AgentContext.mjs +844 -1044
  274. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  275. package/dist/esm/common/constants.mjs +13 -11
  276. package/dist/esm/common/constants.mjs.map +1 -1
  277. package/dist/esm/common/enum.mjs +221 -238
  278. package/dist/esm/common/enum.mjs.map +1 -1
  279. package/dist/esm/common/index.mjs +3 -0
  280. package/dist/esm/events.mjs +121 -167
  281. package/dist/esm/events.mjs.map +1 -1
  282. package/dist/esm/graphs/Graph.mjs +1388 -1804
  283. package/dist/esm/graphs/Graph.mjs.map +1 -1
  284. package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
  285. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  286. package/dist/esm/graphs/index.mjs +3 -0
  287. package/dist/esm/hitl/askUserQuestion.mjs +60 -60
  288. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  289. package/dist/esm/hitl/index.mjs +2 -0
  290. package/dist/esm/hooks/HookRegistry.mjs +176 -200
  291. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  292. package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
  293. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  294. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
  295. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  296. package/dist/esm/hooks/executeHooks.mjs +227 -280
  297. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  298. package/dist/esm/hooks/index.mjs +7 -0
  299. package/dist/esm/hooks/matchers.mjs +196 -228
  300. package/dist/esm/hooks/matchers.mjs.map +1 -1
  301. package/dist/esm/hooks/types.mjs +24 -22
  302. package/dist/esm/hooks/types.mjs.map +1 -1
  303. package/dist/esm/instrumentation.mjs +109 -132
  304. package/dist/esm/instrumentation.mjs.map +1 -1
  305. package/dist/esm/langchain/google-common.mjs +1 -2
  306. package/dist/esm/langchain/index.mjs +5 -5
  307. package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
  308. package/dist/esm/langchain/messages/tool.mjs +1 -2
  309. package/dist/esm/langchain/messages.mjs +2 -2
  310. package/dist/esm/langchain/openai.mjs +1 -2
  311. package/dist/esm/langchain/prompts.mjs +2 -2
  312. package/dist/esm/langchain/runnables.mjs +2 -2
  313. package/dist/esm/langchain/tools.mjs +2 -2
  314. package/dist/esm/langchain/utils/env.mjs +2 -2
  315. package/dist/esm/langfuse.mjs +60 -76
  316. package/dist/esm/langfuse.mjs.map +1 -1
  317. package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
  318. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  319. package/dist/esm/llm/anthropic/index.mjs +432 -559
  320. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  321. package/dist/esm/llm/anthropic/types.mjs +23 -45
  322. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  323. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -690
  324. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  325. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -249
  326. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  327. package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
  328. package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
  329. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  330. package/dist/esm/llm/bedrock/index.mjs +195 -238
  331. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  332. package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
  333. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  334. package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
  335. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
  336. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  337. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +105 -147
  338. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  339. package/dist/esm/llm/fake.mjs +86 -94
  340. package/dist/esm/llm/fake.mjs.map +1 -1
  341. package/dist/esm/llm/google/index.mjs +183 -235
  342. package/dist/esm/llm/google/index.mjs.map +1 -1
  343. package/dist/esm/llm/google/utils/common.mjs +397 -666
  344. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  345. package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
  346. package/dist/esm/llm/init.mjs +44 -51
  347. package/dist/esm/llm/init.mjs.map +1 -1
  348. package/dist/esm/llm/invoke.mjs +142 -180
  349. package/dist/esm/llm/invoke.mjs.map +1 -1
  350. package/dist/esm/llm/openai/index.mjs +991 -1271
  351. package/dist/esm/llm/openai/index.mjs.map +1 -1
  352. package/dist/esm/llm/openai/utils/index.mjs +188 -312
  353. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  354. package/dist/esm/llm/openrouter/index.mjs +102 -151
  355. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  356. package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
  357. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  358. package/dist/esm/llm/providers.mjs +29 -34
  359. package/dist/esm/llm/providers.mjs.map +1 -1
  360. package/dist/esm/llm/request.mjs +20 -31
  361. package/dist/esm/llm/request.mjs.map +1 -1
  362. package/dist/esm/llm/vertexai/index.mjs +427 -449
  363. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  364. package/dist/esm/main.mjs +99 -87
  365. package/dist/esm/messages/anthropicToolCache.mjs +68 -117
  366. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  367. package/dist/esm/messages/cache.mjs +308 -399
  368. package/dist/esm/messages/cache.mjs.map +1 -1
  369. package/dist/esm/messages/content.mjs +36 -47
  370. package/dist/esm/messages/content.mjs.map +1 -1
  371. package/dist/esm/messages/contextPruning.mjs +112 -143
  372. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  373. package/dist/esm/messages/contextPruningSettings.mjs +36 -44
  374. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  375. package/dist/esm/messages/core.mjs +254 -393
  376. package/dist/esm/messages/core.mjs.map +1 -1
  377. package/dist/esm/messages/format.mjs +902 -1378
  378. package/dist/esm/messages/format.mjs.map +1 -1
  379. package/dist/esm/messages/ids.mjs +16 -18
  380. package/dist/esm/messages/ids.mjs.map +1 -1
  381. package/dist/esm/messages/index.mjs +13 -0
  382. package/dist/esm/messages/langchain.mjs +18 -16
  383. package/dist/esm/messages/langchain.mjs.map +1 -1
  384. package/dist/esm/messages/prune.mjs +1053 -1514
  385. package/dist/esm/messages/prune.mjs.map +1 -1
  386. package/dist/esm/messages/recency.mjs +77 -93
  387. package/dist/esm/messages/recency.mjs.map +1 -1
  388. package/dist/esm/messages/reducer.mjs +63 -76
  389. package/dist/esm/messages/reducer.mjs.map +1 -1
  390. package/dist/esm/messages/tools.mjs +49 -75
  391. package/dist/esm/messages/tools.mjs.map +1 -1
  392. package/dist/esm/openai/index.mjs +170 -215
  393. package/dist/esm/openai/index.mjs.map +1 -1
  394. package/dist/esm/responses/index.mjs +301 -389
  395. package/dist/esm/responses/index.mjs.map +1 -1
  396. package/dist/esm/run.mjs +903 -1111
  397. package/dist/esm/run.mjs.map +1 -1
  398. package/dist/esm/session/AgentSession.mjs +806 -985
  399. package/dist/esm/session/AgentSession.mjs.map +1 -1
  400. package/dist/esm/session/JsonlSessionStore.mjs +326 -407
  401. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  402. package/dist/esm/session/handlers.mjs +192 -206
  403. package/dist/esm/session/handlers.mjs.map +1 -1
  404. package/dist/esm/session/ids.mjs +9 -8
  405. package/dist/esm/session/ids.mjs.map +1 -1
  406. package/dist/esm/session/index.mjs +5 -0
  407. package/dist/esm/session/messageSerialization.mjs +94 -154
  408. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  409. package/dist/esm/splitStream.mjs +147 -204
  410. package/dist/esm/splitStream.mjs.map +1 -1
  411. package/dist/esm/stream.mjs +854 -1341
  412. package/dist/esm/stream.mjs.map +1 -1
  413. package/dist/esm/summarization/index.mjs +57 -99
  414. package/dist/esm/summarization/index.mjs.map +1 -1
  415. package/dist/esm/summarization/node.mjs +640 -790
  416. package/dist/esm/summarization/node.mjs.map +1 -1
  417. package/dist/esm/tools/BashExecutor.mjs +103 -129
  418. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  419. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
  420. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  421. package/dist/esm/tools/Calculator.mjs +34 -36
  422. package/dist/esm/tools/Calculator.mjs.map +1 -1
  423. package/dist/esm/tools/CodeExecutor.mjs +123 -164
  424. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  425. package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
  426. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  427. package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
  428. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  429. package/dist/esm/tools/ReadFile.mjs +17 -18
  430. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  431. package/dist/esm/tools/SkillTool.mjs +26 -25
  432. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  433. package/dist/esm/tools/SubagentTool.mjs +59 -59
  434. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  435. package/dist/esm/tools/ToolNode.mjs +2107 -2684
  436. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  437. package/dist/esm/tools/ToolSearch.mjs +659 -804
  438. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  439. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
  440. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  441. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
  442. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  443. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
  444. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  445. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
  446. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  447. package/dist/esm/tools/cloudflare/index.mjs +5 -0
  448. package/dist/esm/tools/eagerEventExecution.mjs +75 -96
  449. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  450. package/dist/esm/tools/handlers.mjs +200 -260
  451. package/dist/esm/tools/handlers.mjs.map +1 -1
  452. package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
  453. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  454. package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
  455. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  456. package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
  457. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  458. package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
  459. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  460. package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
  461. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  462. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
  463. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  464. package/dist/esm/tools/local/attachments.mjs +108 -163
  465. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  466. package/dist/esm/tools/local/bashAst.mjs +99 -111
  467. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  468. package/dist/esm/tools/local/editStrategies.mjs +126 -167
  469. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  470. package/dist/esm/tools/local/index.mjs +13 -0
  471. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
  472. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  473. package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
  474. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  475. package/dist/esm/tools/local/textEncoding.mjs +25 -21
  476. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  477. package/dist/esm/tools/local/workspaceFS.mjs +38 -44
  478. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  479. package/dist/esm/tools/ptcTimeout.mjs +27 -42
  480. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  481. package/dist/esm/tools/schema.mjs +24 -21
  482. package/dist/esm/tools/schema.mjs.map +1 -1
  483. package/dist/esm/tools/search/anthropic.mjs +24 -31
  484. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  485. package/dist/esm/tools/search/content.mjs +93 -116
  486. package/dist/esm/tools/search/content.mjs.map +1 -1
  487. package/dist/esm/tools/search/firecrawl.mjs +139 -169
  488. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  489. package/dist/esm/tools/search/format.mjs +128 -194
  490. package/dist/esm/tools/search/format.mjs.map +1 -1
  491. package/dist/esm/tools/search/highlights.mjs +165 -230
  492. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  493. package/dist/esm/tools/search/index.mjs +3 -0
  494. package/dist/esm/tools/search/rerankers.mjs +149 -168
  495. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  496. package/dist/esm/tools/search/schema.mjs +39 -37
  497. package/dist/esm/tools/search/schema.mjs.map +1 -1
  498. package/dist/esm/tools/search/search.mjs +426 -528
  499. package/dist/esm/tools/search/search.mjs.map +1 -1
  500. package/dist/esm/tools/search/serper-scraper.mjs +104 -124
  501. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  502. package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
  503. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  504. package/dist/esm/tools/search/tavily-search.mjs +293 -357
  505. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  506. package/dist/esm/tools/search/tool.mjs +259 -297
  507. package/dist/esm/tools/search/tool.mjs.map +1 -1
  508. package/dist/esm/tools/search/utils.mjs +74 -115
  509. package/dist/esm/tools/search/utils.mjs.map +1 -1
  510. package/dist/esm/tools/skillCatalog.mjs +54 -70
  511. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  512. package/dist/esm/tools/streamedToolCallSeals.mjs +19 -31
  513. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  514. package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
  515. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  516. package/dist/esm/tools/subagent/index.mjs +2 -0
  517. package/dist/esm/tools/toolOutputReferences.mjs +523 -624
  518. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  519. package/dist/esm/utils/callbacks.mjs +11 -19
  520. package/dist/esm/utils/callbacks.mjs.map +1 -1
  521. package/dist/esm/utils/errors.mjs +70 -93
  522. package/dist/esm/utils/errors.mjs.map +1 -1
  523. package/dist/esm/utils/events.mjs +32 -40
  524. package/dist/esm/utils/events.mjs.map +1 -1
  525. package/dist/esm/utils/graph.mjs +8 -10
  526. package/dist/esm/utils/graph.mjs.map +1 -1
  527. package/dist/esm/utils/handlers.mjs +60 -80
  528. package/dist/esm/utils/handlers.mjs.map +1 -1
  529. package/dist/esm/utils/index.mjs +10 -0
  530. package/dist/esm/utils/llm.mjs +19 -25
  531. package/dist/esm/utils/llm.mjs.map +1 -1
  532. package/dist/esm/utils/misc.mjs +30 -44
  533. package/dist/esm/utils/misc.mjs.map +1 -1
  534. package/dist/esm/utils/run.mjs +50 -64
  535. package/dist/esm/utils/run.mjs.map +1 -1
  536. package/dist/esm/utils/schema.mjs +11 -17
  537. package/dist/esm/utils/schema.mjs.map +1 -1
  538. package/dist/esm/utils/title.mjs +71 -104
  539. package/dist/esm/utils/title.mjs.map +1 -1
  540. package/dist/esm/utils/tokens.mjs +186 -281
  541. package/dist/esm/utils/tokens.mjs.map +1 -1
  542. package/dist/esm/utils/truncation.mjs +95 -112
  543. package/dist/esm/utils/truncation.mjs.map +1 -1
  544. package/dist/types/messages/format.d.ts +5 -0
  545. package/dist/types/tools/search/tool.d.ts +17 -0
  546. package/dist/types/tools/search/types.d.ts +4 -0
  547. package/package.json +11 -17
  548. package/src/llm/anthropic/llm.spec.ts +36 -0
  549. package/src/llm/anthropic/utils/message_inputs.ts +45 -3
  550. package/src/llm/anthropic/utils/message_outputs.ts +6 -2
  551. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +186 -0
  552. package/src/messages/cache.test.ts +122 -0
  553. package/src/messages/cache.ts +25 -1
  554. package/src/messages/format.ts +9 -0
  555. package/src/messages/formatAgentMessages.skills.test.ts +100 -0
  556. package/src/tools/search/highlights.ts +9 -1
  557. package/src/tools/search/search.ts +41 -3
  558. package/src/tools/search/source-processing.test.ts +373 -0
  559. package/src/tools/search/tool.ts +22 -2
  560. package/src/tools/search/types.ts +4 -0
  561. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  562. package/dist/cjs/langchain/index.cjs.map +0 -1
  563. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  564. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  565. package/dist/cjs/langchain/messages.cjs.map +0 -1
  566. package/dist/cjs/langchain/openai.cjs.map +0 -1
  567. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  568. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  569. package/dist/cjs/langchain/tools.cjs.map +0 -1
  570. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  571. package/dist/cjs/main.cjs.map +0 -1
  572. package/dist/esm/langchain/google-common.mjs.map +0 -1
  573. package/dist/esm/langchain/index.mjs.map +0 -1
  574. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  575. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  576. package/dist/esm/langchain/messages.mjs.map +0 -1
  577. package/dist/esm/langchain/openai.mjs.map +0 -1
  578. package/dist/esm/langchain/prompts.mjs.map +0 -1
  579. package/dist/esm/langchain/runnables.mjs.map +0 -1
  580. package/dist/esm/langchain/tools.mjs.map +0 -1
  581. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  582. package/dist/esm/main.mjs.map +0 -1
@@ -1,674 +1,413 @@
1
- import { isAIMessage, isDataContentBlock, convertToProviderContentBlock, parseBase64DataUrl, parseMimeType } from '@langchain/core/messages';
2
-
1
+ import { convertToProviderContentBlock, isAIMessage, isDataContentBlock, parseBase64DataUrl, parseMimeType } from "@langchain/core/messages";
2
+ //#region src/llm/bedrock/utils/message_inputs.ts
3
3
  /**
4
- * Utility functions for converting LangChain messages to Bedrock Converse messages.
5
- * Ported from @langchain/aws common.js
6
- */
4
+ * Utility functions for converting LangChain messages to Bedrock Converse messages.
5
+ * Ported from @langchain/aws common.js
6
+ */
7
7
  /**
8
- * Convert a LangChain reasoning block to a Bedrock reasoning block.
9
- */
8
+ * Convert a LangChain reasoning block to a Bedrock reasoning block.
9
+ */
10
10
  function langchainReasoningBlockToBedrockReasoningBlock(content) {
11
- if (content.reasoningText != null) {
12
- return {
13
- reasoningText: content.reasoningText,
14
- };
15
- }
16
- if (content.redactedContent != null && content.redactedContent !== '') {
17
- return {
18
- redactedContent: new Uint8Array(Buffer.from(content.redactedContent, 'base64')),
19
- };
20
- }
21
- throw new Error('Invalid reasoning content');
11
+ if (content.reasoningText != null) return { reasoningText: content.reasoningText };
12
+ if (content.redactedContent != null && content.redactedContent !== "") return { redactedContent: new Uint8Array(Buffer.from(content.redactedContent, "base64")) };
13
+ throw new Error("Invalid reasoning content");
22
14
  }
23
15
  /**
24
- * Concatenate consecutive reasoning blocks in content array.
25
- */
16
+ * Concatenate consecutive reasoning blocks in content array.
17
+ */
26
18
  function concatenateLangchainReasoningBlocks(content) {
27
- const result = [];
28
- for (const block of content) {
29
- if (block.type === 'reasoning_content') {
30
- const currentReasoning = block;
31
- const lastIndex = result.length - 1;
32
- // Check if we can merge with the previous block
33
- if (lastIndex >= 0) {
34
- const lastBlock = result[lastIndex];
35
- if (lastBlock.type === 'reasoning_content' &&
36
- lastBlock.reasoningText != null &&
37
- currentReasoning.reasoningText != null) {
38
- const lastReasoning = lastBlock;
39
- // Merge consecutive reasoning text blocks
40
- const lastText = lastReasoning.reasoningText?.text;
41
- const currentText = currentReasoning.reasoningText.text;
42
- if (lastText != null &&
43
- lastText !== '' &&
44
- currentText != null &&
45
- currentText !== '') {
46
- lastReasoning.reasoningText.text = lastText + currentText;
47
- }
48
- else if (currentReasoning.reasoningText.signature != null &&
49
- currentReasoning.reasoningText.signature !== '') {
50
- lastReasoning.reasoningText.signature =
51
- currentReasoning.reasoningText.signature;
52
- }
53
- continue;
54
- }
55
- }
56
- result.push({ ...block });
57
- }
58
- else {
59
- result.push(block);
60
- }
61
- }
62
- return result;
19
+ const result = [];
20
+ for (const block of content) if (block.type === "reasoning_content") {
21
+ const currentReasoning = block;
22
+ const lastIndex = result.length - 1;
23
+ if (lastIndex >= 0) {
24
+ const lastBlock = result[lastIndex];
25
+ if (lastBlock.type === "reasoning_content" && lastBlock.reasoningText != null && currentReasoning.reasoningText != null) {
26
+ const lastReasoning = lastBlock;
27
+ const lastText = lastReasoning.reasoningText?.text;
28
+ const currentText = currentReasoning.reasoningText.text;
29
+ if (lastText != null && lastText !== "" && currentText != null && currentText !== "") lastReasoning.reasoningText.text = lastText + currentText;
30
+ else if (currentReasoning.reasoningText.signature != null && currentReasoning.reasoningText.signature !== "") lastReasoning.reasoningText.signature = currentReasoning.reasoningText.signature;
31
+ continue;
32
+ }
33
+ }
34
+ result.push({ ...block });
35
+ } else result.push(block);
36
+ return result;
63
37
  }
64
38
  /**
65
- * Extract image info from a base64 string or URL.
66
- */
39
+ * Extract image info from a base64 string or URL.
40
+ */
67
41
  function extractImageInfo(base64) {
68
- // Extract the format from the base64 string
69
- const formatMatch = base64.match(/^data:image\/(\w+);base64,/);
70
- let format;
71
- if (formatMatch) {
72
- const extractedFormat = formatMatch[1].toLowerCase();
73
- if (['gif', 'jpeg', 'png', 'webp'].includes(extractedFormat)) {
74
- format = extractedFormat;
75
- }
76
- }
77
- // Remove the data URL prefix if present
78
- const base64Data = base64.replace(/^data:image\/\w+;base64,/, '');
79
- // Convert base64 to Uint8Array
80
- const binaryString = atob(base64Data);
81
- const bytes = new Uint8Array(binaryString.length);
82
- for (let i = 0; i < binaryString.length; i += 1) {
83
- bytes[i] = binaryString.charCodeAt(i);
84
- }
85
- return {
86
- image: {
87
- format,
88
- source: {
89
- bytes,
90
- },
91
- },
92
- };
42
+ const formatMatch = base64.match(/^data:image\/(\w+);base64,/);
43
+ let format;
44
+ if (formatMatch) {
45
+ const extractedFormat = formatMatch[1].toLowerCase();
46
+ if ([
47
+ "gif",
48
+ "jpeg",
49
+ "png",
50
+ "webp"
51
+ ].includes(extractedFormat)) format = extractedFormat;
52
+ }
53
+ const base64Data = base64.replace(/^data:image\/\w+;base64,/, "");
54
+ const binaryString = atob(base64Data);
55
+ const bytes = new Uint8Array(binaryString.length);
56
+ for (let i = 0; i < binaryString.length; i += 1) bytes[i] = binaryString.charCodeAt(i);
57
+ return { image: {
58
+ format,
59
+ source: { bytes }
60
+ } };
93
61
  }
94
62
  const mimeTypeToVideoFormat = {
95
- 'video/flv': 'flv',
96
- 'video/mkv': 'mkv',
97
- 'video/mov': 'mov',
98
- 'video/mp4': 'mp4',
99
- 'video/mpeg': 'mpeg',
100
- 'video/mpg': 'mpg',
101
- 'video/three_gp': 'three_gp',
102
- 'video/webm': 'webm',
103
- 'video/wmv': 'wmv',
63
+ "video/flv": "flv",
64
+ "video/mkv": "mkv",
65
+ "video/mov": "mov",
66
+ "video/mp4": "mp4",
67
+ "video/mpeg": "mpeg",
68
+ "video/mpg": "mpg",
69
+ "video/three_gp": "three_gp",
70
+ "video/webm": "webm",
71
+ "video/wmv": "wmv"
104
72
  };
105
73
  const mimeTypeToAudioFormat = {
106
- 'audio/aac': 'aac',
107
- 'audio/flac': 'flac',
108
- 'audio/m4a': 'm4a',
109
- 'audio/mka': 'mka',
110
- 'audio/mkv': 'mkv',
111
- 'audio/mp3': 'mp3',
112
- 'audio/mp4': 'mp4',
113
- 'audio/mpeg': 'mpeg',
114
- 'audio/mpga': 'mpga',
115
- 'audio/ogg': 'ogg',
116
- 'audio/opus': 'opus',
117
- 'audio/pcm': 'pcm',
118
- 'audio/wav': 'wav',
119
- 'audio/webm': 'webm',
120
- 'audio/x-aac': 'x-aac',
74
+ "audio/aac": "aac",
75
+ "audio/flac": "flac",
76
+ "audio/m4a": "m4a",
77
+ "audio/mka": "mka",
78
+ "audio/mkv": "mkv",
79
+ "audio/mp3": "mp3",
80
+ "audio/mp4": "mp4",
81
+ "audio/mpeg": "mpeg",
82
+ "audio/mpga": "mpga",
83
+ "audio/ogg": "ogg",
84
+ "audio/opus": "opus",
85
+ "audio/pcm": "pcm",
86
+ "audio/wav": "wav",
87
+ "audio/webm": "webm",
88
+ "audio/x-aac": "x-aac"
121
89
  };
122
90
  const mimeTypeToDocumentFormat = {
123
- 'text/csv': 'csv',
124
- 'application/msword': 'doc',
125
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',
126
- 'text/html': 'html',
127
- 'text/markdown': 'md',
128
- 'application/pdf': 'pdf',
129
- 'text/plain': 'txt',
130
- 'application/vnd.ms-excel': 'xls',
131
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
91
+ "text/csv": "csv",
92
+ "application/msword": "doc",
93
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "docx",
94
+ "text/html": "html",
95
+ "text/markdown": "md",
96
+ "application/pdf": "pdf",
97
+ "text/plain": "txt",
98
+ "application/vnd.ms-excel": "xls",
99
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx"
132
100
  };
133
101
  function base64ToBytes(data) {
134
- return Uint8Array.from(atob(data), (char) => char.charCodeAt(0));
102
+ return Uint8Array.from(atob(data), (char) => char.charCodeAt(0));
135
103
  }
136
104
  function getMediaFormat(mimeType, formatMap) {
137
- if (mimeType == null || mimeType === '') {
138
- return undefined;
139
- }
140
- return formatMap[mimeType] ?? parseMimeType(mimeType).subtype;
105
+ if (mimeType == null || mimeType === "") return;
106
+ return formatMap[mimeType] ?? parseMimeType(mimeType).subtype;
141
107
  }
142
108
  function resolveMediaSource(block) {
143
- if (typeof block.data === 'string') {
144
- return { bytes: base64ToBytes(block.data) };
145
- }
146
- if (block.data instanceof Uint8Array) {
147
- return { bytes: block.data };
148
- }
149
- if (typeof block.url === 'string') {
150
- const parsedData = parseBase64DataUrl({
151
- dataUrl: block.url,
152
- asTypedArray: true,
153
- });
154
- if (parsedData != null) {
155
- return { bytes: parsedData.data };
156
- }
157
- throw new Error(`Only base64 data URLs are supported for ${block.type} blocks with 'url' field with ChatBedrockConverse.`);
158
- }
159
- if (typeof block.fileId === 'string') {
160
- return { s3Location: { uri: block.fileId } };
161
- }
162
- throw new Error(`${block.type} block must include one of: 'data' (base64 string or Uint8Array), 'url' (base64 data URL), or 'fileId' (S3 URI).`);
109
+ if (typeof block.data === "string") return { bytes: base64ToBytes(block.data) };
110
+ if (block.data instanceof Uint8Array) return { bytes: block.data };
111
+ if (typeof block.url === "string") {
112
+ const parsedData = parseBase64DataUrl({
113
+ dataUrl: block.url,
114
+ asTypedArray: true
115
+ });
116
+ if (parsedData != null) return { bytes: parsedData.data };
117
+ throw new Error(`Only base64 data URLs are supported for ${block.type} blocks with 'url' field with ChatBedrockConverse.`);
118
+ }
119
+ if (typeof block.fileId === "string") return { s3Location: { uri: block.fileId } };
120
+ throw new Error(`${block.type} block must include one of: 'data' (base64 string or Uint8Array), 'url' (base64 data URL), or 'fileId' (S3 URI).`);
163
121
  }
164
122
  function convertMultimodalVideoBlock(block) {
165
- return {
166
- video: {
167
- format: getMediaFormat(block.mimeType, mimeTypeToVideoFormat),
168
- source: resolveMediaSource(block),
169
- },
170
- };
123
+ return { video: {
124
+ format: getMediaFormat(block.mimeType, mimeTypeToVideoFormat),
125
+ source: resolveMediaSource(block)
126
+ } };
171
127
  }
172
128
  function convertMultimodalAudioBlock(block) {
173
- return {
174
- audio: {
175
- format: getMediaFormat(block.mimeType, mimeTypeToAudioFormat),
176
- source: resolveMediaSource(block),
177
- },
178
- };
129
+ return { audio: {
130
+ format: getMediaFormat(block.mimeType, mimeTypeToAudioFormat),
131
+ source: resolveMediaSource(block)
132
+ } };
179
133
  }
180
134
  function getDocumentName(block) {
181
- return (block.metadata?.name ??
182
- block.metadata?.filename ??
183
- block.metadata?.title ??
184
- globalThis.crypto.randomUUID().replace(/-/g, '').slice(0, 12));
135
+ return block.metadata?.name ?? block.metadata?.filename ?? block.metadata?.title ?? globalThis.crypto.randomUUID().replace(/-/g, "").slice(0, 12);
185
136
  }
186
137
  function getDocumentFormat(mimeType) {
187
- if (mimeType == null || mimeType === '') {
188
- return undefined;
189
- }
190
- const parsedMimeType = parseMimeType(mimeType);
191
- const format = mimeTypeToDocumentFormat[`${parsedMimeType.type}/${parsedMimeType.subtype}`];
192
- if (format === undefined) {
193
- throw new Error(`Unsupported file mime type: "${mimeType}" ChatBedrockConverse only supports ${Object.keys(mimeTypeToDocumentFormat).join(', ')} formats.`);
194
- }
195
- return format;
138
+ if (mimeType == null || mimeType === "") return;
139
+ const parsedMimeType = parseMimeType(mimeType);
140
+ const format = mimeTypeToDocumentFormat[`${parsedMimeType.type}/${parsedMimeType.subtype}`];
141
+ if (format === void 0) throw new Error(`Unsupported file mime type: "${mimeType}" ChatBedrockConverse only supports ${Object.keys(mimeTypeToDocumentFormat).join(", ")} formats.`);
142
+ return format;
196
143
  }
197
144
  const standardContentBlockConverter = {
198
- providerName: 'ChatBedrockConverse',
199
- fromStandardTextBlock(block) {
200
- return { text: block.text };
201
- },
202
- fromStandardImageBlock(block) {
203
- if (block.source_type === 'url') {
204
- const parsedData = parseBase64DataUrl({
205
- dataUrl: block.url,
206
- asTypedArray: true,
207
- });
208
- if (parsedData == null) {
209
- throw new Error([
210
- 'Only base64 data URLs are supported for image blocks with source type ',
211
- 'url',
212
- ' with ChatBedrockConverse.',
213
- ].join(String.fromCharCode(39)));
214
- }
215
- return {
216
- image: {
217
- format: parseMimeType(parsedData.mime_type).subtype,
218
- source: { bytes: parsedData.data },
219
- },
220
- };
221
- }
222
- if (block.source_type === 'base64') {
223
- let format;
224
- if (block.mime_type != null && block.mime_type !== '') {
225
- format = parseMimeType(block.mime_type).subtype;
226
- }
227
- if (format != null && !['gif', 'jpeg', 'png', 'webp'].includes(format)) {
228
- throw new Error(`Unsupported image mime type: "${block.mime_type}" ChatBedrockConverse only supports "image/gif", "image/jpeg", "image/png", and "image/webp" formats.`);
229
- }
230
- return {
231
- image: {
232
- format,
233
- source: { bytes: base64ToBytes(block.data) },
234
- },
235
- };
236
- }
237
- throw new Error(`Image source type '${block.source_type}' not supported with ChatBedrockConverse.`);
238
- },
239
- fromStandardFileBlock(block) {
240
- const name = getDocumentName(block);
241
- if (block.source_type === 'text') {
242
- return {
243
- document: {
244
- name,
245
- format: 'txt',
246
- source: { bytes: new TextEncoder().encode(block.text) },
247
- },
248
- };
249
- }
250
- if (block.source_type === 'url') {
251
- const parsedData = parseBase64DataUrl({
252
- dataUrl: block.url,
253
- asTypedArray: true,
254
- });
255
- if (parsedData == null) {
256
- throw new Error([
257
- 'Only base64 data URLs are supported for file blocks with source type ',
258
- 'url',
259
- ' with ChatBedrockConverse.',
260
- ].join(String.fromCharCode(39)));
261
- }
262
- return {
263
- document: {
264
- name,
265
- format: getDocumentFormat(parsedData.mime_type),
266
- source: { bytes: parsedData.data },
267
- },
268
- };
269
- }
270
- if (block.source_type === 'base64') {
271
- return {
272
- document: {
273
- name,
274
- format: getDocumentFormat(block.mime_type),
275
- source: { bytes: base64ToBytes(block.data) },
276
- },
277
- };
278
- }
279
- throw new Error(`File source type '${block.source_type}' not supported with ChatBedrockConverse.`);
280
- },
145
+ providerName: "ChatBedrockConverse",
146
+ fromStandardTextBlock(block) {
147
+ return { text: block.text };
148
+ },
149
+ fromStandardImageBlock(block) {
150
+ if (block.source_type === "url") {
151
+ const parsedData = parseBase64DataUrl({
152
+ dataUrl: block.url,
153
+ asTypedArray: true
154
+ });
155
+ if (parsedData == null) throw new Error([
156
+ "Only base64 data URLs are supported for image blocks with source type ",
157
+ "url",
158
+ " with ChatBedrockConverse."
159
+ ].join(String.fromCharCode(39)));
160
+ return { image: {
161
+ format: parseMimeType(parsedData.mime_type).subtype,
162
+ source: { bytes: parsedData.data }
163
+ } };
164
+ }
165
+ if (block.source_type === "base64") {
166
+ let format;
167
+ if (block.mime_type != null && block.mime_type !== "") format = parseMimeType(block.mime_type).subtype;
168
+ if (format != null && ![
169
+ "gif",
170
+ "jpeg",
171
+ "png",
172
+ "webp"
173
+ ].includes(format)) throw new Error(`Unsupported image mime type: "${block.mime_type}" ChatBedrockConverse only supports "image/gif", "image/jpeg", "image/png", and "image/webp" formats.`);
174
+ return { image: {
175
+ format,
176
+ source: { bytes: base64ToBytes(block.data) }
177
+ } };
178
+ }
179
+ throw new Error(`Image source type '${block.source_type}' not supported with ChatBedrockConverse.`);
180
+ },
181
+ fromStandardFileBlock(block) {
182
+ const name = getDocumentName(block);
183
+ if (block.source_type === "text") return { document: {
184
+ name,
185
+ format: "txt",
186
+ source: { bytes: new TextEncoder().encode(block.text) }
187
+ } };
188
+ if (block.source_type === "url") {
189
+ const parsedData = parseBase64DataUrl({
190
+ dataUrl: block.url,
191
+ asTypedArray: true
192
+ });
193
+ if (parsedData == null) throw new Error([
194
+ "Only base64 data URLs are supported for file blocks with source type ",
195
+ "url",
196
+ " with ChatBedrockConverse."
197
+ ].join(String.fromCharCode(39)));
198
+ return { document: {
199
+ name,
200
+ format: getDocumentFormat(parsedData.mime_type),
201
+ source: { bytes: parsedData.data }
202
+ } };
203
+ }
204
+ if (block.source_type === "base64") return { document: {
205
+ name,
206
+ format: getDocumentFormat(block.mime_type),
207
+ source: { bytes: base64ToBytes(block.data) }
208
+ } };
209
+ throw new Error(`File source type '${block.source_type}' not supported with ChatBedrockConverse.`);
210
+ }
281
211
  };
282
212
  /**
283
- * Check if a block has a cache point.
284
- */
213
+ * Check if a block has a cache point.
214
+ */
285
215
  function isDefaultCachePoint(block) {
286
- if (typeof block !== 'object' || block === null) {
287
- return false;
288
- }
289
- if (!('cachePoint' in block)) {
290
- return false;
291
- }
292
- const cachePoint = block.cachePoint;
293
- if (typeof cachePoint !== 'object' || cachePoint === null) {
294
- return false;
295
- }
296
- if (!('type' in cachePoint)) {
297
- return false;
298
- }
299
- return cachePoint.type === 'default';
216
+ if (typeof block !== "object" || block === null) return false;
217
+ if (!("cachePoint" in block)) return false;
218
+ const cachePoint = block.cachePoint;
219
+ if (typeof cachePoint !== "object" || cachePoint === null) return false;
220
+ if (!("type" in cachePoint)) return false;
221
+ return cachePoint.type === "default";
300
222
  }
301
223
  /**
302
- * Convert a LangChain content block to a Bedrock Converse content block.
303
- */
304
- function convertLangChainContentBlockToConverseContentBlock({ block, onUnknown = 'throw', }) {
305
- if (typeof block === 'string') {
306
- return { text: block };
307
- }
308
- if (isDataContentBlock(block)) {
309
- return convertToProviderContentBlock(block, standardContentBlockConverter);
310
- }
311
- if (block.type === 'text') {
312
- return { text: block.text };
313
- }
314
- if (block.type === 'image_url') {
315
- const imageUrl = typeof block.image_url ===
316
- 'string'
317
- ? block.image_url
318
- : block.image_url.url;
319
- return extractImageInfo(imageUrl);
320
- }
321
- if (block.type === 'image') {
322
- // Handle standard image block format
323
- const imageBlock = block;
324
- if (imageBlock.source_type === 'url' &&
325
- imageBlock.url != null &&
326
- imageBlock.url !== '') {
327
- const parsedData = parseBase64DataUrl({
328
- dataUrl: imageBlock.url,
329
- asTypedArray: true,
330
- });
331
- if (parsedData != null) {
332
- const parsedMimeType = parseMimeType(parsedData.mime_type);
333
- return {
334
- image: {
335
- format: parsedMimeType.subtype,
336
- source: {
337
- bytes: parsedData.data,
338
- },
339
- },
340
- };
341
- }
342
- }
343
- else if (imageBlock.source_type === 'base64' &&
344
- imageBlock.data != null &&
345
- imageBlock.data !== '') {
346
- let format;
347
- if (imageBlock.mime_type != null && imageBlock.mime_type !== '') {
348
- const parsedMimeType = parseMimeType(imageBlock.mime_type);
349
- format = parsedMimeType.subtype;
350
- }
351
- return {
352
- image: {
353
- format,
354
- source: {
355
- bytes: Uint8Array.from(atob(imageBlock.data), (c) => c.charCodeAt(0)),
356
- },
357
- },
358
- };
359
- }
360
- // If it already has the Bedrock image structure, pass through
361
- if (block.image !== undefined) {
362
- return {
363
- image: block.image,
364
- };
365
- }
366
- }
367
- if (block.type === 'video' &&
368
- block.video !== undefined) {
369
- return {
370
- video: block.video,
371
- };
372
- }
373
- if (block.type === 'video') {
374
- return convertMultimodalVideoBlock(block);
375
- }
376
- if (block.type === 'audio' &&
377
- block.audio !== undefined) {
378
- return {
379
- audio: block.audio,
380
- };
381
- }
382
- if (block.type === 'audio') {
383
- return convertMultimodalAudioBlock(block);
384
- }
385
- if (block.type === 'document' &&
386
- block.document !== undefined) {
387
- return {
388
- document: block.document,
389
- };
390
- }
391
- if (isDefaultCachePoint(block)) {
392
- return {
393
- cachePoint: {
394
- type: 'default',
395
- },
396
- };
397
- }
398
- if (onUnknown === 'throw') {
399
- throw new Error(`Unsupported content block type: ${block.type}`);
400
- }
401
- else {
402
- return block;
403
- }
224
+ * Convert a LangChain content block to a Bedrock Converse content block.
225
+ */
226
+ function convertLangChainContentBlockToConverseContentBlock({ block, onUnknown = "throw" }) {
227
+ if (typeof block === "string") return { text: block };
228
+ if (isDataContentBlock(block)) return convertToProviderContentBlock(block, standardContentBlockConverter);
229
+ if (block.type === "text") return { text: block.text };
230
+ if (block.type === "image_url") return extractImageInfo(typeof block.image_url === "string" ? block.image_url : block.image_url.url);
231
+ if (block.type === "image") {
232
+ const imageBlock = block;
233
+ if (imageBlock.source_type === "url" && imageBlock.url != null && imageBlock.url !== "") {
234
+ const parsedData = parseBase64DataUrl({
235
+ dataUrl: imageBlock.url,
236
+ asTypedArray: true
237
+ });
238
+ if (parsedData != null) return { image: {
239
+ format: parseMimeType(parsedData.mime_type).subtype,
240
+ source: { bytes: parsedData.data }
241
+ } };
242
+ } else if (imageBlock.source_type === "base64" && imageBlock.data != null && imageBlock.data !== "") {
243
+ let format;
244
+ if (imageBlock.mime_type != null && imageBlock.mime_type !== "") format = parseMimeType(imageBlock.mime_type).subtype;
245
+ return { image: {
246
+ format,
247
+ source: { bytes: Uint8Array.from(atob(imageBlock.data), (c) => c.charCodeAt(0)) }
248
+ } };
249
+ }
250
+ if (block.image !== void 0) return { image: block.image };
251
+ }
252
+ if (block.type === "video" && block.video !== void 0) return { video: block.video };
253
+ if (block.type === "video") return convertMultimodalVideoBlock(block);
254
+ if (block.type === "audio" && block.audio !== void 0) return { audio: block.audio };
255
+ if (block.type === "audio") return convertMultimodalAudioBlock(block);
256
+ if (block.type === "document" && block.document !== void 0) return { document: block.document };
257
+ if (isDefaultCachePoint(block)) return { cachePoint: { type: "default" } };
258
+ if (onUnknown === "throw") throw new Error(`Unsupported content block type: ${block.type}`);
259
+ else return block;
404
260
  }
405
261
  /**
406
- * Convert a system message to Bedrock system content blocks.
407
- */
262
+ * Convert a system message to Bedrock system content blocks.
263
+ */
408
264
  function convertSystemMessageToConverseMessage(msg) {
409
- if (typeof msg.content === 'string') {
410
- return [{ text: msg.content }];
411
- }
412
- else if (Array.isArray(msg.content) && msg.content.length > 0) {
413
- const contentBlocks = [];
414
- for (const block of msg.content) {
415
- if (typeof block === 'object' &&
416
- block.type === 'text' &&
417
- typeof block.text === 'string') {
418
- contentBlocks.push({
419
- text: block.text,
420
- });
421
- }
422
- else if (isDefaultCachePoint(block)) {
423
- contentBlocks.push({
424
- cachePoint: {
425
- type: 'default',
426
- },
427
- });
428
- }
429
- else {
430
- break;
431
- }
432
- }
433
- if (msg.content.length === contentBlocks.length) {
434
- return contentBlocks;
435
- }
436
- }
437
- throw new Error('System message content must be either a string, or an array of text blocks, optionally including a cache point.');
265
+ if (typeof msg.content === "string") return [{ text: msg.content }];
266
+ else if (Array.isArray(msg.content) && msg.content.length > 0) {
267
+ const contentBlocks = [];
268
+ for (const block of msg.content) if (typeof block === "object" && block.type === "text" && typeof block.text === "string") contentBlocks.push({ text: block.text });
269
+ else if (isDefaultCachePoint(block)) contentBlocks.push({ cachePoint: { type: "default" } });
270
+ else break;
271
+ if (msg.content.length === contentBlocks.length) return contentBlocks;
272
+ }
273
+ throw new Error("System message content must be either a string, or an array of text blocks, optionally including a cache point.");
438
274
  }
439
275
  /**
440
- * Convert an AI message to a Bedrock message.
441
- */
276
+ * Convert an AI message to a Bedrock message.
277
+ */
442
278
  function convertAIMessageToConverseMessage(msg) {
443
- // Check for v1 format from other providers (PR #9766 fix)
444
- const responseMetadata = msg.response_metadata;
445
- if (responseMetadata?.output_version === 'v1') {
446
- return convertFromV1ToChatBedrockConverseMessage(msg);
447
- }
448
- const assistantMsg = {
449
- role: 'assistant',
450
- content: [],
451
- };
452
- if (typeof msg.content === 'string' && msg.content !== '') {
453
- assistantMsg.content?.push({ text: msg.content });
454
- }
455
- else if (Array.isArray(msg.content)) {
456
- const concatenatedBlocks = concatenateLangchainReasoningBlocks(msg.content);
457
- const contentBlocks = [];
458
- concatenatedBlocks.forEach((block) => {
459
- if (block.type === 'text') {
460
- const text = block.text ?? '';
461
- // Skip completely empty text blocks (common in AI messages with tool_use blocks)
462
- if (text === '') {
463
- return;
464
- }
465
- // Merge whitespace/newlines with previous text blocks to avoid validation errors.
466
- const cleanedText = text.replace(/\n/g, '').trim();
467
- if (cleanedText === '') {
468
- if (contentBlocks.length > 0) {
469
- const lastBlock = contentBlocks[contentBlocks.length - 1];
470
- if ('text' in lastBlock) {
471
- const mergedTextContent = `${lastBlock.text}${text}`;
472
- lastBlock.text = mergedTextContent;
473
- }
474
- }
475
- }
476
- else {
477
- contentBlocks.push({ text });
478
- }
479
- }
480
- else if (block.type === 'reasoning_content') {
481
- contentBlocks.push({
482
- reasoningContent: langchainReasoningBlockToBedrockReasoningBlock(block),
483
- });
484
- }
485
- else if (isDefaultCachePoint(block)) {
486
- contentBlocks.push({
487
- cachePoint: {
488
- type: 'default',
489
- },
490
- });
491
- }
492
- else {
493
- const blockValues = Object.fromEntries(Object.entries(block).filter(([key]) => key !== 'type'));
494
- throw new Error(`Unsupported content block type: ${block.type} with content of ${JSON.stringify(blockValues, null, 2)}`);
495
- }
496
- });
497
- assistantMsg.content = [...(assistantMsg.content ?? []), ...contentBlocks];
498
- }
499
- // Important: this must be placed after any reasoning content blocks
500
- if (isAIMessage(msg) && msg.tool_calls != null && msg.tool_calls.length > 0) {
501
- const toolUseBlocks = msg.tool_calls.map((tc) => ({
502
- toolUse: {
503
- toolUseId: tc.id,
504
- name: tc.name,
505
- input: tc.args,
506
- },
507
- }));
508
- assistantMsg.content = [
509
- ...(assistantMsg.content ?? []),
510
- ...toolUseBlocks,
511
- ];
512
- }
513
- return assistantMsg;
279
+ if (msg.response_metadata?.output_version === "v1") return convertFromV1ToChatBedrockConverseMessage(msg);
280
+ const assistantMsg = {
281
+ role: "assistant",
282
+ content: []
283
+ };
284
+ if (typeof msg.content === "string" && msg.content !== "") assistantMsg.content?.push({ text: msg.content });
285
+ else if (Array.isArray(msg.content)) {
286
+ const concatenatedBlocks = concatenateLangchainReasoningBlocks(msg.content);
287
+ const contentBlocks = [];
288
+ concatenatedBlocks.forEach((block) => {
289
+ if (block.type === "text") {
290
+ const text = block.text ?? "";
291
+ if (text === "") return;
292
+ if (text.replace(/\n/g, "").trim() === "") {
293
+ if (contentBlocks.length > 0) {
294
+ const lastBlock = contentBlocks[contentBlocks.length - 1];
295
+ if ("text" in lastBlock) lastBlock.text = `${lastBlock.text}${text}`;
296
+ }
297
+ } else contentBlocks.push({ text });
298
+ } else if (block.type === "reasoning_content") contentBlocks.push({ reasoningContent: langchainReasoningBlockToBedrockReasoningBlock(block) });
299
+ else if (isDefaultCachePoint(block)) contentBlocks.push({ cachePoint: { type: "default" } });
300
+ else {
301
+ const blockValues = Object.fromEntries(Object.entries(block).filter(([key]) => key !== "type"));
302
+ throw new Error(`Unsupported content block type: ${block.type} with content of ${JSON.stringify(blockValues, null, 2)}`);
303
+ }
304
+ });
305
+ assistantMsg.content = [...assistantMsg.content ?? [], ...contentBlocks];
306
+ }
307
+ if (isAIMessage(msg) && msg.tool_calls != null && msg.tool_calls.length > 0) {
308
+ const toolUseBlocks = msg.tool_calls.map((tc) => ({ toolUse: {
309
+ toolUseId: tc.id,
310
+ name: tc.name,
311
+ input: tc.args
312
+ } }));
313
+ assistantMsg.content = [...assistantMsg.content ?? [], ...toolUseBlocks];
314
+ }
315
+ return assistantMsg;
514
316
  }
515
317
  /**
516
- * Convert a v1 format message from other providers to Bedrock format.
517
- * This handles messages with standard content blocks like tool_call and reasoning.
518
- * (Implements PR #9766 fix for output_version v1 detection)
519
- */
318
+ * Convert a v1 format message from other providers to Bedrock format.
319
+ * This handles messages with standard content blocks like tool_call and reasoning.
320
+ * (Implements PR #9766 fix for output_version v1 detection)
321
+ */
520
322
  function convertFromV1ToChatBedrockConverseMessage(msg) {
521
- const assistantMsg = {
522
- role: 'assistant',
523
- content: [],
524
- };
525
- if (Array.isArray(msg.content)) {
526
- for (const block of msg.content) {
527
- if (typeof block === 'string') {
528
- assistantMsg.content?.push({ text: block });
529
- }
530
- else if (block.type === 'text') {
531
- assistantMsg.content?.push({ text: block.text });
532
- }
533
- else if (block.type === 'tool_call') {
534
- const toolCall = block;
535
- assistantMsg.content?.push({
536
- toolUse: {
537
- toolUseId: toolCall.id,
538
- name: toolCall.name,
539
- input: toolCall.args,
540
- },
541
- });
542
- }
543
- else if (block.type === 'reasoning') {
544
- const reasoning = block;
545
- assistantMsg.content?.push({
546
- reasoningContent: {
547
- reasoningText: { text: reasoning.reasoning },
548
- },
549
- });
550
- }
551
- else if (block.type === 'reasoning_content') {
552
- assistantMsg.content?.push({
553
- reasoningContent: langchainReasoningBlockToBedrockReasoningBlock(block),
554
- });
555
- }
556
- }
557
- }
558
- else if (typeof msg.content === 'string' && msg.content !== '') {
559
- assistantMsg.content?.push({ text: msg.content });
560
- }
561
- // Also handle tool_calls from the message
562
- if (isAIMessage(msg) && msg.tool_calls != null && msg.tool_calls.length > 0) {
563
- // Check if tool calls are already in content
564
- const existingToolUseIds = new Set(assistantMsg.content
565
- ?.filter((c) => 'toolUse' in c)
566
- .map((c) => c.toolUse.toolUseId) ?? []);
567
- for (const tc of msg.tool_calls) {
568
- if (!existingToolUseIds.has(tc.id ?? '')) {
569
- assistantMsg.content?.push({
570
- toolUse: {
571
- toolUseId: tc.id,
572
- name: tc.name,
573
- input: tc.args,
574
- },
575
- });
576
- }
577
- }
578
- }
579
- return assistantMsg;
323
+ const assistantMsg = {
324
+ role: "assistant",
325
+ content: []
326
+ };
327
+ if (Array.isArray(msg.content)) {
328
+ for (const block of msg.content) if (typeof block === "string") assistantMsg.content?.push({ text: block });
329
+ else if (block.type === "text") assistantMsg.content?.push({ text: block.text });
330
+ else if (block.type === "tool_call") {
331
+ const toolCall = block;
332
+ assistantMsg.content?.push({ toolUse: {
333
+ toolUseId: toolCall.id,
334
+ name: toolCall.name,
335
+ input: toolCall.args
336
+ } });
337
+ } else if (block.type === "reasoning") {
338
+ const reasoning = block;
339
+ assistantMsg.content?.push({ reasoningContent: { reasoningText: { text: reasoning.reasoning } } });
340
+ } else if (block.type === "reasoning_content") assistantMsg.content?.push({ reasoningContent: langchainReasoningBlockToBedrockReasoningBlock(block) });
341
+ } else if (typeof msg.content === "string" && msg.content !== "") assistantMsg.content?.push({ text: msg.content });
342
+ if (isAIMessage(msg) && msg.tool_calls != null && msg.tool_calls.length > 0) {
343
+ const existingToolUseIds = new Set(assistantMsg.content?.filter((c) => "toolUse" in c).map((c) => c.toolUse.toolUseId) ?? []);
344
+ for (const tc of msg.tool_calls) if (!existingToolUseIds.has(tc.id ?? "")) assistantMsg.content?.push({ toolUse: {
345
+ toolUseId: tc.id,
346
+ name: tc.name,
347
+ input: tc.args
348
+ } });
349
+ }
350
+ return assistantMsg;
580
351
  }
581
352
  /**
582
- * Convert a human message to a Bedrock message.
583
- */
353
+ * Convert a human message to a Bedrock message.
354
+ */
584
355
  function convertHumanMessageToConverseMessage(msg) {
585
- const userMessage = {
586
- role: 'user',
587
- content: [],
588
- };
589
- if (typeof msg.content === 'string') {
590
- userMessage.content = [{ text: msg.content }];
591
- }
592
- else if (Array.isArray(msg.content)) {
593
- userMessage.content = msg.content.map((block) => convertLangChainContentBlockToConverseContentBlock({ block }));
594
- }
595
- return userMessage;
356
+ const userMessage = {
357
+ role: "user",
358
+ content: []
359
+ };
360
+ if (typeof msg.content === "string") userMessage.content = [{ text: msg.content }];
361
+ else if (Array.isArray(msg.content)) userMessage.content = msg.content.map((block) => convertLangChainContentBlockToConverseContentBlock({ block }));
362
+ return userMessage;
596
363
  }
597
364
  /**
598
- * Convert a tool message to a Bedrock message.
599
- */
365
+ * Convert a tool message to a Bedrock message.
366
+ */
600
367
  function convertToolMessageToConverseMessage(msg) {
601
- const toolCallId = msg.tool_call_id;
602
- let content;
603
- if (typeof msg.content === 'string') {
604
- content = [{ text: msg.content }];
605
- }
606
- else if (Array.isArray(msg.content)) {
607
- content = msg.content.map((block) => convertLangChainContentBlockToConverseContentBlock({
608
- block,
609
- onUnknown: 'passthrough',
610
- }));
611
- }
612
- else {
613
- content = [{ text: String(msg.content) }];
614
- }
615
- return {
616
- role: 'user',
617
- content: [
618
- {
619
- toolResult: {
620
- toolUseId: toolCallId,
621
- content: content,
622
- },
623
- },
624
- ],
625
- };
368
+ const toolCallId = msg.tool_call_id;
369
+ let content;
370
+ if (typeof msg.content === "string") content = [{ text: msg.content }];
371
+ else if (Array.isArray(msg.content)) content = msg.content.map((block) => convertLangChainContentBlockToConverseContentBlock({
372
+ block,
373
+ onUnknown: "passthrough"
374
+ }));
375
+ else content = [{ text: String(msg.content) }];
376
+ return {
377
+ role: "user",
378
+ content: [{ toolResult: {
379
+ toolUseId: toolCallId,
380
+ content
381
+ } }]
382
+ };
626
383
  }
627
384
  /**
628
- * Convert LangChain messages to Bedrock Converse messages.
629
- */
385
+ * Convert LangChain messages to Bedrock Converse messages.
386
+ */
630
387
  function convertToConverseMessages(messages) {
631
- const converseSystem = messages
632
- .filter((msg) => msg._getType() === 'system')
633
- .flatMap((msg) => convertSystemMessageToConverseMessage(msg));
634
- const converseMessages = messages
635
- .filter((msg) => msg._getType() !== 'system')
636
- .map((msg) => {
637
- if (msg._getType() === 'ai') {
638
- return convertAIMessageToConverseMessage(msg);
639
- }
640
- else if (msg._getType() === 'human' || msg._getType() === 'generic') {
641
- return convertHumanMessageToConverseMessage(msg);
642
- }
643
- else if (msg._getType() === 'tool') {
644
- return convertToolMessageToConverseMessage(msg);
645
- }
646
- else {
647
- throw new Error(`Unsupported message type: ${msg._getType()}`);
648
- }
649
- });
650
- // Combine consecutive user tool result messages into a single message
651
- const combinedConverseMessages = converseMessages.reduce((acc, curr) => {
652
- if (acc.length === 0) {
653
- acc.push(curr);
654
- return acc;
655
- }
656
- const lastMessage = acc[acc.length - 1];
657
- const lastHasToolResult = lastMessage.content?.some((c) => 'toolResult' in c) === true;
658
- const currHasToolResult = curr.content?.some((c) => 'toolResult' in c) === true;
659
- if (lastMessage.role === 'user' &&
660
- lastHasToolResult &&
661
- curr.role === 'user' &&
662
- currHasToolResult) {
663
- lastMessage.content = lastMessage.content?.concat(curr.content ?? []);
664
- }
665
- else {
666
- acc.push(curr);
667
- }
668
- return acc;
669
- }, []);
670
- return { converseMessages: combinedConverseMessages, converseSystem };
388
+ const converseSystem = messages.filter((msg) => msg._getType() === "system").flatMap((msg) => convertSystemMessageToConverseMessage(msg));
389
+ return {
390
+ converseMessages: messages.filter((msg) => msg._getType() !== "system").map((msg) => {
391
+ if (msg._getType() === "ai") return convertAIMessageToConverseMessage(msg);
392
+ else if (msg._getType() === "human" || msg._getType() === "generic") return convertHumanMessageToConverseMessage(msg);
393
+ else if (msg._getType() === "tool") return convertToolMessageToConverseMessage(msg);
394
+ else throw new Error(`Unsupported message type: ${msg._getType()}`);
395
+ }).reduce((acc, curr) => {
396
+ if (acc.length === 0) {
397
+ acc.push(curr);
398
+ return acc;
399
+ }
400
+ const lastMessage = acc[acc.length - 1];
401
+ const lastHasToolResult = lastMessage.content?.some((c) => "toolResult" in c) === true;
402
+ const currHasToolResult = curr.content?.some((c) => "toolResult" in c) === true;
403
+ if (lastMessage.role === "user" && lastHasToolResult && curr.role === "user" && currHasToolResult) lastMessage.content = lastMessage.content?.concat(curr.content ?? []);
404
+ else acc.push(curr);
405
+ return acc;
406
+ }, []),
407
+ converseSystem
408
+ };
671
409
  }
672
-
410
+ //#endregion
673
411
  export { concatenateLangchainReasoningBlocks, convertToConverseMessages, extractImageInfo, langchainReasoningBlockToBedrockReasoningBlock };
674
- //# sourceMappingURL=message_inputs.mjs.map
412
+
413
+ //# sourceMappingURL=message_inputs.mjs.map