UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

68 lines (67 loc) • 2.67 kB
import { t as formatErrorMessage } from "./errors-BSdPMFao.mjs"; import { n as assertOperatorModelAllowed, t as assertAdmittedRunOperatorAuthority } from "./admitted-run-context-CbCp9bj_.mjs"; import { t as resolveImageFallbackCandidates } from "./model-fallback-candidates-CyrfbGPU.mjs"; import { f as runFallbackAttempt, m as throwFallbackFailureSummary } from "./model-fallback-attempt-DKARfcnp.mjs"; //#region src/agents/model-fallback-image.ts /** Resolve one canonical candidate set for preparation and image/PDF execution. */ function resolveAllowedImageFallbackCandidates(params) { const authority = params.operatorAuthority; if (authority) { assertAdmittedRunOperatorAuthority(authority); authority.assertCurrent(); } const candidates = resolveImageFallbackCandidates(params); if (params.modelOverride?.trim()) assertOperatorModelAllowed(authority, candidates.find((candidate) => candidate.routeOrigin === "requested")); const policy = authority?.modelPolicy; if (!policy) return candidates; const allowed = candidates.filter((candidate) => policy.allows(candidate)); assertOperatorModelAllowed(authority, allowed[0]); return allowed; } async function runWithImageModelFallback(params) { const candidates = resolveAllowedImageFallbackCandidates(params); if (candidates.length === 0) throw new Error("No image model configured. Set agents.defaults.imageModel.primary or agents.defaults.imageModel.fallbacks."); const attempts = []; let lastError; for (const [i, candidate] of candidates.entries()) { assertOperatorModelAllowed(params.operatorAuthority, candidate); const attemptRun = await runFallbackAttempt({ run: params.run, ...candidate, attempts, attempt: i + 1, total: candidates.length, abortSignal: params.abortSignal }).catch((error) => { params.operatorAuthority?.assertCurrent(); params.abortSignal?.throwIfAborted(); throw error; }); assertOperatorModelAllowed(params.operatorAuthority, candidate); if ("success" in attemptRun) return attemptRun.success; const err = attemptRun.error; lastError = err; attempts.push({ provider: candidate.provider, model: candidate.model, error: formatErrorMessage(err) }); await params.onError?.({ provider: candidate.provider, model: candidate.model, error: err, attempt: i + 1, total: candidates.length }); } return throwFallbackFailureSummary({ attempts, candidates, lastError, label: "image models", formatAttempt: (attempt) => `${attempt.provider}/${attempt.model}: ${attempt.error}`, cfg: params.cfg }); } //#endregion export { runWithImageModelFallback as n, resolveAllowedImageFallbackCandidates as t };