diff --git a/packages/api/src/llm/client.ts b/packages/api/src/llm/client.ts index 794771d..5d97c7d 100644 --- a/packages/api/src/llm/client.ts +++ b/packages/api/src/llm/client.ts @@ -31,6 +31,16 @@ function sleep(ms: number): Promise { // ANTHROPIC CLAUDE PROVIDER // ═══════════════════════════════════════════════════════ +// Serialize Claude API calls to stay within TPM limits +// Tier-1 has 40,000 TPM — with ~20K tokens/step, only 1 concurrent call safe +let claudeQueue: Promise = Promise.resolve(); + +function enqueueClaude(fn: () => Promise): Promise { + const result = claudeQueue.then(() => fn()); + claudeQueue = result.catch(() => {}); + return result; +} + async function generateClaude( systemPrompt: string, userPrompt: string, @@ -40,6 +50,7 @@ async function generateClaude( throw new Error("ANTHROPIC_API_KEY not set — cannot use Claude provider"); } + return enqueueClaude(async () => { const startTime = Date.now(); const resp = await fetch("https://api.anthropic.com/v1/messages", { @@ -90,6 +101,7 @@ async function generateClaude( totalDuration: duration * 1_000_000, // ns for compat evalCount: data.usage.output_tokens, }; + }); // end enqueueClaude } // ═══════════════════════════════════════════════════════