mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 05:40:44 +00:00
test(live): classify provider media drift
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user