fix: update compaction safeguard to respect context window tokens

This commit is contained in:
Evan 2026-02-01 11:09:43 +00:00 committed by Ayaan Zaidi
parent 0e0e395b9e
commit 5d3c898a94
3 changed files with 15 additions and 2 deletions

View file

@ -81,8 +81,16 @@ export function buildEmbeddedExtensionPaths(params: {
const paths: string[] = []; const paths: string[] = [];
if (resolveCompactionMode(params.cfg) === "safeguard") { if (resolveCompactionMode(params.cfg) === "safeguard") {
const compactionCfg = params.cfg?.agents?.defaults?.compaction; 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, { setCompactionSafeguardRuntime(params.sessionManager, {
maxHistoryShare: compactionCfg?.maxHistoryShare, maxHistoryShare: compactionCfg?.maxHistoryShare,
contextWindowTokens: contextWindowInfo.tokens,
}); });
paths.push(resolvePiExtensionPath("compaction-safeguard")); paths.push(resolvePiExtensionPath("compaction-safeguard"));
} }

View file

@ -1,5 +1,6 @@
export type CompactionSafeguardRuntimeValue = { export type CompactionSafeguardRuntimeValue = {
maxHistoryShare?: number; maxHistoryShare?: number;
contextWindowTokens?: number;
}; };
// Session-scoped runtime registry keyed by object identity. // Session-scoped runtime registry keyed by object identity.

View file

@ -195,11 +195,15 @@ export default function compactionSafeguardExtension(api: ExtensionAPI): void {
} }
try { 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 ?? []; const turnPrefixMessages = preparation.turnPrefixMessages ?? [];
let messagesToSummarize = preparation.messagesToSummarize; let messagesToSummarize = preparation.messagesToSummarize;
const runtime = getCompactionSafeguardRuntime(ctx.sessionManager);
const maxHistoryShare = runtime?.maxHistoryShare ?? 0.5; const maxHistoryShare = runtime?.maxHistoryShare ?? 0.5;
const tokensBefore = const tokensBefore =