import type { AssistantMessage, Context } from "../types.js"; import { AssistantMessageEventStream } from "./event-stream.js"; export declare const MAX_EMPTY_COMPLETION_RETRIES = 2; export declare const EMPTY_COMPLETION_BASE_DELAY_MS = 500; /** * Whether a completed assistant message carries content worth delivering: an * image, tool call, or any non-whitespace text. An empty/whitespace-only message * — or one that only ever produced thinking — is the "empty response" failure. */ export declare function hasVisibleAssistantContent(message: AssistantMessage): boolean; interface StreamRetryOptions { signal?: AbortSignal; providerRetryWait?: (delayMs: number, signal?: AbortSignal) => Promise; acceptEmptyResponse?: boolean; } /** Controls which replay-safe provider results may issue a fresh request. */ export interface ReplaySafeStreamRetryPolicy { /** Retry benign terminal stops that contain no visible output. */ retryEmptyCompletion?: boolean; /** Retry transient provider errors before output is committed. */ retryProviderErrors?: boolean; /** Maximum transient provider-error retries; empty completions keep their shared fixed budget. */ maxProviderErrorRetries?: number; } /** * Re-issues a fresh provider request only while the current attempt remains * replay-safe. Buffered pre-output events from discarded attempts never reach * consumers. */ export declare function withReplaySafeStreamRetry(model: M, context: Context, options: O | undefined, attempt: (model: M, context: Context, options?: O) => AssistantMessageEventStream, policy: ReplaySafeStreamRetryPolicy): AssistantMessageEventStream; export {};