fix: add compaction headroom for memory writes
This commit is contained in:
@@ -69,6 +69,7 @@ import {
|
||||
import { normalizeModelCompat } from "./model-compat.js";
|
||||
import { ensureClawdbotModelsJson } from "./models-config.js";
|
||||
import type { MessagingToolSend } from "./pi-embedded-messaging.js";
|
||||
import { ensurePiCompactionReserveTokens } from "./pi-settings.js";
|
||||
import { acquireSessionWriteLock } from "./session-write-lock.js";
|
||||
|
||||
export type { MessagingToolSend } from "./pi-embedded-messaging.js";
|
||||
@@ -981,6 +982,7 @@ export async function compactEmbeddedPiSession(params: {
|
||||
effectiveWorkspace,
|
||||
agentDir,
|
||||
);
|
||||
ensurePiCompactionReserveTokens({ settingsManager });
|
||||
const additionalExtensionPaths = buildEmbeddedExtensionPaths({
|
||||
cfg: params.config,
|
||||
sessionManager,
|
||||
@@ -1369,6 +1371,7 @@ export async function runEmbeddedPiAgent(params: {
|
||||
effectiveWorkspace,
|
||||
agentDir,
|
||||
);
|
||||
ensurePiCompactionReserveTokens({ settingsManager });
|
||||
const additionalExtensionPaths = buildEmbeddedExtensionPaths({
|
||||
cfg: params.config,
|
||||
sessionManager,
|
||||
|
||||
37
src/agents/pi-settings.test.ts
Normal file
37
src/agents/pi-settings.test.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
|
||||
import {
|
||||
DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR,
|
||||
ensurePiCompactionReserveTokens,
|
||||
} from "./pi-settings.js";
|
||||
|
||||
describe("ensurePiCompactionReserveTokens", () => {
|
||||
it("bumps reserveTokens when below floor", () => {
|
||||
const settingsManager = {
|
||||
getCompactionReserveTokens: () => 16_384,
|
||||
applyOverrides: vi.fn(),
|
||||
};
|
||||
|
||||
const result = ensurePiCompactionReserveTokens({ settingsManager });
|
||||
|
||||
expect(result).toEqual({
|
||||
didOverride: true,
|
||||
reserveTokens: DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR,
|
||||
});
|
||||
expect(settingsManager.applyOverrides).toHaveBeenCalledWith({
|
||||
compaction: { reserveTokens: DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR },
|
||||
});
|
||||
});
|
||||
|
||||
it("does not override when already above floor", () => {
|
||||
const settingsManager = {
|
||||
getCompactionReserveTokens: () => 32_000,
|
||||
applyOverrides: vi.fn(),
|
||||
};
|
||||
|
||||
const result = ensurePiCompactionReserveTokens({ settingsManager });
|
||||
|
||||
expect(result).toEqual({ didOverride: false, reserveTokens: 32_000 });
|
||||
expect(settingsManager.applyOverrides).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
27
src/agents/pi-settings.ts
Normal file
27
src/agents/pi-settings.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
export const DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR = 20_000;
|
||||
|
||||
type PiSettingsManagerLike = {
|
||||
getCompactionReserveTokens: () => number;
|
||||
applyOverrides: (overrides: {
|
||||
compaction: { reserveTokens: number };
|
||||
}) => void;
|
||||
};
|
||||
|
||||
export function ensurePiCompactionReserveTokens(params: {
|
||||
settingsManager: PiSettingsManagerLike;
|
||||
minReserveTokens?: number;
|
||||
}): { didOverride: boolean; reserveTokens: number } {
|
||||
const minReserveTokens =
|
||||
params.minReserveTokens ?? DEFAULT_PI_COMPACTION_RESERVE_TOKENS_FLOOR;
|
||||
const current = params.settingsManager.getCompactionReserveTokens();
|
||||
|
||||
if (current >= minReserveTokens) {
|
||||
return { didOverride: false, reserveTokens: current };
|
||||
}
|
||||
|
||||
params.settingsManager.applyOverrides({
|
||||
compaction: { reserveTokens: minReserveTokens },
|
||||
});
|
||||
|
||||
return { didOverride: true, reserveTokens: minReserveTokens };
|
||||
}
|
||||
Reference in New Issue
Block a user