ما الذي وقع
سقوف الباقة المجانية منخفضة عن قصد. بنى Google هذه الباقة للتجربة والاستكشاف، وأي واجهة حقيقية أمامها ستستنفد ميزانية طلبات دقيقة كاملة في ثوانٍ. نقرة مستخدم واحدة تتفرّع إلى أربعة استدعاءات للنموذج، حلقة إعادة محاولة بلا تأخير، مهمة مجدولة تستيقظ جائعة: كلٌّ منها يبدو بريئاً في مراجعة الكود ويلتهم الحصة وقت التشغيل.
المشاريع المشتركة هي الفخ الكلاسيكي الآخر. الحصة تُحتسب لكل مشروع لا لكل تطبيق، فالعرض التوضيحي الذي تركه زميل يعمل يأكل من الصحن نفسه الذي تأكل منه بيئة الإنتاج. والسقوف لا تختفي حين تدفع؛ الباقات المدفوعة تنشر أرقاماً أعلى، وأحمال العمل المتوازية الثقيلة قد تبلغها أيضاً.
الاستجابة
يغلّف Google كل فشل في القالب نفسه: حقل code رقمي يطابق حالة HTTP، ورسالة مقروءة للبشر، وسلسلة حالة gRPC. هذا شكل نموذجي لجسم استجابة 429:
{
"error": {
"code": 429,
"message": "Resource has been exhausted (e.g. check quota).",
"status": "RESOURCE_EXHAUSTED"
}
}
نص الرسالة يتغير حسب الحصة التي نفدت، لذا تفرّع على حقل status لا على النص.
خفّض المعدل من المصدر
إعادة المحاولة إسعاف أولي. تشكيل الحركة قبل أن تغادر عمليتك هو العلاج، ولا تحتاج مكتبة لذلك:
// JavaScript: حدّ التزامن وباعد بين بدايات الطلبات
function geminiLimiter(maxInFlight = 2, startGapMs = 4000) {
const queue = [];
let inFlight = 0;
let lastStart = 0;
function pump() {
if (inFlight >= maxInFlight) return;
if (queue.length === 0) return;
const wait = lastStart + startGapMs - Date.now();
if (wait > 0) { setTimeout(pump, wait); return; }
lastStart = Date.now();
inFlight += 1;
const job = queue.shift();
job.thunk().then(job.resolve, job.reject)
.finally(() => { inFlight -= 1; pump(); });
pump(); // قد تكون هناك فتحة أخرى متاحة
}
return (thunk) => new Promise((resolve, reject) => {
queue.push({ thunk, resolve, reject });
pump();
});
}
// 4000ms بين البدايات يحدّك قرب 15 استدعاءً في الدقيقة؛
// اضبط المقبضين على الحدود المنشورة لباقتك
const limited = geminiLimiter(2, 4000);
const reply = await limited(() => model.generateContent(prompt));
كل استدعاء يدخل بصفته دالة مؤجَّلة (thunk)، والبوابة تقرر متى يعمل. مقبضان، كلاهما مضبوط على الأرقام المنشورة لباقتك: كم طلباً يطير في آنٍ واحد، وكم تتباعد بداياتها.
الباقة المجانية أم الباقة الحقيقية
إن كان المحدِّد يؤدي عمله وتطبيقك ما زال يتضوّر جوعاً، فتوقّف عن الضبط واتخذ قراراً. ثلاثة أبواب. طلب رفع الحصة، حين يكون نمط استخدامك سليماً والسقف هو المشكلة الوحيدة. الفوترة، حين يكون هذا إنتاجاً؛ فالباقات المجانية موجودة للاختبار، والحركة التي تهمّ تستحق باقة بعقد خلفها. أو إعادة التوجيه، حين يكون جلّ العمل أنسب لنموذج آخر تماماً. باقة Gemini 3.5 Flash المدفوعة بسعر 1.50$ للإدخال و9.00$ للإخراج لكل مليون توكن مع سعة سياق مليون توكن، تُسعّر معظم أحمال الدردشة بدولارات أحادية الرقم في اليوم. الحاسبة تحوّل حركتك إلى رقم شهري دقيق، والترتيب يحسم إن كان نموذج آخر يستحق هذا الحجم.