import type { Model, ModelRequest, ModelResponse, ModelSettings, RetryPolicy } from '../model';
import type { StreamEvent } from '../types/protocol';
import { Usage } from '../usage';
type ModelRetryHandlers = {
    onModelFailureUsage?: (usage: Usage) => void;
    onModelTimeout?: () => void;
    onPossiblyAcceptedRequestFailure?: () => void;
};
export declare function validateModelTimeoutMs(modelSettings: ModelSettings): number | undefined;
export declare const retryPolicies: {
    readonly never: () => RetryPolicy;
    readonly providerSuggested: () => RetryPolicy;
    readonly networkError: () => RetryPolicy;
    readonly httpStatus: (statuses: number[]) => RetryPolicy;
    readonly retryAfter: () => RetryPolicy;
    readonly any: (...policies: RetryPolicy[]) => RetryPolicy;
    readonly all: (...policies: RetryPolicy[]) => RetryPolicy;
};
export declare function getResponseWithRetry(model: Model, request: ModelRequest, handlers?: ModelRetryHandlers): Promise<ModelResponse>;
export declare function getStreamedResponseWithRetry(model: Model, request: ModelRequest, handlers?: ModelRetryHandlers): AsyncIterable<StreamEvent>;
export {};
