@@ -2,6 +2,7 @@ import { Anthropic } from "@anthropic-ai/sdk"
22import { ApiHandler } from "../../api"
33import { summarizeConversation , SummarizeResponse } from "../condense"
44import { ApiMessage } from "../task-persistence/apiMessages"
5+ import { telemetryService } from "../../services/telemetry/TelemetryService"
56
67/**
78 * Default percentage of the context window to use as a buffer when deciding when to truncate
@@ -31,9 +32,11 @@ export async function estimateTokenCount(
3132 *
3233 * @param {ApiMessage[] } messages - The conversation messages.
3334 * @param {number } fracToRemove - The fraction (between 0 and 1) of messages (excluding the first) to remove.
35+ * @param {string } taskId - The task ID for the conversation, used for telemetry
3436 * @returns {ApiMessage[] } The truncated conversation messages.
3537 */
36- export function truncateConversation ( messages : ApiMessage [ ] , fracToRemove : number ) : ApiMessage [ ] {
38+ export function truncateConversation ( messages : ApiMessage [ ] , fracToRemove : number , taskId : string ) : ApiMessage [ ] {
39+ telemetryService . captureSlidingWindowTruncation ( taskId )
3740 const truncatedMessages = [ messages [ 0 ] ]
3841 const rawMessagesToRemove = Math . floor ( ( messages . length - 1 ) * fracToRemove )
3942 const messagesToRemove = rawMessagesToRemove - ( rawMessagesToRemove % 2 )
@@ -66,6 +69,7 @@ type TruncateOptions = {
6669 autoCondenseContext : boolean
6770 autoCondenseContextPercent : number
6871 systemPrompt : string
72+ taskId : string
6973}
7074
7175type TruncateResponse = SummarizeResponse & { prevContextTokens : number }
@@ -86,6 +90,7 @@ export async function truncateConversationIfNeeded({
8690 autoCondenseContext,
8791 autoCondenseContextPercent,
8892 systemPrompt,
93+ taskId,
8994} : TruncateOptions ) : Promise < TruncateResponse > {
9095 // Calculate the maximum tokens reserved for response
9196 const reservedTokens = maxTokens || contextWindow * 0.2
@@ -108,7 +113,7 @@ export async function truncateConversationIfNeeded({
108113 const contextPercent = ( 100 * prevContextTokens ) / contextWindow
109114 if ( contextPercent >= autoCondenseContextPercent || prevContextTokens > allowedTokens ) {
110115 // Attempt to intelligently condense the context
111- const result = await summarizeConversation ( messages , apiHandler , systemPrompt )
116+ const result = await summarizeConversation ( messages , apiHandler , systemPrompt , taskId )
112117 if ( result . summary ) {
113118 return { ...result , prevContextTokens }
114119 }
@@ -117,7 +122,7 @@ export async function truncateConversationIfNeeded({
117122
118123 // Fall back to sliding window truncation if needed
119124 if ( prevContextTokens > allowedTokens ) {
120- const truncatedMessages = truncateConversation ( messages , 0.5 )
125+ const truncatedMessages = truncateConversation ( messages , 0.5 , taskId )
121126 return { messages : truncatedMessages , prevContextTokens, summary : "" , cost : 0 }
122127 }
123128 // No truncation or condensation needed
0 commit comments