test(live): classify provider media drift

This commit is contained in:
Peter Steinberger
2026-04-29 05:25:30 +01:00
parent 5eb9b3da34
commit 0fc3032325
2 changed files with 39 additions and 7 deletions

View File

@@ -14,8 +14,14 @@ import {
encodePngRgba,
fillPixel,
getShellEnvAppliedKeys,
isAuthErrorMessage,
isBillingErrorMessage,
isLiveProfileKeyModeEnabled,
isLiveTestEnabled,
isModelNotFoundErrorMessage,
isOverloadedErrorMessage,
isServerErrorMessage,
isTimeoutErrorMessage,
isTruthyEnvValue,
parseCsvFilter,
parseProviderModelMap,
@@ -121,12 +127,30 @@ function resolveLiveLyrics(providerId: string): string | undefined {
].join("\n");
}
function isSkippableLiveMusicProviderError(providerId: string, error: unknown): boolean {
function resolveLiveMusicSkipReason(providerId: string, error: unknown): string | null {
const message = error instanceof Error ? error.message : String(error);
return (
if (
providerId === "google" &&
message.toLowerCase().includes("music generation response missing audio data")
);
) {
return "transient no-audio response";
}
if (isAuthErrorMessage(message)) {
return "auth drift";
}
if (isModelNotFoundErrorMessage(message)) {
return "model drift";
}
if (isBillingErrorMessage(message)) {
return "billing drift";
}
if (isTimeoutErrorMessage(message) || /operation was aborted/i.test(message)) {
return "provider timeout";
}
if (isOverloadedErrorMessage(message) || isServerErrorMessage(message)) {
return "provider outage";
}
return null;
}
describeLive("music generation provider live", () => {
@@ -204,8 +228,9 @@ describeLive("music generation provider live", () => {
expect(result.tracks[0]?.buffer.byteLength).toBeGreaterThan(1024);
attempted.push(`${testCase.providerId}:generate:${providerModel} (${authLabel})`);
} catch (error) {
if (isSkippableLiveMusicProviderError(testCase.providerId, error)) {
skipped.push(`${testCase.providerId}:generate transient no-audio response`);
const skipReason = resolveLiveMusicSkipReason(testCase.providerId, error);
if (skipReason) {
skipped.push(`${testCase.providerId}:generate ${skipReason}`);
continue;
}
failures.push(
@@ -242,8 +267,9 @@ describeLive("music generation provider live", () => {
expect(result.tracks[0]?.buffer.byteLength).toBeGreaterThan(1024);
attempted.push(`${testCase.providerId}:edit:${providerModel} (${authLabel})`);
} catch (error) {
if (isSkippableLiveMusicProviderError(testCase.providerId, error)) {
skipped.push(`${testCase.providerId}:edit transient no-audio response`);
const skipReason = resolveLiveMusicSkipReason(testCase.providerId, error);
if (skipReason) {
skipped.push(`${testCase.providerId}:edit ${skipReason}`);
continue;
}
failures.push(

View File

@@ -247,6 +247,9 @@ function resolveLiveVideoSkipReason(message: string): string | null {
) {
return "provider timeout";
}
if (/operation was aborted/i.test(message)) {
return "provider timeout";
}
if (isOverloadedErrorMessage(message) || isServerErrorMessage(message)) {
return "provider outage";
}
@@ -260,6 +263,9 @@ function resolveLiveVideoSkipReason(message: string): string | null {
if (/access denied|not authorized|not enabled|permission denied/i.test(message)) {
return "provider/model drift";
}
if (/response missing job details/i.test(message)) {
return "provider endpoint drift";
}
if (/blocked by (?:our )?moderation system|content policy|policy violation/i.test(message)) {
return "provider policy drift";
}