From 034cc0329dd728ad12134d916f48ebbeb62f7de7 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Sat, 2 May 2026 14:02:25 +0200 Subject: [PATCH] simplify compaction: drop user message preservation and selectUserMessages --- pkg/agent/session.go | 46 +++++--------------------------------------- 1 file changed, 5 insertions(+), 41 deletions(-) diff --git a/pkg/agent/session.go b/pkg/agent/session.go index 3bfd13d..9424a1e 100644 --- a/pkg/agent/session.go +++ b/pkg/agent/session.go @@ -26,9 +26,6 @@ Be concise, structured, and focused on helping the next LLM seamlessly continue Here is the summary produced by the other language model, use the information in this summary to assist with your own analysis:` - // compactionUserTokenBudget is the approximate token budget for preserving - // recent user messages in the compacted history. - compactionUserTokenBudget = 20000 ) // PersistedSession is the on-disk format for a saved session. @@ -193,49 +190,16 @@ func (s *Session) compact(ctx context.Context, b backend.Backend) (int, string, // Rebuild: system messages + preserved user messages + summary. beforeCount := len(s.messages) - s.messages = buildCompactedHistory(s.messages, summaryText) + s.messages = buildCompactedHistory(summaryText) return beforeCount - len(s.messages), summaryText, nil } -// buildCompactedHistory constructs the post-compaction message list: -// system messages + recent user messages (within token budget) + summary. -func buildCompactedHistory(history []backend.Message, summary string) []backend.Message { - var result []backend.Message - for _, m := range history { - if m.Role == "system" { - result = append(result, m) - } - } - result = append(result, selectUserMessages(history, compactionUserTokenBudget)...) - result = append(result, backend.Message{ +// buildCompactedHistory constructs the post-compaction message list. +func buildCompactedHistory(summary string) []backend.Message { + return []backend.Message{{ Role: "user", Content: compactionSummaryPrefix + "\n" + strings.TrimSpace(summary), - }) - return result -} - -// selectUserMessages picks recent user messages (newest first) up to a token budget. -func selectUserMessages(history []backend.Message, tokenBudget int) []backend.Message { - var selected []backend.Message - remaining := tokenBudget - for i := len(history) - 1; i >= 0; i-- { - m := history[i] - if m.Role != "user" { - continue - } - text := strings.TrimSpace(m.Content) - if text == "" || strings.HasPrefix(text, compactionSummaryPrefix) { - continue - } - tokens := (len(text) + 3) / 4 - if tokens > remaining { - break - } - remaining -= tokens - selected = append(selected, backend.Message{Role: "user", Content: text}) - } - slices.Reverse(selected) - return selected + }} } // flattenToolMessages converts tool call/result sequences into plain text