Backfill partial Gemini results and restore modal iframe
build-push / docker (push) Successful in 4m13s

This commit is contained in:
AI Assistant
2026-03-16 15:03:44 +09:00
parent cd9b47b33e
commit f5d03627be
5 changed files with 57 additions and 4 deletions
+8
View File
@@ -458,6 +458,14 @@ func (a *App) searchMedia(c *gin.Context) {
}
merged := services.MergeRecommendations(recommended, scored, 20)
if geminiErr != nil {
merged = services.BackfillRecommendations(
merged,
scored,
12,
"Gemini 배치 일부가 실패해 미리보기 가능한 상위 후보를 보강했습니다.",
)
}
merged = services.RandomizeTopRecommendations(merged, 8)
warning := ""
if geminiErr != nil {
+32
View File
@@ -355,6 +355,38 @@ func MergeRecommendations(recommended []AIRecommendation, ranked []SearchResult,
return merged
}
func BackfillRecommendations(existing []AIRecommendation, ranked []SearchResult, limit int, reason string) []AIRecommendation {
merged := make([]AIRecommendation, 0, min(limit, len(ranked)))
seen := map[string]bool{}
for _, item := range existing {
if item.Link == "" || seen[item.Link] {
continue
}
seen[item.Link] = true
merged = append(merged, item)
}
for _, item := range ranked {
if len(merged) >= limit || item.Link == "" || seen[item.Link] {
continue
}
if strings.TrimSpace(item.ThumbnailURL) == "" && strings.TrimSpace(item.PreviewVideoURL) == "" {
continue
}
seen[item.Link] = true
merged = append(merged, AIRecommendation{
Title: item.Title,
Link: item.Link,
Snippet: item.Snippet,
ThumbnailURL: item.ThumbnailURL,
PreviewVideoURL: item.PreviewVideoURL,
Source: item.Source,
Reason: reason,
Recommended: false,
})
}
return merged
}
func max(a, b int) int {
if a > b {
return a