@librechat/agents 3.2.32 → 3.2.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
- package/dist/cjs/agents/AgentContext.cjs +844 -1046
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +13 -13
- package/dist/cjs/common/constants.cjs.map +1 -1
- package/dist/cjs/common/enum.cjs +233 -240
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/common/index.cjs +2 -0
- package/dist/cjs/events.cjs +121 -169
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +1389 -1807
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/graphs/index.cjs +2 -0
- package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
- package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
- package/dist/cjs/hitl/index.cjs +1 -0
- package/dist/cjs/hooks/HookRegistry.cjs +176 -202
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
- package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
- package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
- package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
- package/dist/cjs/hooks/executeHooks.cjs +227 -282
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
- package/dist/cjs/hooks/index.cjs +6 -0
- package/dist/cjs/hooks/matchers.cjs +196 -230
- package/dist/cjs/hooks/matchers.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs +24 -24
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +110 -137
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/langchain/google-common.cjs +0 -3
- package/dist/cjs/langchain/index.cjs +80 -43
- package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
- package/dist/cjs/langchain/messages/tool.cjs +0 -3
- package/dist/cjs/langchain/messages.cjs +35 -18
- package/dist/cjs/langchain/openai.cjs +0 -3
- package/dist/cjs/langchain/prompts.cjs +5 -8
- package/dist/cjs/langchain/runnables.cjs +11 -10
- package/dist/cjs/langchain/tools.cjs +14 -11
- package/dist/cjs/langchain/utils/env.cjs +5 -8
- package/dist/cjs/langfuse.cjs +60 -79
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +432 -562
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs +23 -47
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -731
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -256
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
- package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +195 -240
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
- package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +105 -149
- package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
- package/dist/cjs/llm/fake.cjs +86 -96
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +183 -237
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +398 -674
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
- package/dist/cjs/llm/init.cjs +44 -53
- package/dist/cjs/llm/init.cjs.map +1 -1
- package/dist/cjs/llm/invoke.cjs +142 -182
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +991 -1276
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +189 -316
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +102 -153
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
- package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +29 -37
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/request.cjs +20 -33
- package/dist/cjs/llm/request.cjs.map +1 -1
- package/dist/cjs/llm/vertexai/index.cjs +427 -453
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +547 -528
- package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
- package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +305 -418
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/content.cjs +36 -49
- package/dist/cjs/messages/content.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +112 -145
- package/dist/cjs/messages/contextPruning.cjs.map +1 -1
- package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
- package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +256 -397
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +904 -1387
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs +16 -20
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/index.cjs +12 -0
- package/dist/cjs/messages/langchain.cjs +18 -18
- package/dist/cjs/messages/langchain.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs +1054 -1517
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/recency.cjs +77 -95
- package/dist/cjs/messages/recency.cjs.map +1 -1
- package/dist/cjs/messages/reducer.cjs +63 -78
- package/dist/cjs/messages/reducer.cjs.map +1 -1
- package/dist/cjs/messages/tools.cjs +51 -79
- package/dist/cjs/messages/tools.cjs.map +1 -1
- package/dist/cjs/openai/index.cjs +171 -217
- package/dist/cjs/openai/index.cjs.map +1 -1
- package/dist/cjs/responses/index.cjs +302 -391
- package/dist/cjs/responses/index.cjs.map +1 -1
- package/dist/cjs/run.cjs +903 -1113
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +805 -986
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/handlers.cjs +192 -208
- package/dist/cjs/session/handlers.cjs.map +1 -1
- package/dist/cjs/session/ids.cjs +9 -10
- package/dist/cjs/session/ids.cjs.map +1 -1
- package/dist/cjs/session/index.cjs +4 -0
- package/dist/cjs/session/messageSerialization.cjs +94 -156
- package/dist/cjs/session/messageSerialization.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs +147 -206
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +856 -1344
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs +57 -101
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +643 -796
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +110 -136
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
- package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/Calculator.cjs +36 -57
- package/dist/cjs/tools/Calculator.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +126 -168
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
- package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/ReadFile.cjs +17 -20
- package/dist/cjs/tools/ReadFile.cjs.map +1 -1
- package/dist/cjs/tools/SkillTool.cjs +26 -27
- package/dist/cjs/tools/SkillTool.cjs.map +1 -1
- package/dist/cjs/tools/SubagentTool.cjs +59 -61
- package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +2109 -2686
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +663 -825
- package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
- package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
- package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
- package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
- package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
- package/dist/cjs/tools/cloudflare/index.cjs +4 -0
- package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
- package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +200 -262
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
- package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
- package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
- package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
- package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
- package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
- package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
- package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/attachments.cjs +108 -165
- package/dist/cjs/tools/local/attachments.cjs.map +1 -1
- package/dist/cjs/tools/local/bashAst.cjs +99 -113
- package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
- package/dist/cjs/tools/local/editStrategies.cjs +126 -169
- package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
- package/dist/cjs/tools/local/index.cjs +12 -0
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
- package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
- package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
- package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
- package/dist/cjs/tools/local/textEncoding.cjs +25 -23
- package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
- package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
- package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
- package/dist/cjs/tools/ptcTimeout.cjs +27 -47
- package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
- package/dist/cjs/tools/schema.cjs +24 -23
- package/dist/cjs/tools/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs +24 -33
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs +95 -137
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs +141 -172
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs +128 -196
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs +165 -232
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/index.cjs +2 -0
- package/dist/cjs/tools/search/rerankers.cjs +151 -174
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +40 -39
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +428 -530
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
- package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tavily-search.cjs +295 -359
- package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +260 -299
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs +74 -117
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/tools/skillCatalog.cjs +54 -72
- package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
- package/dist/cjs/tools/streamedToolCallSeals.cjs +19 -36
- package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/index.cjs +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/utils/callbacks.cjs +11 -21
- package/dist/cjs/utils/callbacks.cjs.map +1 -1
- package/dist/cjs/utils/errors.cjs +70 -95
- package/dist/cjs/utils/errors.cjs.map +1 -1
- package/dist/cjs/utils/events.cjs +32 -42
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs +8 -12
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/handlers.cjs +60 -82
- package/dist/cjs/utils/handlers.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +9 -0
- package/dist/cjs/utils/llm.cjs +19 -27
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs +30 -46
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs +50 -66
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/schema.cjs +11 -19
- package/dist/cjs/utils/schema.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs +71 -106
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +186 -283
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/truncation.cjs +95 -114
- package/dist/cjs/utils/truncation.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +844 -1044
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +13 -11
- package/dist/esm/common/constants.mjs.map +1 -1
- package/dist/esm/common/enum.mjs +221 -238
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/common/index.mjs +3 -0
- package/dist/esm/events.mjs +121 -167
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +1388 -1804
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/graphs/index.mjs +3 -0
- package/dist/esm/hitl/askUserQuestion.mjs +60 -60
- package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
- package/dist/esm/hitl/index.mjs +2 -0
- package/dist/esm/hooks/HookRegistry.mjs +176 -200
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
- package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
- package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
- package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
- package/dist/esm/hooks/executeHooks.mjs +227 -280
- package/dist/esm/hooks/executeHooks.mjs.map +1 -1
- package/dist/esm/hooks/index.mjs +7 -0
- package/dist/esm/hooks/matchers.mjs +196 -228
- package/dist/esm/hooks/matchers.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs +24 -22
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +109 -132
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/langchain/google-common.mjs +1 -2
- package/dist/esm/langchain/index.mjs +5 -5
- package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
- package/dist/esm/langchain/messages/tool.mjs +1 -2
- package/dist/esm/langchain/messages.mjs +2 -2
- package/dist/esm/langchain/openai.mjs +1 -2
- package/dist/esm/langchain/prompts.mjs +2 -2
- package/dist/esm/langchain/runnables.mjs +2 -2
- package/dist/esm/langchain/tools.mjs +2 -2
- package/dist/esm/langchain/utils/env.mjs +2 -2
- package/dist/esm/langfuse.mjs +60 -76
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +432 -559
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs +23 -45
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -725
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -253
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
- package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +195 -238
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
- package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs +105 -147
- package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
- package/dist/esm/llm/fake.mjs +86 -94
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +183 -235
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +397 -666
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
- package/dist/esm/llm/init.mjs +44 -51
- package/dist/esm/llm/init.mjs.map +1 -1
- package/dist/esm/llm/invoke.mjs +142 -180
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +991 -1271
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +188 -312
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +102 -151
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
- package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +29 -34
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/request.mjs +20 -31
- package/dist/esm/llm/request.mjs.map +1 -1
- package/dist/esm/llm/vertexai/index.mjs +427 -449
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +99 -87
- package/dist/esm/messages/anthropicToolCache.mjs +68 -117
- package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +305 -416
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/content.mjs +36 -47
- package/dist/esm/messages/content.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +112 -143
- package/dist/esm/messages/contextPruning.mjs.map +1 -1
- package/dist/esm/messages/contextPruningSettings.mjs +36 -44
- package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +254 -393
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +902 -1383
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs +16 -18
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/index.mjs +13 -0
- package/dist/esm/messages/langchain.mjs +18 -16
- package/dist/esm/messages/langchain.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs +1053 -1514
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/recency.mjs +77 -93
- package/dist/esm/messages/recency.mjs.map +1 -1
- package/dist/esm/messages/reducer.mjs +63 -76
- package/dist/esm/messages/reducer.mjs.map +1 -1
- package/dist/esm/messages/tools.mjs +49 -75
- package/dist/esm/messages/tools.mjs.map +1 -1
- package/dist/esm/openai/index.mjs +170 -215
- package/dist/esm/openai/index.mjs.map +1 -1
- package/dist/esm/responses/index.mjs +301 -389
- package/dist/esm/responses/index.mjs.map +1 -1
- package/dist/esm/run.mjs +903 -1111
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +806 -985
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs +326 -407
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/handlers.mjs +192 -206
- package/dist/esm/session/handlers.mjs.map +1 -1
- package/dist/esm/session/ids.mjs +9 -8
- package/dist/esm/session/ids.mjs.map +1 -1
- package/dist/esm/session/index.mjs +5 -0
- package/dist/esm/session/messageSerialization.mjs +94 -154
- package/dist/esm/session/messageSerialization.mjs.map +1 -1
- package/dist/esm/splitStream.mjs +147 -204
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +854 -1341
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs +57 -99
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +640 -790
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +103 -129
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
- package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/Calculator.mjs +34 -36
- package/dist/esm/tools/Calculator.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +123 -164
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
- package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/ReadFile.mjs +17 -18
- package/dist/esm/tools/ReadFile.mjs.map +1 -1
- package/dist/esm/tools/SkillTool.mjs +26 -25
- package/dist/esm/tools/SkillTool.mjs.map +1 -1
- package/dist/esm/tools/SubagentTool.mjs +59 -59
- package/dist/esm/tools/SubagentTool.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +2107 -2684
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +659 -804
- package/dist/esm/tools/ToolSearch.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
- package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
- package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
- package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
- package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
- package/dist/esm/tools/cloudflare/index.mjs +5 -0
- package/dist/esm/tools/eagerEventExecution.mjs +75 -96
- package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +200 -260
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
- package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
- package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
- package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
- package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
- package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
- package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
- package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
- package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/attachments.mjs +108 -163
- package/dist/esm/tools/local/attachments.mjs.map +1 -1
- package/dist/esm/tools/local/bashAst.mjs +99 -111
- package/dist/esm/tools/local/bashAst.mjs.map +1 -1
- package/dist/esm/tools/local/editStrategies.mjs +126 -167
- package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
- package/dist/esm/tools/local/index.mjs +13 -0
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
- package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
- package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
- package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
- package/dist/esm/tools/local/textEncoding.mjs +25 -21
- package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
- package/dist/esm/tools/local/workspaceFS.mjs +38 -44
- package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
- package/dist/esm/tools/ptcTimeout.mjs +27 -42
- package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
- package/dist/esm/tools/schema.mjs +24 -21
- package/dist/esm/tools/schema.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs +24 -31
- package/dist/esm/tools/search/anthropic.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs +93 -116
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs +139 -169
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs +128 -194
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs +165 -230
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/index.mjs +3 -0
- package/dist/esm/tools/search/rerankers.mjs +149 -168
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +39 -37
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +426 -528
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs +104 -124
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
- package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tavily-search.mjs +293 -357
- package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +259 -297
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs +74 -115
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/tools/skillCatalog.mjs +54 -70
- package/dist/esm/tools/skillCatalog.mjs.map +1 -1
- package/dist/esm/tools/streamedToolCallSeals.mjs +19 -31
- package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/index.mjs +2 -0
- package/dist/esm/tools/toolOutputReferences.mjs +523 -624
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/utils/callbacks.mjs +11 -19
- package/dist/esm/utils/callbacks.mjs.map +1 -1
- package/dist/esm/utils/errors.mjs +70 -93
- package/dist/esm/utils/errors.mjs.map +1 -1
- package/dist/esm/utils/events.mjs +32 -40
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs +8 -10
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/handlers.mjs +60 -80
- package/dist/esm/utils/handlers.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +10 -0
- package/dist/esm/utils/llm.mjs +19 -25
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs +30 -44
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs +50 -64
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/schema.mjs +11 -17
- package/dist/esm/utils/schema.mjs.map +1 -1
- package/dist/esm/utils/title.mjs +71 -104
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +186 -281
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/truncation.mjs +95 -112
- package/dist/esm/utils/truncation.mjs.map +1 -1
- package/dist/types/tools/search/tool.d.ts +17 -0
- package/dist/types/tools/search/types.d.ts +4 -0
- package/package.json +4 -10
- package/src/tools/search/highlights.ts +9 -1
- package/src/tools/search/search.ts +41 -3
- package/src/tools/search/source-processing.test.ts +373 -0
- package/src/tools/search/tool.ts +22 -2
- package/src/tools/search/types.ts +4 -0
- package/dist/cjs/langchain/google-common.cjs.map +0 -1
- package/dist/cjs/langchain/index.cjs.map +0 -1
- package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
- package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
- package/dist/cjs/langchain/messages.cjs.map +0 -1
- package/dist/cjs/langchain/openai.cjs.map +0 -1
- package/dist/cjs/langchain/prompts.cjs.map +0 -1
- package/dist/cjs/langchain/runnables.cjs.map +0 -1
- package/dist/cjs/langchain/tools.cjs.map +0 -1
- package/dist/cjs/langchain/utils/env.cjs.map +0 -1
- package/dist/cjs/main.cjs.map +0 -1
- package/dist/esm/langchain/google-common.mjs.map +0 -1
- package/dist/esm/langchain/index.mjs.map +0 -1
- package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
- package/dist/esm/langchain/messages/tool.mjs.map +0 -1
- package/dist/esm/langchain/messages.mjs.map +0 -1
- package/dist/esm/langchain/openai.mjs.map +0 -1
- package/dist/esm/langchain/prompts.mjs.map +0 -1
- package/dist/esm/langchain/runnables.mjs.map +0 -1
- package/dist/esm/langchain/tools.mjs.map +0 -1
- package/dist/esm/langchain/utils/env.mjs.map +0 -1
- package/dist/esm/main.mjs.map +0 -1
|
@@ -1,674 +1,413 @@
|
|
|
1
|
-
import { isAIMessage, isDataContentBlock,
|
|
2
|
-
|
|
1
|
+
import { convertToProviderContentBlock, isAIMessage, isDataContentBlock, parseBase64DataUrl, parseMimeType } from "@langchain/core/messages";
|
|
2
|
+
//#region src/llm/bedrock/utils/message_inputs.ts
|
|
3
3
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
* Utility functions for converting LangChain messages to Bedrock Converse messages.
|
|
5
|
+
* Ported from @langchain/aws common.js
|
|
6
|
+
*/
|
|
7
7
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
* Convert a LangChain reasoning block to a Bedrock reasoning block.
|
|
9
|
+
*/
|
|
10
10
|
function langchainReasoningBlockToBedrockReasoningBlock(content) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
25
|
-
|
|
16
|
+
* Concatenate consecutive reasoning blocks in content array.
|
|
17
|
+
*/
|
|
26
18
|
function concatenateLangchainReasoningBlocks(content) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
66
|
-
|
|
39
|
+
* Extract image info from a base64 string or URL.
|
|
40
|
+
*/
|
|
67
41
|
function extractImageInfo(base64) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
102
|
+
return Uint8Array.from(atob(data), (char) => char.charCodeAt(0));
|
|
135
103
|
}
|
|
136
104
|
function getMediaFormat(mimeType, formatMap) {
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
},
|
|
170
|
-
};
|
|
123
|
+
return { video: {
|
|
124
|
+
format: getMediaFormat(block.mimeType, mimeTypeToVideoFormat),
|
|
125
|
+
source: resolveMediaSource(block)
|
|
126
|
+
} };
|
|
171
127
|
}
|
|
172
128
|
function convertMultimodalAudioBlock(block) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
},
|
|
178
|
-
};
|
|
129
|
+
return { audio: {
|
|
130
|
+
format: getMediaFormat(block.mimeType, mimeTypeToAudioFormat),
|
|
131
|
+
source: resolveMediaSource(block)
|
|
132
|
+
} };
|
|
179
133
|
}
|
|
180
134
|
function getDocumentName(block) {
|
|
181
|
-
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
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
|
-
|
|
284
|
-
|
|
213
|
+
* Check if a block has a cache point.
|
|
214
|
+
*/
|
|
285
215
|
function isDefaultCachePoint(block) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
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
|
-
|
|
303
|
-
|
|
304
|
-
function convertLangChainContentBlockToConverseContentBlock({ block, onUnknown =
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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
|
-
|
|
407
|
-
|
|
262
|
+
* Convert a system message to Bedrock system content blocks.
|
|
263
|
+
*/
|
|
408
264
|
function convertSystemMessageToConverseMessage(msg) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
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
|
-
|
|
441
|
-
|
|
276
|
+
* Convert an AI message to a Bedrock message.
|
|
277
|
+
*/
|
|
442
278
|
function convertAIMessageToConverseMessage(msg) {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
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
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
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
|
-
|
|
583
|
-
|
|
353
|
+
* Convert a human message to a Bedrock message.
|
|
354
|
+
*/
|
|
584
355
|
function convertHumanMessageToConverseMessage(msg) {
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
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
|
-
|
|
599
|
-
|
|
365
|
+
* Convert a tool message to a Bedrock message.
|
|
366
|
+
*/
|
|
600
367
|
function convertToolMessageToConverseMessage(msg) {
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
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
|
-
|
|
629
|
-
|
|
385
|
+
* Convert LangChain messages to Bedrock Converse messages.
|
|
386
|
+
*/
|
|
630
387
|
function convertToConverseMessages(messages) {
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
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
|
-
|
|
412
|
+
|
|
413
|
+
//# sourceMappingURL=message_inputs.mjs.map
|