mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 13:01:25 +00:00
test(pi): share overflow-compaction test setup
This commit is contained in:
@@ -1,27 +1,37 @@
|
|||||||
import "./run.overflow-compaction.mocks.shared.js";
|
import "./run.overflow-compaction.mocks.shared.js";
|
||||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
|
import { isCompactionFailureError, isLikelyContextOverflowError } from "../pi-embedded-helpers.js";
|
||||||
|
|
||||||
vi.mock("../../utils.js", () => ({
|
vi.mock("../../utils.js", () => ({
|
||||||
resolveUserPath: vi.fn((p: string) => p),
|
resolveUserPath: vi.fn((p: string) => p),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock("../pi-embedded-helpers.js", async () => {
|
import { log } from "./logger.js";
|
||||||
return {
|
import { runEmbeddedPiAgent } from "./run.js";
|
||||||
isCompactionFailureError: (msg?: string) => {
|
import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js";
|
||||||
|
import {
|
||||||
|
mockedCompactDirect,
|
||||||
|
mockedRunEmbeddedAttempt,
|
||||||
|
mockedSessionLikelyHasOversizedToolResults,
|
||||||
|
mockedTruncateOversizedToolResultsInSession,
|
||||||
|
overflowBaseRunParams as baseParams,
|
||||||
|
} from "./run.overflow-compaction.shared-test.js";
|
||||||
|
import type { EmbeddedRunAttemptResult } from "./run/types.js";
|
||||||
|
|
||||||
|
const mockedIsCompactionFailureError = vi.mocked(isCompactionFailureError);
|
||||||
|
const mockedIsLikelyContextOverflowError = vi.mocked(isLikelyContextOverflowError);
|
||||||
|
|
||||||
|
describe("overflow compaction in run loop", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
vi.clearAllMocks();
|
||||||
|
mockedIsCompactionFailureError.mockImplementation((msg?: string) => {
|
||||||
if (!msg) {
|
if (!msg) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const lower = msg.toLowerCase();
|
const lower = msg.toLowerCase();
|
||||||
return lower.includes("request_too_large") && lower.includes("summarization failed");
|
return lower.includes("request_too_large") && lower.includes("summarization failed");
|
||||||
},
|
});
|
||||||
isContextOverflowError: (msg?: string) => {
|
mockedIsLikelyContextOverflowError.mockImplementation((msg?: string) => {
|
||||||
if (!msg) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const lower = msg.toLowerCase();
|
|
||||||
return lower.includes("request_too_large") || lower.includes("request size exceeds");
|
|
||||||
},
|
|
||||||
isLikelyContextOverflowError: (msg?: string) => {
|
|
||||||
if (!msg) {
|
if (!msg) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -32,52 +42,12 @@ vi.mock("../pi-embedded-helpers.js", async () => {
|
|||||||
lower.includes("context window exceeded") ||
|
lower.includes("context window exceeded") ||
|
||||||
lower.includes("prompt too large")
|
lower.includes("prompt too large")
|
||||||
);
|
);
|
||||||
},
|
});
|
||||||
isFailoverAssistantError: vi.fn(() => false),
|
mockedCompactDirect.mockResolvedValue({
|
||||||
isFailoverErrorMessage: vi.fn(() => false),
|
ok: false,
|
||||||
isAuthAssistantError: vi.fn(() => false),
|
compacted: false,
|
||||||
isRateLimitAssistantError: vi.fn(() => false),
|
reason: "nothing to compact",
|
||||||
isBillingAssistantError: vi.fn(() => false),
|
});
|
||||||
classifyFailoverReason: vi.fn(() => null),
|
|
||||||
formatAssistantErrorText: vi.fn(() => ""),
|
|
||||||
parseImageSizeError: vi.fn(() => null),
|
|
||||||
pickFallbackThinkingLevel: vi.fn(() => null),
|
|
||||||
isTimeoutErrorMessage: vi.fn(() => false),
|
|
||||||
parseImageDimensionError: vi.fn(() => null),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
import { compactEmbeddedPiSessionDirect } from "./compact.js";
|
|
||||||
import { log } from "./logger.js";
|
|
||||||
import { runEmbeddedPiAgent } from "./run.js";
|
|
||||||
import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js";
|
|
||||||
import { runEmbeddedAttempt } from "./run/attempt.js";
|
|
||||||
import type { EmbeddedRunAttemptResult } from "./run/types.js";
|
|
||||||
import {
|
|
||||||
sessionLikelyHasOversizedToolResults,
|
|
||||||
truncateOversizedToolResultsInSession,
|
|
||||||
} from "./tool-result-truncation.js";
|
|
||||||
|
|
||||||
const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt);
|
|
||||||
const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect);
|
|
||||||
const mockedSessionLikelyHasOversizedToolResults = vi.mocked(sessionLikelyHasOversizedToolResults);
|
|
||||||
const mockedTruncateOversizedToolResultsInSession = vi.mocked(
|
|
||||||
truncateOversizedToolResultsInSession,
|
|
||||||
);
|
|
||||||
|
|
||||||
const baseParams = {
|
|
||||||
sessionId: "test-session",
|
|
||||||
sessionKey: "test-key",
|
|
||||||
sessionFile: "/tmp/session.json",
|
|
||||||
workspaceDir: "/tmp/workspace",
|
|
||||||
prompt: "hello",
|
|
||||||
timeoutMs: 30000,
|
|
||||||
runId: "run-1",
|
|
||||||
};
|
|
||||||
|
|
||||||
describe("overflow compaction in run loop", () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
vi.clearAllMocks();
|
|
||||||
mockedSessionLikelyHasOversizedToolResults.mockReturnValue(false);
|
mockedSessionLikelyHasOversizedToolResults.mockReturnValue(false);
|
||||||
mockedTruncateOversizedToolResultsInSession.mockResolvedValue({
|
mockedTruncateOversizedToolResultsInSession.mockResolvedValue({
|
||||||
truncated: false,
|
truncated: false,
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { vi } from "vitest";
|
||||||
|
import { compactEmbeddedPiSessionDirect } from "./compact.js";
|
||||||
|
import { runEmbeddedAttempt } from "./run/attempt.js";
|
||||||
|
import {
|
||||||
|
sessionLikelyHasOversizedToolResults,
|
||||||
|
truncateOversizedToolResultsInSession,
|
||||||
|
} from "./tool-result-truncation.js";
|
||||||
|
|
||||||
|
export const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt);
|
||||||
|
export const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect);
|
||||||
|
export const mockedSessionLikelyHasOversizedToolResults = vi.mocked(
|
||||||
|
sessionLikelyHasOversizedToolResults,
|
||||||
|
);
|
||||||
|
export const mockedTruncateOversizedToolResultsInSession = vi.mocked(
|
||||||
|
truncateOversizedToolResultsInSession,
|
||||||
|
);
|
||||||
|
|
||||||
|
export const overflowBaseRunParams = {
|
||||||
|
sessionId: "test-session",
|
||||||
|
sessionKey: "test-key",
|
||||||
|
sessionFile: "/tmp/session.json",
|
||||||
|
workspaceDir: "/tmp/workspace",
|
||||||
|
prompt: "hello",
|
||||||
|
timeoutMs: 30000,
|
||||||
|
runId: "run-1",
|
||||||
|
} as const;
|
||||||
@@ -1,23 +1,17 @@
|
|||||||
import "./run.overflow-compaction.mocks.shared.js";
|
import "./run.overflow-compaction.mocks.shared.js";
|
||||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
import { pickFallbackThinkingLevel } from "../pi-embedded-helpers.js";
|
import { pickFallbackThinkingLevel } from "../pi-embedded-helpers.js";
|
||||||
import { compactEmbeddedPiSessionDirect } from "./compact.js";
|
|
||||||
import { runEmbeddedPiAgent } from "./run.js";
|
import { runEmbeddedPiAgent } from "./run.js";
|
||||||
import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js";
|
import { makeAttemptResult, mockOverflowRetrySuccess } from "./run.overflow-compaction.fixture.js";
|
||||||
import { mockedGlobalHookRunner } from "./run.overflow-compaction.mocks.shared.js";
|
import { mockedGlobalHookRunner } from "./run.overflow-compaction.mocks.shared.js";
|
||||||
import { runEmbeddedAttempt } from "./run/attempt.js";
|
|
||||||
import type { EmbeddedRunAttemptResult } from "./run/types.js";
|
|
||||||
import {
|
import {
|
||||||
sessionLikelyHasOversizedToolResults,
|
mockedCompactDirect,
|
||||||
truncateOversizedToolResultsInSession,
|
mockedRunEmbeddedAttempt,
|
||||||
} from "./tool-result-truncation.js";
|
mockedSessionLikelyHasOversizedToolResults,
|
||||||
|
mockedTruncateOversizedToolResultsInSession,
|
||||||
const mockedRunEmbeddedAttempt = vi.mocked(runEmbeddedAttempt);
|
overflowBaseRunParams,
|
||||||
const mockedCompactDirect = vi.mocked(compactEmbeddedPiSessionDirect);
|
} from "./run.overflow-compaction.shared-test.js";
|
||||||
const mockedSessionLikelyHasOversizedToolResults = vi.mocked(sessionLikelyHasOversizedToolResults);
|
import type { EmbeddedRunAttemptResult } from "./run/types.js";
|
||||||
const mockedTruncateOversizedToolResultsInSession = vi.mocked(
|
|
||||||
truncateOversizedToolResultsInSession,
|
|
||||||
);
|
|
||||||
const mockedPickFallbackThinkingLevel = vi.mocked(pickFallbackThinkingLevel);
|
const mockedPickFallbackThinkingLevel = vi.mocked(pickFallbackThinkingLevel);
|
||||||
|
|
||||||
describe("runEmbeddedPiAgent overflow compaction trigger routing", () => {
|
describe("runEmbeddedPiAgent overflow compaction trigger routing", () => {
|
||||||
@@ -61,15 +55,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => {
|
|||||||
compactDirect: mockedCompactDirect,
|
compactDirect: mockedCompactDirect,
|
||||||
});
|
});
|
||||||
|
|
||||||
await runEmbeddedPiAgent({
|
await runEmbeddedPiAgent(overflowBaseRunParams);
|
||||||
sessionId: "test-session",
|
|
||||||
sessionKey: "test-key",
|
|
||||||
sessionFile: "/tmp/session.json",
|
|
||||||
workspaceDir: "/tmp/workspace",
|
|
||||||
prompt: "hello",
|
|
||||||
timeoutMs: 30000,
|
|
||||||
runId: "run-1",
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(mockedCompactDirect).toHaveBeenCalledTimes(1);
|
expect(mockedCompactDirect).toHaveBeenCalledTimes(1);
|
||||||
expect(mockedCompactDirect).toHaveBeenCalledWith(
|
expect(mockedCompactDirect).toHaveBeenCalledWith(
|
||||||
@@ -124,15 +110,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => {
|
|||||||
truncatedCount: 1,
|
truncatedCount: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
const result = await runEmbeddedPiAgent({
|
const result = await runEmbeddedPiAgent(overflowBaseRunParams);
|
||||||
sessionId: "test-session",
|
|
||||||
sessionKey: "test-key",
|
|
||||||
sessionFile: "/tmp/session.json",
|
|
||||||
workspaceDir: "/tmp/workspace",
|
|
||||||
prompt: "hello",
|
|
||||||
timeoutMs: 30000,
|
|
||||||
runId: "run-1",
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(mockedCompactDirect).toHaveBeenCalledTimes(3);
|
expect(mockedCompactDirect).toHaveBeenCalledTimes(3);
|
||||||
expect(mockedTruncateOversizedToolResultsInSession).toHaveBeenCalledTimes(1);
|
expect(mockedTruncateOversizedToolResultsInSession).toHaveBeenCalledTimes(1);
|
||||||
@@ -149,15 +127,7 @@ describe("runEmbeddedPiAgent overflow compaction trigger routing", () => {
|
|||||||
);
|
);
|
||||||
mockedPickFallbackThinkingLevel.mockReturnValue("low");
|
mockedPickFallbackThinkingLevel.mockReturnValue("low");
|
||||||
|
|
||||||
const result = await runEmbeddedPiAgent({
|
const result = await runEmbeddedPiAgent(overflowBaseRunParams);
|
||||||
sessionId: "test-session",
|
|
||||||
sessionKey: "test-key",
|
|
||||||
sessionFile: "/tmp/session.json",
|
|
||||||
workspaceDir: "/tmp/workspace",
|
|
||||||
prompt: "hello",
|
|
||||||
timeoutMs: 30000,
|
|
||||||
runId: "run-1",
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(32);
|
expect(mockedRunEmbeddedAttempt).toHaveBeenCalledTimes(32);
|
||||||
expect(mockedCompactDirect).not.toHaveBeenCalled();
|
expect(mockedCompactDirect).not.toHaveBeenCalled();
|
||||||
|
|||||||
Reference in New Issue
Block a user