implement Groq TPM rate limit handling - wait 60s for token budget reset
This commit is contained in:
parent
04fa0fb05f
commit
6335b651e6
1 changed files with 44 additions and 11 deletions
55
src/chat.js
55
src/chat.js
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue