import type { FallbackEntry } from "../../shared/model-requirements"; import type { ChatMessageInput, ChatMessageHandlerOutput } from "../../plugin/chat-message"; import { type ModelFallbackStateController } from "./fallback-state-controller"; import type { ModelFallbackControllerAccessor } from "./controller-accessor"; type FallbackToast = (input: { title: string; message: string; variant?: "info" | "success" | "warning" | "error"; duration?: number; }) => void | Promise; type FallbackCallback = (input: { sessionID: string; providerID: string; modelID: string; variant?: string; }) => void | Promise; export type ModelFallbackState = { providerID: string; modelID: string; fallbackChain: FallbackEntry[]; attemptCount: number; pending: boolean; }; type ModelFallbackControllerWithState = Pick; export type ModelFallbackHook = ModelFallbackControllerWithState & { "chat.message": (input: ChatMessageInput, output: ChatMessageHandlerOutput) => Promise; }; type ModelFallbackHookArgs = { toast?: FallbackToast; onApplied?: FallbackCallback; controllerAccessor?: ModelFallbackControllerAccessor; }; export declare function setSessionFallbackChain(controller: Pick, sessionID: string, fallbackChain: FallbackEntry[] | undefined): void; export declare function clearSessionFallbackChain(controller: Pick, sessionID: string): void; export declare function getSessionFallbackChain(controller: Pick, sessionID: string): FallbackEntry[] | undefined; /** * Sets a pending model fallback for a session. * Called when a model error is detected in session.error handler. */ export declare function setPendingModelFallback(controller: Pick, sessionID: string, agentName: string, currentProviderID: string, currentModelID: string): boolean; /** * Gets the next fallback model for a session. * Increments attemptCount each time called. */ export declare function getNextFallback(controller: Pick, sessionID: string): { providerID: string; modelID: string; variant?: string; } | null; /** * Clears the pending fallback for a session. * Called after fallback is successfully applied. */ export declare function clearPendingModelFallback(controller: Pick, sessionID: string): void; /** * Checks if there's a pending fallback for a session. */ export declare function hasPendingModelFallback(controller: Pick, sessionID: string): boolean; /** * Gets the current fallback state for a session (for debugging). */ export declare function getFallbackState(controller: Pick, sessionID: string): ModelFallbackState | undefined; /** * Creates a chat.message hook that applies model fallbacks when pending. */ export declare function createModelFallbackHook(args?: ModelFallbackHookArgs): ModelFallbackHook; /** * Resets hook-owned state for testing. */ export declare function _resetForTesting(controller?: Pick): void; export {};