Merge pull request #2592 from MoerAI/fix/gemini-quota-fallback

fix(runtime-fallback): detect Gemini quota errors in session.status retry events (fixes #2454)
This commit is contained in:
YeonGyu-Kim
2026-03-25 18:14:21 +09:00
committed by GitHub

View File

@@ -1,6 +1,6 @@
import type { HookDeps } from "./types"
import type { AutoRetryHelpers } from "./auto-retry"
import { HOOK_NAME } from "./constants"
import { HOOK_NAME, RETRYABLE_ERROR_PATTERNS } from "./constants"
import { log } from "../../shared/logger"
import { extractAutoRetrySignal } from "./error-classifier"
import { createFallbackState } from "./fallback-state"
@@ -32,7 +32,14 @@ export function createSessionStatusHandler(
const retryMessage = typeof status.message === "string" ? status.message : ""
const retrySignal = extractAutoRetrySignal({ status: retryMessage, message: retryMessage })
if (!retrySignal) return
if (!retrySignal) {
// Fallback: status.type is already "retry", so check the message against
// retryable error patterns directly. This handles providers like Gemini whose
// retry status message may not contain "retrying in" text alongside the error.
const messageLower = retryMessage.toLowerCase()
const matchesRetryablePattern = RETRYABLE_ERROR_PATTERNS.some((pattern) => pattern.test(messageLower))
if (!matchesRetryablePattern) return
}
const retryKey = `${extractRetryAttempt(status.attempt, retryMessage)}:${normalizeRetryStatusMessage(retryMessage)}`
if (sessionStatusRetryKeys.get(sessionID) === retryKey) {