40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
import {
|
|
isMediaInputFailure,
|
|
isNonProviderRequestStatus,
|
|
} from "@/lib/ai/runtime/request-failure-classification";
|
|
import { shouldFailoverVip98kRequestRejection } from "@/lib/ai/runtime/model-health";
|
|
|
|
test.describe("AI model health request classification", () => {
|
|
test("does not treat rejected media as a provider outage", () => {
|
|
expect(
|
|
isMediaInputFailure("The media request is invalid. (HTTP 400)"),
|
|
).toBe(true);
|
|
expect(
|
|
isMediaInputFailure("VIP98K reference staging failed: fetch failed"),
|
|
).toBe(true);
|
|
});
|
|
|
|
test("recognizes request-specific HTTP failures", () => {
|
|
expect(isNonProviderRequestStatus(413, "payload too large")).toBe(true);
|
|
expect(isNonProviderRequestStatus(null, "request failed (HTTP 422)")).toBe(
|
|
true,
|
|
);
|
|
expect(isNonProviderRequestStatus(503, "service unavailable")).toBe(false);
|
|
});
|
|
|
|
test("fails over generic VIP98K contract rejections without broadening other 400s", () => {
|
|
const error = new Error("The request is invalid. (HTTP 400)");
|
|
expect(shouldFailoverVip98kRequestRejection(error, "vip98k")).toBe(true);
|
|
expect(shouldFailoverVip98kRequestRejection(error, "alibaba-image")).toBe(
|
|
false,
|
|
);
|
|
expect(
|
|
shouldFailoverVip98kRequestRejection(
|
|
new Error("Unsupported media type (HTTP 400)"),
|
|
"vip98k",
|
|
),
|
|
).toBe(false);
|
|
});
|
|
});
|