diff --git a/lib/proxy/engine/proxy_isolate.dart b/lib/proxy/engine/proxy_isolate.dart index d865936..a55781e 100644 --- a/lib/proxy/engine/proxy_isolate.dart +++ b/lib/proxy/engine/proxy_isolate.dart @@ -469,6 +469,12 @@ class _ProxyIsolateHost { details: _requestContextPayload(prompt: resolvedPrompt), ); final payload = await _executeNonStreamRequest(resolvedPrompt, retryTracker: retryTracker); + + final candidates = payload['candidates'] as List?; + if (candidates != null && candidates.isEmpty) { + return _errorResponse(502, 'bad_gateway', 'Upstream API returned empty candidates'); + } + await _logTrace( category: 'chat.completions', route: route, @@ -664,6 +670,12 @@ class _ProxyIsolateHost { } final payload = await _executeNonStreamRequest(resolvedPrompt, retryTracker: retryTracker); + + final candidates = payload['candidates'] as List?; + if (candidates != null && candidates.isEmpty) { + return _errorResponse(502, 'bad_gateway', 'Upstream API returned empty candidates'); + } + await _logResponsePreview( category: 'responses', route: route, diff --git a/lib/proxy/gemini/gemini_code_assist_client.dart b/lib/proxy/gemini/gemini_code_assist_client.dart index 544d40c..85151c3 100644 --- a/lib/proxy/gemini/gemini_code_assist_client.dart +++ b/lib/proxy/gemini/gemini_code_assist_client.dart @@ -161,7 +161,7 @@ const _cloudCodeDomains = { }; const defaultGeminiRequestMaxRetries = 10; const defaultGeminiBaseRetryDelay = Duration(seconds: 1); -const defaultGeminiRequestTimeout = Duration(seconds: 90); +const defaultGeminiRequestTimeout = Duration(minutes: 5); const _maxTransientRequestRetries = 3; const _maxRetryable429Delay = Duration(minutes: 1); const _maxRetryableTransientDelay = Duration(minutes: 5);