diff --git a/src/agents/pi-embedded-runner/extensions.ts b/src/agents/pi-embedded-runner/extensions.ts index 0364d880c..c6e7a637f 100644 --- a/src/agents/pi-embedded-runner/extensions.ts +++ b/src/agents/pi-embedded-runner/extensions.ts @@ -81,8 +81,16 @@ export function buildEmbeddedExtensionPaths(params: { const paths: string[] = []; if (resolveCompactionMode(params.cfg) === "safeguard") { const compactionCfg = params.cfg?.agents?.defaults?.compaction; + const contextWindowInfo = resolveContextWindowInfo({ + cfg: params.cfg, + provider: params.provider, + modelId: params.modelId, + modelContextWindow: params.model?.contextWindow, + defaultTokens: DEFAULT_CONTEXT_TOKENS, + }); setCompactionSafeguardRuntime(params.sessionManager, { maxHistoryShare: compactionCfg?.maxHistoryShare, + contextWindowTokens: contextWindowInfo.tokens, }); paths.push(resolvePiExtensionPath("compaction-safeguard")); } diff --git a/src/agents/pi-extensions/compaction-safeguard-runtime.ts b/src/agents/pi-extensions/compaction-safeguard-runtime.ts index 450ab6f8f..bda1b1de6 100644 --- a/src/agents/pi-extensions/compaction-safeguard-runtime.ts +++ b/src/agents/pi-extensions/compaction-safeguard-runtime.ts @@ -1,5 +1,6 @@ export type CompactionSafeguardRuntimeValue = { maxHistoryShare?: number; + contextWindowTokens?: number; }; // Session-scoped runtime registry keyed by object identity. diff --git a/src/agents/pi-extensions/compaction-safeguard.ts b/src/agents/pi-extensions/compaction-safeguard.ts index c824c4735..2c2e39194 100644 --- a/src/agents/pi-extensions/compaction-safeguard.ts +++ b/src/agents/pi-extensions/compaction-safeguard.ts @@ -195,11 +195,15 @@ export default function compactionSafeguardExtension(api: ExtensionAPI): void { } try { - const contextWindowTokens = resolveContextWindowTokens(model); + const runtime = getCompactionSafeguardRuntime(ctx.sessionManager); + const modelContextWindow = resolveContextWindowTokens(model); + const contextWindowTokens = Math.min( + runtime?.contextWindowTokens ?? modelContextWindow, + modelContextWindow, + ); const turnPrefixMessages = preparation.turnPrefixMessages ?? []; let messagesToSummarize = preparation.messagesToSummarize; - const runtime = getCompactionSafeguardRuntime(ctx.sessionManager); const maxHistoryShare = runtime?.maxHistoryShare ?? 0.5; const tokensBefore =