@librechat/agents 3.3.3 → 3.3.5
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/agents/AgentContext.cjs +2 -1
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/common/constants.cjs +21 -0
- package/dist/cjs/common/constants.cjs.map +1 -1
- package/dist/cjs/events.cjs +10 -1
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +793 -111
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +3 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/hooks/HookRegistry.cjs +25 -0
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
- package/dist/cjs/hooks/index.cjs +12 -0
- package/dist/cjs/hooks/index.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs +1 -0
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +8 -0
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +79 -6
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +38 -13
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/google/utils/common.cjs +19 -7
- package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
- package/dist/cjs/llm/invoke.cjs +331 -5
- package/dist/cjs/llm/invoke.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +41 -5
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +25 -4
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +4 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/preempt.cjs +132 -0
- package/dist/cjs/llm/preempt.cjs.map +1 -0
- package/dist/cjs/main.cjs +36 -5
- package/dist/cjs/messages/alternation.cjs +92 -0
- package/dist/cjs/messages/alternation.cjs.map +1 -0
- package/dist/cjs/messages/cache.cjs +54 -33
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/contextPruning.cjs +17 -43
- package/dist/cjs/messages/contextPruning.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +315 -23
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +290 -60
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/handoffCue.cjs +63 -0
- package/dist/cjs/messages/handoffCue.cjs.map +1 -0
- package/dist/cjs/messages/index.cjs +4 -1
- package/dist/cjs/messages/injected.cjs +60 -0
- package/dist/cjs/messages/injected.cjs.map +1 -0
- package/dist/cjs/messages/prune.cjs +503 -127
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/run.cjs +80 -7
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/handlers.cjs +18 -9
- package/dist/cjs/session/handlers.cjs.map +1 -1
- package/dist/cjs/stream.cjs +35 -10
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +28 -14
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +56 -63
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/search/keenable-scraper.cjs +90 -0
- package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -0
- package/dist/cjs/tools/search/tool.cjs +9 -1
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/toolOutputReferences.cjs +6 -0
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +1 -1
- package/dist/cjs/utils/llm.cjs +1 -1
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +307 -20
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/cjs/utils/toolContent.cjs +1514 -0
- package/dist/cjs/utils/toolContent.cjs.map +1 -0
- package/dist/esm/agents/AgentContext.mjs +2 -1
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/common/constants.mjs +19 -1
- package/dist/esm/common/constants.mjs.map +1 -1
- package/dist/esm/events.mjs +10 -1
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +798 -116
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +3 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/hooks/HookRegistry.mjs +25 -0
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
- package/dist/esm/hooks/index.mjs +12 -1
- package/dist/esm/hooks/index.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs +1 -0
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +9 -1
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +79 -6
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +38 -13
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/google/utils/common.mjs +19 -7
- package/dist/esm/llm/google/utils/common.mjs.map +1 -1
- package/dist/esm/llm/invoke.mjs +332 -8
- package/dist/esm/llm/invoke.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +41 -5
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +25 -4
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +4 -1
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/preempt.mjs +131 -0
- package/dist/esm/llm/preempt.mjs.map +1 -0
- package/dist/esm/main.mjs +14 -11
- package/dist/esm/messages/alternation.mjs +91 -0
- package/dist/esm/messages/alternation.mjs.map +1 -0
- package/dist/esm/messages/cache.mjs +55 -34
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/contextPruning.mjs +17 -43
- package/dist/esm/messages/contextPruning.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +305 -24
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +290 -61
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/handoffCue.mjs +61 -0
- package/dist/esm/messages/handoffCue.mjs.map +1 -0
- package/dist/esm/messages/index.mjs +4 -1
- package/dist/esm/messages/injected.mjs +60 -0
- package/dist/esm/messages/injected.mjs.map +1 -0
- package/dist/esm/messages/prune.mjs +500 -128
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/run.mjs +80 -7
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/handlers.mjs +19 -10
- package/dist/esm/session/handlers.mjs.map +1 -1
- package/dist/esm/stream.mjs +34 -11
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +28 -14
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +56 -63
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/search/keenable-scraper.mjs +88 -0
- package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -0
- package/dist/esm/tools/search/tool.mjs +9 -1
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/toolOutputReferences.mjs +6 -0
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +1 -1
- package/dist/esm/utils/llm.mjs +1 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +307 -21
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/esm/utils/toolContent.mjs +1503 -0
- package/dist/esm/utils/toolContent.mjs.map +1 -0
- package/dist/types/common/constants.d.ts +18 -0
- package/dist/types/graphs/Graph.d.ts +139 -2
- package/dist/types/hooks/HookRegistry.d.ts +15 -0
- package/dist/types/hooks/index.d.ts +12 -1
- package/dist/types/hooks/types.d.ts +45 -6
- package/dist/types/index.d.ts +1 -1
- package/dist/types/llm/invoke.d.ts +34 -1
- package/dist/types/llm/openai/index.d.ts +4 -0
- package/dist/types/llm/openai/utils/index.d.ts +2 -0
- package/dist/types/llm/openrouter/index.d.ts +5 -0
- package/dist/types/llm/preempt.d.ts +40 -0
- package/dist/types/messages/alternation.d.ts +23 -0
- package/dist/types/messages/contextPruning.d.ts +2 -1
- package/dist/types/messages/core.d.ts +36 -0
- package/dist/types/messages/format.d.ts +6 -0
- package/dist/types/messages/handoffCue.d.ts +40 -0
- package/dist/types/messages/index.d.ts +3 -0
- package/dist/types/messages/injected.d.ts +3 -0
- package/dist/types/messages/prune.d.ts +16 -12
- package/dist/types/run.d.ts +7 -0
- package/dist/types/stream.d.ts +14 -0
- package/dist/types/tools/ToolNode.d.ts +0 -7
- package/dist/types/tools/search/keenable-scraper.d.ts +15 -0
- package/dist/types/tools/search/types.d.ts +31 -2
- package/dist/types/types/graph.d.ts +8 -1
- package/dist/types/types/run.d.ts +65 -0
- package/dist/types/types/stream.d.ts +1 -26
- package/dist/types/utils/tokens.d.ts +7 -0
- package/dist/types/utils/toolContent.d.ts +107 -0
- package/package.json +1 -1
- package/src/__tests__/stream.eagerEventExecution.test.ts +74 -0
- package/src/agents/AgentContext.ts +1 -0
- package/src/{splitStream.test.ts → aggregator.test.ts} +59 -666
- package/src/common/constants.ts +21 -0
- package/src/events.ts +15 -1
- package/src/graphs/Graph.ts +1261 -198
- package/src/graphs/MultiAgentGraph.ts +6 -1
- package/src/graphs/__tests__/Graph.contextOverflow.test.ts +1139 -4
- package/src/graphs/__tests__/Graph.preemptSignal.test.ts +126 -0
- package/src/hooks/HookRegistry.ts +40 -0
- package/src/hooks/__tests__/preemptBoundary.test.ts +152 -0
- package/src/hooks/index.ts +16 -2
- package/src/hooks/types.ts +47 -3
- package/src/index.ts +1 -1
- package/src/langfuse.ts +26 -1
- package/src/llm/anthropic/utils/message_inputs.ts +158 -12
- package/src/llm/anthropic/utils/tool-id-normalization.test.ts +109 -0
- package/src/llm/bedrock/utils/message_inputs.test.ts +131 -1
- package/src/llm/bedrock/utils/message_inputs.ts +100 -24
- package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +15 -0
- package/src/llm/google/utils/common.test.ts +75 -9
- package/src/llm/google/utils/common.ts +34 -3
- package/src/llm/invoke.alternation.test.ts +87 -0
- package/src/llm/invoke.handoffCue.test.ts +112 -0
- package/src/llm/invoke.test.ts +488 -0
- package/src/llm/invoke.ts +611 -8
- package/src/llm/openai/index.ts +106 -6
- package/src/llm/openai/utils/index.ts +109 -53
- package/src/llm/openai/utils/messages.test.ts +330 -1
- package/src/llm/openrouter/index.ts +12 -2
- package/src/llm/openrouter/reasoning.test.ts +314 -0
- package/src/llm/preempt.test.ts +323 -0
- package/src/llm/preempt.ts +178 -0
- package/src/messages/__tests__/observationMasking.test.ts +93 -2
- package/src/messages/alternation.test.ts +212 -0
- package/src/messages/alternation.ts +112 -0
- package/src/messages/cache.tail.test.ts +193 -0
- package/src/messages/cache.test.ts +113 -0
- package/src/messages/cache.ts +92 -60
- package/src/messages/contextPruning.test.ts +184 -0
- package/src/messages/contextPruning.ts +49 -42
- package/src/messages/core.ts +653 -40
- package/src/messages/ensureThinkingBlock.test.ts +49 -1
- package/src/messages/foldToollessToolBlocks.test.ts +163 -5
- package/src/messages/format.ts +454 -91
- package/src/messages/formatAgentMessages.steer.test.ts +267 -0
- package/src/messages/formatAgentMessages.test.ts +604 -14
- package/src/messages/formatAgentMessages.tools.test.ts +103 -0
- package/src/messages/handoffCue.test.ts +96 -0
- package/src/messages/handoffCue.ts +78 -0
- package/src/messages/index.ts +3 -0
- package/src/messages/injected.test.ts +90 -0
- package/src/messages/injected.ts +74 -0
- package/src/messages/prune.ts +996 -183
- package/src/run.ts +91 -6
- package/src/scripts/preempt-probe.ts +330 -0
- package/src/scripts/preempt-scenarios.ts +388 -0
- package/src/session/handlers.ts +32 -12
- package/src/specs/handoffCue.test.ts +165 -0
- package/src/specs/langfuse-callbacks.test.ts +352 -2
- package/src/specs/preemptSeal.test.ts +309 -0
- package/src/specs/prune.test.ts +1083 -6
- package/src/specs/summarization-unit.test.ts +105 -0
- package/src/specs/tokens.test.ts +609 -32
- package/src/stream.dispatch.test.ts +63 -0
- package/src/stream.ts +59 -23
- package/src/summarization/__tests__/node.test.ts +77 -0
- package/src/summarization/node.ts +46 -18
- package/src/tools/ToolNode.ts +150 -99
- package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +148 -1
- package/src/tools/__tests__/ToolNode.outputReferences.test.ts +112 -3
- package/src/tools/__tests__/annotateMessagesForLLM.test.ts +32 -0
- package/src/tools/__tests__/directToolHooks.test.ts +255 -7
- package/src/tools/search/keenable-scraper.test.ts +153 -0
- package/src/tools/search/keenable-scraper.ts +137 -0
- package/src/tools/search/tool.ts +13 -2
- package/src/tools/search/types.ts +50 -3
- package/src/tools/toolOutputReferences.ts +6 -0
- package/src/types/graph.ts +12 -1
- package/src/types/run.ts +67 -0
- package/src/types/stream.ts +1 -42
- package/src/utils/llm.test.ts +18 -0
- package/src/utils/llm.ts +4 -1
- package/src/utils/tokens.ts +586 -31
- package/src/utils/toolContent.test.ts +1432 -0
- package/src/utils/toolContent.ts +2707 -0
- package/dist/cjs/splitStream.cjs +0 -151
- package/dist/cjs/splitStream.cjs.map +0 -1
- package/dist/esm/splitStream.mjs +0 -150
- package/dist/esm/splitStream.mjs.map +0 -1
- package/dist/types/mockStream.d.ts +0 -32
- package/dist/types/splitStream.d.ts +0 -37
- package/src/mockStream.ts +0 -99
- package/src/splitStream.ts +0 -234
package/dist/cjs/main.cjs
CHANGED
|
@@ -3,19 +3,23 @@ const require_misc = require("./utils/misc.cjs");
|
|
|
3
3
|
const require_constants = require("./common/constants.cjs");
|
|
4
4
|
const require_enum = require("./common/enum.cjs");
|
|
5
5
|
require("./common/index.cjs");
|
|
6
|
+
const require_truncation = require("./utils/truncation.cjs");
|
|
6
7
|
const require_tokens = require("./utils/tokens.cjs");
|
|
8
|
+
const require_preempt = require("./llm/preempt.cjs");
|
|
9
|
+
const require_cache = require("./messages/cache.cjs");
|
|
7
10
|
const require_core = require("./messages/core.cjs");
|
|
8
11
|
const require_ids = require("./messages/ids.cjs");
|
|
9
|
-
const require_truncation = require("./utils/truncation.cjs");
|
|
10
12
|
const require_contextPruningSettings = require("./messages/contextPruningSettings.cjs");
|
|
11
13
|
const require_contextPruning = require("./messages/contextPruning.cjs");
|
|
12
14
|
const require_prune = require("./messages/prune.cjs");
|
|
13
15
|
const require_budget = require("./messages/budget.cjs");
|
|
14
16
|
const require_format = require("./messages/format.cjs");
|
|
15
|
-
const require_cache = require("./messages/cache.cjs");
|
|
16
17
|
const require_anthropicToolCache = require("./messages/anthropicToolCache.cjs");
|
|
17
18
|
const require_content = require("./messages/content.cjs");
|
|
18
19
|
const require_tools = require("./messages/tools.cjs");
|
|
20
|
+
const require_injected = require("./messages/injected.cjs");
|
|
21
|
+
const require_alternation = require("./messages/alternation.cjs");
|
|
22
|
+
const require_handoffCue = require("./messages/handoffCue.cjs");
|
|
19
23
|
const require_reducer = require("./messages/reducer.cjs");
|
|
20
24
|
const require_recency = require("./messages/recency.cjs");
|
|
21
25
|
require("./messages/index.cjs");
|
|
@@ -75,7 +79,6 @@ const require_fake = require("./llm/fake.cjs");
|
|
|
75
79
|
const require_Graph = require("./graphs/Graph.cjs");
|
|
76
80
|
const require_MultiAgentGraph = require("./graphs/MultiAgentGraph.cjs");
|
|
77
81
|
const require_run$1 = require("./run.cjs");
|
|
78
|
-
const require_splitStream = require("./splitStream.cjs");
|
|
79
82
|
require("./graphs/index.cjs");
|
|
80
83
|
const require_projection = require("./agents/projection.cjs");
|
|
81
84
|
const require_Calculator = require("./tools/Calculator.cjs");
|
|
@@ -182,8 +185,10 @@ exports.DATE_RANGE = require_schema$2.DATE_RANGE;
|
|
|
182
185
|
exports.DEFAULT_CONTEXT_PRUNING_SETTINGS = require_contextPruningSettings.DEFAULT_CONTEXT_PRUNING_SETTINGS;
|
|
183
186
|
exports.DEFAULT_COUNTRY_DESCRIPTION = require_schema$2.DEFAULT_COUNTRY_DESCRIPTION;
|
|
184
187
|
exports.DEFAULT_HOOK_TIMEOUT_MS = require_executeHooks.DEFAULT_HOOK_TIMEOUT_MS;
|
|
188
|
+
exports.DEFAULT_MAX_SEALS = require_constants.DEFAULT_MAX_SEALS;
|
|
185
189
|
exports.DEFAULT_PROMPT_CACHE_TTL = require_cache.DEFAULT_PROMPT_CACHE_TTL;
|
|
186
190
|
exports.DEFAULT_QUERY_DESCRIPTION = require_schema$2.DEFAULT_QUERY_DESCRIPTION;
|
|
191
|
+
exports.DEFAULT_RECURSION_LIMIT = require_constants.DEFAULT_RECURSION_LIMIT;
|
|
187
192
|
exports.DEFAULT_RESERVE_RATIO = require_prune.DEFAULT_RESERVE_RATIO;
|
|
188
193
|
exports.DEFAULT_RETAIN_RECENT_TURNS = require_recency.DEFAULT_RETAIN_RECENT_TURNS;
|
|
189
194
|
exports.DEFAULT_TOOL_TOKEN_MULTIPLIER = require_constants.DEFAULT_TOOL_TOKEN_MULTIPLIER;
|
|
@@ -204,6 +209,7 @@ exports.HARD_MAX_TOOL_RESULT_CHARS = require_truncation.HARD_MAX_TOOL_RESULT_CHA
|
|
|
204
209
|
exports.HARD_MAX_TOTAL_TOOL_OUTPUT_SIZE = require_truncation.HARD_MAX_TOTAL_TOOL_OUTPUT_SIZE;
|
|
205
210
|
exports.HOOK_EVENTS = require_types.HOOK_EVENTS;
|
|
206
211
|
exports.HOOK_INJECTED_MESSAGES_CAPABLE = require_index$5.HOOK_INJECTED_MESSAGES_CAPABLE;
|
|
212
|
+
exports.HOOK_PREEMPT_BOUNDARY_CAPABLE = require_index$5.HOOK_PREEMPT_BOUNDARY_CAPABLE;
|
|
207
213
|
exports.HandlerRegistry = require_events.HandlerRegistry;
|
|
208
214
|
exports.HookRegistry = require_HookRegistry.HookRegistry;
|
|
209
215
|
Object.defineProperty(exports, "HumanMessage", {
|
|
@@ -249,6 +255,8 @@ Object.defineProperty(exports, "MemorySaver", {
|
|
|
249
255
|
exports.ModelEndHandler = require_events.ModelEndHandler;
|
|
250
256
|
exports.MultiAgentGraph = require_MultiAgentGraph.MultiAgentGraph;
|
|
251
257
|
exports.ORIGINAL_CONTENT_MAX_CHARS = require_prune.ORIGINAL_CONTENT_MAX_CHARS;
|
|
258
|
+
exports.PREDECESSOR_HANDOFF_CUE = require_handoffCue.PREDECESSOR_HANDOFF_CUE;
|
|
259
|
+
exports.PREEMPT_BOUNDARY_HOOK_TIMEOUT_MS = require_constants.PREEMPT_BOUNDARY_HOOK_TIMEOUT_MS;
|
|
252
260
|
exports.ProgrammaticToolCallingDefinition = require_ProgrammaticToolCalling.ProgrammaticToolCallingDefinition;
|
|
253
261
|
exports.ProgrammaticToolCallingDescription = require_ProgrammaticToolCalling.ProgrammaticToolCallingDescription;
|
|
254
262
|
exports.ProgrammaticToolCallingName = require_ProgrammaticToolCalling.ProgrammaticToolCallingName;
|
|
@@ -261,6 +269,7 @@ Object.defineProperty(exports, "PromptTemplate", {
|
|
|
261
269
|
});
|
|
262
270
|
exports.Providers = require_enum.Providers;
|
|
263
271
|
exports.REMOVE_ALL_MESSAGES = require_reducer.REMOVE_ALL_MESSAGES;
|
|
272
|
+
exports.REPLY_PRIMER_TOKENS = require_prune.REPLY_PRIMER_TOKENS;
|
|
264
273
|
exports.ReadFileToolDefinition = require_ReadFile.ReadFileToolDefinition;
|
|
265
274
|
exports.ReadFileToolDescription = require_ReadFile.ReadFileToolDescription;
|
|
266
275
|
exports.ReadFileToolName = require_ReadFile.ReadFileToolName;
|
|
@@ -285,7 +294,7 @@ Object.defineProperty(exports, "RunnableSequence", {
|
|
|
285
294
|
return _langchain_core_runnables.RunnableSequence;
|
|
286
295
|
}
|
|
287
296
|
});
|
|
288
|
-
exports.
|
|
297
|
+
exports.SDK_STREAM_DISPATCH = require_stream.SDK_STREAM_DISPATCH;
|
|
289
298
|
exports.STATEFUL_BASH_NOTE = require_BashExecutor.STATEFUL_BASH_NOTE;
|
|
290
299
|
exports.STATEFUL_ENV_NOTE = require_CodeExecutor.STATEFUL_ENV_NOTE;
|
|
291
300
|
exports.SessionManager = require_JsonlSessionStore.SessionManager;
|
|
@@ -293,7 +302,6 @@ exports.SkillToolDefinition = require_SkillTool.SkillToolDefinition;
|
|
|
293
302
|
exports.SkillToolDescription = require_SkillTool.SkillToolDescription;
|
|
294
303
|
exports.SkillToolName = require_SkillTool.SkillToolName;
|
|
295
304
|
exports.SkillToolSchema = require_SkillTool.SkillToolSchema;
|
|
296
|
-
exports.SplitStreamHandler = require_splitStream.SplitStreamHandler;
|
|
297
305
|
exports.StandardGraph = require_Graph.StandardGraph;
|
|
298
306
|
exports.StatefulBashExecutionToolDescription = require_BashExecutor.StatefulBashExecutionToolDescription;
|
|
299
307
|
exports.StatefulCodeExecutionToolDescription = require_CodeExecutor.StatefulCodeExecutionToolDescription;
|
|
@@ -355,6 +363,7 @@ exports.addCacheControlToStablePrefixMessages = require_cache.addCacheControlToS
|
|
|
355
363
|
exports.addTailCacheControl = require_cache.addTailCacheControl;
|
|
356
364
|
exports.appendCodeSessionFileSummary = require_CodeSessionFileSummary.appendCodeSessionFileSummary;
|
|
357
365
|
exports.appendFailedExecutionFileReminder = require_CodeExecutor.appendFailedExecutionFileReminder;
|
|
366
|
+
exports.appendPredecessorHandoffCue = require_handoffCue.appendPredecessorHandoffCue;
|
|
358
367
|
exports.appendTmpScratchReminder = require_CodeExecutor.appendTmpScratchReminder;
|
|
359
368
|
exports.applyContextPruning = require_contextPruning.applyContextPruning;
|
|
360
369
|
exports.applyEdit = require_editStrategies.applyEdit;
|
|
@@ -374,16 +383,20 @@ exports.buildCodeExecutionToolDescription = require_CodeExecutor.buildCodeExecut
|
|
|
374
383
|
exports.buildCodeExecutionToolSchema = require_CodeExecutor.buildCodeExecutionToolSchema;
|
|
375
384
|
exports.buildSandboxRuntimeConfig = require_LocalExecutionEngine.buildSandboxRuntimeConfig;
|
|
376
385
|
exports.buildSubagentToolParams = require_SubagentTool.buildSubagentToolParams;
|
|
386
|
+
exports.calculateMaxToolCallInputChars = require_prune.calculateMaxToolCallInputChars;
|
|
377
387
|
exports.calculateMaxToolResultChars = require_truncation.calculateMaxToolResultChars;
|
|
378
388
|
exports.calculateMaxTotalToolOutputSize = require_truncation.calculateMaxTotalToolOutputSize;
|
|
379
389
|
exports.calculateTotalTokens = require_prune.calculateTotalTokens;
|
|
390
|
+
exports.canSealPreempt = require_preempt.canSealPreempt;
|
|
380
391
|
exports.checkValidNumber = require_prune.checkValidNumber;
|
|
381
392
|
exports.clampCalibrationRatio = require_prune.clampCalibrationRatio;
|
|
382
393
|
exports.classifyAttachment = require_attachments.classifyAttachment;
|
|
383
394
|
exports.clientExecTimeoutMs = require_CloudflareSandboxExecutionEngine.clientExecTimeoutMs;
|
|
384
395
|
exports.clientFsTimeoutMs = require_CloudflareSandboxExecutionEngine.clientFsTimeoutMs;
|
|
385
396
|
exports.cloneMessage = require_cache.cloneMessage;
|
|
397
|
+
exports.coalesceAdjacentUserTurns = require_alternation.coalesceAdjacentUserTurns;
|
|
386
398
|
exports.composeEventHandlers = require_events.composeEventHandlers;
|
|
399
|
+
exports.convertInjectedMessages = require_injected.convertInjectedMessages;
|
|
387
400
|
exports.convertMessagesToContent = require_core.convertMessagesToContent;
|
|
388
401
|
exports.countNestedGroups = require_ToolSearch.countNestedGroups;
|
|
389
402
|
exports.countrySchema = require_schema$2.countrySchema;
|
|
@@ -440,6 +453,7 @@ exports.dateSchema = require_schema$2.dateSchema;
|
|
|
440
453
|
exports.decodeFile = require_textEncoding.decodeFile;
|
|
441
454
|
exports.defaultOmitOptions = require_run$1.defaultOmitOptions;
|
|
442
455
|
exports.deserializeMessage = require_messageSerialization.deserializeMessage;
|
|
456
|
+
exports.dispatchesChatModelStream = require_stream.dispatchesChatModelStream;
|
|
443
457
|
exports.emptyOutputMessage = require_CodeExecutor.emptyOutputMessage;
|
|
444
458
|
exports.encodeFile = require_textEncoding.encodeFile;
|
|
445
459
|
exports.encodingForModel = require_tokens.encodingForModel;
|
|
@@ -518,6 +532,7 @@ exports.handleToolCalls = require_handlers.handleToolCalls;
|
|
|
518
532
|
exports.hasNestedQuantifier = require_matchers.hasNestedQuantifier;
|
|
519
533
|
exports.hasNestedQuantifiers = require_ToolSearch.hasNestedQuantifiers;
|
|
520
534
|
exports.hasToolSearchInCurrentTurn = require_tools.hasToolSearchInCurrentTurn;
|
|
535
|
+
exports.hasUnsafeStructuredSerialization = require_tokens.hasUnsafeStructuredSerialization;
|
|
521
536
|
exports.imageAttachmentContent = require_attachments.imageAttachmentContent;
|
|
522
537
|
exports.imagesSchema = require_schema$2.imagesSchema;
|
|
523
538
|
exports.initializeModel = require_init.initializeModel;
|
|
@@ -555,6 +570,7 @@ exports.isLegacyConvertible = require_content.isLegacyConvertible;
|
|
|
555
570
|
exports.isLikelyContextOverflowError = require_errors.isLikelyContextOverflowError;
|
|
556
571
|
exports.isOpenAILike = require_llm.isOpenAILike;
|
|
557
572
|
exports.isPresent = require_misc.isPresent;
|
|
573
|
+
exports.isSyntheticProviderContextMessage = require_format.isSyntheticProviderContextMessage;
|
|
558
574
|
exports.isThinkingEnabled = require_request.isThinkingEnabled;
|
|
559
575
|
Object.defineProperty(exports, "isToolMessage", {
|
|
560
576
|
enumerable: true,
|
|
@@ -584,7 +600,20 @@ exports.performLocalSearch = require_ToolSearch.performLocalSearch;
|
|
|
584
600
|
exports.preFlightTruncateToolCallInputs = require_prune.preFlightTruncateToolCallInputs;
|
|
585
601
|
exports.preFlightTruncateToolResults = require_prune.preFlightTruncateToolResults;
|
|
586
602
|
exports.projectAgentContextUsage = require_projection.projectAgentContextUsage;
|
|
603
|
+
exports.projectAnthropicArtifactContent = require_core.projectAnthropicArtifactContent;
|
|
604
|
+
exports.projectArtifactPayload = require_core.projectArtifactPayload;
|
|
605
|
+
exports.projectCacheControlledToolOutputsToText = require_core.projectCacheControlledToolOutputsToText;
|
|
606
|
+
exports.projectComputerCallOutputsToText = require_core.projectComputerCallOutputsToText;
|
|
607
|
+
exports.projectOpenAIChatToolMessageContent = require_core.projectOpenAIChatToolMessageContent;
|
|
608
|
+
exports.projectOpenAIResponsesToolMessageContent = require_core.projectOpenAIResponsesToolMessageContent;
|
|
609
|
+
exports.projectOpenAIToolMessageContent = require_core.projectOpenAIToolMessageContent;
|
|
610
|
+
exports.projectOpenRouterToolMessageContent = require_core.projectOpenRouterToolMessageContent;
|
|
611
|
+
exports.projectSingleTextToolOutputsToText = require_core.projectSingleTextToolOutputsToText;
|
|
612
|
+
exports.projectStructuredToolOutputsToText = require_core.projectStructuredToolOutputsToText;
|
|
613
|
+
exports.projectToolCallInputs = require_prune.projectToolCallInputs;
|
|
614
|
+
exports.projectToolStreamContentForProvider = require_core.projectToolStreamContentForProvider;
|
|
587
615
|
exports.querySchema = require_schema$2.querySchema;
|
|
616
|
+
exports.removePredecessorHandoffCue = require_handoffCue.removePredecessorHandoffCue;
|
|
588
617
|
exports.repairOrphanedToolMessages = require_prune.repairOrphanedToolMessages;
|
|
589
618
|
exports.resetIfNotEmpty = require_graph.resetIfNotEmpty;
|
|
590
619
|
exports.resolveBedrockPromptCacheTtl = require_cache.resolveBedrockPromptCacheTtl;
|
|
@@ -604,12 +633,14 @@ exports.runPostEditSyntaxCheck = require_syntaxCheck.runPostEditSyntaxCheck;
|
|
|
604
633
|
exports.sanitizeOrphanToolBlocks = require_prune.sanitizeOrphanToolBlocks;
|
|
605
634
|
exports.sanitizeRegex = require_ToolSearch.sanitizeRegex;
|
|
606
635
|
exports.serializeMessage = require_messageSerialization.serializeMessage;
|
|
636
|
+
exports.serializeToolCallInput = require_prune.serializeToolCallInput;
|
|
607
637
|
exports.shellQuote = require_LocalExecutionEngine.shellQuote;
|
|
608
638
|
exports.shiftIndexTokenCountMap = require_format.shiftIndexTokenCountMap;
|
|
609
639
|
exports.shouldTriggerSummarization = require_index$9.shouldTriggerSummarization;
|
|
610
640
|
exports.sleep = require_run.sleep;
|
|
611
641
|
exports.spawnLocalProcess = require_LocalExecutionEngine.spawnLocalProcess;
|
|
612
642
|
exports.splitAtRecencyBoundary = require_recency.splitAtRecencyBoundary;
|
|
643
|
+
exports.strictAlternationProviders = require_alternation.strictAlternationProviders;
|
|
613
644
|
exports.stripAnthropicCacheControl = require_cache.stripAnthropicCacheControl;
|
|
614
645
|
exports.stripBedrockCacheControl = require_cache.stripBedrockCacheControl;
|
|
615
646
|
exports.stripCodeSessionFileSummary = require_CodeSessionFileSummary.stripCodeSessionFileSummary;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require("../common/enum.cjs");
|
|
2
|
+
require("../common/index.cjs");
|
|
3
|
+
let _langchain_core_messages = require("@langchain/core/messages");
|
|
4
|
+
//#region src/messages/alternation.ts
|
|
5
|
+
/**
|
|
6
|
+
* Providers whose APIs specify strict user/assistant alternation. Mistral
|
|
7
|
+
* rejects consecutive user turns outright. Bedrock's Converse API documents
|
|
8
|
+
* the alternation requirement across many model families; enforcement varies
|
|
9
|
+
* by family — Claude on Converse currently tolerates adjacent user turns
|
|
10
|
+
* (verified live, 2026-07-28) — so the payload is normalized for all of them
|
|
11
|
+
* rather than betting on per-family leniency. Anthropic's own Messages API,
|
|
12
|
+
* OpenAI and Gemini all accept consecutive user turns, so they are
|
|
13
|
+
* deliberately absent.
|
|
14
|
+
*/
|
|
15
|
+
const strictAlternationProviders = new Set([
|
|
16
|
+
"bedrock",
|
|
17
|
+
"mistral",
|
|
18
|
+
"mistralai"
|
|
19
|
+
]);
|
|
20
|
+
const TOOL_RESULT_TYPES = new Set(["tool_result", "toolResult"]);
|
|
21
|
+
/**
|
|
22
|
+
* True when every block is a tool result. Both vendored converters already
|
|
23
|
+
* merge adjacent runs of these, and folding one into a text turn would break
|
|
24
|
+
* the tool pairing they depend on — so they are left alone here.
|
|
25
|
+
*/
|
|
26
|
+
function isToolResultMessage(message) {
|
|
27
|
+
const { content } = message;
|
|
28
|
+
if (typeof content === "string" || content.length === 0) return false;
|
|
29
|
+
return content.every((block) => typeof block.type === "string" && TOOL_RESULT_TYPES.has(block.type));
|
|
30
|
+
}
|
|
31
|
+
function toBlocks(content) {
|
|
32
|
+
if (typeof content === "string") return content === "" ? [] : [{
|
|
33
|
+
type: "text",
|
|
34
|
+
text: content
|
|
35
|
+
}];
|
|
36
|
+
return content;
|
|
37
|
+
}
|
|
38
|
+
function joinContent(left, right) {
|
|
39
|
+
if (typeof left === "string" && typeof right === "string") return left === "" ? right : `${left}\n\n${right}`;
|
|
40
|
+
return [...toBlocks(left), ...toBlocks(right)];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Merges runs of consecutive human turns into one, for providers that reject
|
|
44
|
+
* them. Purely a wire-shaping pass: it returns a new array of new messages,
|
|
45
|
+
* so graph state and the host's persisted messages keep the per-message
|
|
46
|
+
* identity that steer rendering and the trailing-steer anchor rely on.
|
|
47
|
+
*
|
|
48
|
+
* Tool-result turns are excluded — the converters merge those themselves, and
|
|
49
|
+
* combining one with a text turn would orphan the pairing.
|
|
50
|
+
*/
|
|
51
|
+
function coalesceAdjacentUserTurns(messages) {
|
|
52
|
+
const result = [];
|
|
53
|
+
let mergedAny = false;
|
|
54
|
+
for (const message of messages) {
|
|
55
|
+
const previous = result[result.length - 1];
|
|
56
|
+
if (!(result.length > 0 && previous.getType() === "human" && message.getType() === "human" && !isToolResultMessage(previous) && !isToolResultMessage(message))) {
|
|
57
|
+
result.push(message);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
mergedAny = true;
|
|
61
|
+
result[result.length - 1] = new _langchain_core_messages.HumanMessage({
|
|
62
|
+
content: joinContent(previous.content, message.content),
|
|
63
|
+
/**
|
|
64
|
+
* The LATER turn's kwargs, deliberately. The one provider-path consumer
|
|
65
|
+
* of these flags is the prompt-cache tail anchor, and it reasons
|
|
66
|
+
* positionally: `isSyntheticMetaMessage` decides whether a breakpoint
|
|
67
|
+
* may be inserted after the message's LAST text block. Merging keeps
|
|
68
|
+
* the last block's provenance only if the last part's kwargs survive —
|
|
69
|
+
* a skill body absorbed into a real user turn must stay anchorable
|
|
70
|
+
* (the real turn ends it), while a real steer absorbed into a trailing
|
|
71
|
+
* skill body must not pin the cache to the volatile body. The first
|
|
72
|
+
* turn's id is kept so origin tracking can re-attach by key.
|
|
73
|
+
*/
|
|
74
|
+
additional_kwargs: message.additional_kwargs,
|
|
75
|
+
...previous.id != null && { id: previous.id }
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Identity on the no-merge path. The pass runs twice for a primary
|
|
80
|
+
* Bedrock/Mistral call — once in `createCallModel` (must precede the cache
|
|
81
|
+
* breakpoint) and once in the `attemptInvoke` funnel (must cover fallback
|
|
82
|
+
* and summarization sends) — so the already-normalized second pass returns
|
|
83
|
+
* the SAME array rather than reallocating a context-sized copy, and
|
|
84
|
+
* callers can cheaply detect "nothing changed" by identity.
|
|
85
|
+
*/
|
|
86
|
+
return mergedAny ? result : messages;
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
exports.coalesceAdjacentUserTurns = coalesceAdjacentUserTurns;
|
|
90
|
+
exports.strictAlternationProviders = strictAlternationProviders;
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=alternation.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alternation.cjs","names":["HumanMessage"],"sources":["../../../src/messages/alternation.ts"],"sourcesContent":["// src/messages/alternation.ts\nimport { HumanMessage } from '@langchain/core/messages';\nimport type { BaseMessage, MessageContent } from '@langchain/core/messages';\nimport { Providers } from '@/common';\n\n/**\n * Providers whose APIs specify strict user/assistant alternation. Mistral\n * rejects consecutive user turns outright. Bedrock's Converse API documents\n * the alternation requirement across many model families; enforcement varies\n * by family — Claude on Converse currently tolerates adjacent user turns\n * (verified live, 2026-07-28) — so the payload is normalized for all of them\n * rather than betting on per-family leniency. Anthropic's own Messages API,\n * OpenAI and Gemini all accept consecutive user turns, so they are\n * deliberately absent.\n */\nexport const strictAlternationProviders: ReadonlySet<Providers> = new Set([\n Providers.BEDROCK,\n Providers.MISTRAL,\n Providers.MISTRALAI,\n]);\n\nconst TOOL_RESULT_TYPES = new Set(['tool_result', 'toolResult']);\n\n/**\n * True when every block is a tool result. Both vendored converters already\n * merge adjacent runs of these, and folding one into a text turn would break\n * the tool pairing they depend on — so they are left alone here.\n */\nfunction isToolResultMessage(message: BaseMessage): boolean {\n const { content } = message;\n if (typeof content === 'string' || content.length === 0) {\n return false;\n }\n return content.every(\n (block) =>\n typeof block.type === 'string' && TOOL_RESULT_TYPES.has(block.type)\n );\n}\n\nfunction toBlocks(content: MessageContent): Exclude<MessageContent, string> {\n if (typeof content === 'string') {\n return content === '' ? [] : [{ type: 'text', text: content }];\n }\n return content;\n}\n\nfunction joinContent(\n left: MessageContent,\n right: MessageContent\n): MessageContent {\n if (typeof left === 'string' && typeof right === 'string') {\n return left === '' ? right : `${left}\\n\\n${right}`;\n }\n return [...toBlocks(left), ...toBlocks(right)];\n}\n\n/**\n * Merges runs of consecutive human turns into one, for providers that reject\n * them. Purely a wire-shaping pass: it returns a new array of new messages,\n * so graph state and the host's persisted messages keep the per-message\n * identity that steer rendering and the trailing-steer anchor rely on.\n *\n * Tool-result turns are excluded — the converters merge those themselves, and\n * combining one with a text turn would orphan the pairing.\n */\nexport function coalesceAdjacentUserTurns(\n messages: BaseMessage[]\n): BaseMessage[] {\n const result: BaseMessage[] = [];\n let mergedAny = false;\n for (const message of messages) {\n const previous = result[result.length - 1];\n const mergeable =\n result.length > 0 &&\n previous.getType() === 'human' &&\n message.getType() === 'human' &&\n !isToolResultMessage(previous) &&\n !isToolResultMessage(message);\n\n if (!mergeable) {\n result.push(message);\n continue;\n }\n mergedAny = true;\n\n result[result.length - 1] = new HumanMessage({\n content: joinContent(previous.content, message.content),\n /**\n * The LATER turn's kwargs, deliberately. The one provider-path consumer\n * of these flags is the prompt-cache tail anchor, and it reasons\n * positionally: `isSyntheticMetaMessage` decides whether a breakpoint\n * may be inserted after the message's LAST text block. Merging keeps\n * the last block's provenance only if the last part's kwargs survive —\n * a skill body absorbed into a real user turn must stay anchorable\n * (the real turn ends it), while a real steer absorbed into a trailing\n * skill body must not pin the cache to the volatile body. The first\n * turn's id is kept so origin tracking can re-attach by key.\n */\n additional_kwargs: message.additional_kwargs,\n ...(previous.id != null && { id: previous.id }),\n });\n }\n /**\n * Identity on the no-merge path. The pass runs twice for a primary\n * Bedrock/Mistral call — once in `createCallModel` (must precede the cache\n * breakpoint) and once in the `attemptInvoke` funnel (must cover fallback\n * and summarization sends) — so the already-normalized second pass returns\n * the SAME array rather than reallocating a context-sized copy, and\n * callers can cheaply detect \"nothing changed\" by identity.\n */\n return mergedAny ? result : messages;\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAa,6BAAqD,IAAI,IAAI;;;;AAI1E,CAAC;AAED,MAAM,oBAAoB,IAAI,IAAI,CAAC,eAAe,YAAY,CAAC;;;;;;AAO/D,SAAS,oBAAoB,SAA+B;CAC1D,MAAM,EAAE,YAAY;CACpB,IAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GACpD,OAAO;CAET,OAAO,QAAQ,OACZ,UACC,OAAO,MAAM,SAAS,YAAY,kBAAkB,IAAI,MAAM,IAAI,CACtE;AACF;AAEA,SAAS,SAAS,SAA0D;CAC1E,IAAI,OAAO,YAAY,UACrB,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC;EAAE,MAAM;EAAQ,MAAM;CAAQ,CAAC;CAE/D,OAAO;AACT;AAEA,SAAS,YACP,MACA,OACgB;CAChB,IAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAC/C,OAAO,SAAS,KAAK,QAAQ,GAAG,KAAK,MAAM;CAE7C,OAAO,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,SAAS,KAAK,CAAC;AAC/C;;;;;;;;;;AAWA,SAAgB,0BACd,UACe;CACf,MAAM,SAAwB,CAAC;CAC/B,IAAI,YAAY;CAChB,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,WAAW,OAAO,OAAO,SAAS;EAQxC,IAAI,EANF,OAAO,SAAS,KAChB,SAAS,QAAQ,MAAM,WACvB,QAAQ,QAAQ,MAAM,WACtB,CAAC,oBAAoB,QAAQ,KAC7B,CAAC,oBAAoB,OAAO,IAEd;GACd,OAAO,KAAK,OAAO;GACnB;EACF;EACA,YAAY;EAEZ,OAAO,OAAO,SAAS,KAAK,IAAIA,yBAAAA,aAAa;GAC3C,SAAS,YAAY,SAAS,SAAS,QAAQ,OAAO;;;;;;;;;;;;GAYtD,mBAAmB,QAAQ;GAC3B,GAAI,SAAS,MAAM,QAAQ,EAAE,IAAI,SAAS,GAAG;EAC/C,CAAC;CACH;;;;;;;;;CASA,OAAO,YAAY,SAAS;AAC9B"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require("../common/enum.cjs");
|
|
2
|
+
const require_toolContent = require("../utils/toolContent.cjs");
|
|
2
3
|
const require_langchain = require("./langchain.cjs");
|
|
3
|
-
const require_format = require("./format.cjs");
|
|
4
4
|
let _langchain_core_messages = require("@langchain/core/messages");
|
|
5
|
+
let node_util_types = require("node:util/types");
|
|
5
6
|
//#region src/messages/cache.ts
|
|
6
7
|
/**
|
|
7
8
|
* Default TTL applied wherever a prompt-cache breakpoint is added. The 1-hour
|
|
@@ -83,9 +84,18 @@ function resolveBedrockPromptCacheTtl(ttl, model) {
|
|
|
83
84
|
/**
|
|
84
85
|
* Deep clones a message's content to prevent mutation of the original.
|
|
85
86
|
*/
|
|
86
|
-
function deepCloneContent(content) {
|
|
87
|
+
function deepCloneContent(content, omittedProperty) {
|
|
87
88
|
if (typeof content === "string") return content;
|
|
88
|
-
if (Array.isArray(content)) return content.map((block) =>
|
|
89
|
+
if (Array.isArray(content)) return content.map((block) => {
|
|
90
|
+
if (typeof block !== "object" || block == null || (0, node_util_types.isProxy)(block)) return block;
|
|
91
|
+
try {
|
|
92
|
+
const descriptors = Object.getOwnPropertyDescriptors(block);
|
|
93
|
+
if (omittedProperty != null) delete descriptors[omittedProperty];
|
|
94
|
+
return Object.create(Object.getPrototypeOf(block), descriptors);
|
|
95
|
+
} catch {
|
|
96
|
+
return block;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
89
99
|
return content;
|
|
90
100
|
}
|
|
91
101
|
/**
|
|
@@ -96,26 +106,23 @@ function deepCloneContent(content) {
|
|
|
96
106
|
*/
|
|
97
107
|
function cloneMessage(message, content) {
|
|
98
108
|
if (message instanceof _langchain_core_messages.BaseMessage) {
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
109
|
+
const descriptors = Object.getOwnPropertyDescriptors(message);
|
|
110
|
+
const contentDescriptor = descriptors.content;
|
|
111
|
+
descriptors.content = {
|
|
112
|
+
configurable: contentDescriptor?.configurable ?? true,
|
|
113
|
+
enumerable: contentDescriptor?.enumerable ?? true,
|
|
114
|
+
value: require_langchain.toLangChainContent(content),
|
|
115
|
+
writable: contentDescriptor?.writable ?? true
|
|
105
116
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
tool_call_id: message.tool_call_id
|
|
116
|
-
}), "tool");
|
|
117
|
-
default: break;
|
|
118
|
-
}
|
|
117
|
+
const lcKwargs = descriptors.lc_kwargs;
|
|
118
|
+
if (lcKwargs != null && "value" in lcKwargs && typeof lcKwargs.value === "object" && lcKwargs.value != null) descriptors.lc_kwargs = {
|
|
119
|
+
...lcKwargs,
|
|
120
|
+
value: {
|
|
121
|
+
...lcKwargs.value,
|
|
122
|
+
content: require_langchain.toLangChainContent(content)
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
return Object.create(Object.getPrototypeOf(message), descriptors);
|
|
119
126
|
}
|
|
120
127
|
const { lc_kwargs: _lc_kwargs, lc_serializable: _lc_serializable, lc_namespace: _lc_namespace, ...rest } = message;
|
|
121
128
|
const cloned = {
|
|
@@ -149,7 +156,8 @@ function sanitizeBedrockSystemMessage(message, ttl) {
|
|
|
149
156
|
let modified = false;
|
|
150
157
|
for (const block of content) {
|
|
151
158
|
if (isCachePoint(block)) {
|
|
152
|
-
const
|
|
159
|
+
const descriptor = Object.getOwnPropertyDescriptor(block, "cachePoint");
|
|
160
|
+
const existing = descriptor != null && "value" in descriptor ? descriptor.value : void 0;
|
|
153
161
|
const desired = buildBedrockCachePoint(ttl);
|
|
154
162
|
if (existing?.ttl !== desired.ttl) {
|
|
155
163
|
modified = true;
|
|
@@ -230,7 +238,14 @@ function addCacheControl(messages, ttl) {
|
|
|
230
238
|
* Checks if a content block is a cache point
|
|
231
239
|
*/
|
|
232
240
|
function isCachePoint(block) {
|
|
233
|
-
|
|
241
|
+
if (typeof block !== "object" || block == null || (0, node_util_types.isProxy)(block)) return false;
|
|
242
|
+
try {
|
|
243
|
+
const cachePoint = Object.getOwnPropertyDescriptor(block, "cachePoint");
|
|
244
|
+
const type = Object.getOwnPropertyDescriptor(block, "type");
|
|
245
|
+
return cachePoint?.enumerable === true && type == null;
|
|
246
|
+
} catch {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
234
249
|
}
|
|
235
250
|
/**
|
|
236
251
|
* Block types that must never anchor the tail cache breakpoint, because the
|
|
@@ -297,7 +312,8 @@ function addTailCacheControl(messages, ttl) {
|
|
|
297
312
|
const originalMessage = updatedMessages[i];
|
|
298
313
|
const content = originalMessage.content;
|
|
299
314
|
const hasArrayContent = Array.isArray(content);
|
|
300
|
-
const
|
|
315
|
+
const isComputerOutput = originalMessage instanceof _langchain_core_messages.BaseMessage && require_toolContent.hasComputerCallOutputMarker(originalMessage);
|
|
316
|
+
const canPlaceMarker = !markerPlaced && !isSyntheticMetaMessage(originalMessage) && !isComputerOutput;
|
|
301
317
|
if (!canPlaceMarker && !hasArrayContent) continue;
|
|
302
318
|
let workingContent;
|
|
303
319
|
let modified = false;
|
|
@@ -426,7 +442,15 @@ function addCacheControlToStablePrefixMessages(messages, maxCachePoints, ttl) {
|
|
|
426
442
|
* Checks if a message's content has Anthropic cache_control fields.
|
|
427
443
|
*/
|
|
428
444
|
function hasAnthropicCacheControl(content) {
|
|
429
|
-
for (let i = 0; i < content.length; i++)
|
|
445
|
+
for (let i = 0; i < content.length; i++) {
|
|
446
|
+
const block = content[i];
|
|
447
|
+
if (typeof block !== "object" || block == null || (0, node_util_types.isProxy)(block)) continue;
|
|
448
|
+
try {
|
|
449
|
+
if (Object.getOwnPropertyDescriptor(block, "cache_control")?.enumerable === true) return true;
|
|
450
|
+
} catch {
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
430
454
|
return false;
|
|
431
455
|
}
|
|
432
456
|
/**
|
|
@@ -441,12 +465,7 @@ function stripAnthropicCacheControl(messages) {
|
|
|
441
465
|
const originalMessage = updatedMessages[i];
|
|
442
466
|
const content = originalMessage.content;
|
|
443
467
|
if (!Array.isArray(content) || !hasAnthropicCacheControl(content)) continue;
|
|
444
|
-
|
|
445
|
-
for (let j = 0; j < clonedContent.length; j++) {
|
|
446
|
-
const block = clonedContent[j];
|
|
447
|
-
if ("cache_control" in block) delete block.cache_control;
|
|
448
|
-
}
|
|
449
|
-
updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
|
|
468
|
+
updatedMessages[i] = cloneMessage(originalMessage, deepCloneContent(content, "cache_control"));
|
|
450
469
|
}
|
|
451
470
|
return updatedMessages;
|
|
452
471
|
}
|
|
@@ -576,7 +595,9 @@ function addBedrockTailCacheControl(messages, ttl) {
|
|
|
576
595
|
const content = originalMessage.content;
|
|
577
596
|
const hasSerializationProps = "lc_kwargs" in originalMessage || "lc_serializable" in originalMessage || "lc_namespace" in originalMessage;
|
|
578
597
|
const hasArrayContent = Array.isArray(content);
|
|
579
|
-
const
|
|
598
|
+
const isEmptyString = typeof content === "string" && content === "";
|
|
599
|
+
const isComputerOutput = originalMessage instanceof _langchain_core_messages.BaseMessage && require_toolContent.hasComputerCallOutputMarker(originalMessage);
|
|
600
|
+
const canPlaceCachePoint = !cachePointPlaced && !isEmptyString && !isSyntheticMetaMessage(originalMessage) && !isComputerOutput && (typeof content === "string" || hasArrayContent);
|
|
580
601
|
if (!canPlaceCachePoint && !hasArrayContent && !hasSerializationProps) continue;
|
|
581
602
|
let workingContent;
|
|
582
603
|
let modified = hasSerializationProps;
|