Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions agent/compaction/compaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,40 @@ func TestTruncationStrategy_ExcludesOldestGroups(t *testing.T) {
}
}

func TestTruncationStrategy_SkipsPreExcludedAndSystemGroups(t *testing.T) {
index := compaction.CreateMessageIndex([]*message.Message{
textMessage(message.RoleSystem, "system"),
textMessage(message.RoleUser, "u1"),
textMessage(message.RoleAssistant, "a1"),
textMessage(message.RoleUser, "u2"),
}, nil)
index.Groups[1].IsExcluded = true
strategy := &compaction.TruncationStrategy{
MinimumPreservedGroups: 1,
}

compacted, err := strategy.Compact(t.Context(), index)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !compacted {
t.Fatal("expected compaction")
}

if index.Groups[0].IsExcluded {
t.Fatal("expected system group to be preserved")
}
if !index.Groups[1].IsExcluded {
t.Fatal("expected pre-excluded group to remain excluded")
}
if !index.Groups[2].IsExcluded {
t.Fatal("expected oldest removable group to be excluded")
}
if index.Groups[3].IsExcluded {
t.Fatal("expected minimum preserved group to remain included")
}
}

func TestTruncationStrategy_ZeroValueUsesDefaults(t *testing.T) {
index := compaction.CreateMessageIndex(turnMessages(17), nil)
strategy := &compaction.TruncationStrategy{}
Expand Down
7 changes: 1 addition & 6 deletions agent/compaction/truncation.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,7 @@ func (strategy *TruncationStrategy) Compact(_ context.Context, index *MessageInd
}

minimumPreservedGroups := cmp.Or(max(strategy.MinimumPreservedGroups, 0), defaultMinimumPreservedTruncationGroups)
var removableCount int
for _, group := range index.Groups {
if !group.IsExcluded && group.Kind != GroupKindSystem {
removableCount++
}
}
removableCount := index.IncludedNonSystemGroupCount()
maxRemovable := removableCount - minimumPreservedGroups
if maxRemovable <= 0 {
return false, nil
Expand Down
Loading