mirror of
https://github.com/wassname/pi-auto-compressor.git
synced 2026-06-27 15:16:08 +08:00
fix: adjust tail budget for forced compression and fix missing timestamps
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@mariozechner/pi-coding-agent": "*",
|
||||
"@mariozechner/pi-ai": "*",
|
||||
"@mariozechner/pi-tui": "*",
|
||||
"@sinclair/typebox": "*"
|
||||
},
|
||||
|
||||
@@ -372,8 +372,13 @@ export async function applyPruning(
|
||||
state.forceCompressNext ||
|
||||
(totalTokens >= thresholdTokens && msgs.length > AUTO_COMPRESS_CONFIG.protectFirstN + 4)
|
||||
) {
|
||||
let tailBudget = Math.floor(thresholdTokens * AUTO_COMPRESS_CONFIG.summaryTargetRatio);
|
||||
if (state.forceCompressNext) {
|
||||
// Force compression: reduce tail budget to ensure we have something to compress
|
||||
tailBudget = Math.min(tailBudget, Math.floor(totalTokens * 0.3));
|
||||
}
|
||||
|
||||
state.forceCompressNext = false;
|
||||
const tailBudget = Math.floor(thresholdTokens * AUTO_COMPRESS_CONFIG.summaryTargetRatio);
|
||||
const compressStart = alignBoundaryForward(msgs, AUTO_COMPRESS_CONFIG.protectFirstN);
|
||||
const compressEnd = findTailCutByTokens(msgs, compressStart, tailBudget);
|
||||
|
||||
@@ -397,7 +402,7 @@ export async function applyPruning(
|
||||
if (flipped !== lastHeadRole) {
|
||||
summaryRole = flipped;
|
||||
} else {
|
||||
const tailMsg = { ...msgs[compressEnd] };
|
||||
const tailMsg = { ...msgs[compressEnd], timestamp: msgs[compressEnd].timestamp || Date.now() };
|
||||
const originalContent = tailMsg.content || "";
|
||||
tailMsg.content =
|
||||
"## Goal\n" + summary + "\n\n--- END OF CONTEXT SUMMARY ---\n\n" +
|
||||
@@ -422,6 +427,7 @@ export async function applyPruning(
|
||||
compressed.push({
|
||||
role: summaryRole,
|
||||
content: prefix + "\n\n" + summary,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
|
||||
for (let i = compressEnd; i < msgs.length; i++) {
|
||||
@@ -431,9 +437,12 @@ export async function applyPruning(
|
||||
state.previousSummary = summary;
|
||||
state.compressionCount++;
|
||||
state.tokensSaved += totalTokens - estimateMessagesTokens(compressed);
|
||||
|
||||
return sanitizeToolPairs(compressed);
|
||||
}
|
||||
} else {
|
||||
if (config.debug) {
|
||||
console.log(`[ACP] Compression skipped: conversation too short (start: ${compressStart}, end: ${compressEnd})`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user