MCPcopy
hub / github.com/promptfoo/promptfoo / computeRateLimitWaitMs

Function computeRateLimitWaitMs

src/util/fetch/index.ts:345–368  ·  view source on GitHub ↗
(response: Response)

Source from the content-addressed store, hash-verified

343 * Default: 60s.
344 */
345export function computeRateLimitWaitMs(response: Response): number {
346 const rateLimitReset = response.headers.get('X-RateLimit-Reset');
347 const retryAfter = response.headers.get('Retry-After');
348 const openaiReset =
349 response.headers.get('x-ratelimit-reset-requests') ||
350 response.headers.get('x-ratelimit-reset-tokens');
351
352 let waitTime = 60_000;
353
354 if (openaiReset) {
355 const parsedHeaders = parseRateLimitHeaders(Object.fromEntries(response.headers.entries()));
356 if (parsedHeaders.resetAt !== undefined) {
357 waitTime = Math.max(parsedHeaders.resetAt - Date.now(), 0);
358 }
359 } else if (rateLimitReset) {
360 const resetTime = new Date(Number.parseInt(rateLimitReset) * 1000);
361 const now = new Date();
362 waitTime = Math.max(resetTime.getTime() - now.getTime() + 1000, 0);
363 } else if (retryAfter) {
364 waitTime = parseRetryAfter(retryAfter) ?? waitTime;
365 }
366
367 return waitTime;
368}
369
370/**
371 * Maximum jitter (in ms) added to rate-limit waits. Spreads concurrent

Callers 2

fetch.test.tsFile · 0.90
handleRateLimitFunction · 0.85

Calls 3

parseRateLimitHeadersFunction · 0.90
parseRetryAfterFunction · 0.90
getMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…