Files
openclaw/extensions/qa-lab/src/live-timeout.test.ts
2026-04-08 05:37:17 +01:00

71 lines
1.8 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { resolveQaLiveTurnTimeoutMs } from "./live-timeout.js";
describe("qa live timeout policy", () => {
it("keeps mock lanes on the caller fallback", () => {
expect(
resolveQaLiveTurnTimeoutMs(
{
providerMode: "mock-openai",
primaryModel: "anthropic/claude-sonnet-4-6",
alternateModel: "anthropic/claude-opus-4-6",
},
30_000,
),
).toBe(30_000);
});
it("uses the higher gpt-5 live floor for openai heavy turns", () => {
expect(
resolveQaLiveTurnTimeoutMs(
{
providerMode: "live-frontier",
primaryModel: "openai/gpt-5.4",
alternateModel: "openai/gpt-5.4",
},
30_000,
),
).toBe(360_000);
});
it("keeps the standard live floor for other non-anthropic models", () => {
expect(
resolveQaLiveTurnTimeoutMs(
{
providerMode: "live-frontier",
primaryModel: "google/gemini-3-flash",
alternateModel: "google/gemini-3-flash",
},
30_000,
),
).toBe(120_000);
});
it("uses the anthropic floor for sonnet turns", () => {
expect(
resolveQaLiveTurnTimeoutMs(
{
providerMode: "live-frontier",
primaryModel: "anthropic/claude-sonnet-4-6",
alternateModel: "anthropic/claude-opus-4-6",
},
30_000,
),
).toBe(180_000);
});
it("uses the opus floor when the switched turn runs on claude opus", () => {
expect(
resolveQaLiveTurnTimeoutMs(
{
providerMode: "live-frontier",
primaryModel: "anthropic/claude-sonnet-4-6",
alternateModel: "anthropic/claude-opus-4-6",
},
30_000,
"anthropic/claude-opus-4-6",
),
).toBe(240_000);
});
});