implement Groq TPM rate limit handling - wait 60s for token budget reset

This commit is contained in:
Russell Ballestrini 2025-07-12 13:44:36 -04:00
parent 04fa0fb05f
commit 6335b651e6

View file

@ -115,17 +115,50 @@ export async function* sendMessage(message) {
console.log("Chat using tokens:", finalAvailable, "calculated:", calculatedAvailable, "max completion:", maxCompletionTokens);
const response = await fetch(apiUrl, {
method: "POST",
headers: headers,
body: JSON.stringify({
model: model,
messages: chatHistory,
temperature: 0.5,
max_tokens: finalAvailable,
stream: true,
}),
});
let response;
let retryCount = 0;
const maxRetries = 3;
while (retryCount < maxRetries) {
try {
response = await fetch(apiUrl, {
method: "POST",
headers: headers,
body: JSON.stringify({
model: model,
messages: chatHistory,
temperature: 0.5,
max_tokens: finalAvailable,
stream: true,
}),
});
// Check for rate limit error
if (response.status === 429 || response.status === 400) {
const errorText = await response.text();
if (errorText.includes('rate_limit_exceeded')) {
console.log(`Rate limit hit, waiting 60 seconds before retry ${retryCount + 1}/${maxRetries}...`);
yield "⏳ Rate limit reached, waiting 60 seconds for TPM window to reset...";
await new Promise(resolve => setTimeout(resolve, 60000)); // Wait 60 seconds for TPM reset
retryCount++;
continue;
} else {
// Non-rate-limit error, throw it
throw new Error(`API Error ${response.status}: ${errorText}`);
}
}
// If we get here, either success or non-rate-limit error
break;
} catch (error) {
console.error("Fetch error:", error);
throw error;
}
}
if (retryCount >= maxRetries) {
throw new Error("Rate limit exceeded after multiple retries. Please try again later.");
}
const reader = response.body.getReader();
const decoder = new TextDecoder();