export interface TokenRateLimiterOptions { tokensPerMinute?: number; minimumTokensPerMinute?: number; adaptiveBackoffFactor?: number; windowMs?: number; retryDelayMs?: number; now?: () => number; sleep?: (delayMs: number) => Promise; } /** * Estimate provider TPM usage without treating encoded image bytes as text. * Provider APIs tokenize images from their dimensions/detail level, not from * the size of the base64 transport representation. */ export declare function estimateProviderPayloadTokens(payload: unknown): number; export declare function retryDelayFromHeaders(headers: Readonly>, now?: number): number | undefined; export declare function isTokenRateLimitError(message: string | undefined): boolean; export declare class TokenRateLimiter { private readonly maximumTokensPerMinute; private readonly minimumTokensPerMinute; private readonly adaptiveBackoffFactor; private effectiveTokensPerMinute; private readonly windowMs; private readonly retryDelayMs; private readonly now; private readonly sleep; private readonly events; private blockedUntil; private calibrationFactor; constructor(options?: TokenRateLimiterOptions); private prune; currentBudget(): { effectiveTokensPerMinute: number; maximumTokensPerMinute: number; }; waitForBudget(payload: unknown): Promise<{ rawEstimatedTokens: number; estimatedTokens: number; waitedMs: number; usedTokens: number; effectiveTokensPerMinute: number; calibrationFactor: number; }>; /** * Replace the most recent request estimate with provider-reported input * usage. This keeps later requests from being paced by a stale conservative * estimate when the SDK exposes exact usage on the assistant message. */ noteActualUsage(inputTokens: number | undefined): void; noteResponse(status: number, headers: Readonly>, tokenLimited?: boolean): void; } //# sourceMappingURL=rate-limit.d.ts.map