




















@@ -170,7 +170,7 @@ import {
170170import { splitSdkTools } from "./tool-split.js";
171171import { readTranscriptFileState } from "./transcript-file-state.js";
172172import type { EmbeddedPiCompactResult } from "./types.js";
173-import { mapThinkingLevel } from "./utils.js";
173+import { mapThinkingLevel, normalizeContextTokenBudget } from "./utils.js";
174174import { flushPendingToolResultsAfterIdle } from "./wait-for-idle-before-flush.js";
175175export type { CompactEmbeddedPiSessionParams } from "./compact.types.js";
176176@@ -697,10 +697,19 @@ async function compactEmbeddedPiSessionDirectOnce(
697697modelContextWindow: runtimeModelWithContext.contextWindow,
698698defaultTokens: DEFAULT_CONTEXT_TOKENS,
699699});
700+const resolvedContextTokenBudget =
701+normalizeContextTokenBudget(ctxInfo.tokens) ?? DEFAULT_CONTEXT_TOKENS;
702+const requestedContextTokenBudget =
703+normalizeContextTokenBudget(params.contextTokenBudget) ??
704+normalizeContextTokenBudget(params.tokenBudget);
705+const contextTokenBudget = Math.min(
706+requestedContextTokenBudget ?? resolvedContextTokenBudget,
707+resolvedContextTokenBudget,
708+);
700709const effectiveModel = applyAuthHeaderOverride(
701710applyLocalNoAuthHeaderOverride(
702-ctxInfo.tokens < (runtimeModelWithContext.contextWindow ?? Infinity)
703- ? { ...runtimeModelWithContext, contextWindow: ctxInfo.tokens }
711+contextTokenBudget < (runtimeModelWithContext.contextWindow ?? Infinity)
712+ ? { ...runtimeModelWithContext, contextWindow: contextTokenBudget }
704713 : runtimeModelWithContext,
705714apiKeyInfo,
706715),
@@ -761,7 +770,7 @@ async function compactEmbeddedPiSessionDirectOnce(
761770 modelId,
762771modelCompat: extractModelCompat(effectiveModel),
763772modelApi: model.api,
764-modelContextWindowTokens: ctxInfo.tokens,
773+modelContextWindowTokens: contextTokenBudget,
765774skillsSnapshot: skillsSnapshotForRun,
766775modelAuthMode: resolveModelAuthMode(model.provider, params.config, undefined, {
767776workspaceDir: effectiveWorkspace,
@@ -1012,7 +1021,7 @@ async function compactEmbeddedPiSessionDirectOnce(
10121021agentId: sessionAgentId,
10131022sessionKey: params.sessionKey,
10141023config: params.config,
1015-contextWindowTokens: ctxInfo.tokens,
1024+contextWindowTokens: contextTokenBudget,
10161025allowSyntheticToolResults: transcriptPolicy.allowSyntheticToolResults,
10171026missingToolResultText:
10181027model.api === "openai-responses" ||
@@ -1037,7 +1046,7 @@ async function compactEmbeddedPiSessionDirectOnce(
10371046env: process.env,
10381047workspaceDir: effectiveWorkspace,
10391048}),
1040-contextTokenBudget: ctxInfo.tokens,
1049+ contextTokenBudget,
10411050});
10421051// Sets compaction/pruning runtime state and returns extension factories
10431052// that must be passed to the resource loader for the safeguard to be active.
@@ -1064,7 +1073,7 @@ async function compactEmbeddedPiSessionDirectOnce(
10641073applyPiCompactionSettingsFromConfig({
10651074 settingsManager,
10661075cfg: params.config,
1067-contextTokenBudget: ctxInfo.tokens,
1076+ contextTokenBudget,
10681077});
10691078// contextEngineInfo is intentionally omitted: this guard runs inside the
10701079// compaction LLM session, which is not the user-facing agent session and
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。