@librechat/agents 3.7.22 → 3.8.1
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 +13 -3
- package/dist/cjs/agents/AgentContext.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +174 -53
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/graphs/MultiAgentGraph.cjs +15 -5
- package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
- package/dist/cjs/langfuse.cjs +48 -2
- package/dist/cjs/langfuse.cjs.map +1 -1
- package/dist/cjs/langfuseToolOutputTracing.cjs +42 -0
- package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
- package/dist/cjs/langfuseTraceShaping.cjs +7 -1
- package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -9
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +2 -7
- package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/contextPressureMeter.cjs +51 -10
- package/dist/cjs/llm/contextPressureMeter.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +1 -1
- package/dist/cjs/llm/invoke.cjs +2 -2
- package/dist/cjs/llm/openai/index.cjs +4 -3
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +5 -4
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/preempt.cjs +3 -2
- package/dist/cjs/llm/preempt.cjs.map +1 -1
- package/dist/cjs/llm/prepareProviderRequest.cjs +9 -7
- package/dist/cjs/llm/prepareProviderRequest.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +1 -1
- package/dist/cjs/main.cjs +11 -5
- package/dist/cjs/messages/alternation.cjs +1 -5
- package/dist/cjs/messages/alternation.cjs.map +1 -1
- package/dist/cjs/messages/budget.cjs +206 -7
- package/dist/cjs/messages/budget.cjs.map +1 -1
- package/dist/cjs/messages/cache.cjs +3 -9
- package/dist/cjs/messages/cache.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +25 -37
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/format.cjs +131 -42
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/messages/index.cjs +2 -0
- package/dist/cjs/messages/prune.cjs +12 -7
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/messages/reasoningTypes.cjs +21 -0
- package/dist/cjs/messages/reasoningTypes.cjs.map +1 -0
- package/dist/cjs/messages/recency.cjs +15 -94
- package/dist/cjs/messages/recency.cjs.map +1 -1
- package/dist/cjs/messages/toolHistoryProjection.cjs +243 -0
- package/dist/cjs/messages/toolHistoryProjection.cjs.map +1 -0
- package/dist/cjs/messages/toolResultTypes.cjs +145 -4
- package/dist/cjs/messages/toolResultTypes.cjs.map +1 -1
- package/dist/cjs/run.cjs +5 -4
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +6 -4
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/session/JsonlSessionStore.cjs +3 -0
- package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
- package/dist/cjs/session/index.cjs +1 -1
- package/dist/cjs/session/sessionProjection.cjs +75 -0
- package/dist/cjs/session/sessionProjection.cjs.map +1 -0
- package/dist/cjs/stream.cjs +18 -17
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/summarization/index.cjs.map +1 -1
- package/dist/cjs/summarization/node.cjs +18 -8
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/summarization/shared.cjs +9 -0
- package/dist/cjs/summarization/shared.cjs.map +1 -1
- package/dist/cjs/tools/ArtifactDelivery.cjs +27 -0
- package/dist/cjs/tools/ArtifactDelivery.cjs.map +1 -0
- package/dist/cjs/tools/BashExecutor.cjs +6 -1
- package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +6 -1
- package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +5 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
- package/dist/cjs/tools/local/CompileCheckTool.cjs +1 -1
- package/dist/cjs/tools/local/LocalCodingTools.cjs +1 -1
- package/dist/cjs/utils/events.cjs +13 -0
- package/dist/cjs/utils/events.cjs.map +1 -1
- package/dist/cjs/utils/tokens.cjs +105 -0
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/agents/AgentContext.mjs +13 -3
- package/dist/esm/agents/AgentContext.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +176 -55
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/graphs/MultiAgentGraph.mjs +15 -5
- package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
- package/dist/esm/langfuse.mjs +49 -4
- package/dist/esm/langfuse.mjs.map +1 -1
- package/dist/esm/langfuseToolOutputTracing.mjs +41 -1
- package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
- package/dist/esm/langfuseTraceShaping.mjs +7 -1
- package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -9
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs +2 -7
- package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/contextPressureMeter.mjs +52 -11
- package/dist/esm/llm/contextPressureMeter.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +1 -1
- package/dist/esm/llm/invoke.mjs +2 -2
- package/dist/esm/llm/openai/index.mjs +2 -1
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +5 -4
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/preempt.mjs +2 -1
- package/dist/esm/llm/preempt.mjs.map +1 -1
- package/dist/esm/llm/prepareProviderRequest.mjs +9 -7
- package/dist/esm/llm/prepareProviderRequest.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +1 -1
- package/dist/esm/main.mjs +10 -7
- package/dist/esm/messages/alternation.mjs +2 -6
- package/dist/esm/messages/alternation.mjs.map +1 -1
- package/dist/esm/messages/budget.mjs +206 -8
- package/dist/esm/messages/budget.mjs.map +1 -1
- package/dist/esm/messages/cache.mjs +3 -9
- package/dist/esm/messages/cache.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +23 -33
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/format.mjs +132 -43
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/messages/index.mjs +2 -0
- package/dist/esm/messages/prune.mjs +12 -7
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/messages/reasoningTypes.mjs +20 -0
- package/dist/esm/messages/reasoningTypes.mjs.map +1 -0
- package/dist/esm/messages/recency.mjs +16 -95
- package/dist/esm/messages/recency.mjs.map +1 -1
- package/dist/esm/messages/toolHistoryProjection.mjs +237 -0
- package/dist/esm/messages/toolHistoryProjection.mjs.map +1 -0
- package/dist/esm/messages/toolResultTypes.mjs +141 -4
- package/dist/esm/messages/toolResultTypes.mjs.map +1 -1
- package/dist/esm/run.mjs +5 -4
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +6 -4
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/session/JsonlSessionStore.mjs +3 -0
- package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
- package/dist/esm/session/index.mjs +1 -1
- package/dist/esm/session/sessionProjection.mjs +72 -0
- package/dist/esm/session/sessionProjection.mjs.map +1 -0
- package/dist/esm/stream.mjs +15 -14
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/summarization/index.mjs.map +1 -1
- package/dist/esm/summarization/node.mjs +19 -9
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/summarization/shared.mjs +9 -1
- package/dist/esm/summarization/shared.mjs.map +1 -1
- package/dist/esm/tools/ArtifactDelivery.mjs +26 -0
- package/dist/esm/tools/ArtifactDelivery.mjs.map +1 -0
- package/dist/esm/tools/BashExecutor.mjs +6 -1
- package/dist/esm/tools/BashExecutor.mjs.map +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +6 -1
- package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +5 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
- package/dist/esm/tools/local/CompileCheckTool.mjs +1 -1
- package/dist/esm/tools/local/LocalCodingTools.mjs +1 -1
- package/dist/esm/utils/events.mjs +13 -0
- package/dist/esm/utils/events.mjs.map +1 -1
- package/dist/esm/utils/tokens.mjs +105 -1
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/agents/AgentContext.d.ts +13 -1
- package/dist/types/graphs/Graph.d.ts +27 -0
- package/dist/types/hooks/types.d.ts +4 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/langfuse.d.ts +10 -0
- package/dist/types/langfuseToolOutputTracing.d.ts +2 -0
- package/dist/types/llm/contextPressureMeter.d.ts +2 -1
- package/dist/types/llm/prepareProviderRequest.d.ts +7 -1
- package/dist/types/messages/budget.d.ts +15 -10
- package/dist/types/messages/core.d.ts +8 -17
- package/dist/types/messages/format.d.ts +3 -2
- package/dist/types/messages/index.d.ts +1 -1
- package/dist/types/messages/prune.d.ts +1 -1
- package/dist/types/messages/reasoningTypes.d.ts +7 -0
- package/dist/types/messages/recency.d.ts +3 -0
- package/dist/types/messages/toolHistoryProjection.d.ts +65 -0
- package/dist/types/messages/toolResultTypes.d.ts +31 -1
- package/dist/types/session/sessionProjection.d.ts +10 -0
- package/dist/types/summarization/index.d.ts +2 -1
- package/dist/types/summarization/node.d.ts +1 -0
- package/dist/types/summarization/shared.d.ts +12 -0
- package/dist/types/tools/ArtifactDelivery.d.ts +4 -0
- package/dist/types/types/graph.d.ts +28 -0
- package/dist/types/types/run.d.ts +4 -0
- package/dist/types/types/summarize.d.ts +4 -1
- package/dist/types/types/tools.d.ts +11 -0
- package/dist/types/utils/tokens.d.ts +2 -1
- package/package.json +1 -1
- package/src/agents/AgentContext.ts +34 -3
- package/src/graphs/Graph.ts +465 -147
- package/src/graphs/MultiAgentGraph.ts +28 -6
- package/src/hooks/types.ts +4 -1
- package/src/index.ts +1 -0
- package/src/langfuse.ts +84 -11
- package/src/langfuseToolOutputTracing.ts +91 -0
- package/src/langfuseTraceShaping.ts +17 -4
- package/src/llm/anthropic/utils/message_inputs.ts +5 -10
- package/src/llm/bedrock/utils/message_inputs.ts +2 -8
- package/src/llm/contextPressureMeter.ts +80 -12
- package/src/llm/openai/utils/index.ts +5 -4
- package/src/llm/prepareProviderRequest.ts +21 -16
- package/src/messages/alternation.ts +2 -15
- package/src/messages/budget.ts +439 -23
- package/src/messages/cache.ts +8 -9
- package/src/messages/core.ts +65 -95
- package/src/messages/format.ts +262 -78
- package/src/messages/index.ts +1 -1
- package/src/messages/prune.ts +31 -12
- package/src/messages/reasoningTypes.ts +23 -0
- package/src/messages/recency.ts +35 -179
- package/src/messages/toolHistoryProjection.ts +460 -0
- package/src/messages/toolResultTypes.ts +331 -100
- package/src/run.ts +10 -2
- package/src/session/AgentSession.ts +33 -16
- package/src/session/JsonlSessionStore.ts +6 -0
- package/src/session/sessionProjection.ts +126 -0
- package/src/stream.ts +14 -19
- package/src/summarization/index.ts +2 -0
- package/src/summarization/node.ts +62 -13
- package/src/summarization/shared.ts +23 -0
- package/src/tools/ArtifactDelivery.ts +50 -0
- package/src/tools/BashExecutor.ts +18 -1
- package/src/tools/CodeExecutor.ts +18 -1
- package/src/tools/ProgrammaticToolCalling.ts +15 -1
- package/src/types/graph.ts +28 -0
- package/src/types/run.ts +4 -0
- package/src/types/summarize.ts +4 -1
- package/src/types/tools.ts +12 -0
- package/src/utils/events.ts +19 -0
- package/src/utils/tokens.ts +183 -0
|
@@ -12,13 +12,15 @@ import { shouldTraceToolNodeForLangfuse } from "../langfuseToolOutputTracing.mjs
|
|
|
12
12
|
import { getToolContentCharLength, serializeToolContentBounded } from "../utils/toolContent.mjs";
|
|
13
13
|
import { stampSyntheticProviderMessage } from "../messages/provenance.mjs";
|
|
14
14
|
import { addBedrockTailCacheControl, addTailCacheControl, cloneMessage, resolveBedrockPromptCacheTtl, resolvePromptCacheTtl } from "../messages/cache.mjs";
|
|
15
|
+
import { providerRequiresStrictAlternation } from "../llm/providerRegistry.mjs";
|
|
16
|
+
import "../llm/providers.mjs";
|
|
17
|
+
import { createToolHistoryPreparation } from "../messages/toolHistoryProjection.mjs";
|
|
15
18
|
import { convertMessagesToContent, projectAnthropicArtifactContent, projectArtifactPayload } from "../messages/core.mjs";
|
|
16
19
|
import { resolveMaxSeals } from "../llm/preempt.mjs";
|
|
17
|
-
import { createLangfuseHandler, createLangfuseTraceMetadata, disposeLangfuseHandler, isLangfuseCallbackHandler } from "../langfuse.mjs";
|
|
18
20
|
import { appendCallbacks, findCallback } from "../utils/callbacks.mjs";
|
|
21
|
+
import { createLangfuseHandler, createLangfuseTraceMetadata, disposeLangfuseHandler, isLangfuseCallbackHandler } from "../langfuse.mjs";
|
|
19
22
|
import { applyGraphRuntimeConfig } from "./applyGraphRuntimeConfig.mjs";
|
|
20
23
|
import { apportionTokenCounts } from "../utils/tokens.mjs";
|
|
21
|
-
import { providerRequiresStrictAlternation } from "../llm/providerRegistry.mjs";
|
|
22
24
|
import { isAnthropicLike, isGoogleLike, isOpenAILike } from "../utils/llm.mjs";
|
|
23
25
|
import { executeHooks } from "../hooks/executeHooks.mjs";
|
|
24
26
|
import "../hooks/index.mjs";
|
|
@@ -27,15 +29,15 @@ import { initializeLangfuseTracing } from "../instrumentation.mjs";
|
|
|
27
29
|
import { isThinkingEnabled } from "../llm/request.mjs";
|
|
28
30
|
import { getMessageId } from "../messages/ids.mjs";
|
|
29
31
|
import { createPruneMessages, projectToolMessagesForProvider, sanitizeOrphanToolBlocks } from "../messages/prune.mjs";
|
|
32
|
+
import { emitAgentLog, safeDispatchCustomEvent } from "../utils/events.mjs";
|
|
30
33
|
import { syncBudgetDerivedFields } from "../messages/budget.mjs";
|
|
31
34
|
import { formatContentStrings } from "../messages/content.mjs";
|
|
32
|
-
import { emitAgentLog, safeDispatchCustomEvent } from "../utils/events.mjs";
|
|
33
35
|
import { compactSyntheticProviderContextMessage, ensureThinkingBlockInMessages, foldToolBlocksForToollessAgent, isSyntheticProviderContextMessage } from "../messages/format.mjs";
|
|
34
36
|
import { makeIsDeferred } from "../messages/anthropicToolCache.mjs";
|
|
35
37
|
import { extractToolDiscoveries } from "../messages/tools.mjs";
|
|
36
38
|
import { coalesceAdjacentUserTurns } from "../messages/alternation.mjs";
|
|
37
39
|
import { appendPredecessorHandoffCue } from "../messages/handoffCue.mjs";
|
|
38
|
-
import { messagesStateReducer as messagesStateReducer$1 } from "../messages/reducer.mjs";
|
|
40
|
+
import { createRemoveAllMessage, messagesStateReducer as messagesStateReducer$1 } from "../messages/reducer.mjs";
|
|
39
41
|
import { resolveIntraTurnRetainTokens, splitAtRecencyBoundary } from "../messages/recency.mjs";
|
|
40
42
|
import { getMessageCreationContentMetadata, splitAssistantTextContentByPhase } from "../messages/assistantPhase.mjs";
|
|
41
43
|
import "../messages/index.mjs";
|
|
@@ -51,8 +53,7 @@ import { isGraphSubagentConfig, normalizeSubagentConfigEntries } from "../tools/
|
|
|
51
53
|
import { DEFAULT_SUBAGENT_DESCRIPTION, SubagentExecutor } from "../tools/subagent/SubagentExecutor.mjs";
|
|
52
54
|
import "../tools/subagent/index.mjs";
|
|
53
55
|
import { getBlindRecoveryBudget, planContextOverflowRecovery, translateRecoveryBudget } from "../llm/contextOverflowRecovery.mjs";
|
|
54
|
-
import "../llm/
|
|
55
|
-
import { prepareProviderRequest } from "../llm/prepareProviderRequest.mjs";
|
|
56
|
+
import { prepareProviderRequest, usesNativeOpenAIResponses } from "../llm/prepareProviderRequest.mjs";
|
|
56
57
|
import { getTruncationStopReason } from "../llm/truncation.mjs";
|
|
57
58
|
import { initializeModel } from "../llm/init.mjs";
|
|
58
59
|
import { attemptInvoke, getFallbackErrorContext, getFallbackOverflowCandidates, tryFallbackProviders } from "../llm/invoke.mjs";
|
|
@@ -65,6 +66,7 @@ import { ToolNode, toolsCondition } from "../tools/ToolNode.mjs";
|
|
|
65
66
|
import { createContextPressureMeter } from "../llm/contextPressureMeter.mjs";
|
|
66
67
|
import { prepareToolsForPromptCache } from "../llm/promptCacheTools.mjs";
|
|
67
68
|
import { buildSubagentToolParams } from "../tools/SubagentTool.mjs";
|
|
69
|
+
import { ManualSummarizationSkippedError } from "../summarization/shared.mjs";
|
|
68
70
|
import { shouldTriggerSummarization } from "../summarization/index.mjs";
|
|
69
71
|
import { createSummarizeNode } from "../summarization/node.mjs";
|
|
70
72
|
import { createSchemaOnlyTools } from "../tools/schema.mjs";
|
|
@@ -574,6 +576,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
574
576
|
preemptSealInFlight = false;
|
|
575
577
|
preemptIncomplete = false;
|
|
576
578
|
outputTruncatedIncomplete = false;
|
|
579
|
+
summarizeOnlyAgentId;
|
|
577
580
|
preemptHaltReason;
|
|
578
581
|
pendingPreemptReturn = /* @__PURE__ */ new Set();
|
|
579
582
|
preemptRestartPending = /* @__PURE__ */ new Set();
|
|
@@ -598,6 +601,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
598
601
|
if (agents.length === 0) throw new Error("At least one agent configuration is required");
|
|
599
602
|
for (const agentConfig of agents) {
|
|
600
603
|
const agentContext = AgentContext.fromConfig(agentConfig, tokenCounter, indexTokenCountMap, toolExecution);
|
|
604
|
+
if (agentConfig.summarizeOnly === true) this.summarizeOnlyAgentId ??= agentContext.agentId;
|
|
601
605
|
if (calibrationRatio != null && calibrationRatio > 0) agentContext.calibrationRatio = calibrationRatio;
|
|
602
606
|
let restoredFadingTier;
|
|
603
607
|
if (fadingTiers != null && Object.prototype.hasOwnProperty.call(fadingTiers, agentConfig.agentId)) restoredFadingTier = fadingTiers[agentConfig.agentId];
|
|
@@ -605,7 +609,14 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
605
609
|
if (isFadingTier(restoredFadingTier)) agentContext.fadingTier = { ...restoredFadingTier };
|
|
606
610
|
this.agentContexts.set(agentConfig.agentId, agentContext);
|
|
607
611
|
}
|
|
608
|
-
this.defaultAgentId = agents[0].agentId;
|
|
612
|
+
this.defaultAgentId = this.summarizeOnlyAgentId ?? agents[0].agentId;
|
|
613
|
+
}
|
|
614
|
+
propagateManualCompaction(result) {
|
|
615
|
+
if (this.summarizeOnlyAgentId == null || result.manualSummary == null || result.manualSummary.length === 0) return result;
|
|
616
|
+
return {
|
|
617
|
+
...result,
|
|
618
|
+
messages: [createRemoveAllMessage(), ...result.messages]
|
|
619
|
+
};
|
|
609
620
|
}
|
|
610
621
|
startFreshLangfuseExecution() {
|
|
611
622
|
this.langfuseTraceAnchor = {};
|
|
@@ -1279,6 +1290,32 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1279
1290
|
isDeferred: makeIsDeferred(agentContext.getEffectiveToolDefinitions())
|
|
1280
1291
|
});
|
|
1281
1292
|
}
|
|
1293
|
+
async summarizeOnlyStep({ agentContext, agentId, messageCount, contextUsage, config }) {
|
|
1294
|
+
if (agentContext.summarizeOnly !== true) return null;
|
|
1295
|
+
const meta = {
|
|
1296
|
+
runId: this.runId,
|
|
1297
|
+
agentId
|
|
1298
|
+
};
|
|
1299
|
+
if (agentContext.claimManualSummarization()) {
|
|
1300
|
+
if (agentContext.summarizationEnabled !== true) throw new ManualSummarizationSkippedError("disabled", "Compaction skipped: summarization is not enabled for this agent");
|
|
1301
|
+
emitAgentLog(config, "info", "graph", "Manual summarization requested", {
|
|
1302
|
+
totalMessages: messageCount,
|
|
1303
|
+
summaryVersion: agentContext.summaryVersion + 1
|
|
1304
|
+
}, meta);
|
|
1305
|
+
agentContext.markSummarizationTriggered(messageCount);
|
|
1306
|
+
return {
|
|
1307
|
+
summarizationRequest: {
|
|
1308
|
+
remainingContextTokens: contextUsage?.remainingContextTokens ?? 0,
|
|
1309
|
+
agentId: agentId || agentContext.agentId,
|
|
1310
|
+
reason: "manual"
|
|
1311
|
+
},
|
|
1312
|
+
manualSummary: ""
|
|
1313
|
+
};
|
|
1314
|
+
}
|
|
1315
|
+
if (contextUsage != null) await safeDispatchCustomEvent("on_context_usage", contextUsage, config);
|
|
1316
|
+
emitAgentLog(config, "debug", "graph", "Summarize-only run complete — ending without a model call", { summaryVersion: agentContext.summaryVersion }, meta);
|
|
1317
|
+
return { messages: [] };
|
|
1318
|
+
}
|
|
1282
1319
|
createCallModel(agentId = "default") {
|
|
1283
1320
|
return async (state, config) => {
|
|
1284
1321
|
const attemptBreaker = this.breakerAbort;
|
|
@@ -1292,13 +1329,6 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1292
1329
|
const { messages } = state;
|
|
1293
1330
|
const discoveredNames = extractToolDiscoveries(messages);
|
|
1294
1331
|
if (discoveredNames.length > 0) agentContext.markToolsAsDiscovered(discoveredNames);
|
|
1295
|
-
const toolsForBinding = this.getPreparedToolsForBinding(agentContext);
|
|
1296
|
-
let model = this.overrideModel ?? initializeModel({
|
|
1297
|
-
tools: toolsForBinding,
|
|
1298
|
-
provider: agentContext.provider,
|
|
1299
|
-
clientOptions: agentContext.clientOptions
|
|
1300
|
-
});
|
|
1301
|
-
if (agentContext.systemRunnable) model = agentContext.systemRunnable.pipe(model).withConfig({ runName: AGENT_MODEL_CALL_RUN_NAME });
|
|
1302
1332
|
if (agentContext.tokenCalculationPromise) await agentContext.tokenCalculationPromise;
|
|
1303
1333
|
if (!config.signal) config.signal = this.signal;
|
|
1304
1334
|
this.config = config;
|
|
@@ -1365,6 +1395,14 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1365
1395
|
calibrationRatio: agentContext.calibrationRatio
|
|
1366
1396
|
};
|
|
1367
1397
|
syncBudgetDerivedFields(contextUsage);
|
|
1398
|
+
const summarizeOnlyStep = await this.summarizeOnlyStep({
|
|
1399
|
+
agentContext,
|
|
1400
|
+
agentId,
|
|
1401
|
+
messageCount: messages.length,
|
|
1402
|
+
contextUsage,
|
|
1403
|
+
config
|
|
1404
|
+
});
|
|
1405
|
+
if (summarizeOnlyStep != null) return summarizeOnlyStep;
|
|
1368
1406
|
if (agentContext.summarizationEnabled === true && Array.isArray(messagesToRefine) && messagesToRefine.length > 0) {
|
|
1369
1407
|
const shouldSkip = agentContext.summarizationExhausted || agentContext.shouldSkipSummarization(messages.length);
|
|
1370
1408
|
if (!shouldSkip && shouldTriggerSummarization({
|
|
@@ -1406,9 +1444,27 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1406
1444
|
agentId
|
|
1407
1445
|
});
|
|
1408
1446
|
}
|
|
1447
|
+
} else {
|
|
1448
|
+
const summarizeOnlyStep = await this.summarizeOnlyStep({
|
|
1449
|
+
agentContext,
|
|
1450
|
+
agentId,
|
|
1451
|
+
messageCount: messages.length,
|
|
1452
|
+
contextUsage: null,
|
|
1453
|
+
config
|
|
1454
|
+
});
|
|
1455
|
+
if (summarizeOnlyStep != null) return summarizeOnlyStep;
|
|
1409
1456
|
}
|
|
1457
|
+
const toolsForBinding = this.getPreparedToolsForBinding(agentContext);
|
|
1458
|
+
let model = this.overrideModel ?? initializeModel({
|
|
1459
|
+
tools: toolsForBinding,
|
|
1460
|
+
provider: agentContext.provider,
|
|
1461
|
+
clientOptions: agentContext.clientOptions
|
|
1462
|
+
});
|
|
1463
|
+
if (agentContext.systemRunnable) model = agentContext.systemRunnable.pipe(model).withConfig({ runName: AGENT_MODEL_CALL_RUN_NAME });
|
|
1410
1464
|
let finalMessages = messagesToUse;
|
|
1465
|
+
const fallbackBaseMessages = messagesToUse;
|
|
1411
1466
|
const contextPressure = createContextPressureMeter({
|
|
1467
|
+
provider: agentContext.provider,
|
|
1412
1468
|
tokenCounter: agentContext.tokenCounter,
|
|
1413
1469
|
tokenCountCache: agentContext.contextPressureTokenCounts,
|
|
1414
1470
|
sourceMessages: messages,
|
|
@@ -1419,13 +1475,14 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1419
1475
|
calibrationRatio: agentContext.calibrationRatio
|
|
1420
1476
|
});
|
|
1421
1477
|
const trackProviderMessageOrigins = contextPressure.trackProjection;
|
|
1478
|
+
const toolHistory = createToolHistoryPreparation();
|
|
1422
1479
|
if (agentContext.useLegacyContent) {
|
|
1423
1480
|
const before = finalMessages;
|
|
1424
1481
|
finalMessages = trackProviderMessageOrigins(before, formatContentStrings(before));
|
|
1425
1482
|
}
|
|
1426
1483
|
const maxProviderToolResultChars = agentContext.maxToolResultChars ?? calculateMaxToolResultChars(agentContext.maxContextTokens);
|
|
1427
1484
|
const beforeToolInputProjection = finalMessages;
|
|
1428
|
-
finalMessages = trackProviderMessageOrigins(beforeToolInputProjection, projectToolMessagesForProvider(beforeToolInputProjection, calculateMaxToolCallInputChars(agentContext.maxContextTokens)));
|
|
1485
|
+
finalMessages = trackProviderMessageOrigins(beforeToolInputProjection, projectToolMessagesForProvider(beforeToolInputProjection, calculateMaxToolCallInputChars(agentContext.maxContextTokens), agentContext.provider));
|
|
1429
1486
|
const lastMessageX = finalMessages.length >= 2 ? finalMessages[finalMessages.length - 2] : null;
|
|
1430
1487
|
const lastMessageY = finalMessages.length >= 1 ? finalMessages[finalMessages.length - 1] : null;
|
|
1431
1488
|
const anthropicLike = isAnthropicLike(agentContext.provider, agentContext.clientOptions);
|
|
@@ -1455,21 +1512,26 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1455
1512
|
});
|
|
1456
1513
|
return error;
|
|
1457
1514
|
};
|
|
1458
|
-
const applyProviderMessageTransforms = (candidate) => {
|
|
1515
|
+
const applyProviderMessageTransforms = (candidate, serving) => {
|
|
1516
|
+
const provider = serving?.provider ?? agentContext.provider;
|
|
1517
|
+
const clientOptions = serving == null ? agentContext.clientOptions : serving.clientOptions;
|
|
1518
|
+
const callConfig = serving == null ? config : serving.config;
|
|
1519
|
+
const history = serving?.history ?? toolHistory;
|
|
1520
|
+
const servingModel = serving?.model ?? this.overrideModel ?? model;
|
|
1459
1521
|
let transformed = candidate;
|
|
1460
|
-
if (isThinkingEnabled(
|
|
1522
|
+
if (isThinkingEnabled(provider, clientOptions)) {
|
|
1461
1523
|
const before = transformed;
|
|
1462
|
-
transformed = trackProviderMessageOrigins(before, ensureThinkingBlockInMessages(before,
|
|
1524
|
+
transformed = trackProviderMessageOrigins(before, ensureThinkingBlockInMessages(before, provider, callConfig, this.startIndex, history));
|
|
1463
1525
|
}
|
|
1464
1526
|
if (toolsForBinding == null || toolsForBinding.length === 0) {
|
|
1465
1527
|
const before = transformed;
|
|
1466
|
-
transformed = trackProviderMessageOrigins(before, foldToolBlocksForToollessAgent(before,
|
|
1528
|
+
transformed = trackProviderMessageOrigins(before, foldToolBlocksForToollessAgent(before, callConfig, usesNativeOpenAIResponses(servingModel, provider, callConfig), history));
|
|
1467
1529
|
if (agentContext.useLegacyContent) {
|
|
1468
1530
|
const beforeLegacyFormat = transformed;
|
|
1469
1531
|
transformed = trackProviderMessageOrigins(beforeLegacyFormat, formatContentStrings(beforeLegacyFormat));
|
|
1470
1532
|
}
|
|
1471
1533
|
}
|
|
1472
|
-
if (isAnthropicLike(
|
|
1534
|
+
if (isAnthropicLike(provider, clientOptions)) {
|
|
1473
1535
|
const before = transformed;
|
|
1474
1536
|
transformed = trackProviderMessageOrigins(before, appendPredecessorHandoffCue(before, (message) => this.isRunProducedMessage(message)));
|
|
1475
1537
|
}
|
|
@@ -1478,7 +1540,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1478
1540
|
const toolOutputRegistry = this.getOrCreateToolOutputRegistry();
|
|
1479
1541
|
const providerRunId = config.configurable?.run_id;
|
|
1480
1542
|
const projectProviderReferences = (candidate) => trackProviderMessageOrigins(candidate, annotateMessagesForLLM(candidate, toolOutputRegistry, providerRunId));
|
|
1481
|
-
const compactSyntheticProviderContext = (candidate) => {
|
|
1543
|
+
const compactSyntheticProviderContext = (candidate, measure = measureProviderPayload) => {
|
|
1482
1544
|
const synthetic = [];
|
|
1483
1545
|
for (let i = 0; i < candidate.length; i++) {
|
|
1484
1546
|
const message = candidate[i];
|
|
@@ -1497,24 +1559,37 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1497
1559
|
return compacted;
|
|
1498
1560
|
};
|
|
1499
1561
|
let best = buildCandidate(0);
|
|
1500
|
-
if (!
|
|
1562
|
+
if (!measure(best).fits) return candidate;
|
|
1501
1563
|
let low = 0;
|
|
1502
1564
|
let high = 1;
|
|
1503
1565
|
for (let i = 0; i < 12; i++) {
|
|
1504
1566
|
const scale = (low + high) / 2;
|
|
1505
1567
|
const attempt = buildCandidate(scale);
|
|
1506
|
-
if (
|
|
1568
|
+
if (measure(attempt).fits) {
|
|
1507
1569
|
best = attempt;
|
|
1508
1570
|
low = scale;
|
|
1509
1571
|
} else high = scale;
|
|
1510
1572
|
}
|
|
1511
1573
|
return best;
|
|
1512
1574
|
};
|
|
1575
|
+
const projectServingArtifacts = (candidate, provider, clientOptions, maxChars) => {
|
|
1576
|
+
if (!(candidate[candidate.length - 1] instanceof ToolMessage)) return candidate;
|
|
1577
|
+
if (isAnthropicLike(provider, clientOptions)) return trackProviderMessageOrigins(candidate, projectAnthropicArtifactContent(candidate, maxChars));
|
|
1578
|
+
if (isOpenAILike(provider) && provider !== "deepseek" || isGoogleLike(provider)) return trackProviderMessageOrigins(candidate, projectArtifactPayload(candidate, maxChars));
|
|
1579
|
+
return candidate;
|
|
1580
|
+
};
|
|
1581
|
+
const applyServingTailCache = (candidate, provider, clientOptions, systemOwnsTail = false) => {
|
|
1582
|
+
if (provider === "bedrock") {
|
|
1583
|
+
const options = clientOptions;
|
|
1584
|
+
return options?.promptCache === true ? trackProviderMessageOrigins(candidate, addBedrockTailCacheControl(candidate, resolveBedrockPromptCacheTtl(options.promptCacheTtl, options.model))) : candidate;
|
|
1585
|
+
}
|
|
1586
|
+
if (systemOwnsTail || provider !== "anthropic" && provider !== "openrouter") return candidate;
|
|
1587
|
+
const options = clientOptions;
|
|
1588
|
+
return options?.promptCache === true ? trackProviderMessageOrigins(candidate, addTailCacheControl(candidate, resolvePromptCacheTtl(options.promptCacheTtl))) : candidate;
|
|
1589
|
+
};
|
|
1513
1590
|
let artifactBaseMessages;
|
|
1514
1591
|
if (lastMessageY instanceof ToolMessage) {
|
|
1515
|
-
|
|
1516
|
-
if (anthropicLike) artifactCandidate = trackProviderMessageOrigins(finalMessages, projectAnthropicArtifactContent(finalMessages, maxProviderToolResultChars));
|
|
1517
|
-
else if (isOpenAILike(agentContext.provider) && agentContext.provider !== "deepseek" || isGoogleLike(agentContext.provider)) artifactCandidate = trackProviderMessageOrigins(finalMessages, projectArtifactPayload(finalMessages, maxProviderToolResultChars));
|
|
1592
|
+
const artifactCandidate = projectServingArtifacts(finalMessages, agentContext.provider, agentContext.clientOptions, maxProviderToolResultChars);
|
|
1518
1593
|
if (artifactCandidate !== finalMessages) {
|
|
1519
1594
|
const projection = measureProviderPayload(artifactCandidate);
|
|
1520
1595
|
if (projection.fits) {
|
|
@@ -1581,16 +1656,8 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1581
1656
|
agentId
|
|
1582
1657
|
});
|
|
1583
1658
|
}
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
finalMessages = trackProviderMessageOrigins(beforeCacheControl, addTailCacheControl(beforeCacheControl, resolvePromptCacheTtl(anthropicPromptCacheEnabled ? agentContext.clientOptions?.promptCacheTtl : agentContext.clientOptions?.promptCacheTtl)));
|
|
1587
|
-
} else if (bedrockPromptCacheEnabled) {
|
|
1588
|
-
const bedrockOptions = agentContext.clientOptions;
|
|
1589
|
-
const beforeCacheControl = finalMessages;
|
|
1590
|
-
finalMessages = trackProviderMessageOrigins(beforeCacheControl, addBedrockTailCacheControl(beforeCacheControl, resolveBedrockPromptCacheTtl(bedrockOptions?.promptCacheTtl, bedrockOptions?.model)));
|
|
1591
|
-
}
|
|
1592
|
-
const fallbackBaseMessages = finalMessages;
|
|
1593
|
-
const beforeFinalProviderProjection = fallbackBaseMessages;
|
|
1659
|
+
finalMessages = applyServingTailCache(finalMessages, agentContext.provider, agentContext.clientOptions, agentContext.systemRunnable != null);
|
|
1660
|
+
const beforeFinalProviderProjection = finalMessages;
|
|
1594
1661
|
const preparedRequest = prepareProviderRequest({
|
|
1595
1662
|
model: this.overrideModel ?? model,
|
|
1596
1663
|
messages: beforeFinalProviderProjection,
|
|
@@ -1598,6 +1665,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1598
1665
|
context: this,
|
|
1599
1666
|
config,
|
|
1600
1667
|
maxToolResultChars: maxProviderToolResultChars,
|
|
1668
|
+
toolHistory,
|
|
1601
1669
|
measure: (preparedMessages) => measureProviderPayload(trackProviderMessageOrigins(beforeFinalProviderProjection, preparedMessages))
|
|
1602
1670
|
});
|
|
1603
1671
|
finalMessages = preparedRequest.messages;
|
|
@@ -1643,7 +1711,9 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1643
1711
|
contextUsage.breakdown.messageCount = finalMessages.length;
|
|
1644
1712
|
contextUsage.remainingContextTokens = Math.max(0, finalProjection.availableMessageTokens - finalProjection.projectedMessageTokens);
|
|
1645
1713
|
}
|
|
1646
|
-
|
|
1714
|
+
contextUsage.breakdown.toolMessageTokens = finalProjection.toolMessageTokens;
|
|
1715
|
+
contextUsage.breakdown.toolMessageTokenCounts = finalProjection.toolMessageTokenCounts;
|
|
1716
|
+
syncBudgetDerivedFields(contextUsage, void 0, void 0, config, agentContext.provider, finalProjection.toolMessageUsageError);
|
|
1647
1717
|
await safeDispatchCustomEvent("on_context_usage", contextUsage, config);
|
|
1648
1718
|
}
|
|
1649
1719
|
const invokeStart = Date.now();
|
|
@@ -1731,6 +1801,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1731
1801
|
const estimatedPromptTokens = getEstimatedPromptTokens(contextUsage);
|
|
1732
1802
|
const recencyTokenCounter = agentContext.contextPressureTokenCounts?.count ?? agentContext.tokenCounter;
|
|
1733
1803
|
const canSummarizeOverflow = agentContext.summarizationEnabled === true && splitAtRecencyBoundary(messages, {
|
|
1804
|
+
provider: agentContext.provider,
|
|
1734
1805
|
turns: agentContext.summarizationConfig?.retainRecent?.turns ?? 2,
|
|
1735
1806
|
tokens: agentContext.summarizationConfig?.retainRecent?.tokens,
|
|
1736
1807
|
tokenCounter: recencyTokenCounter,
|
|
@@ -1799,32 +1870,68 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
1799
1870
|
estimatedPromptTokens: getEstimatedPromptTokens(contextUsage),
|
|
1800
1871
|
maxContextTokens: agentContext.maxContextTokens
|
|
1801
1872
|
},
|
|
1802
|
-
prepareProviderRequest: ({ model: fallbackModel, messages: fallbackMessages, provider: fallbackProvider, maxContextTokens: fallbackMaxContextTokens, config: fallbackConfig }) => {
|
|
1873
|
+
prepareProviderRequest: ({ model: fallbackModel, messages: fallbackMessages, provider: fallbackProvider, clientOptions: fallbackClientOptions, maxContextTokens: fallbackMaxContextTokens, config: fallbackConfig }) => {
|
|
1874
|
+
const fallbackToolHistory = createToolHistoryPreparation();
|
|
1803
1875
|
const fallbackToolResultChars = agentContext.maxToolResultChars ?? calculateMaxToolResultChars(fallbackMaxContextTokens ?? agentContext.maxContextTokens);
|
|
1804
1876
|
const primaryContextBudget = contextUsage?.contextBudget;
|
|
1805
1877
|
const fallbackContextBudget = fallbackMaxContextTokens == null ? primaryContextBudget : Math.min(primaryContextBudget ?? fallbackMaxContextTokens, fallbackMaxContextTokens);
|
|
1806
|
-
const
|
|
1807
|
-
model: fallbackModel,
|
|
1808
|
-
messages: fallbackMessages,
|
|
1809
|
-
provider: fallbackProvider,
|
|
1810
|
-
context: this,
|
|
1811
|
-
config: fallbackConfig,
|
|
1812
|
-
maxToolResultChars: fallbackToolResultChars,
|
|
1813
|
-
measure: (preparedMessages) => measureProviderPayload(trackProviderMessageOrigins(fallbackMessages, preparedMessages), {
|
|
1814
|
-
contextBudget: fallbackContextBudget,
|
|
1815
|
-
forceRawRecount: true
|
|
1816
|
-
})
|
|
1817
|
-
});
|
|
1818
|
-
const projection = preparedFallbackRequest.measurement ?? measureProviderPayload(preparedFallbackRequest.messages, {
|
|
1878
|
+
const measureFallback = (candidate) => measureProviderPayload(candidate, {
|
|
1819
1879
|
contextBudget: fallbackContextBudget,
|
|
1820
1880
|
forceRawRecount: true
|
|
1821
1881
|
});
|
|
1882
|
+
const source = agentContext.useLegacyContent ? trackProviderMessageOrigins(fallbackMessages, formatContentStrings(fallbackMessages)) : fallbackMessages;
|
|
1883
|
+
const boundedSource = trackProviderMessageOrigins(source, projectToolMessagesForProvider(source, calculateMaxToolCallInputChars(fallbackMaxContextTokens), fallbackProvider));
|
|
1884
|
+
const artifactSource = projectServingArtifacts(boundedSource, fallbackProvider, fallbackClientOptions, fallbackToolResultChars);
|
|
1885
|
+
const transformFallback = (candidate) => applyProviderMessageTransforms(candidate, {
|
|
1886
|
+
provider: fallbackProvider,
|
|
1887
|
+
clientOptions: fallbackClientOptions,
|
|
1888
|
+
model: fallbackModel,
|
|
1889
|
+
config: fallbackConfig,
|
|
1890
|
+
history: fallbackToolHistory
|
|
1891
|
+
});
|
|
1892
|
+
const prepareFallback = (candidate) => {
|
|
1893
|
+
const cached = applyServingTailCache(isAnthropicLike(fallbackProvider, fallbackClientOptions) ? trackProviderMessageOrigins(candidate, sanitizeOrphanToolBlocks(candidate, (original, clone) => contextPressure.trackClone(original, clone))) : candidate, fallbackProvider, fallbackClientOptions);
|
|
1894
|
+
let projection;
|
|
1895
|
+
const request = prepareProviderRequest({
|
|
1896
|
+
model: fallbackModel,
|
|
1897
|
+
messages: cached,
|
|
1898
|
+
provider: fallbackProvider,
|
|
1899
|
+
context: this,
|
|
1900
|
+
config: fallbackConfig,
|
|
1901
|
+
maxToolResultChars: fallbackToolResultChars,
|
|
1902
|
+
toolHistory: fallbackToolHistory,
|
|
1903
|
+
measure: (prepared) => {
|
|
1904
|
+
projection = measureFallback(trackProviderMessageOrigins(cached, prepared));
|
|
1905
|
+
return projection;
|
|
1906
|
+
}
|
|
1907
|
+
});
|
|
1908
|
+
if (projection == null) throw new Error("Fallback preparation did not measure its payload");
|
|
1909
|
+
return {
|
|
1910
|
+
request,
|
|
1911
|
+
projection
|
|
1912
|
+
};
|
|
1913
|
+
};
|
|
1914
|
+
let servingFallbackMessages = transformFallback(artifactSource);
|
|
1915
|
+
let preparedFallbackRequest = prepareFallback(servingFallbackMessages);
|
|
1916
|
+
let projection = preparedFallbackRequest.projection;
|
|
1917
|
+
if (!projection.fits && artifactSource !== boundedSource) {
|
|
1918
|
+
servingFallbackMessages = transformFallback(boundedSource);
|
|
1919
|
+
preparedFallbackRequest = prepareFallback(servingFallbackMessages);
|
|
1920
|
+
projection = preparedFallbackRequest.projection;
|
|
1921
|
+
}
|
|
1922
|
+
if (!projection.fits) {
|
|
1923
|
+
const compacted = compactSyntheticProviderContext(servingFallbackMessages, (candidate) => prepareFallback(candidate).projection);
|
|
1924
|
+
if (compacted !== servingFallbackMessages) {
|
|
1925
|
+
preparedFallbackRequest = prepareFallback(compacted);
|
|
1926
|
+
projection = preparedFallbackRequest.projection;
|
|
1927
|
+
}
|
|
1928
|
+
}
|
|
1822
1929
|
if (!projection.fits) throw createProviderPayloadOverflowError({
|
|
1823
1930
|
projection,
|
|
1824
1931
|
provider: fallbackProvider,
|
|
1825
1932
|
info: "Fallback provider message formatting exceeded the context budget before invocation."
|
|
1826
1933
|
});
|
|
1827
|
-
return preparedFallbackRequest;
|
|
1934
|
+
return preparedFallbackRequest.request;
|
|
1828
1935
|
}
|
|
1829
1936
|
}));
|
|
1830
1937
|
} catch (fallbackError) {
|
|
@@ -2161,8 +2268,11 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2161
2268
|
const invokeWithRunStepState = async (state, config, invoke) => {
|
|
2162
2269
|
this.config = config;
|
|
2163
2270
|
this.restoreRunStepResumeState(state.runStepState);
|
|
2271
|
+
const result = await invoke();
|
|
2272
|
+
const clearsManualSummary = this.summarizeOnlyAgentId == null && typeof state.manualSummary === "string" && state.manualSummary.length > 0;
|
|
2164
2273
|
return {
|
|
2165
|
-
...
|
|
2274
|
+
...result,
|
|
2275
|
+
...clearsManualSummary ? { manualSummary: "" } : {},
|
|
2166
2276
|
runStepState: this.createRunStepResumeState()
|
|
2167
2277
|
};
|
|
2168
2278
|
};
|
|
@@ -2170,6 +2280,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2170
2280
|
this.config = config;
|
|
2171
2281
|
if (this.pendingPreemptReturn.delete(agentId)) return agentNode;
|
|
2172
2282
|
if (state.summarizationRequest != null) return summarizeNode;
|
|
2283
|
+
if (this.summarizeOnlyAgentId != null) return END;
|
|
2173
2284
|
const decision = toolsCondition(state, toolNode, this.invokedToolIds);
|
|
2174
2285
|
if (decision === END) {
|
|
2175
2286
|
const { messages } = state;
|
|
@@ -2190,6 +2301,10 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2190
2301
|
reducer: (_, b) => b,
|
|
2191
2302
|
default: () => void 0
|
|
2192
2303
|
}),
|
|
2304
|
+
manualSummary: Annotation({
|
|
2305
|
+
reducer: (_, b) => b,
|
|
2306
|
+
default: () => void 0
|
|
2307
|
+
}),
|
|
2193
2308
|
runStepState: this.createRunStepStateAnnotation()
|
|
2194
2309
|
});
|
|
2195
2310
|
const readChargeCredits = () => this.streamLimitChargeCredits;
|
|
@@ -2280,7 +2395,7 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2280
2395
|
createWorkflow() {
|
|
2281
2396
|
this.hasCompiledCheckpointer = this.compileOptions?.checkpointer != null;
|
|
2282
2397
|
const agentNode = this.createAgentNode(this.defaultAgentId);
|
|
2283
|
-
|
|
2398
|
+
const StateAnnotation = Annotation.Root({
|
|
2284
2399
|
messages: Annotation({
|
|
2285
2400
|
reducer: (a, b) => {
|
|
2286
2401
|
if (!this.messages.length && !this.hasRestoredCheckpointMessages) this.startIndex = a.length + b.length;
|
|
@@ -2290,8 +2405,14 @@ var StandardGraph = class StandardGraph extends Graph {
|
|
|
2290
2405
|
},
|
|
2291
2406
|
default: () => []
|
|
2292
2407
|
}),
|
|
2408
|
+
manualSummary: Annotation({
|
|
2409
|
+
reducer: (_, b) => b,
|
|
2410
|
+
default: () => void 0
|
|
2411
|
+
}),
|
|
2293
2412
|
runStepState: this.createRunStepStateAnnotation()
|
|
2294
|
-
})
|
|
2413
|
+
});
|
|
2414
|
+
const compactingAgentNode = async (state, config) => this.propagateManualCompaction(await agentNode.invoke(state, config));
|
|
2415
|
+
return new StateGraph(StateAnnotation).addNode(this.defaultAgentId, this.summarizeOnlyAgentId != null ? compactingAgentNode : agentNode, { ends: [END] }).addEdge(START, this.defaultAgentId).compile({
|
|
2295
2416
|
...this.compileOptions,
|
|
2296
2417
|
name: STANDARD_GRAPH_RUN_NAME
|
|
2297
2418
|
});
|