i18n-ai-translate
Version:
AI-powered localization CLI, Node library, and GitHub Action. Translate i18next JSON, Gettext PO, Java .properties, and iOS .strings with ChatGPT, Claude, Gemini, or local Ollama models.
32 lines (31 loc) • 1.15 kB
TypeScript
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>;
}