@librechat/agents 3.2.32 → 3.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +214 -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 +141 -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 +404 -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 +1035 -1273
- 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 +446 -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 +874 -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 +2146 -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 +46 -34
- 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 +214 -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 +140 -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 +403 -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 +1035 -1268
- 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 +446 -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 +872 -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 +2144 -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 +42 -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/llm/bedrock/utils/index.d.ts +1 -1
- package/dist/types/llm/bedrock/utils/message_outputs.d.ts +9 -0
- package/dist/types/llm/vertexai/index.d.ts +10 -0
- package/dist/types/tools/ToolNode.d.ts +8 -0
- package/dist/types/tools/search/tool.d.ts +17 -0
- package/dist/types/tools/search/types.d.ts +4 -0
- package/dist/types/tools/streamedToolCallSeals.d.ts +5 -1
- package/dist/types/types/tools.d.ts +10 -0
- package/package.json +4 -10
- package/src/__tests__/stream.eagerEventExecution.test.ts +703 -0
- package/src/llm/bedrock/index.ts +40 -0
- package/src/llm/bedrock/streamSealDispatch.test.ts +158 -0
- package/src/llm/bedrock/utils/index.ts +1 -0
- package/src/llm/bedrock/utils/message_outputs.test.ts +85 -0
- package/src/llm/bedrock/utils/message_outputs.ts +43 -0
- package/src/llm/google/utils/common.test.ts +64 -0
- package/src/llm/google/utils/common.ts +18 -0
- package/src/llm/openai/index.ts +95 -1
- package/src/llm/openai/sequentialToolCallSeals.test.ts +199 -0
- package/src/llm/vertexai/index.ts +31 -0
- package/src/llm/vertexai/sealStreamedToolCalls.test.ts +88 -0
- package/src/llm/vertexai/streamSealDispatch.test.ts +148 -0
- package/src/stream.ts +40 -6
- package/src/tools/ToolNode.ts +85 -3
- package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +368 -0
- 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/src/tools/streamedToolCallSeals.ts +37 -9
- package/src/types/tools.ts +10 -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,463 +1,352 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { toLangChainContent } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
import "../common/enum.mjs";
|
|
2
|
+
import { toLangChainContent } from "./langchain.mjs";
|
|
3
|
+
import { withMessageRole } from "./format.mjs";
|
|
4
|
+
import { AIMessage, BaseMessage, HumanMessage, SystemMessage, ToolMessage } from "@langchain/core/messages";
|
|
5
|
+
//#region src/messages/cache.ts
|
|
6
6
|
/**
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
* Deep clones a message's content to prevent mutation of the original.
|
|
8
|
+
*/
|
|
9
9
|
function deepCloneContent(content) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (Array.isArray(content)) {
|
|
14
|
-
return content.map((block) => ({ ...block }));
|
|
15
|
-
}
|
|
16
|
-
return content;
|
|
10
|
+
if (typeof content === "string") return content;
|
|
11
|
+
if (Array.isArray(content)) return content.map((block) => ({ ...block }));
|
|
12
|
+
return content;
|
|
17
13
|
}
|
|
18
14
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
* Clones a message with new content. For LangChain BaseMessage instances,
|
|
16
|
+
* constructs a proper class instance so that `instanceof` checks are preserved
|
|
17
|
+
* in downstream code (e.g., ensureThinkingBlockInMessages).
|
|
18
|
+
* For plain objects (AnthropicMessage), uses object spread.
|
|
19
|
+
*/
|
|
24
20
|
function cloneMessage(message, content) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
tool: 'tool',
|
|
63
|
-
};
|
|
64
|
-
cloned.role = roleMap[msgType] || msgType;
|
|
65
|
-
}
|
|
66
|
-
return cloned;
|
|
21
|
+
if (message instanceof BaseMessage) {
|
|
22
|
+
const baseParams = {
|
|
23
|
+
content: toLangChainContent(content),
|
|
24
|
+
additional_kwargs: { ...message.additional_kwargs },
|
|
25
|
+
response_metadata: { ...message.response_metadata },
|
|
26
|
+
id: message.id,
|
|
27
|
+
name: message.name
|
|
28
|
+
};
|
|
29
|
+
switch (message.getType()) {
|
|
30
|
+
case "ai": return withMessageRole(new AIMessage({
|
|
31
|
+
...baseParams,
|
|
32
|
+
tool_calls: message.tool_calls
|
|
33
|
+
}), "assistant");
|
|
34
|
+
case "human": return withMessageRole(new HumanMessage(baseParams), "user");
|
|
35
|
+
case "system": return withMessageRole(new SystemMessage(baseParams), "system");
|
|
36
|
+
case "tool": return withMessageRole(new ToolMessage({
|
|
37
|
+
...baseParams,
|
|
38
|
+
tool_call_id: message.tool_call_id
|
|
39
|
+
}), "tool");
|
|
40
|
+
default: break;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const { lc_kwargs: _lc_kwargs, lc_serializable: _lc_serializable, lc_namespace: _lc_namespace, ...rest } = message;
|
|
44
|
+
const cloned = {
|
|
45
|
+
...rest,
|
|
46
|
+
content
|
|
47
|
+
};
|
|
48
|
+
if ("getType" in message && typeof message.getType === "function" && !("role" in cloned)) {
|
|
49
|
+
const msgType = message.getType();
|
|
50
|
+
cloned.role = {
|
|
51
|
+
human: "user",
|
|
52
|
+
ai: "assistant",
|
|
53
|
+
system: "system",
|
|
54
|
+
tool: "tool"
|
|
55
|
+
}[msgType] || msgType;
|
|
56
|
+
}
|
|
57
|
+
return cloned;
|
|
67
58
|
}
|
|
68
59
|
function stripAnthropicCacheControlFromBlocks(content) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
60
|
+
let modified = false;
|
|
61
|
+
return {
|
|
62
|
+
content: content.map((block) => {
|
|
63
|
+
if (!("cache_control" in block)) return block;
|
|
64
|
+
const cloned = { ...block };
|
|
65
|
+
delete cloned.cache_control;
|
|
66
|
+
modified = true;
|
|
67
|
+
return cloned;
|
|
68
|
+
}),
|
|
69
|
+
modified
|
|
70
|
+
};
|
|
80
71
|
}
|
|
81
72
|
function sanitizeBedrockSystemMessage(message) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if (!stripped.modified) {
|
|
88
|
-
return message;
|
|
89
|
-
}
|
|
90
|
-
return cloneMessage(message, stripped.content);
|
|
73
|
+
const content = message.content;
|
|
74
|
+
if (!Array.isArray(content)) return message;
|
|
75
|
+
const stripped = stripAnthropicCacheControlFromBlocks(content);
|
|
76
|
+
if (!stripped.modified) return message;
|
|
77
|
+
return cloneMessage(message, stripped.content);
|
|
91
78
|
}
|
|
92
79
|
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
80
|
+
* Anthropic API: Adds cache control to the appropriate user messages in the payload.
|
|
81
|
+
* Strips ALL existing cache control (both Anthropic and Bedrock formats) from all messages,
|
|
82
|
+
* then adds fresh cache control to the last 2 user messages in a single backward pass.
|
|
83
|
+
* This ensures we don't accumulate stale cache points across multiple turns.
|
|
84
|
+
* Returns a new array - only clones messages that require modification.
|
|
85
|
+
* @param messages - The array of message objects.
|
|
86
|
+
* @returns - A new array of message objects with cache control added.
|
|
87
|
+
*/
|
|
101
88
|
function addCacheControl(messages) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
// Add cache control to the last text block for user messages
|
|
149
|
-
if (needsCacheAdd && lastTextIndex >= 0) {
|
|
150
|
-
workingContent[lastTextIndex].cache_control = {
|
|
151
|
-
type: 'ephemeral',
|
|
152
|
-
};
|
|
153
|
-
userMessagesModified++;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
else if (typeof content === 'string' && needsCacheAdd) {
|
|
157
|
-
workingContent = [
|
|
158
|
-
{ type: 'text', text: content, cache_control: { type: 'ephemeral' } },
|
|
159
|
-
];
|
|
160
|
-
userMessagesModified++;
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
continue;
|
|
164
|
-
}
|
|
165
|
-
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
166
|
-
}
|
|
167
|
-
return updatedMessages;
|
|
89
|
+
if (!Array.isArray(messages) || messages.length < 2) return messages;
|
|
90
|
+
const updatedMessages = [...messages];
|
|
91
|
+
let userMessagesModified = 0;
|
|
92
|
+
for (let i = updatedMessages.length - 1; i >= 0; i--) {
|
|
93
|
+
const originalMessage = updatedMessages[i];
|
|
94
|
+
const content = originalMessage.content;
|
|
95
|
+
const isUserMessage = "getType" in originalMessage && originalMessage.getType() === "human" || "role" in originalMessage && originalMessage.role === "user";
|
|
96
|
+
const hasArrayContent = Array.isArray(content);
|
|
97
|
+
const needsCacheAdd = userMessagesModified < 2 && isUserMessage && !isSyntheticMetaMessage(originalMessage) && (typeof content === "string" || hasArrayContent);
|
|
98
|
+
if (!needsCacheAdd && !hasArrayContent) continue;
|
|
99
|
+
let workingContent;
|
|
100
|
+
let modified = false;
|
|
101
|
+
if (hasArrayContent) {
|
|
102
|
+
const src = content;
|
|
103
|
+
workingContent = [];
|
|
104
|
+
let lastTextIndex = -1;
|
|
105
|
+
for (let j = 0; j < src.length; j++) {
|
|
106
|
+
const block = src[j];
|
|
107
|
+
if (isCachePoint(block)) {
|
|
108
|
+
modified = true;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const cloned = { ...block };
|
|
112
|
+
if ("cache_control" in cloned) {
|
|
113
|
+
delete cloned.cache_control;
|
|
114
|
+
modified = true;
|
|
115
|
+
}
|
|
116
|
+
if ("type" in cloned && cloned.type === "text") lastTextIndex = workingContent.length;
|
|
117
|
+
workingContent.push(cloned);
|
|
118
|
+
}
|
|
119
|
+
if (!modified && !needsCacheAdd) continue;
|
|
120
|
+
if (needsCacheAdd && lastTextIndex >= 0) {
|
|
121
|
+
workingContent[lastTextIndex].cache_control = { type: "ephemeral" };
|
|
122
|
+
userMessagesModified++;
|
|
123
|
+
}
|
|
124
|
+
} else if (typeof content === "string" && needsCacheAdd) {
|
|
125
|
+
workingContent = [{
|
|
126
|
+
type: "text",
|
|
127
|
+
text: content,
|
|
128
|
+
cache_control: { type: "ephemeral" }
|
|
129
|
+
}];
|
|
130
|
+
userMessagesModified++;
|
|
131
|
+
} else continue;
|
|
132
|
+
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
133
|
+
}
|
|
134
|
+
return updatedMessages;
|
|
168
135
|
}
|
|
169
136
|
/**
|
|
170
|
-
|
|
171
|
-
|
|
137
|
+
* Checks if a content block is a cache point
|
|
138
|
+
*/
|
|
172
139
|
function isCachePoint(block) {
|
|
173
|
-
|
|
140
|
+
return "cachePoint" in block && !("type" in block);
|
|
174
141
|
}
|
|
175
142
|
function getMessageRole(message) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}
|
|
179
|
-
if ('role' in message && typeof message.role === 'string') {
|
|
180
|
-
return message.role;
|
|
181
|
-
}
|
|
182
|
-
return undefined;
|
|
143
|
+
if (message instanceof BaseMessage) return message.getType();
|
|
144
|
+
if ("role" in message && typeof message.role === "string") return message.role;
|
|
183
145
|
}
|
|
184
|
-
const SKILL_MESSAGE_SOURCE =
|
|
146
|
+
const SKILL_MESSAGE_SOURCE = "skill";
|
|
185
147
|
/**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
148
|
+
* Synthetic skill/meta messages (reconstructed skill bodies, primed SKILL.md
|
|
149
|
+
* instructions) are re-injected every turn and are not stable conversation
|
|
150
|
+
* turns. They must not anchor a fresh prompt-cache marker — doing so pins the
|
|
151
|
+
* cache to a volatile/duplicated prefix. Stale markers are still stripped from
|
|
152
|
+
* them; only the *adding* of new markers is suppressed. Detected via
|
|
153
|
+
* `additional_kwargs.isMeta === true` or `additional_kwargs.source === 'skill'`.
|
|
154
|
+
*/
|
|
193
155
|
function isSyntheticMetaMessage(message) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
return kwargs.isMeta === true || kwargs.source === SKILL_MESSAGE_SOURCE;
|
|
156
|
+
const { additional_kwargs: kwargs } = message;
|
|
157
|
+
if (kwargs == null) return false;
|
|
158
|
+
return kwargs.isMeta === true || kwargs.source === SKILL_MESSAGE_SOURCE;
|
|
199
159
|
}
|
|
200
160
|
function isCacheableConversationMessage(message) {
|
|
201
|
-
|
|
202
|
-
|
|
161
|
+
const role = getMessageRole(message);
|
|
162
|
+
return role === "human" || role === "user" || role === "ai" || role === "assistant";
|
|
203
163
|
}
|
|
204
164
|
function isAssistantConversationMessage(message) {
|
|
205
|
-
|
|
206
|
-
|
|
165
|
+
const role = getMessageRole(message);
|
|
166
|
+
return role === "ai" || role === "assistant";
|
|
207
167
|
}
|
|
208
168
|
function hasCacheMarker(message) {
|
|
209
|
-
|
|
210
|
-
message.content.some((block) => 'cache_control' in block));
|
|
169
|
+
return Array.isArray(message.content) && message.content.some((block) => "cache_control" in block);
|
|
211
170
|
}
|
|
212
171
|
function addCacheControlToRecentMessages(messages, maxCachePoints, canUseMessage) {
|
|
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
|
-
if (!modified) {
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
else if (typeof content === 'string' &&
|
|
267
|
-
content.trim() !== '' &&
|
|
268
|
-
canAddCache) {
|
|
269
|
-
workingContent = [
|
|
270
|
-
{ type: 'text', text: content, cache_control: { type: 'ephemeral' } },
|
|
271
|
-
];
|
|
272
|
-
cachePointsAdded++;
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
continue;
|
|
276
|
-
}
|
|
277
|
-
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
278
|
-
}
|
|
279
|
-
return updatedMessages;
|
|
172
|
+
if (!Array.isArray(messages) || messages.length === 0 || maxCachePoints <= 0) return messages;
|
|
173
|
+
const updatedMessages = [...messages];
|
|
174
|
+
let cachePointsAdded = 0;
|
|
175
|
+
for (let i = updatedMessages.length - 1; i >= 0; i--) {
|
|
176
|
+
const originalMessage = updatedMessages[i];
|
|
177
|
+
const content = originalMessage.content;
|
|
178
|
+
const hasArrayContent = Array.isArray(content);
|
|
179
|
+
const canAddCache = cachePointsAdded < maxCachePoints && canUseMessage(originalMessage) && !isSyntheticMetaMessage(originalMessage);
|
|
180
|
+
if (!canAddCache && !hasArrayContent) continue;
|
|
181
|
+
let workingContent;
|
|
182
|
+
let modified = false;
|
|
183
|
+
if (hasArrayContent) {
|
|
184
|
+
const src = content;
|
|
185
|
+
workingContent = [];
|
|
186
|
+
let lastNonEmptyTextIndex = -1;
|
|
187
|
+
for (let j = 0; j < src.length; j++) {
|
|
188
|
+
const block = src[j];
|
|
189
|
+
if (isCachePoint(block)) {
|
|
190
|
+
modified = true;
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
const cloned = { ...block };
|
|
194
|
+
if ("cache_control" in cloned) {
|
|
195
|
+
delete cloned.cache_control;
|
|
196
|
+
modified = true;
|
|
197
|
+
}
|
|
198
|
+
if ("type" in cloned && cloned.type === "text") {
|
|
199
|
+
const text = cloned.text;
|
|
200
|
+
if (text != null && text.trim() !== "") lastNonEmptyTextIndex = workingContent.length;
|
|
201
|
+
}
|
|
202
|
+
workingContent.push(cloned);
|
|
203
|
+
}
|
|
204
|
+
if (canAddCache && lastNonEmptyTextIndex >= 0) {
|
|
205
|
+
workingContent[lastNonEmptyTextIndex].cache_control = { type: "ephemeral" };
|
|
206
|
+
cachePointsAdded++;
|
|
207
|
+
modified = true;
|
|
208
|
+
}
|
|
209
|
+
if (!modified) continue;
|
|
210
|
+
} else if (typeof content === "string" && content.trim() !== "" && canAddCache) {
|
|
211
|
+
workingContent = [{
|
|
212
|
+
type: "text",
|
|
213
|
+
text: content,
|
|
214
|
+
cache_control: { type: "ephemeral" }
|
|
215
|
+
}];
|
|
216
|
+
cachePointsAdded++;
|
|
217
|
+
} else continue;
|
|
218
|
+
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
219
|
+
}
|
|
220
|
+
return updatedMessages;
|
|
280
221
|
}
|
|
281
222
|
function addCacheControlToStablePrefixMessages(messages, maxCachePoints) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}
|
|
286
|
-
return addCacheControlToRecentMessages(messages, maxCachePoints, isCacheableConversationMessage);
|
|
223
|
+
const assistantMarked = addCacheControlToRecentMessages(messages, maxCachePoints, isAssistantConversationMessage);
|
|
224
|
+
if (assistantMarked.some(hasCacheMarker)) return assistantMarked;
|
|
225
|
+
return addCacheControlToRecentMessages(messages, maxCachePoints, isCacheableConversationMessage);
|
|
287
226
|
}
|
|
288
227
|
/**
|
|
289
|
-
|
|
290
|
-
|
|
228
|
+
* Checks if a message's content has Anthropic cache_control fields.
|
|
229
|
+
*/
|
|
291
230
|
function hasAnthropicCacheControl(content) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
return true;
|
|
295
|
-
}
|
|
296
|
-
return false;
|
|
231
|
+
for (let i = 0; i < content.length; i++) if ("cache_control" in content[i]) return true;
|
|
232
|
+
return false;
|
|
297
233
|
}
|
|
298
234
|
/**
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
235
|
+
* Removes all Anthropic cache_control fields from messages
|
|
236
|
+
* Used when switching from Anthropic to Bedrock provider
|
|
237
|
+
* Returns a new array - only clones messages that require modification.
|
|
238
|
+
*/
|
|
303
239
|
function stripAnthropicCacheControl(messages) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
delete block.cache_control;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
|
|
322
|
-
}
|
|
323
|
-
return updatedMessages;
|
|
240
|
+
if (!Array.isArray(messages)) return messages;
|
|
241
|
+
const updatedMessages = [...messages];
|
|
242
|
+
for (let i = 0; i < updatedMessages.length; i++) {
|
|
243
|
+
const originalMessage = updatedMessages[i];
|
|
244
|
+
const content = originalMessage.content;
|
|
245
|
+
if (!Array.isArray(content) || !hasAnthropicCacheControl(content)) continue;
|
|
246
|
+
const clonedContent = deepCloneContent(content);
|
|
247
|
+
for (let j = 0; j < clonedContent.length; j++) {
|
|
248
|
+
const block = clonedContent[j];
|
|
249
|
+
if ("cache_control" in block) delete block.cache_control;
|
|
250
|
+
}
|
|
251
|
+
updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
|
|
252
|
+
}
|
|
253
|
+
return updatedMessages;
|
|
324
254
|
}
|
|
325
255
|
/**
|
|
326
|
-
|
|
327
|
-
|
|
256
|
+
* Checks if a message's content has Bedrock cachePoint blocks.
|
|
257
|
+
*/
|
|
328
258
|
function hasBedrockCachePoint(content) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
return true;
|
|
332
|
-
}
|
|
333
|
-
return false;
|
|
259
|
+
for (let i = 0; i < content.length; i++) if (isCachePoint(content[i])) return true;
|
|
260
|
+
return false;
|
|
334
261
|
}
|
|
335
262
|
/**
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
263
|
+
* Removes all Bedrock cachePoint blocks from messages
|
|
264
|
+
* Used when switching from Bedrock to Anthropic provider
|
|
265
|
+
* Returns a new array - only clones messages that require modification.
|
|
266
|
+
*/
|
|
340
267
|
function stripBedrockCacheControl(messages) {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
const clonedContent = deepCloneContent(content).filter((block) => !isCachePoint(block));
|
|
352
|
-
updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
|
|
353
|
-
}
|
|
354
|
-
return updatedMessages;
|
|
268
|
+
if (!Array.isArray(messages)) return messages;
|
|
269
|
+
const updatedMessages = [...messages];
|
|
270
|
+
for (let i = 0; i < updatedMessages.length; i++) {
|
|
271
|
+
const originalMessage = updatedMessages[i];
|
|
272
|
+
const content = originalMessage.content;
|
|
273
|
+
if (!Array.isArray(content) || !hasBedrockCachePoint(content)) continue;
|
|
274
|
+
updatedMessages[i] = cloneMessage(originalMessage, deepCloneContent(content).filter((block) => !isCachePoint(block)));
|
|
275
|
+
}
|
|
276
|
+
return updatedMessages;
|
|
355
277
|
}
|
|
356
278
|
/**
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
279
|
+
* Adds Bedrock Converse API cache points to the latest two user messages.
|
|
280
|
+
* Inserts `{ cachePoint: { type: 'default' } }` as a separate content block
|
|
281
|
+
* immediately after the last text block in each targeted message.
|
|
282
|
+
* Strips ALL existing cache control (both Bedrock and Anthropic formats) from all messages,
|
|
283
|
+
* then adds fresh cache points to the latest two non-tool user messages in a single backward pass.
|
|
284
|
+
* This ensures we don't accumulate stale cache points across multiple turns.
|
|
285
|
+
* Returns a new array - only clones messages that require modification.
|
|
286
|
+
* @param messages - The array of message objects.
|
|
287
|
+
* @returns - A new array of message objects with cache points added.
|
|
288
|
+
*/
|
|
367
289
|
function addBedrockCacheControl(messages) {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
if (text != null && text.trim() !== '') {
|
|
427
|
-
lastNonEmptyTextIndex = workingContent.length;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
workingContent.push(cloned);
|
|
431
|
-
}
|
|
432
|
-
if (!modified && !needsCacheAdd) {
|
|
433
|
-
continue;
|
|
434
|
-
}
|
|
435
|
-
// Insert cache point after the last non-empty text block.
|
|
436
|
-
// Skip if no cacheable text content exists (whitespace-only messages).
|
|
437
|
-
if (needsCacheAdd && lastNonEmptyTextIndex >= 0) {
|
|
438
|
-
workingContent.splice(lastNonEmptyTextIndex + 1, 0, {
|
|
439
|
-
cachePoint: { type: 'default' },
|
|
440
|
-
});
|
|
441
|
-
cachePointsAdded++;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
else if (typeof content === 'string' && needsCacheAdd) {
|
|
445
|
-
workingContent = [
|
|
446
|
-
{ type: ContentTypes.TEXT, text: content },
|
|
447
|
-
{ cachePoint: { type: 'default' } },
|
|
448
|
-
];
|
|
449
|
-
cachePointsAdded++;
|
|
450
|
-
}
|
|
451
|
-
else if (typeof content === 'string' && hasSerializationProps) {
|
|
452
|
-
workingContent = content;
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
continue;
|
|
456
|
-
}
|
|
457
|
-
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
458
|
-
}
|
|
459
|
-
return updatedMessages;
|
|
290
|
+
if (!Array.isArray(messages) || messages.length === 0) return messages;
|
|
291
|
+
const updatedMessages = [...messages];
|
|
292
|
+
let cachePointsAdded = 0;
|
|
293
|
+
for (let i = updatedMessages.length - 1; i >= 0; i--) {
|
|
294
|
+
const originalMessage = updatedMessages[i];
|
|
295
|
+
const messageType = "getType" in originalMessage && typeof originalMessage.getType === "function" ? originalMessage.getType() : void 0;
|
|
296
|
+
const messageRole = "role" in originalMessage && typeof originalMessage.role === "string" ? originalMessage.role : void 0;
|
|
297
|
+
if (messageType === "system" || messageRole === "system") {
|
|
298
|
+
updatedMessages[i] = sanitizeBedrockSystemMessage(originalMessage);
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const isToolMessage = messageType === "tool" || messageRole === "tool";
|
|
302
|
+
const isUserMessage = messageType === "human" || messageRole === "user";
|
|
303
|
+
const content = originalMessage.content;
|
|
304
|
+
const hasSerializationProps = "lc_kwargs" in originalMessage || "lc_serializable" in originalMessage || "lc_namespace" in originalMessage;
|
|
305
|
+
const hasArrayContent = Array.isArray(content);
|
|
306
|
+
const needsCacheAdd = cachePointsAdded < 2 && isUserMessage && !isToolMessage && !(typeof content === "string" && content === "") && !isSyntheticMetaMessage(originalMessage) && (typeof content === "string" || hasArrayContent);
|
|
307
|
+
if (!needsCacheAdd && !hasArrayContent && !hasSerializationProps) continue;
|
|
308
|
+
let workingContent;
|
|
309
|
+
let modified = hasSerializationProps;
|
|
310
|
+
if (hasArrayContent) {
|
|
311
|
+
const src = content;
|
|
312
|
+
workingContent = [];
|
|
313
|
+
let lastNonEmptyTextIndex = -1;
|
|
314
|
+
for (let j = 0; j < src.length; j++) {
|
|
315
|
+
const block = src[j];
|
|
316
|
+
if (isCachePoint(block)) {
|
|
317
|
+
modified = true;
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
const cloned = { ...block };
|
|
321
|
+
if ("cache_control" in cloned) {
|
|
322
|
+
delete cloned.cache_control;
|
|
323
|
+
modified = true;
|
|
324
|
+
}
|
|
325
|
+
const type = cloned.type;
|
|
326
|
+
if (type === "text" || type === "text") {
|
|
327
|
+
const text = cloned.text;
|
|
328
|
+
if (text != null && text.trim() !== "") lastNonEmptyTextIndex = workingContent.length;
|
|
329
|
+
}
|
|
330
|
+
workingContent.push(cloned);
|
|
331
|
+
}
|
|
332
|
+
if (!modified && !needsCacheAdd) continue;
|
|
333
|
+
if (needsCacheAdd && lastNonEmptyTextIndex >= 0) {
|
|
334
|
+
workingContent.splice(lastNonEmptyTextIndex + 1, 0, { cachePoint: { type: "default" } });
|
|
335
|
+
cachePointsAdded++;
|
|
336
|
+
}
|
|
337
|
+
} else if (typeof content === "string" && needsCacheAdd) {
|
|
338
|
+
workingContent = [{
|
|
339
|
+
type: "text",
|
|
340
|
+
text: content
|
|
341
|
+
}, { cachePoint: { type: "default" } }];
|
|
342
|
+
cachePointsAdded++;
|
|
343
|
+
} else if (typeof content === "string" && hasSerializationProps) workingContent = content;
|
|
344
|
+
else continue;
|
|
345
|
+
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
346
|
+
}
|
|
347
|
+
return updatedMessages;
|
|
460
348
|
}
|
|
461
|
-
|
|
349
|
+
//#endregion
|
|
462
350
|
export { addBedrockCacheControl, addCacheControl, addCacheControlToStablePrefixMessages, stripAnthropicCacheControl, stripBedrockCacheControl };
|
|
463
|
-
|
|
351
|
+
|
|
352
|
+
//# sourceMappingURL=cache.mjs.map
|