@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,469 +1,356 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var format = require('./format.cjs');
|
|
7
|
-
|
|
1
|
+
require("../common/enum.cjs");
|
|
2
|
+
const require_langchain = require("./langchain.cjs");
|
|
3
|
+
const require_format = require("./format.cjs");
|
|
4
|
+
let _langchain_core_messages = require("@langchain/core/messages");
|
|
5
|
+
//#region src/messages/cache.ts
|
|
8
6
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
* Deep clones a message's content to prevent mutation of the original.
|
|
8
|
+
*/
|
|
11
9
|
function deepCloneContent(content) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (Array.isArray(content)) {
|
|
16
|
-
return content.map((block) => ({ ...block }));
|
|
17
|
-
}
|
|
18
|
-
return content;
|
|
10
|
+
if (typeof content === "string") return content;
|
|
11
|
+
if (Array.isArray(content)) return content.map((block) => ({ ...block }));
|
|
12
|
+
return content;
|
|
19
13
|
}
|
|
20
14
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
+
*/
|
|
26
20
|
function cloneMessage(message, content) {
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
tool: 'tool',
|
|
65
|
-
};
|
|
66
|
-
cloned.role = roleMap[msgType] || msgType;
|
|
67
|
-
}
|
|
68
|
-
return cloned;
|
|
21
|
+
if (message instanceof _langchain_core_messages.BaseMessage) {
|
|
22
|
+
const baseParams = {
|
|
23
|
+
content: require_langchain.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 require_format.withMessageRole(new _langchain_core_messages.AIMessage({
|
|
31
|
+
...baseParams,
|
|
32
|
+
tool_calls: message.tool_calls
|
|
33
|
+
}), "assistant");
|
|
34
|
+
case "human": return require_format.withMessageRole(new _langchain_core_messages.HumanMessage(baseParams), "user");
|
|
35
|
+
case "system": return require_format.withMessageRole(new _langchain_core_messages.SystemMessage(baseParams), "system");
|
|
36
|
+
case "tool": return require_format.withMessageRole(new _langchain_core_messages.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;
|
|
69
58
|
}
|
|
70
59
|
function stripAnthropicCacheControlFromBlocks(content) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
+
};
|
|
82
71
|
}
|
|
83
72
|
function sanitizeBedrockSystemMessage(message) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (!stripped.modified) {
|
|
90
|
-
return message;
|
|
91
|
-
}
|
|
92
|
-
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);
|
|
93
78
|
}
|
|
94
79
|
/**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
+
*/
|
|
103
88
|
function addCacheControl(messages) {
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
// Add cache control to the last text block for user messages
|
|
151
|
-
if (needsCacheAdd && lastTextIndex >= 0) {
|
|
152
|
-
workingContent[lastTextIndex].cache_control = {
|
|
153
|
-
type: 'ephemeral',
|
|
154
|
-
};
|
|
155
|
-
userMessagesModified++;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else if (typeof content === 'string' && needsCacheAdd) {
|
|
159
|
-
workingContent = [
|
|
160
|
-
{ type: 'text', text: content, cache_control: { type: 'ephemeral' } },
|
|
161
|
-
];
|
|
162
|
-
userMessagesModified++;
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
168
|
-
}
|
|
169
|
-
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;
|
|
170
135
|
}
|
|
171
136
|
/**
|
|
172
|
-
|
|
173
|
-
|
|
137
|
+
* Checks if a content block is a cache point
|
|
138
|
+
*/
|
|
174
139
|
function isCachePoint(block) {
|
|
175
|
-
|
|
140
|
+
return "cachePoint" in block && !("type" in block);
|
|
176
141
|
}
|
|
177
142
|
function getMessageRole(message) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
if ('role' in message && typeof message.role === 'string') {
|
|
182
|
-
return message.role;
|
|
183
|
-
}
|
|
184
|
-
return undefined;
|
|
143
|
+
if (message instanceof _langchain_core_messages.BaseMessage) return message.getType();
|
|
144
|
+
if ("role" in message && typeof message.role === "string") return message.role;
|
|
185
145
|
}
|
|
186
|
-
const SKILL_MESSAGE_SOURCE =
|
|
146
|
+
const SKILL_MESSAGE_SOURCE = "skill";
|
|
187
147
|
/**
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
+
*/
|
|
195
155
|
function isSyntheticMetaMessage(message) {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
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;
|
|
201
159
|
}
|
|
202
160
|
function isCacheableConversationMessage(message) {
|
|
203
|
-
|
|
204
|
-
|
|
161
|
+
const role = getMessageRole(message);
|
|
162
|
+
return role === "human" || role === "user" || role === "ai" || role === "assistant";
|
|
205
163
|
}
|
|
206
164
|
function isAssistantConversationMessage(message) {
|
|
207
|
-
|
|
208
|
-
|
|
165
|
+
const role = getMessageRole(message);
|
|
166
|
+
return role === "ai" || role === "assistant";
|
|
209
167
|
}
|
|
210
168
|
function hasCacheMarker(message) {
|
|
211
|
-
|
|
212
|
-
message.content.some((block) => 'cache_control' in block));
|
|
169
|
+
return Array.isArray(message.content) && message.content.some((block) => "cache_control" in block);
|
|
213
170
|
}
|
|
214
171
|
function addCacheControlToRecentMessages(messages, maxCachePoints, canUseMessage) {
|
|
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
|
-
if (!modified) {
|
|
265
|
-
continue;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
else if (typeof content === 'string' &&
|
|
269
|
-
content.trim() !== '' &&
|
|
270
|
-
canAddCache) {
|
|
271
|
-
workingContent = [
|
|
272
|
-
{ type: 'text', text: content, cache_control: { type: 'ephemeral' } },
|
|
273
|
-
];
|
|
274
|
-
cachePointsAdded++;
|
|
275
|
-
}
|
|
276
|
-
else {
|
|
277
|
-
continue;
|
|
278
|
-
}
|
|
279
|
-
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
280
|
-
}
|
|
281
|
-
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;
|
|
282
221
|
}
|
|
283
222
|
function addCacheControlToStablePrefixMessages(messages, maxCachePoints) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
}
|
|
288
|
-
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);
|
|
289
226
|
}
|
|
290
227
|
/**
|
|
291
|
-
|
|
292
|
-
|
|
228
|
+
* Checks if a message's content has Anthropic cache_control fields.
|
|
229
|
+
*/
|
|
293
230
|
function hasAnthropicCacheControl(content) {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
return true;
|
|
297
|
-
}
|
|
298
|
-
return false;
|
|
231
|
+
for (let i = 0; i < content.length; i++) if ("cache_control" in content[i]) return true;
|
|
232
|
+
return false;
|
|
299
233
|
}
|
|
300
234
|
/**
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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
|
+
*/
|
|
305
239
|
function stripAnthropicCacheControl(messages) {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
delete block.cache_control;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
|
|
324
|
-
}
|
|
325
|
-
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;
|
|
326
254
|
}
|
|
327
255
|
/**
|
|
328
|
-
|
|
329
|
-
|
|
256
|
+
* Checks if a message's content has Bedrock cachePoint blocks.
|
|
257
|
+
*/
|
|
330
258
|
function hasBedrockCachePoint(content) {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
return true;
|
|
334
|
-
}
|
|
335
|
-
return false;
|
|
259
|
+
for (let i = 0; i < content.length; i++) if (isCachePoint(content[i])) return true;
|
|
260
|
+
return false;
|
|
336
261
|
}
|
|
337
262
|
/**
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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
|
+
*/
|
|
342
267
|
function stripBedrockCacheControl(messages) {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
}
|
|
353
|
-
const clonedContent = deepCloneContent(content).filter((block) => !isCachePoint(block));
|
|
354
|
-
updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
|
|
355
|
-
}
|
|
356
|
-
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;
|
|
357
277
|
}
|
|
358
278
|
/**
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
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
|
+
*/
|
|
369
289
|
function addBedrockCacheControl(messages) {
|
|
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
|
-
|
|
427
|
-
|
|
428
|
-
if (text != null && text.trim() !== '') {
|
|
429
|
-
lastNonEmptyTextIndex = workingContent.length;
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
workingContent.push(cloned);
|
|
433
|
-
}
|
|
434
|
-
if (!modified && !needsCacheAdd) {
|
|
435
|
-
continue;
|
|
436
|
-
}
|
|
437
|
-
// Insert cache point after the last non-empty text block.
|
|
438
|
-
// Skip if no cacheable text content exists (whitespace-only messages).
|
|
439
|
-
if (needsCacheAdd && lastNonEmptyTextIndex >= 0) {
|
|
440
|
-
workingContent.splice(lastNonEmptyTextIndex + 1, 0, {
|
|
441
|
-
cachePoint: { type: 'default' },
|
|
442
|
-
});
|
|
443
|
-
cachePointsAdded++;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
else if (typeof content === 'string' && needsCacheAdd) {
|
|
447
|
-
workingContent = [
|
|
448
|
-
{ type: _enum.ContentTypes.TEXT, text: content },
|
|
449
|
-
{ cachePoint: { type: 'default' } },
|
|
450
|
-
];
|
|
451
|
-
cachePointsAdded++;
|
|
452
|
-
}
|
|
453
|
-
else if (typeof content === 'string' && hasSerializationProps) {
|
|
454
|
-
workingContent = content;
|
|
455
|
-
}
|
|
456
|
-
else {
|
|
457
|
-
continue;
|
|
458
|
-
}
|
|
459
|
-
updatedMessages[i] = cloneMessage(originalMessage, workingContent);
|
|
460
|
-
}
|
|
461
|
-
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;
|
|
462
348
|
}
|
|
463
|
-
|
|
349
|
+
//#endregion
|
|
464
350
|
exports.addBedrockCacheControl = addBedrockCacheControl;
|
|
465
351
|
exports.addCacheControl = addCacheControl;
|
|
466
352
|
exports.addCacheControlToStablePrefixMessages = addCacheControlToStablePrefixMessages;
|
|
467
353
|
exports.stripAnthropicCacheControl = stripAnthropicCacheControl;
|
|
468
354
|
exports.stripBedrockCacheControl = stripBedrockCacheControl;
|
|
469
|
-
|
|
355
|
+
|
|
356
|
+
//# sourceMappingURL=cache.cjs.map
|