Avoid search gateway timeouts
build-push / docker (push) Successful in 4m16s

This commit is contained in:
AI Assistant
2026-03-16 12:53:39 +09:00
parent c0830b5fde
commit cce4387092
3 changed files with 31 additions and 3 deletions
+13
View File
@@ -18,6 +18,7 @@ type GeminiBatchStats struct {
Failed int `json:"failed"`
SequentialRetried int `json:"sequentialRetried"`
RecommendedCount int `json:"recommendedCount"`
TimedOut bool `json:"timedOut,omitempty"`
Errors []string `json:"errors,omitempty"`
}
@@ -90,6 +91,10 @@ func GeminiCandidateLimit(total int) int {
}
func EvaluateAllCandidatesWithGemini(service *GeminiService, query string, ranked []SearchResult) ([]AIRecommendation, GeminiBatchStats, error) {
return EvaluateAllCandidatesWithGeminiBudget(service, query, ranked, time.Time{})
}
func EvaluateAllCandidatesWithGeminiBudget(service *GeminiService, query string, ranked []SearchResult, deadline time.Time) ([]AIRecommendation, GeminiBatchStats, error) {
if service == nil {
return nil, GeminiBatchStats{}, fmt.Errorf("gemini service is not configured")
}
@@ -107,6 +112,10 @@ func EvaluateAllCandidatesWithGemini(service *GeminiService, query string, ranke
merged := make([]AIRecommendation, 0, len(ranked))
seen := map[string]bool{}
for idx := 0; idx < limit; idx++ {
if !deadline.IsZero() && time.Now().After(deadline) {
stats.TimedOut = true
break
}
recommendations, err := recoverGeminiCandidateSequentially(service, query, ranked[idx])
if err != nil {
stats.Failed++
@@ -131,6 +140,10 @@ func EvaluateAllCandidatesWithGemini(service *GeminiService, query string, ranke
stats.RecommendedCount = len(merged)
switch {
case stats.TimedOut && len(merged) > 0:
return merged, stats, fmt.Errorf("gemini vision evaluation stopped early to avoid request timeout")
case stats.TimedOut && len(merged) == 0:
return nil, stats, fmt.Errorf("gemini vision evaluation timed out before any usable results were returned")
case len(merged) > 0 && stats.Failed == 0:
return merged, stats, nil
case len(merged) > 0 && stats.Failed > 0: