



















@@ -571,6 +571,7 @@ function estimatePostUsageTrailingBytes(lines: string[]): number {
571571type TranscriptTokenEstimate = {
572572promptTokens: number;
573573outputTokens?: number;
574+transcriptByteSize?: number;
574575transcriptBytesTokens?: number;
575576};
576577@@ -620,6 +621,7 @@ async function estimatePromptTokensFromSessionTranscript(params: {
620621return {
621622promptTokens: Math.ceil(promptTokens),
622623outputTokens: Math.ceil(outputTokens),
624+transcriptByteSize: snapshot.byteSize,
623625 transcriptBytesTokens,
624626};
625627}
@@ -648,6 +650,7 @@ async function estimatePromptTokensFromSessionTranscript(params: {
648650typeof outputTokens === "number" && Number.isFinite(outputTokens) && outputTokens > 0
649651 ? Math.ceil(outputTokens)
650652 : undefined,
653+transcriptByteSize: snapshot.byteSize,
651654 transcriptBytesTokens,
652655};
653656}
@@ -657,6 +660,7 @@ async function estimatePromptTokensFromSessionTranscript(params: {
657660}
658661return {
659662promptTokens: Math.ceil(estimatedTokens),
663+transcriptByteSize: snapshot.byteSize,
660664 transcriptBytesTokens,
661665};
662666} catch {
@@ -740,29 +744,11 @@ export async function runPreflightCompactionIfNeeded(params: {
740744typeof persistedTotalTokens === "number" &&
741745Number.isFinite(persistedTotalTokens) &&
742746persistedTotalTokens > 0;
743-const maxActiveTranscriptBytes = resolveMaxActiveTranscriptBytes(params.cfg);
744-const shouldCheckActiveTranscriptBytes = typeof maxActiveTranscriptBytes === "number";
745-const transcriptSizeSnapshot = shouldCheckActiveTranscriptBytes
746- ? await readSessionLogSnapshot({
747-sessionId: entry.sessionId,
748-sessionEntry:
749-entry.sessionFile || !params.followupRun.run.sessionFile
750- ? entry
751- : { ...entry, sessionFile: params.followupRun.run.sessionFile },
752-sessionKey: params.sessionKey ?? params.followupRun.run.sessionKey,
753-opts: { storePath: params.storePath },
754-includeByteSize: true,
755-includeUsage: false,
756-})
757- : undefined;
758-const activeTranscriptBytes = transcriptSizeSnapshot?.byteSize;
759-const shouldCompactByTranscriptBytes =
760-typeof activeTranscriptBytes === "number" &&
761-typeof maxActiveTranscriptBytes === "number" &&
762-activeTranscriptBytes >= maxActiveTranscriptBytes;
763747const promptTokenEstimate = estimatePromptTokensForMemoryFlush(
764748params.promptForEstimate ?? params.followupRun.prompt,
765749);
750+const maxActiveTranscriptBytes = resolveMaxActiveTranscriptBytes(params.cfg);
751+const shouldCheckActiveTranscriptBytes = typeof maxActiveTranscriptBytes === "number";
766752const transcriptUsageTokens =
767753typeof freshPersistedTokens === "number"
768754 ? undefined
@@ -773,6 +759,26 @@ export async function runPreflightCompactionIfNeeded(params: {
773759sessionFile: entry.sessionFile ?? params.followupRun.run.sessionFile,
774760storePath: params.storePath,
775761});
762+const transcriptSizeSnapshot =
763+shouldCheckActiveTranscriptBytes && transcriptUsageTokens?.transcriptByteSize === undefined
764+ ? await readSessionLogSnapshot({
765+sessionId: entry.sessionId,
766+sessionEntry:
767+entry.sessionFile || !params.followupRun.run.sessionFile
768+ ? entry
769+ : { ...entry, sessionFile: params.followupRun.run.sessionFile },
770+sessionKey: params.sessionKey ?? params.followupRun.run.sessionKey,
771+opts: { storePath: params.storePath },
772+includeByteSize: true,
773+includeUsage: false,
774+})
775+ : undefined;
776+const activeTranscriptBytes =
777+transcriptUsageTokens?.transcriptByteSize ?? transcriptSizeSnapshot?.byteSize;
778+const shouldCompactByTranscriptBytes =
779+typeof activeTranscriptBytes === "number" &&
780+typeof maxActiveTranscriptBytes === "number" &&
781+activeTranscriptBytes >= maxActiveTranscriptBytes;
776782const stalePersistedPromptTokens = hasPersistedTotalTokens
777783 ? Math.floor(persistedTotalTokens)
778784 : undefined;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。