import RateLimiter from "./rate_limiter";
/**
 * Usage pattern
 * -------------
 * await limiter.wait(estimatedTokens);   // BEFORE the request
 * ... make API request ...
 * limiter.apiCalled(actualTokens);       // AFTER the request
 */
export default class TokenRateLimiter implements RateLimiter {
    private lastAPICall;
    private readonly delayBetweenCallsMs;
    private readonly maxTokensPerMinute;
    private windowStart;
    private tokensThisWindow;
    private readonly verboseLogging;
    constructor(delayBetweenCallsMs: number, verboseLogging: boolean);
    /**
     * Call immediately **after** a successful request.
     * @param tokenCount  Prompt + completion tokens the request actually consumed
     */
    apiCalled(tokenCount: number): void;
    /**
     * Call immediately **before** you send a request.
     * It sleeps long enough so that:
     *   • you do not exceed 200 000 tokens in any 60 s window
     *   • you respect `delayBetweenCallsMs` (if you were using that before)
     *
     * @param tokenCount  Expected token usage for the upcoming request
     */
    wait(tokenCount: number): Promise<void>;
}
