Gemini API Anahtarlarını Next.js Cron İşlerinde Döndürme

Vercel üzerinde zamanlanmış arka plan işleri çalıştırırken tek bir Gemini API anahtarı dakikalar içinde kotasını tüketebiliyor. PulseROI'nin deneyimine göre, 200+ influencer videosu işlerken gece yarısı cron işi çalışırken 429 Too Many Requests hatası alınıyor ve veri tabanı tutarsız kalabiliyor.

İlk çözüm denemesi basit try/catch ve exponential backoff yapısıydı ama bu yalnızca gecikmeli bir başarısızlıktı. Gerçek sorun tek anahtarın sınırına çarpması. Çözüm, ortam değişkenlerine birden fazla anahtar eklemek ve işlem sırasında bunları döndürerek kullanmak.

1const apiKeys = [
2process.env.GEMINI_API_KEY_1,
3process.env.GEMINI_API_KEY_2,
4process.env.GEMINI_API_KEY_3
5];
6
7let currentKeyIndex = 0;
8
9function getNextApiKey() {
10const key = apiKeys[currentKeyIndex];
11currentKeyIndex = (currentKeyIndex + 1) % apiKeys.length;
12return key;
13}
14
15async function callGeminiWithRotation(prompt) {
16let lastError;
17
18for (let attempt = 0; attempt < apiKeys.length; attempt++) {
19try {
20const apiKey = getNextApiKey();
21const genAI = new GoogleGenerativeAI(apiKey);
22const model = genAI.getGenerativeModel({ model: 'gemini-1.5-flash' });
23const result = await model.generateContent(prompt);
24return result.response.text();
25} catch (error) {
26lastError = error;
27if (error.status === 429) {
28console.log(`Anahtar ${currentKeyIndex} kotası doldu, sonraki anahtarı deniyorum...`);
29continue;
30}
31throw error;
32}
33}
34
35throw lastError;
36}

Bu yaklaşım basit ama etkili. Her API çağrısında farklı bir anahtar kullanılıyor, böylece yük dağılıyor. 429 hatası alındığında bir sonraki anahtara geçiliyor. Vercel cron işlerinde bu, 200+ video işlemesini başarıyla tamamlamak için yeterli oluyor.

Kotayı daha akıllıca yönetmek istersen, Redis veya basit bir JSON dosyasında her anahtarın son kullanım zamanını tutabilir ve en eski olanı seçebilirsin. Ama rotasyon başlı başına çoğu durumda problemi çözer. Önemli olan, tek bir anahtarla ilerlememeye dikkat etmek.

konu hakkında tepkinizi verebilirsiniz