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
+7 -3
View File
@@ -270,6 +270,7 @@ func (a *App) runDownload(recordID int64, url, start, end, quality, outputPath s
func (a *App) searchMedia(c *gin.Context) {
started := time.Now()
deadline := started.Add(22 * time.Second)
var req struct {
Query string `json:"query"`
Platforms []string `json:"platforms"`
@@ -321,16 +322,16 @@ func (a *App) searchMedia(c *gin.Context) {
scored := services.RankSearchResults(rankQuery, results)
a.debug("search ranked summary", summarizeSearchResults(scored, time.Since(started), services.GeminiCandidateLimit(len(scored)), ""))
a.Hub.Broadcast("progress", gin.H{"type": "search", "status": "analyzing all candidate visuals with Gemini Vision", "progress": 75})
recommended, geminiStats, geminiErr := services.EvaluateAllCandidatesWithGemini(a.GeminiService, req.Query, scored)
recommended, geminiStats, geminiErr := services.EvaluateAllCandidatesWithGeminiBudget(a.GeminiService, req.Query, scored, deadline)
a.debug("search gemini evaluation", geminiStats)
if services.NeedsSupplementalExploration(recommended) {
if services.NeedsSupplementalExploration(recommended) && time.Now().Before(deadline.Add(-4*time.Second)) {
a.Hub.Broadcast("progress", gin.H{"type": "search", "status": "Gemini 평가가 약해 추가 후보를 탐색하는 중", "progress": 82})
explorationQueries := buildSupplementalQueries(req.Query, queryVariants)
extraResults, extraErr := a.SearchService.SearchMedia(explorationQueries, enabledPlatforms)
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.EvaluateAllCandidatesWithGemini(a.GeminiService, req.Query, scored)
recommended, geminiStats, geminiErr = services.EvaluateAllCandidatesWithGeminiBudget(a.GeminiService, req.Query, scored, deadline)
a.debug("search supplemental query variants", gin.H{"variants": explorationQueries, "variantCount": len(explorationQueries)})
a.debug("search gemini evaluation after supplemental search", geminiStats)
}
@@ -361,6 +362,9 @@ func (a *App) searchMedia(c *gin.Context) {
if geminiErr != nil {
warning = geminiErr.Error()
}
if geminiStats.TimedOut && warning == "" {
warning = "search returned partial Gemini-reviewed results before the gateway timeout budget"
}
a.debug("search complete summary", summarizeRecommendationResults(merged, time.Since(started), warning))
response := gin.H{"results": merged, "queries": queryVariants}
if warning != "" {