mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-10 14:35:00 +00:00
Compaction/Safeguard: add summary quality audit retries (#25556)
Merged via squash.
Prepared head SHA: be473efd16
Co-authored-by: rodrigouroz <384037+rodrigouroz@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
This commit is contained in:
74
src/agents/pi-embedded-runner/extensions.test.ts
Normal file
74
src/agents/pi-embedded-runner/extensions.test.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import type { Api, Model } from "@mariozechner/pi-ai";
|
||||
import type { SessionManager } from "@mariozechner/pi-coding-agent";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import { getCompactionSafeguardRuntime } from "../pi-extensions/compaction-safeguard-runtime.js";
|
||||
import compactionSafeguardExtension from "../pi-extensions/compaction-safeguard.js";
|
||||
import { buildEmbeddedExtensionFactories } from "./extensions.js";
|
||||
|
||||
describe("buildEmbeddedExtensionFactories", () => {
|
||||
it("does not opt safeguard mode into quality-guard retries", () => {
|
||||
const sessionManager = {} as SessionManager;
|
||||
const model = {
|
||||
id: "claude-sonnet-4-20250514",
|
||||
contextWindow: 200_000,
|
||||
} as Model<Api>;
|
||||
const cfg = {
|
||||
agents: {
|
||||
defaults: {
|
||||
compaction: {
|
||||
mode: "safeguard",
|
||||
},
|
||||
},
|
||||
},
|
||||
} as OpenClawConfig;
|
||||
|
||||
const factories = buildEmbeddedExtensionFactories({
|
||||
cfg,
|
||||
sessionManager,
|
||||
provider: "anthropic",
|
||||
modelId: "claude-sonnet-4-20250514",
|
||||
model,
|
||||
});
|
||||
|
||||
expect(factories).toContain(compactionSafeguardExtension);
|
||||
expect(getCompactionSafeguardRuntime(sessionManager)).toMatchObject({
|
||||
qualityGuardEnabled: false,
|
||||
});
|
||||
});
|
||||
|
||||
it("wires explicit safeguard quality-guard runtime flags", () => {
|
||||
const sessionManager = {} as SessionManager;
|
||||
const model = {
|
||||
id: "claude-sonnet-4-20250514",
|
||||
contextWindow: 200_000,
|
||||
} as Model<Api>;
|
||||
const cfg = {
|
||||
agents: {
|
||||
defaults: {
|
||||
compaction: {
|
||||
mode: "safeguard",
|
||||
qualityGuard: {
|
||||
enabled: true,
|
||||
maxRetries: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
} as OpenClawConfig;
|
||||
|
||||
const factories = buildEmbeddedExtensionFactories({
|
||||
cfg,
|
||||
sessionManager,
|
||||
provider: "anthropic",
|
||||
modelId: "claude-sonnet-4-20250514",
|
||||
model,
|
||||
});
|
||||
|
||||
expect(factories).toContain(compactionSafeguardExtension);
|
||||
expect(getCompactionSafeguardRuntime(sessionManager)).toMatchObject({
|
||||
qualityGuardEnabled: true,
|
||||
qualityGuardMaxRetries: 2,
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -71,6 +71,7 @@ export function buildEmbeddedExtensionFactories(params: {
|
||||
const factories: ExtensionFactory[] = [];
|
||||
if (resolveCompactionMode(params.cfg) === "safeguard") {
|
||||
const compactionCfg = params.cfg?.agents?.defaults?.compaction;
|
||||
const qualityGuardCfg = compactionCfg?.qualityGuard;
|
||||
const contextWindowInfo = resolveContextWindowInfo({
|
||||
cfg: params.cfg,
|
||||
provider: params.provider,
|
||||
@@ -83,6 +84,8 @@ export function buildEmbeddedExtensionFactories(params: {
|
||||
contextWindowTokens: contextWindowInfo.tokens,
|
||||
identifierPolicy: compactionCfg?.identifierPolicy,
|
||||
identifierInstructions: compactionCfg?.identifierInstructions,
|
||||
qualityGuardEnabled: qualityGuardCfg?.enabled ?? false,
|
||||
qualityGuardMaxRetries: qualityGuardCfg?.maxRetries,
|
||||
model: params.model,
|
||||
});
|
||||
factories.push(compactionSafeguardExtension);
|
||||
|
||||
Reference in New Issue
Block a user