Optimize backend search and evaluation pipeline
build-push / docker (push) Has been cancelled

This commit is contained in:
AI Assistant
2026-03-16 16:13:43 +09:00
parent c5f6c611ec
commit 60fdd7842c
7 changed files with 371 additions and 10 deletions
+31 -2
View File
@@ -444,9 +444,25 @@ func (a *App) searchMedia(c *gin.Context) {
if extraErr == nil && len(extraResults) > 0 {
results = mergeSearchResults(results, extraResults)
scored = services.RankSearchResults(strings.Join(explorationQueries[:min(len(explorationQueries), 3)], " "), results)
recommended, geminiStats, geminiErr = services.EvaluateAllCandidatesWithGeminiWithDeadline(a.GeminiService, req.Query, scored, deadline.Add(-3*time.Second))
a.debug("search supplemental query variants", gin.H{"variants": explorationQueries, "variantCount": len(explorationQueries)})
a.debug("search gemini evaluation after supplemental search", geminiStats)
reviewedLinks := services.ReviewedRecommendationLinks(recommended)
supplementalCandidates := services.SelectUnevaluatedCandidates(scored, reviewedLinks, services.RemainingGeminiCapacity(recommended))
if len(supplementalCandidates) > 0 {
extraRecommended, extraStats, extraGeminiErr := services.EvaluateAllCandidatesWithGeminiWithDeadline(
a.GeminiService,
req.Query,
supplementalCandidates,
deadline.Add(-3*time.Second),
)
recommended = services.MergeUniqueRecommendations(recommended, extraRecommended)
geminiStats = services.MergeGeminiBatchStats(geminiStats, extraStats)
geminiStats.RecommendedCount = len(services.ReviewedRecommendationLinks(recommended))
geminiErr = combineSearchWarnings(geminiErr, extraGeminiErr)
a.debug("search gemini evaluation after supplemental search", gin.H{
"stats": geminiStats,
"supplementalCount": len(supplementalCandidates),
})
}
}
}
if geminiErr != nil && len(recommended) == 0 {
@@ -595,6 +611,19 @@ func mergeSearchResults(base, extra []services.SearchResult) []services.SearchRe
return merged
}
func combineSearchWarnings(base, extra error) error {
switch {
case base == nil:
return extra
case extra == nil:
return base
case base.Error() == extra.Error():
return base
default:
return fmt.Errorf("%s; %s", base.Error(), extra.Error())
}
}
func summarizeSearchResults(results []services.SearchResult, duration time.Duration, geminiCap int, warning string) searchDebugSummary {
bySource := map[string]int{}
withPreview := 0