mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-10 06:04:00 +00:00
The live-frontier turn-timeout resolution only matched `anthropic/` models, so `claude-cli/*` routes fell into the 120s fallback bucket instead of the 180s Anthropic floor, and claude-cli Opus missed the 240s Opus floor — even though claude-cli serves the same Anthropic Claude models. Recognize claude-cli as Anthropic-family via a small `isAnthropicFamilyModel` helper, mirroring the existing `provider === "anthropic" || provider === "claude-cli"` precedent in the aimock and mock-openai servers. Co-authored-by: clawSean <260045960+clawSean@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
98 lines
2.5 KiB
TypeScript
98 lines
2.5 KiB
TypeScript
// Qa Lab tests cover live timeout plugin behavior.
|
|
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-8",
|
|
},
|
|
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.5",
|
|
alternateModel: "openai/gpt-5.5",
|
|
},
|
|
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-8",
|
|
},
|
|
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-8",
|
|
},
|
|
30_000,
|
|
"anthropic/claude-opus-4-8",
|
|
),
|
|
).toBe(240_000);
|
|
});
|
|
|
|
it("uses the anthropic floor for claude-cli sonnet turns", () => {
|
|
expect(
|
|
resolveQaLiveTurnTimeoutMs(
|
|
{
|
|
providerMode: "live-frontier",
|
|
primaryModel: "claude-cli/claude-sonnet-4-6",
|
|
alternateModel: "claude-cli/claude-opus-4-8",
|
|
},
|
|
30_000,
|
|
),
|
|
).toBe(180_000);
|
|
});
|
|
|
|
it("uses the opus floor for claude-cli opus turns", () => {
|
|
expect(
|
|
resolveQaLiveTurnTimeoutMs(
|
|
{
|
|
providerMode: "live-frontier",
|
|
primaryModel: "claude-cli/claude-opus-4-8",
|
|
alternateModel: "claude-cli/claude-opus-4-8",
|
|
},
|
|
30_000,
|
|
),
|
|
).toBe(240_000);
|
|
});
|
|
});
|