Reduce noisy Gemini batch failure warnings
build-push / docker (push) Successful in 4m2s

This commit is contained in:
AI Assistant
2026-03-17 13:38:46 +09:00
parent 4844394334
commit 6faff4d269
4 changed files with 73 additions and 3 deletions
+36 -3
View File
@@ -105,7 +105,7 @@ func EvaluateAllCandidatesWithGemini(service *GeminiService, query string, ranke
}
func EvaluateAllCandidatesWithGeminiWithDeadline(service *GeminiService, query string, ranked []SearchResult, deadline time.Time) ([]AIRecommendation, GeminiBatchStats, error) {
const chunkSize = 8
const chunkSize = 6
const maxConcurrentBatches = 2
if service == nil {
return nil, GeminiBatchStats{}, fmt.Errorf("gemini service is not configured")
@@ -187,6 +187,7 @@ func EvaluateAllCandidatesWithGeminiWithDeadline(service *GeminiService, query s
})
}
recovered, recoveredErrs := recoverGeminiBatchSequentially(service, query, ranked, batch.index*chunkSize)
hardErrs := filterHardGeminiErrors(recoveredErrs)
if len(recovered) > 0 {
stats.SequentialRetried++
stats.Succeeded++
@@ -197,9 +198,9 @@ func EvaluateAllCandidatesWithGeminiWithDeadline(service *GeminiService, query s
seen[item.Link] = true
merged = append(merged, item)
}
if len(recoveredErrs) > 0 {
if len(hardErrs) > 0 {
stats.Failed++
for _, recoveredErr := range recoveredErrs {
for _, recoveredErr := range hardErrs {
if len(stats.Errors) < 5 {
stats.Errors = append(stats.Errors, recoveredErr)
}
@@ -207,6 +208,9 @@ func EvaluateAllCandidatesWithGeminiWithDeadline(service *GeminiService, query s
}
continue
}
if len(hardErrs) == 0 {
continue
}
stats.Failed++
if len(stats.Errors) < 5 {
stats.Errors = append(stats.Errors, batch.err.Error())
@@ -329,6 +333,35 @@ func MergeUniqueRecommendations(base, extra []AIRecommendation) []AIRecommendati
return merged
}
func filterHardGeminiErrors(errs []string) []string {
filtered := make([]string, 0, len(errs))
for _, item := range errs {
if isIgnorableGeminiError(item) {
continue
}
filtered = append(filtered, item)
}
return filtered
}
func isIgnorableGeminiError(message string) bool {
lower := strings.ToLower(strings.TrimSpace(message))
if lower == "" {
return false
}
for _, token := range []string{
"no candidate thumbnails or preview frames could be fetched for gemini vision",
"candidate thumbnail is low value",
"candidate has no thumbnail or preview video",
"image url is empty",
} {
if strings.Contains(lower, token) {
return true
}
}
return false
}
func MergeGeminiBatchStats(base, extra GeminiBatchStats) GeminiBatchStats {
merged := base
merged.CandidateCap += extra.CandidateCap