/** * Automatic Retry with Exponential Backoff * * Provides retry functionality for LLM API calls with: * - Exponential backoff * - Jitter to prevent thundering herd * - Retry-After header support * - Integration with rate limiter */ import type { RetryConfig, RateLimiter } from './types.js'; /** * Retry a function with exponential backoff * * @param fn - Function to retry * @param config - Retry configuration * @returns Result of the function * * @example * ```typescript * const result = await withRetry( * () => provider.chat(messages, options), * { * maxRetries: 3, * baseDelayMs: 1000, * onRetry: (attempt, error, delay) => { * console.log(`Retry ${attempt} after ${delay}ms: ${error.message}`); * }, * } * ); * ``` */ export declare function withRetry(fn: () => Promise, config?: RetryConfig): Promise; /** * Create a retry wrapper that also integrates with rate limiting * * @param rateLimiter - Rate limiter instance * @param config - Retry configuration * @returns Function wrapper with retry and rate limiting * * @example * ```typescript * const limiter = createRateLimiter({ requestsPerMinute: 60 }); * const retryWithLimit = createRetryWithRateLimit(limiter, { maxRetries: 3 }); * * const result = await retryWithLimit( * () => provider.chat(messages, options), * 1000 // estimated tokens * ); * ``` */ export declare function createRetryWithRateLimit(rateLimiter: RateLimiter, config?: RetryConfig): (fn: () => Promise, estimatedTokens?: number) => Promise; /** * Retry configuration builder for common scenarios */ export declare const RetryPresets: { /** * Conservative retry: few retries, long delays */ readonly conservative: () => RetryConfig; /** * Aggressive retry: more retries, shorter delays */ readonly aggressive: () => RetryConfig; /** * No retry: fail immediately */ readonly none: () => RetryConfig; /** * Respect API limits: use Retry-After headers when available */ readonly respectful: () => RetryConfig; }; /** * Retry statistics collector */ export declare class RetryStats { private attempts; private successes; private failures; private retries; private totalDelayMs; private lastError?; /** * Create retry config that tracks statistics */ createConfig(baseConfig?: RetryConfig): RetryConfig; /** * Record an attempt outcome */ recordAttempt(success: boolean): void; /** * Get statistics */ getStats(): { attempts: number; successes: number; failures: number; retries: number; totalDelayMs: number; successRate: number; averageRetries: number; lastError?: string; }; /** * Reset statistics */ reset(): void; }