/** * Exponential-backoff retry for transient provider failures. * * Today the agentic loop ends on the first `client.chat()` error * (agentic-loop.ts), which is fragile when hammering a single local model * server (Ollama/vLLM return 429/503 under load). `withRetry` wraps a call in * bounded exponential backoff with jitter, retrying only TRANSIENT failures * (rate limits, overload, timeouts, network resets) and surfacing everything * else immediately. * * The scheduler / interpreter wraps each provider call in this, so every * provider benefits without per-adapter changes. `sleep` and `jitter` are * injectable so tests are deterministic and instant. */ /** * Heuristic: is this error worth retrying? True for HTTP 408/429 and 5xx, * known transient network codes, and overload/rate-limit/timeout messages. */ export declare function classifyTransient(err: unknown): boolean; export interface RetryOptions { /** Max retries AFTER the first attempt. Default 3 (=> up to 4 calls). */ maxRetries?: number; /** Base delay in ms for the first backoff. Default 500. */ baseDelayMs?: number; /** Upper bound on a single backoff delay. Default 30_000. */ maxDelayMs?: number; /** Exponential growth factor. Default 2. */ factor?: number; /** Returns a value in [0, 1) for jitter. Default Math.random. Inject for tests. */ jitter?: () => number; /** Sleeps for `ms`. Default setTimeout-backed. Inject for tests. */ sleep?: (ms: number) => Promise; /** Decides whether an error is retryable. Default {@link classifyTransient}. */ isTransient?: (err: unknown) => boolean; /** Called before each backoff sleep (for logging / telemetry). */ onRetry?: (info: { attempt: number; delayMs: number; error: unknown; }) => void; } /** * Run `fn`, retrying TRANSIENT failures with exponential backoff + jitter. * Non-transient errors and the final exhausted error are rethrown. * * Backoff for retry `n` (0-based): `min(maxDelayMs, baseDelayMs * factor**n)`, * then jittered to 50–100% of that value (decorrelated, avoids thundering herd). */ export declare function withRetry(fn: () => Promise, opts?: RetryOptions): Promise; //# sourceMappingURL=retry.d.ts.map