mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 13:20:43 +00:00
refactor: share media generation failure recording
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { listProfilesForProvider } from "../agents/auth-profiles.js";
|
||||
import { ensureAuthProfileStore } from "../agents/auth-profiles.js";
|
||||
import { DEFAULT_PROVIDER } from "../agents/defaults.js";
|
||||
import { describeFailoverError, isFailoverError } from "../agents/failover-error.js";
|
||||
import { resolveEnvApiKey } from "../agents/model-auth-env.js";
|
||||
import type { FallbackAttempt } from "../agents/model-fallback.types.js";
|
||||
import {
|
||||
@@ -9,6 +10,7 @@ import {
|
||||
} from "../config/model-input.js";
|
||||
import type { AgentModelConfig } from "../config/types.agents-shared.js";
|
||||
import type { OpenClawConfig } from "../config/types.js";
|
||||
import { formatErrorMessage } from "../infra/errors.js";
|
||||
import { getProviderEnvVars } from "../secrets/provider-env-vars.js";
|
||||
import { normalizeOptionalString } from "../shared/string-coerce.js";
|
||||
import type {
|
||||
@@ -27,6 +29,23 @@ export type {
|
||||
MediaNormalizationValue,
|
||||
} from "./normalization.types.js";
|
||||
|
||||
export function recordCapabilityCandidateFailure(params: {
|
||||
attempts: FallbackAttempt[];
|
||||
provider: string;
|
||||
model: string;
|
||||
error: unknown;
|
||||
}): void {
|
||||
const described = isFailoverError(params.error) ? describeFailoverError(params.error) : undefined;
|
||||
params.attempts.push({
|
||||
provider: params.provider,
|
||||
model: params.model,
|
||||
error: described?.message ?? formatErrorMessage(params.error),
|
||||
reason: described?.reason,
|
||||
status: described?.status,
|
||||
code: described?.code,
|
||||
});
|
||||
}
|
||||
|
||||
export function hasMediaNormalizationEntry<TValue extends MediaNormalizationValue>(
|
||||
entry: MediaNormalizationEntry<TValue> | undefined,
|
||||
): entry is MediaNormalizationEntry<TValue> {
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import { describeFailoverError, isFailoverError } from "../agents/failover-error.js";
|
||||
import type { FallbackAttempt } from "../agents/model-fallback.types.js";
|
||||
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
||||
import { formatErrorMessage } from "../infra/errors.js";
|
||||
import { createSubsystemLogger } from "../logging/subsystem.js";
|
||||
import {
|
||||
buildMediaGenerationNormalizationMetadata,
|
||||
buildNoCapabilityModelConfiguredMessage,
|
||||
recordCapabilityCandidateFailure,
|
||||
resolveCapabilityModelCandidates,
|
||||
throwCapabilityGenerationFailure,
|
||||
} from "../media-generation/runtime-shared.js";
|
||||
@@ -104,14 +103,11 @@ export async function generateMusic(
|
||||
};
|
||||
} catch (err) {
|
||||
lastError = err;
|
||||
const described = isFailoverError(err) ? describeFailoverError(err) : undefined;
|
||||
attempts.push({
|
||||
recordCapabilityCandidateFailure({
|
||||
attempts,
|
||||
provider: candidate.provider,
|
||||
model: candidate.model,
|
||||
error: described?.message ?? formatErrorMessage(err),
|
||||
reason: described?.reason,
|
||||
status: described?.status,
|
||||
code: described?.code,
|
||||
error: err,
|
||||
});
|
||||
log.debug(`music-generation candidate failed: ${candidate.provider}/${candidate.model}`);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import { describeFailoverError, isFailoverError } from "../agents/failover-error.js";
|
||||
import type { FallbackAttempt } from "../agents/model-fallback.types.js";
|
||||
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
||||
import { formatErrorMessage } from "../infra/errors.js";
|
||||
import { createSubsystemLogger } from "../logging/subsystem.js";
|
||||
import {
|
||||
buildMediaGenerationNormalizationMetadata,
|
||||
buildNoCapabilityModelConfiguredMessage,
|
||||
recordCapabilityCandidateFailure,
|
||||
resolveCapabilityModelCandidates,
|
||||
throwCapabilityGenerationFailure,
|
||||
} from "../media-generation/runtime-shared.js";
|
||||
@@ -290,14 +289,11 @@ export async function generateVideo(
|
||||
};
|
||||
} catch (err) {
|
||||
lastError = err;
|
||||
const described = isFailoverError(err) ? describeFailoverError(err) : undefined;
|
||||
attempts.push({
|
||||
recordCapabilityCandidateFailure({
|
||||
attempts,
|
||||
provider: candidate.provider,
|
||||
model: candidate.model,
|
||||
error: described?.message ?? formatErrorMessage(err),
|
||||
reason: described?.reason,
|
||||
status: described?.status,
|
||||
code: described?.code,
|
||||
error: err,
|
||||
});
|
||||
log.debug(`video-generation candidate failed: ${candidate.provider}/${candidate.model}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user