From f5f39f08f1c3914c43e009fd864f1bd72ef2aa07 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 29 Dec 2025 21:34:50 +0100 Subject: [PATCH] Use token-based maxTokens instead of fraction-based reserveFraction - BranchSummarySettings.maxTokens (default 100000) instead of reserveFraction - More intuitive and consistent with CompactionSettings.keepRecentTokens --- packages/coding-agent/src/core/agent-session.ts | 2 +- .../src/core/compaction/branch-summarization.ts | 12 ++++-------- packages/coding-agent/src/core/settings-manager.ts | 6 +++--- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/coding-agent/src/core/agent-session.ts b/packages/coding-agent/src/core/agent-session.ts index 24f182c6..eaca341c 100644 --- a/packages/coding-agent/src/core/agent-session.ts +++ b/packages/coding-agent/src/core/agent-session.ts @@ -1656,7 +1656,7 @@ export class AgentSession { apiKey, signal: this._branchSummaryAbortController.signal, customInstructions: options.customInstructions, - reserveFraction: branchSummarySettings.reserveFraction, + maxTokens: branchSummarySettings.maxTokens, }); this._branchSummaryAbortController = undefined; if (result.aborted) { diff --git a/packages/coding-agent/src/core/compaction/branch-summarization.ts b/packages/coding-agent/src/core/compaction/branch-summarization.ts index f621518e..c303ca08 100644 --- a/packages/coding-agent/src/core/compaction/branch-summarization.ts +++ b/packages/coding-agent/src/core/compaction/branch-summarization.ts @@ -53,8 +53,8 @@ export interface GenerateBranchSummaryOptions { signal: AbortSignal; /** Optional custom instructions for summarization */ customInstructions?: string; - /** Reserve this fraction of context window for summary (default 0.2) */ - reserveFraction?: number; + /** Maximum tokens to include in summary context (default 100000) */ + maxTokens?: number; } // ============================================================================ @@ -321,13 +321,9 @@ export async function generateBranchSummary( entries: SessionEntry[], options: GenerateBranchSummaryOptions, ): Promise { - const { model, apiKey, signal, customInstructions, reserveFraction = 0.2 } = options; + const { model, apiKey, signal, customInstructions, maxTokens = 100000 } = options; - // Calculate token budget (leave room for summary generation) - const contextWindow = model.contextWindow || 128000; - const tokenBudget = Math.floor(contextWindow * (1 - reserveFraction)); - - const { messages, fileOps } = prepareBranchEntries(entries, tokenBudget); + const { messages, fileOps } = prepareBranchEntries(entries, maxTokens); if (messages.length === 0) { return { summary: "No content to summarize" }; diff --git a/packages/coding-agent/src/core/settings-manager.ts b/packages/coding-agent/src/core/settings-manager.ts index b957fd51..737a812e 100644 --- a/packages/coding-agent/src/core/settings-manager.ts +++ b/packages/coding-agent/src/core/settings-manager.ts @@ -9,7 +9,7 @@ export interface CompactionSettings { } export interface BranchSummarySettings { - reserveFraction?: number; // default: 0.2 (fraction of context window reserved for summary) + maxTokens?: number; // default: 100000 (max tokens to include in branch summary context) } export interface RetrySettings { @@ -260,9 +260,9 @@ export class SettingsManager { }; } - getBranchSummarySettings(): { reserveFraction: number } { + getBranchSummarySettings(): { maxTokens: number } { return { - reserveFraction: this.settings.branchSummary?.reserveFraction ?? 0.2, + maxTokens: this.settings.branchSummary?.maxTokens ?? 100000, }; }