Refine result modal and Gemini recovery
build-push / docker (push) Successful in 4m16s

This commit is contained in:
AI Assistant
2026-03-16 12:22:13 +09:00
parent 975bd99610
commit 82cead950e
5 changed files with 195 additions and 68 deletions
+51
View File
@@ -323,6 +323,18 @@ func (a *App) searchMedia(c *gin.Context) {
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)
a.debug("search gemini evaluation", geminiStats)
if services.NeedsSupplementalExploration(recommended) {
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)
a.debug("search supplemental query variants", gin.H{"variants": explorationQueries, "variantCount": len(explorationQueries)})
a.debug("search gemini evaluation after supplemental search", geminiStats)
}
}
if geminiErr != nil && len(recommended) == 0 {
warning := geminiErr.Error()
fallback := services.BuildFallbackRecommendations(scored, 20, "")
@@ -419,6 +431,45 @@ func selectedPlatformLabel(platforms map[string]bool) string {
return strings.Join(labels, ", ")
}
func buildSupplementalQueries(query string, existing []string) []string {
candidates := append([]string{}, existing...)
candidates = append(candidates,
query+" cinematic stock footage",
query+" editorial b-roll",
query+" establishing shot",
query+" drone footage",
)
seen := map[string]bool{}
result := make([]string, 0, len(candidates))
for _, item := range candidates {
trimmed := strings.Join(strings.Fields(strings.TrimSpace(item)), " ")
if trimmed == "" {
continue
}
key := strings.ToLower(trimmed)
if seen[key] {
continue
}
seen[key] = true
result = append(result, trimmed)
}
return result
}
func mergeSearchResults(base, extra []services.SearchResult) []services.SearchResult {
merged := make([]services.SearchResult, 0, len(base)+len(extra))
seen := map[string]bool{}
for _, item := range append(base, extra...) {
if item.Link == "" || seen[item.Link] {
continue
}
seen[item.Link] = true
merged = append(merged, item)
}
return merged
}
func summarizeSearchResults(results []services.SearchResult, duration time.Duration, geminiCap int, warning string) searchDebugSummary {
bySource := map[string]int{}
withPreview := 0