in agents/utils/history_util.py [0:0]
def truncate(self) -> None:
"""Remove oldest messages when context window limit is exceeded."""
if self.total_tokens <= self.context_window_tokens:
return
TRUNCATION_NOTICE_TOKENS = 25
TRUNCATION_MESSAGE = {
"role": "user",
"content": [
{
"type": "text",
"text": "[Earlier history has been truncated.]",
}
],
}
def remove_message_pair():
self.messages.pop(0)
self.messages.pop(0)
if self.message_tokens:
input_tokens, output_tokens = self.message_tokens.pop(0)
self.total_tokens -= input_tokens + output_tokens
while (
self.message_tokens
and len(self.messages) >= 2
and self.total_tokens > self.context_window_tokens
):
remove_message_pair()
if self.messages and self.message_tokens:
original_input_tokens, original_output_tokens = (
self.message_tokens[0]
)
self.messages[0] = TRUNCATION_MESSAGE
self.message_tokens[0] = (
TRUNCATION_NOTICE_TOKENS,
original_output_tokens,
)
self.total_tokens += (
TRUNCATION_NOTICE_TOKENS - original_input_tokens
)