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); }); });