mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 21:40:21 +00:00
Compaction: sanitize token split accounting (#24058)
* Compaction: sanitize token split accounting * Tests/Compaction: type sanitize token estimate callback
This commit is contained in:
@@ -23,6 +23,10 @@ export function estimateMessagesTokens(messages: AgentMessage[]): number {
|
||||
return safe.reduce((sum, message) => sum + estimateTokens(message), 0);
|
||||
}
|
||||
|
||||
function estimateCompactionMessageTokens(message: AgentMessage): number {
|
||||
return estimateMessagesTokens([message]);
|
||||
}
|
||||
|
||||
function normalizeParts(parts: number, messageCount: number): number {
|
||||
if (!Number.isFinite(parts) || parts <= 1) {
|
||||
return 1;
|
||||
@@ -49,7 +53,7 @@ export function splitMessagesByTokenShare(
|
||||
let currentTokens = 0;
|
||||
|
||||
for (const message of messages) {
|
||||
const messageTokens = estimateTokens(message);
|
||||
const messageTokens = estimateCompactionMessageTokens(message);
|
||||
if (
|
||||
chunks.length < normalizedParts - 1 &&
|
||||
current.length > 0 &&
|
||||
@@ -93,7 +97,7 @@ export function chunkMessagesByMaxTokens(
|
||||
let currentTokens = 0;
|
||||
|
||||
for (const message of messages) {
|
||||
const messageTokens = estimateTokens(message);
|
||||
const messageTokens = estimateCompactionMessageTokens(message);
|
||||
if (currentChunk.length > 0 && currentTokens + messageTokens > effectiveMax) {
|
||||
chunks.push(currentChunk);
|
||||
currentChunk = [];
|
||||
|
||||
Reference in New Issue
Block a user