export type RetryReason = "rate-limit" | "timeout" | "network" | "provider" | "validation" | "authentication" | "unsafe-endpoint" | "aborted" | "unknown"; export interface RetryPolicy { maxAttempts: number; baseDelayMs?: number; maxDelayMs?: number; jitter?: number; sleep?: (delayMs: number, signal: AbortSignal) => Promise; random?: () => number; onRetry?: (attempt: RetryAttempt) => void; } export interface RetryAttempt { attempt: number; delayMs: number; reason?: RetryReason; error?: string; } export declare class RetryError extends Error { readonly retryAfterMs?: number | undefined; readonly status?: number | undefined; constructor(message: string, retryAfterMs?: number | undefined, status?: number | undefined); } export declare function classifyRetryReason(error: unknown): RetryReason; export declare function isRetryable(reason: RetryReason): boolean; export declare function retry(operation: (attempt: number) => Promise, policy: RetryPolicy, signal: AbortSignal): Promise<{ value: T; attempts: RetryAttempt[]; }>; export declare function withFallback(models: string[], operation: (model: string) => Promise, signal: AbortSignal): Promise<{ value: T; model: string; attempts: string[]; }>; export declare class CircuitBreaker { private readonly threshold; private readonly cooldownMs; private readonly now; private failures; private openedAt; constructor(threshold?: number, cooldownMs?: number, now?: () => number); get state(): "closed" | "open" | "half-open"; canRequest(): boolean; recordSuccess(): void; recordFailure(): void; }