Config: expose Pi compaction tuning values (openclaw#21568) thanks @Takhoffman

Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini

Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
This commit is contained in:
Tak Hoffman
2026-02-19 21:41:09 -06:00
committed by GitHub
parent 10dab4f2c7
commit c1ac37a641
8 changed files with 204 additions and 23 deletions

View File

@@ -4,7 +4,13 @@ export const DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR = 20_000;
type PiSettingsManagerLike = {
getCompactionReserveTokens: () => number;
applyOverrides: (overrides: { compaction: { reserveTokens: number } }) => void;
getCompactionKeepRecentTokens: () => number;
applyOverrides: (overrides: {
compaction: {
reserveTokens?: number;
keepRecentTokens?: number;
};
}) => void;
};
export function ensurePiCompactionReserveTokens(params: {
@@ -32,3 +38,60 @@ export function resolveCompactionReserveTokensFloor(cfg?: OpenClawConfig): numbe
}
return DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR;
}
function toNonNegativeInt(value: unknown): number | undefined {
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
return undefined;
}
return Math.floor(value);
}
function toPositiveInt(value: unknown): number | undefined {
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
return undefined;
}
return Math.floor(value);
}
export function applyPiCompactionSettingsFromConfig(params: {
settingsManager: PiSettingsManagerLike;
cfg?: OpenClawConfig;
}): {
didOverride: boolean;
compaction: { reserveTokens: number; keepRecentTokens: number };
} {
const currentReserveTokens = params.settingsManager.getCompactionReserveTokens();
const currentKeepRecentTokens = params.settingsManager.getCompactionKeepRecentTokens();
const compactionCfg = params.cfg?.agents?.defaults?.compaction;
const configuredReserveTokens = toNonNegativeInt(compactionCfg?.reserveTokens);
const configuredKeepRecentTokens = toPositiveInt(compactionCfg?.keepRecentTokens);
const reserveTokensFloor = resolveCompactionReserveTokensFloor(params.cfg);
const targetReserveTokens = Math.max(
configuredReserveTokens ?? currentReserveTokens,
reserveTokensFloor,
);
const targetKeepRecentTokens = configuredKeepRecentTokens ?? currentKeepRecentTokens;
const overrides: { reserveTokens?: number; keepRecentTokens?: number } = {};
if (targetReserveTokens !== currentReserveTokens) {
overrides.reserveTokens = targetReserveTokens;
}
if (targetKeepRecentTokens !== currentKeepRecentTokens) {
overrides.keepRecentTokens = targetKeepRecentTokens;
}
const didOverride = Object.keys(overrides).length > 0;
if (didOverride) {
params.settingsManager.applyOverrides({ compaction: overrides });
}
return {
didOverride,
compaction: {
reserveTokens: targetReserveTokens,
keepRecentTokens: targetKeepRecentTokens,
},
};
}