@@ -16,6 +16,16 @@ const TRUNCATION_ROUTE_BUFFER_TOKENS = 512;
1616
1717export type { PreemptiveCompactionRoute } from "./preemptive-compaction.types.js" ;
1818
19+ export type PreemptiveCompactionDecision = {
20+ route : PreemptiveCompactionRoute ;
21+ shouldCompact : boolean ;
22+ estimatedPromptTokens : number ;
23+ promptBudgetBeforeReserve : number ;
24+ overflowTokens : number ;
25+ toolResultReducibleChars : number ;
26+ effectiveReserveTokens : number ;
27+ } ;
28+
1929export function estimatePrePromptTokens ( params : {
2030 messages : AgentMessage [ ] ;
2131 systemPrompt ?: string ;
@@ -46,15 +56,7 @@ export function shouldPreemptivelyCompactBeforePrompt(params: {
4656 contextTokenBudget : number ;
4757 reserveTokens : number ;
4858 toolResultMaxChars ?: number ;
49- } ) : {
50- route : PreemptiveCompactionRoute ;
51- shouldCompact : boolean ;
52- estimatedPromptTokens : number ;
53- promptBudgetBeforeReserve : number ;
54- overflowTokens : number ;
55- toolResultReducibleChars : number ;
56- effectiveReserveTokens : number ;
57- } {
59+ } ) : PreemptiveCompactionDecision {
5860 let messagesForPressure = params . messages ;
5961 let estimatedPromptTokens = estimatePrePromptTokens ( {
6062 messages : params . messages ,
@@ -117,3 +119,34 @@ export function shouldPreemptivelyCompactBeforePrompt(params: {
117119 effectiveReserveTokens,
118120 } ;
119121}
122+
123+ export function formatPrePromptPrecheckLog ( params : {
124+ result : PreemptiveCompactionDecision ;
125+ sessionKey ?: string ;
126+ sessionId ?: string ;
127+ provider : string ;
128+ modelId : string ;
129+ messageCount : number ;
130+ unwindowedMessageCount ?: number ;
131+ contextTokenBudget : number ;
132+ reserveTokens : number ;
133+ sessionFile ?: string ;
134+ } ) : string {
135+ const { result } = params ;
136+ return (
137+ `[context-overflow-precheck] pre-prompt check ` +
138+ `sessionKey=${ params . sessionKey ?? params . sessionId ?? "unknown" } ` +
139+ `provider=${ params . provider } /${ params . modelId } ` +
140+ `route=${ result . route } ` +
141+ `estimatedPromptTokens=${ result . estimatedPromptTokens } ` +
142+ `promptBudgetBeforeReserve=${ result . promptBudgetBeforeReserve } ` +
143+ `overflowTokens=${ result . overflowTokens } ` +
144+ `toolResultReducibleChars=${ result . toolResultReducibleChars } ` +
145+ `reserveTokens=${ params . reserveTokens } ` +
146+ `effectiveReserveTokens=${ result . effectiveReserveTokens } ` +
147+ `contextTokenBudget=${ params . contextTokenBudget } ` +
148+ `messages=${ params . messageCount } ` +
149+ `unwindowedMessages=${ params . unwindowedMessageCount ?? params . messageCount } ` +
150+ `sessionFile=${ params . sessionFile } `
151+ ) ;
152+ }
0 commit comments