fix(web): show Antigravity quota guidance instead of the generic run-failure copy

The Antigravity RATE_LIMITED card had no message key, so it rendered
chat.runError.fallbackMessage ("This task failed to run. Please retry")
-- the exact sentence in the OPEND-3495 report -- with no hint that the
per-model quota was the cause. Give it its own copy (switch model in the
model menu or via agy /model) and the quotaExhausted title, in all 19
locales.
This commit is contained in:
lefarcen
2026-10-08 19:44:03 +08:00
parent 3402d5813a
commit 68a84c3ff3
22 changed files with 53 additions and 4 deletions
+1
View File
@@ -157,6 +157,7 @@ export const ar: Dict = {
'chat.runError.modelUnavailableMessage': "يُرجى اختيار نموذج آخر متاح ثم إعادة المحاولة.",
'chat.runError.modelCapabilityUnsupportedMessage': "هذا النموذج لا يدعم الإمكانات التي تحتاجها المهمة. غيّر النموذج ثم أعد المحاولة.",
'chat.runError.rateLimitedMessage': 'هناك عدد كبير من الطلبات على خدمة النموذج هذه حاليًا، وقد تم بلوغ حد تكرار الطلبات لدى المزوّد. أعد المحاولة لاحقًا، أو جرّب التبديل إلى نموذج آخر.',
'chat.runError.antigravityQuotaMessage': 'لكل نموذج في Antigravity حصة خاصة به، وقد نفدت حصة النموذج الحالي. اختر نموذجًا آخر من قائمة النماذج، أو افتح `agy` في الطرفية وبدّل النموذج باستخدام ‎/model، ثم حاول مرة أخرى.',
'chat.runError.modelWindowLimitMessage': 'هناك ازدحام في الاستخدام حاليًا. حاول مرة أخرى بعد {retryAt}. لم تتم محاسبتك على هذا الطلب.',
'chat.runError.modelWindowLimitMessageNoTime': 'هناك ازدحام في الاستخدام حاليًا. حاول مرة أخرى بعد قليل. لم تتم محاسبتك على هذا الطلب.',
'chat.runError.membershipConcurrencyLimitMessage': 'تم بلوغ حد المهام المتزامنة لعضويتك. انتظر حتى {retryAt} ثم أعد المحاولة، أو انتقل إلى وكيل آخر. لن تفيد المحاولة الفورية.',
+1
View File
@@ -157,6 +157,7 @@ export const de: Dict = {
'chat.runError.modelUnavailableMessage': "Bitte wähle ein anderes verfügbares Modell und versuche es erneut.",
'chat.runError.modelCapabilityUnsupportedMessage': "Dieses Modell unterstützt die für die Aufgabe nötigen Funktionen nicht. Wechsle das Modell und versuche es erneut.",
'chat.runError.rateLimitedMessage': 'Aktuell gibt es viele Anfragen an diesen Modelldienst und das Anfragelimit des Anbieters ist erreicht. Versuche es später erneut oder wechsle zu einem anderen Modell.',
'chat.runError.antigravityQuotaMessage': 'Jedes Antigravity-Modell hat ein eigenes Kontingent, und das des aktuellen Modells ist aufgebraucht. Wähle im Modellmenü ein anderes Modell oder öffne `agy` in einem Terminal und wechsle das Modell mit /model. Versuche es dann erneut.',
'chat.runError.modelWindowLimitMessage': 'Zurzeit hohe Auslastung. Bitte versuche es nach {retryAt} erneut. Diese Anfrage wurde nicht berechnet.',
'chat.runError.modelWindowLimitMessageNoTime': 'Zurzeit hohe Auslastung. Bitte versuche es in Kürze erneut. Diese Anfrage wurde nicht berechnet.',
'chat.runError.membershipConcurrencyLimitMessage': 'Das Limit gleichzeitiger Aufgaben deiner Mitgliedschaft ist erreicht. Warte bis {retryAt} und versuche es erneut oder wechsle zu einem anderen Agenten. Sofortige Wiederholungen helfen nicht.',
+1
View File
@@ -157,6 +157,7 @@ export const en: Dict = {
'chat.runError.modelUnavailableMessage': "Please pick another available model and try again.",
'chat.runError.modelCapabilityUnsupportedMessage': "This model doesn’t support the capabilities this task needs. Switch models and try again.",
'chat.runError.rateLimitedMessage': 'There are a lot of requests to this model service right now and the provider\'s rate limit has been reached. Try again later, or try switching to another model.',
'chat.runError.antigravityQuotaMessage': 'Each Antigravity model has its own quota, and the current model\'s is used up. Pick a different model in the model menu, or open `agy` in a terminal and switch models with /model, then try again.',
'chat.runError.modelWindowLimitMessage': 'High demand right now — please try again after {retryAt}. This request was not charged.',
'chat.runError.modelWindowLimitMessageNoTime': 'High demand right now — please try again shortly. This request was not charged.',
'chat.runError.membershipConcurrencyLimitMessage': 'Your membership\'s concurrent task limit is full. Wait until {retryAt}, then retry, or switch to another agent. Immediate retries will not help.',
+1
View File
@@ -157,6 +157,7 @@ export const esES: Dict = {
'chat.runError.modelUnavailableMessage': "Elige otro modelo disponible y vuelve a intentarlo.",
'chat.runError.modelCapabilityUnsupportedMessage': "Este modelo no admite las funciones que necesita la tarea. Cambia de modelo y vuelve a intentarlo.",
'chat.runError.rateLimitedMessage': 'Ahora mismo hay muchas solicitudes a este servicio del modelo y se ha alcanzado el límite de frecuencia del proveedor. Inténtalo más tarde o prueba a cambiar a otro modelo.',
'chat.runError.antigravityQuotaMessage': 'Cada modelo de Antigravity tiene su propia cuota y la del modelo actual se ha agotado. Elige otro modelo en el menú de modelos o abre `agy` en un terminal y cambia de modelo con /model; después, vuelve a intentarlo.',
'chat.runError.modelWindowLimitMessage': 'Hay mucha demanda ahora mismo. Inténtalo de nuevo después de {retryAt}. No se te ha cobrado esta solicitud.',
'chat.runError.modelWindowLimitMessageNoTime': 'Hay mucha demanda ahora mismo. Inténtalo de nuevo en unos momentos. No se te ha cobrado esta solicitud.',
'chat.runError.membershipConcurrencyLimitMessage': 'Tu membresía ha alcanzado el límite de tareas simultáneas. Espera hasta {retryAt} y reinténtalo, o cambia de agente. Reintentar de inmediato no ayudará.',
+1
View File
@@ -157,6 +157,7 @@ export const fa: Dict = {
'chat.runError.modelUnavailableMessage': "لطفاً مدل در دسترس دیگری انتخاب کنید و دوباره تلاش کنید.",
'chat.runError.modelCapabilityUnsupportedMessage': "این مدل از قابلیت‌های موردنیاز این وظیفه پشتیبانی نمی‌کند. مدل را عوض کنید و دوباره تلاش کنید.",
'chat.runError.rateLimitedMessage': 'در حال حاضر درخواست‌های زیادی به این سرویس مدل ارسال می‌شود و به سقف تعداد درخواست ارائه‌دهنده رسیده‌اید. بعداً دوباره تلاش کنید یا تغییر به مدل دیگری را امتحان کنید.',
'chat.runError.antigravityQuotaMessage': 'هر مدل Antigravity سهمیهٔ جداگانه‌ای دارد و سهمیهٔ مدل فعلی تمام شده است. از منوی مدل، مدل دیگری انتخاب کنید یا `agy` را در ترمینال باز کنید و با ‎/model مدل را عوض کنید، سپس دوباره امتحان کنید.',
'chat.runError.modelWindowLimitMessage': 'در حال حاضر ازدحام زیاد است. لطفاً پس از {retryAt} دوباره تلاش کنید. بابت این درخواست هزینه‌ای کسر نشد.',
'chat.runError.modelWindowLimitMessageNoTime': 'در حال حاضر ازدحام زیاد است. لطفاً کمی بعد دوباره تلاش کنید. بابت این درخواست هزینه‌ای کسر نشد.',
'chat.runError.membershipConcurrencyLimitMessage': 'سقف کارهای هم‌زمان عضویت شما پر شده است. تا {retryAt} صبر کنید و دوباره تلاش کنید، یا عامل دیگری را انتخاب کنید. تلاش فوری کمکی نمی‌کند.',
+1
View File
@@ -157,6 +157,7 @@ export const fr: Dict = {
'chat.runError.modelUnavailableMessage': "Veuillez choisir un autre modèle disponible, puis réessayer.",
'chat.runError.modelCapabilityUnsupportedMessage': "Ce modèle ne prend pas en charge les fonctions requises par la tâche. Changez de modèle, puis réessayez.",
'chat.runError.rateLimitedMessage': 'Le service de modèle reçoit beaucoup de requêtes en ce moment et la limite de fréquence du fournisseur est atteinte. Réessayez plus tard ou essayez de changer de modèle.',
'chat.runError.antigravityQuotaMessage': 'Chaque modèle Antigravity dispose de son propre quota, et celui du modèle actuel est épuisé. Choisissez un autre modèle dans le menu des modèles, ou ouvrez `agy` dans un terminal et changez de modèle avec /model, puis réessayez.',
'chat.runError.modelWindowLimitMessage': 'Forte affluence en ce moment. Réessayez après {retryAt}. Cette requête n’a pas été facturée.',
'chat.runError.modelWindowLimitMessageNoTime': 'Forte affluence en ce moment. Réessayez dans un instant. Cette requête n’a pas été facturée.',
'chat.runError.membershipConcurrencyLimitMessage': 'La limite de tâches simultanées de votre abonnement est atteinte. Attendez jusqu’à {retryAt}, puis réessayez, ou changez d’agent. Réessayer immédiatement ne servira à rien.',
+1
View File
@@ -157,6 +157,7 @@ export const hu: Dict = {
'chat.runError.modelUnavailableMessage': "Válassz másik elérhető modellt, és próbáld újra.",
'chat.runError.modelCapabilityUnsupportedMessage': "Ez a modell nem támogatja a feladathoz szükséges funkciókat. Válts modellt, és próbáld újra.",
'chat.runError.rateLimitedMessage': 'Jelenleg sok kérés érkezik ehhez a modellszolgáltatáshoz, és elérted a szolgáltató kérésgyakorisági korlátját. Próbáld újra később, vagy próbálj meg másik modellre váltani.',
'chat.runError.antigravityQuotaMessage': 'Minden Antigravity-modellnek saját kerete van, és a jelenlegi modellé elfogyott. Válassz másik modellt a modellmenüben, vagy nyisd meg az `agy` parancsot egy terminálban, és válts modellt a /model paranccsal, majd próbáld újra.',
'chat.runError.modelWindowLimitMessage': 'Jelenleg nagy a terhelés. Próbáld újra {retryAt} után. Ezt a kérést nem számoltuk fel.',
'chat.runError.modelWindowLimitMessageNoTime': 'Jelenleg nagy a terhelés. Próbáld újra kicsit később. Ezt a kérést nem számoltuk fel.',
'chat.runError.membershipConcurrencyLimitMessage': 'A tagságod párhuzamos feladatainak kerete betelt. Várj {retryAt} időpontig, majd próbáld újra, vagy válts másik ügynökre. Az azonnali újrapróbálkozás nem segít.',
+1
View File
@@ -157,6 +157,7 @@ export const id: Dict = {
'chat.runError.modelUnavailableMessage': "Silakan pilih model lain yang tersedia, lalu coba lagi.",
'chat.runError.modelCapabilityUnsupportedMessage': "Model ini tidak mendukung kemampuan yang dibutuhkan tugas ini. Ganti model lalu coba lagi.",
'chat.runError.rateLimitedMessage': 'Saat ini ada banyak permintaan ke layanan model ini dan batas frekuensi permintaan penyedia telah tercapai. Coba lagi nanti, atau coba beralih ke model lain.',
'chat.runError.antigravityQuotaMessage': 'Setiap model Antigravity punya kuotanya sendiri, dan kuota model saat ini sudah habis. Pilih model lain di menu model, atau buka `agy` di terminal lalu ganti model dengan /model, kemudian coba lagi.',
'chat.runError.modelWindowLimitMessage': 'Sedang ramai saat ini. Coba lagi setelah {retryAt}. Permintaan ini tidak dikenai biaya.',
'chat.runError.modelWindowLimitMessageNoTime': 'Sedang ramai saat ini. Coba lagi sebentar lagi. Permintaan ini tidak dikenai biaya.',
'chat.runError.membershipConcurrencyLimitMessage': 'Batas tugas bersamaan untuk keanggotaan Anda sudah penuh. Tunggu hingga {retryAt}, lalu coba lagi, atau ganti agen. Mencoba ulang segera tidak akan membantu.',
+1
View File
@@ -157,6 +157,7 @@ export const it: Dict = {
'chat.runError.modelUnavailableMessage': "Scegli un altro modello disponibile e riprova.",
'chat.runError.modelCapabilityUnsupportedMessage': "Questo modello non supporta le funzioni richieste dall’attività. Cambia modello e riprova.",
'chat.runError.rateLimitedMessage': "In questo momento ci sono molte richieste a questo servizio del modello ed è stato raggiunto il limite di frequenza del fornitore. Riprova più tardi oppure prova a passare a un altro modello.",
'chat.runError.antigravityQuotaMessage': 'Ogni modello Antigravity ha una propria quota e quella del modello attuale è esaurita. Scegli un altro modello nel menu dei modelli oppure apri `agy` in un terminale e cambia modello con /model, quindi riprova.',
'chat.runError.modelWindowLimitMessage': 'Al momento il traffico è elevato. Riprova dopo le {retryAt}. Questa richiesta non è stata addebitata.',
'chat.runError.modelWindowLimitMessageNoTime': 'Al momento il traffico è elevato. Riprova tra poco. Questa richiesta non è stata addebitata.',
'chat.runError.membershipConcurrencyLimitMessage': 'Il limite di attività simultanee del tuo abbonamento è stato raggiunto. Attendi fino alle {retryAt}, poi riprova, oppure cambia agente. Riprovare subito non aiuta.',
+1
View File
@@ -157,6 +157,7 @@ export const ja: Dict = {
'chat.runError.modelUnavailableMessage': "利用できる別のモデルを選んでから、もう一度お試しください。",
'chat.runError.modelCapabilityUnsupportedMessage': "このモデルはタスクに必要な機能に対応していません。モデルを変更してから、もう一度お試しください。",
'chat.runError.rateLimitedMessage': '現在このモデルサービスへのリクエストが多く、プロバイダーのリクエスト頻度の上限に達しました。しばらくしてから再試行するか、別のモデルへの切り替えをお試しください。',
'chat.runError.antigravityQuotaMessage': 'Antigravity のモデルにはそれぞれ個別のクォータがあり、現在のモデルのクォータを使い切りました。モデルメニューで別のモデルを選ぶか、ターミナルで `agy` を開いて /model でモデルを切り替えてから、もう一度お試しください。',
'chat.runError.modelWindowLimitMessage': 'アクセスが集中しています。{retryAt} 以降に再度お試しください(今回のリクエストは課金されていません)。',
'chat.runError.modelWindowLimitMessageNoTime': 'アクセスが集中しています。しばらくしてから再度お試しください(今回のリクエストは課金されていません)。',
'chat.runError.membershipConcurrencyLimitMessage': 'メンバーシップの同時実行タスク上限に達しています。{retryAt} まで待って再試行するか、別のエージェントに切り替えてください。すぐに再試行しても解消しません。',
+1
View File
@@ -157,6 +157,7 @@ export const ko: Dict = {
'chat.runError.modelUnavailableMessage': "사용 가능한 다른 모델을 선택한 후 다시 시도하세요.",
'chat.runError.modelCapabilityUnsupportedMessage': "이 모델은 작업에 필요한 기능을 지원하지 않습니다. 모델을 변경한 후 다시 시도하세요.",
'chat.runError.rateLimitedMessage': '현재 이 모델 서비스에 요청이 많아 제공업체의 요청 빈도 상한에 도달했습니다. 잠시 후 다시 시도하거나 다른 모델로 전환해 보세요.',
'chat.runError.antigravityQuotaMessage': 'Antigravity 모델마다 할당량이 따로 있으며, 현재 모델의 할당량을 모두 사용했습니다. 모델 메뉴에서 다른 모델을 선택하거나, 터미널에서 `agy`를 열고 /model로 모델을 바꾼 뒤 다시 시도하세요.',
'chat.runError.modelWindowLimitMessage': '사용량이 많습니다. {retryAt} 이후에 다시 시도해 주세요. 이번 요청은 청구되지 않았습니다.',
'chat.runError.modelWindowLimitMessageNoTime': '사용량이 많습니다. 잠시 후 다시 시도해 주세요. 이번 요청은 청구되지 않았습니다.',
'chat.runError.membershipConcurrencyLimitMessage': '멤버십의 동시 작업 한도가 가득 찼습니다. {retryAt}까지 기다린 뒤 다시 시도하거나 다른 에이전트로 전환하세요. 즉시 재시도해도 해결되지 않습니다.',
+1
View File
@@ -157,6 +157,7 @@ export const pl: Dict = {
'chat.runError.modelUnavailableMessage': "Wybierz inny dostępny model i spróbuj ponownie.",
'chat.runError.modelCapabilityUnsupportedMessage': "Ten model nie obsługuje funkcji wymaganych przez zadanie. Zmień model i spróbuj ponownie.",
'chat.runError.rateLimitedMessage': 'W tej chwili do tej usługi modelu trafia dużo żądań i osiągnięto limit częstotliwości żądań dostawcy. Spróbuj ponownie później lub spróbuj przełączyć się na inny model.',
'chat.runError.antigravityQuotaMessage': 'Każdy model Antigravity ma własny limit, a limit bieżącego modelu został wyczerpany. Wybierz inny model w menu modeli albo otwórz `agy` w terminalu i zmień model poleceniem /model, a następnie spróbuj ponownie.',
'chat.runError.modelWindowLimitMessage': 'Obecnie duże obciążenie. Spróbuj ponownie po {retryAt}. Za to żądanie nie naliczono opłaty.',
'chat.runError.modelWindowLimitMessageNoTime': 'Obecnie duże obciążenie. Spróbuj ponownie za chwilę. Za to żądanie nie naliczono opłaty.',
'chat.runError.membershipConcurrencyLimitMessage': 'Limit równoległych zadań w Twoim członkostwie jest pełny. Poczekaj do {retryAt}, a następnie spróbuj ponownie lub zmień agenta. Natychmiastowe ponowienie nie pomoże.',
+1
View File
@@ -157,6 +157,7 @@ export const ptBR: Dict = {
'chat.runError.modelUnavailableMessage': "Escolha outro modelo disponível e tente novamente.",
'chat.runError.modelCapabilityUnsupportedMessage': "Este modelo não oferece suporte aos recursos que a tarefa precisa. Troque de modelo e tente novamente.",
'chat.runError.rateLimitedMessage': 'No momento há muitas solicitações para este serviço do modelo e o limite de frequência do provedor foi atingido. Tente novamente mais tarde ou experimente trocar para outro modelo.',
'chat.runError.antigravityQuotaMessage': 'Cada modelo do Antigravity tem sua própria cota, e a do modelo atual acabou. Escolha outro modelo no menu de modelos ou abra o `agy` em um terminal e troque de modelo com /model; depois, tente novamente.',
'chat.runError.modelWindowLimitMessage': 'Alta demanda no momento. Tente novamente após {retryAt}. Esta solicitação não foi cobrada.',
'chat.runError.modelWindowLimitMessageNoTime': 'Alta demanda no momento. Tente novamente em instantes. Esta solicitação não foi cobrada.',
'chat.runError.membershipConcurrencyLimitMessage': 'O limite de tarefas simultâneas da sua assinatura foi atingido. Aguarde até {retryAt} e tente novamente, ou troque de agente. Tentar imediatamente não ajudará.',
+1
View File
@@ -157,6 +157,7 @@ export const ru: Dict = {
'chat.runError.modelUnavailableMessage': "Выберите другую доступную модель и повторите попытку.",
'chat.runError.modelCapabilityUnsupportedMessage': "Эта модель не поддерживает функции, необходимые для задачи. Смените модель и повторите попытку.",
'chat.runError.rateLimitedMessage': 'Сейчас к этому сервису модели поступает много запросов, и достигнут лимит частоты запросов провайдера. Повторите позже или попробуйте переключиться на другую модель.',
'chat.runError.antigravityQuotaMessage': 'У каждой модели Antigravity своя квота, и квота текущей модели исчерпана. Выберите другую модель в меню моделей или откройте `agy` в терминале и смените модель командой /model, а затем повторите попытку.',
'chat.runError.modelWindowLimitMessage': 'Сейчас высокая нагрузка. Повторите попытку после {retryAt}. Этот запрос не был оплачен.',
'chat.runError.modelWindowLimitMessageNoTime': 'Сейчас высокая нагрузка. Повторите попытку чуть позже. Этот запрос не был оплачен.',
'chat.runError.membershipConcurrencyLimitMessage': 'Для вашей подписки достигнут лимит параллельных задач. Подождите до {retryAt} и повторите попытку или выберите другого агента. Немедленный повтор не поможет.',
+1
View File
@@ -157,6 +157,7 @@ export const th: Dict = {
'chat.runError.modelUnavailableMessage': "โปรดเลือกโมเดลอื่นที่พร้อมใช้งานแล้วลองอีกครั้ง",
'chat.runError.modelCapabilityUnsupportedMessage': "โมเดลนี้ไม่รองรับความสามารถที่งานนี้ต้องใช้ โปรดเปลี่ยนโมเดลแล้วลองอีกครั้ง",
'chat.runError.rateLimitedMessage': 'ขณะนี้มีคำขอไปยังบริการโมเดลนี้จำนวนมาก และถึงขีดจำกัดความถี่คำขอของผู้ให้บริการแล้ว โปรดลองใหม่ในภายหลัง หรือลองสลับไปใช้โมเดลอื่น',
'chat.runError.antigravityQuotaMessage': 'โมเดล Antigravity แต่ละตัวมีโควตาของตัวเอง และโควตาของโมเดลปัจจุบันหมดแล้ว เลือกโมเดลอื่นในเมนูโมเดล หรือเปิด `agy` ในเทอร์มินัลแล้วสลับโมเดลด้วย /model จากนั้นลองอีกครั้ง',
'chat.runError.modelWindowLimitMessage': 'ขณะนี้มีผู้ใช้งานจำนวนมาก โปรดลองอีกครั้งหลัง {retryAt} คำขอนี้ไม่มีการเรียกเก็บเงิน',
'chat.runError.modelWindowLimitMessageNoTime': 'ขณะนี้มีผู้ใช้งานจำนวนมาก โปรดลองอีกครั้งในภายหลัง คำขอนี้ไม่มีการเรียกเก็บเงิน',
'chat.runError.membershipConcurrencyLimitMessage': 'สมาชิกของคุณใช้งานถึงขีดจำกัดงานพร้อมกันแล้ว โปรดรอจนถึง {retryAt} แล้วลองใหม่ หรือเปลี่ยนเอเจนต์ การลองซ้ำทันทีจะไม่ช่วย',
+1
View File
@@ -157,6 +157,7 @@ export const tr: Dict = {
'chat.runError.modelUnavailableMessage': "Lütfen kullanılabilir başka bir model seçip tekrar deneyin.",
'chat.runError.modelCapabilityUnsupportedMessage': "Bu model, görevin gerektirdiği özellikleri desteklemiyor. Model değiştirip tekrar deneyin.",
'chat.runError.rateLimitedMessage': 'Şu anda bu model hizmetine çok sayıda istek geliyor ve sağlayıcının istek sıklığı sınırına ulaşıldı. Daha sonra tekrar deneyin veya başka bir modele geçmeyi deneyin.',
'chat.runError.antigravityQuotaMessage': 'Her Antigravity modelinin kendi kotası vardır ve geçerli modelin kotası doldu. Model menüsünden başka bir model seçin ya da bir terminalde `agy` komutunu açıp /model ile model değiştirin, ardından tekrar deneyin.',
'chat.runError.modelWindowLimitMessage': 'Şu anda yoğunluk var. {retryAt} sonrasında tekrar deneyin. Bu istek için ücret alınmadı.',
'chat.runError.modelWindowLimitMessageNoTime': 'Şu anda yoğunluk var. Kısa süre sonra tekrar deneyin. Bu istek için ücret alınmadı.',
'chat.runError.membershipConcurrencyLimitMessage': 'Üyeliğinizin eşzamanlı görev sınırı dolu. {retryAt} saatine kadar bekleyip yeniden deneyin veya başka bir aracıya geçin. Hemen yeniden denemek yardımcı olmaz.',
+1
View File
@@ -157,6 +157,7 @@ export const uk: Dict = {
'chat.runError.modelUnavailableMessage': "Виберіть іншу доступну модель і повторіть спробу.",
'chat.runError.modelCapabilityUnsupportedMessage': "Ця модель не підтримує можливості, потрібні для завдання. Змініть модель і повторіть спробу.",
'chat.runError.rateLimitedMessage': 'Наразі до цього сервісу моделі надходить багато запитів, і досягнуто ліміт частоти запитів постачальника. Спробуйте пізніше або спробуйте перемкнутися на іншу модель.',
'chat.runError.antigravityQuotaMessage': 'Кожна модель Antigravity має власну квоту, і квоту поточної моделі вичерпано. Виберіть іншу модель у меню моделей або відкрийте `agy` у терміналі й змініть модель командою /model, а потім спробуйте ще раз.',
'chat.runError.modelWindowLimitMessage': 'Зараз високе навантаження. Спробуйте ще раз після {retryAt}. Цей запит не було оплачено.',
'chat.runError.modelWindowLimitMessageNoTime': 'Зараз високе навантаження. Спробуйте ще раз трохи згодом. Цей запит не було оплачено.',
'chat.runError.membershipConcurrencyLimitMessage': 'Для вашої підписки досягнуто ліміту паралельних завдань. Зачекайте до {retryAt} і повторіть спробу або виберіть іншого агента. Негайний повтор не допоможе.',
+1
View File
@@ -163,6 +163,7 @@ export const zhCN: Dict = {
"chat.runError.modelUnavailableMessage": "请选择其他可用模型后再试。",
"chat.runError.modelCapabilityUnsupportedMessage": "该模型不支持任务所需的功能,请更换模型后再试。",
"chat.runError.rateLimitedMessage": "当前使用该模型服务的请求较多,已达到供应商的请求频率上限,请稍后再试,或尝试切换其他模型。",
"chat.runError.antigravityQuotaMessage": "每个 Antigravity 模型都有各自的配额,当前模型的配额已用完。请在模型菜单中换一个模型,或在终端打开 `agy` 并用 /model 切换模型,然后重试。",
"chat.runError.modelWindowLimitMessage": "高峰期繁忙,请在 {retryAt} 后尝试(本次请求未扣费)",
"chat.runError.modelWindowLimitMessageNoTime": "高峰期繁忙,请稍后再试(本次请求未扣费)",
"chat.runError.membershipConcurrencyLimitMessage": "当前会员的并发任务已满。请等到 {retryAt} 后重试,或切换到其他智能体;立即重复尝试不会恢复。",
+1
View File
@@ -163,6 +163,7 @@ export const zhTW: Dict = {
"chat.runError.modelUnavailableMessage": "請選擇其他可用模型後再試。",
"chat.runError.modelCapabilityUnsupportedMessage": "該模型不支援任務所需的功能,請更換模型後再試。",
"chat.runError.rateLimitedMessage": "目前使用該模型服務的請求較多,已達到供應商的請求頻率上限,請稍後再試,或嘗試切換其他模型。",
"chat.runError.antigravityQuotaMessage": "每個 Antigravity 模型都有各自的配額,目前模型的配額已用完。請在模型選單中改選其他模型,或在終端機開啟 `agy` 並用 /model 切換模型,然後再試一次。",
"chat.runError.modelWindowLimitMessage": "高峰期繁忙,請在 {retryAt} 後嘗試(本次請求未扣費)",
"chat.runError.modelWindowLimitMessageNoTime": "高峰期繁忙,請稍後再試(本次請求未扣費)",
"chat.runError.membershipConcurrencyLimitMessage": "目前會員的並行任務已滿。請等到 {retryAt} 後重試,或切換到其他智慧代理;立即重試不會恢復。",
+1
View File
@@ -2955,6 +2955,7 @@ export interface Dict {
/** S23 · 以前这一格没有正文,报错卡因此落到兜底句上。 */
'chat.runError.artifactMissingMessage': string;
'chat.runError.rateLimitedMessage': string;
'chat.runError.antigravityQuotaMessage': string;
'chat.runError.modelWindowLimitMessage': string;
'chat.runError.modelWindowLimitMessageNoTime': string;
'chat.runError.membershipConcurrencyLimitMessage': string;
+7 -3
View File
@@ -304,6 +304,7 @@ export type RunFailureMessageKey =
| 'chat.connectionDropped'
| 'chat.runError.signInMessage.amr'
| 'chat.runError.signInMessage.other'
| 'chat.runError.antigravityQuotaMessage'
| 'chat.runError.cliMissingMessage'
| 'chat.runError.promptTooLargeMessage'
| 'chat.runError.modelUnavailableMessage'
@@ -1795,12 +1796,15 @@ function resolveRunFailureUiIgnoringSelfPromotion(
}
// Quota: each Antigravity model has its own quota, so the action
// is "open agy, switch model" rather than "sign in." Same handler
// spawns the same terminal; only the label changes.
// spawns the same terminal; only the label changes. The card carries
// its own copy: with `null` it fell back to the generic "task failed,
// please retry" sentence (OPEND-3495), which never said the quota was
// the cause or that switching models gets past it.
if (code === 'RATE_LIMITED') {
return failureCard(
{ directFix: 'launch-terminal-switch-model' },
'chat.runError.title.rateLimited',
null,
'chat.runError.title.quotaExhausted',
'chat.runError.antigravityQuotaMessage',
{ secondaryRetry: true },
);
}
+26 -1
View File
@@ -9,6 +9,7 @@ import {
amrRechargeUrlForProfile,
formatModelWindowRetryAt,
modelWindowLimitCopy,
resolveRunErrorCardDescription,
resolveRunFailureUi,
setRuntimeAmrConsoleOrigin,
} from '../../src/runtime/amr-guidance';
@@ -668,12 +669,36 @@ describe('resolveRunFailureUi', () => {
const ui = resolveRunFailureUi('RATE_LIMITED', null, 'antigravity');
expect(ui).toMatchObject({
primaryAction: 'launch-terminal-switch-model',
messageKey: null,
titleKey: 'chat.runError.title.quotaExhausted',
messageKey: 'chat.runError.antigravityQuotaMessage',
secondaryRetry: true,
cloudSwitchCta: true,
});
});
// OPEND-3495: with no copy of its own, the Antigravity quota card fell back
// to `chat.runError.fallbackMessage` ("This task failed to run. Please
// retry…") — the exact sentence in the user report, which says nothing about
// the per-model quota or how to get past it. The daemon's real shape for an
// exhausted agy quota is RATE_LIMITED + hard_quota; the card must render the
// quota guidance, never the generic fallback.
it('renders the Antigravity quota guidance, not the generic fallback, for hard_quota', () => {
const ui = resolveRunFailureUi('RATE_LIMITED', 'hard_quota', 'antigravity');
const description = resolveRunErrorCardDescription({
handedToAnotherSurface: false,
mappedMessageKey: ui.messageKey,
paneError: null,
paneErrorCameFromARun: false,
failedRunRawDetail:
'Antigravity returned "RESOURCE_EXHAUSTED: Individual quota reached" for the current model.',
turnEndedInTerminalFailure: true,
});
expect(description).toEqual({
render: 'mapped',
messageKey: 'chat.runError.antigravityQuotaMessage',
});
});
// Other antigravity failure codes must NOT promote the terminal
// launcher — it's specific to the OAuth-missing and quota-reached
// cases. A generic `AGENT_EXECUTION_FAILED` should fall back to