




















@@ -573,6 +573,22 @@ function capCompactionSummaryPreservingSuffix(
573573return `${cappedBody}${suffix}`;
574574}
575575576+function resolveSummaryReserveTokens(
577+requestedReserveTokens: number,
578+model: NonNullable<Parameters<typeof summarizeInStages>[0]["model"]>,
579+): number {
580+const requested = Math.max(1, Math.floor(requestedReserveTokens));
581+const modelMaxTokens = model.maxTokens;
582+if (
583+typeof modelMaxTokens !== "number" ||
584+!Number.isFinite(modelMaxTokens) ||
585+modelMaxTokens <= 0
586+) {
587+return requested;
588+}
589+return Math.max(1, Math.min(requested, Math.floor(modelMaxTokens)));
590+}
591+576592function extractMessageText(message: AgentMessage): string {
577593const content = (message as { content?: unknown }).content;
578594if (typeof content === "string") {
@@ -1089,7 +1105,10 @@ export default function compactionSafeguardExtension(api: ExtensionAPI): void {
10891105 apiKey,
10901106 headers,
10911107 signal,
1092-reserveTokens: Math.max(1, Math.floor(preparation.settings.reserveTokens)),
1108+reserveTokens: resolveSummaryReserveTokens(
1109+preparation.settings.reserveTokens,
1110+model,
1111+),
10931112maxChunkTokens: droppedMaxChunkTokens,
10941113contextWindow: contextWindowTokens,
10951114customInstructions: structuredInstructions,
@@ -1134,7 +1153,7 @@ export default function compactionSafeguardExtension(api: ExtensionAPI): void {
113411531,
11351154Math.floor(contextWindowTokens * adaptiveRatio) - SUMMARIZATION_OVERHEAD_TOKENS,
11361155);
1137-const reserveTokens = Math.max(1, Math.floor(preparation.settings.reserveTokens));
1156+const reserveTokens = resolveSummaryReserveTokens(preparation.settings.reserveTokens, model);
1138115711391158// Feed dropped-messages summary as previousSummary so the main summarization
11401159// incorporates context from pruned messages instead of losing it entirely.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。