import { formatRawAssistantErrorForUi } from "../agents/pi-embedded-helpers.js"; import { normalizeOptionalString } from "../shared/string-coerce.js"; import type { FallbackNoticeState } from "../status/fallback-notice-state.js"; import { formatProviderModelRef } from "./model-runtime.js"; import type { RuntimeFallbackAttempt } from "./reply/agent-runner-execution.js";
export {
resolveActiveFallbackState,
type FallbackNoticeState,
} from "../status/fallback-notice-state.js";
const FALLBACK_REASON_PART_MAX = 80; const TRANSIENT_FALLBACK_REASONS = new Set(["rate_limit", "overloaded", "timeout"]); const TRANSIENT_ERROR_DETAIL_HINT_RE =
/\b(?:429|5\d\d|too many requests|usage limit|quota|try again in|retry[- ]after|seconds?|minutes?|hours?|temporarily unavailable|overloaded|service unavailable|throttl)\b/i;
function truncateFallbackReasonPart(value: string, max = FALLBACK_REASON_PART_MAX): string { const text = value.replace(/\s+/g, " ").trim(); if (text.length <= max) { return text;
} return `${text.slice(0, Math.max(0, max - 1)).trimEnd()}…`;
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.