Skip to content

Commit 15f4393

Browse files
committed
api: simplify middle_out keep-tail logic
1 parent e30fa1b commit 15f4393

1 file changed

Lines changed: 8 additions & 14 deletions

File tree

src/server/api/go/internal/pkg/editor/strategy_middle_out.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,19 @@ func (s *MiddleOutStrategy) Apply(messages []model.Message) ([]model.Message, er
3030
}
3131
result := messages
3232
resultTokens := messageTokens
33-
for totalTokens > s.TokenReduceTo && len(result) > 2 {
34-
mid := len(result) / 2
35-
var removedTokens int
36-
result, resultTokens, removedTokens = removeWithToolPairing(
37-
result,
38-
resultTokens,
39-
mid,
40-
)
41-
totalTokens -= removedTokens
42-
}
43-
// Keep-tail fallback: if removing only middle messages can't meet the budget,
44-
// drop the oldest remaining messages (idx=0). This preserves recency and only
45-
// removes the last message if it alone still exceeds the budget.
4633
for totalTokens > s.TokenReduceTo && len(result) > 0 {
34+
// Prefer removing from the middle to preserve both the head and the tail.
35+
// Once we have <= 2 messages left, switch to "keep tail" and drop from the
36+
// front to preserve recency.
37+
removeIdx := len(result) / 2
38+
if len(result) <= 2 {
39+
removeIdx = 0
40+
}
4741
var removedTokens int
4842
result, resultTokens, removedTokens = removeWithToolPairing(
4943
result,
5044
resultTokens,
51-
0,
45+
removeIdx,
5246
)
5347
totalTokens -= removedTokens
5448
}

0 commit comments

Comments
 (0)