yadnyeshkolte commited on
Commit
37cfe86
·
1 Parent(s): 3efce95
mcp-servers/doc-generator/src/index.mts CHANGED
@@ -14,27 +14,47 @@ const GROQ_API_KEY = process.env.GROQ_API_KEY;
14
  async function callGroq(messages: any[], maxTokens: number = 4000) {
15
  if (!GROQ_API_KEY) throw new Error("GROQ_API_KEY not set");
16
 
17
- const response = await fetch("https://api.groq.com/openai/v1/chat/completions", {
18
- method: "POST",
19
- headers: {
20
- "Authorization": `Bearer ${GROQ_API_KEY}`,
21
- "Content-Type": "application/json",
22
- },
23
- body: JSON.stringify({
24
- model: "llama-3.1-8b-instant",
25
- messages: messages,
26
- temperature: 0.5,
27
- max_completion_tokens: maxTokens,
28
- }),
29
- });
30
-
31
- if (!response.ok) {
32
- const err = await response.text();
33
- throw new Error(`Groq API Error: ${err}`);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
-
36
- const data = await response.json();
37
- return data.choices[0].message.content;
38
  }
39
 
40
  const server = new Server(
 
14
  async function callGroq(messages: any[], maxTokens: number = 4000) {
15
  if (!GROQ_API_KEY) throw new Error("GROQ_API_KEY not set");
16
 
17
+ let lastError;
18
+ for (let attempt = 0; attempt < 3; attempt++) {
19
+ try {
20
+ const response = await fetch("https://api.groq.com/openai/v1/chat/completions", {
21
+ method: "POST",
22
+ headers: {
23
+ "Authorization": `Bearer ${GROQ_API_KEY}`,
24
+ "Content-Type": "application/json",
25
+ },
26
+ body: JSON.stringify({
27
+ model: "llama-3.3-70b-versatile",
28
+ messages: messages,
29
+ temperature: 0.5,
30
+ max_completion_tokens: maxTokens,
31
+ }),
32
+ });
33
+
34
+ if (response.status === 429) {
35
+ const retryAfter = 2; // Default to 2s
36
+ console.warn(`Rate limited. Retrying in ${retryAfter}s...`);
37
+ await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
38
+ continue;
39
+ }
40
+
41
+ if (!response.ok) {
42
+ const err = await response.text();
43
+ throw new Error(`Groq API Error: ${err}`);
44
+ }
45
+
46
+ const data = await response.json();
47
+ return data.choices[0].message.content;
48
+ } catch (e: any) {
49
+ lastError = e;
50
+ if (e.message.includes("Rate limit")) {
51
+ await new Promise(resolve => setTimeout(resolve, 2000 * (attempt + 1)));
52
+ continue;
53
+ }
54
+ throw e;
55
+ }
56
  }
57
+ throw lastError;
 
 
58
  }
59
 
60
  const server = new Server(