This commit is contained in:
@@ -2,9 +2,11 @@ package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
const GeminiFallbackReason = "Gemini Vision 응답이 부족해 키워드 기준으로 보강된 결과입니다."
|
||||
@@ -193,6 +195,21 @@ func BuildFallbackRecommendations(ranked []SearchResult, limit int, reason strin
|
||||
return fallback
|
||||
}
|
||||
|
||||
func RandomizeTopRecommendations(items []AIRecommendation, window int) []AIRecommendation {
|
||||
if len(items) < 2 || window < 2 {
|
||||
return items
|
||||
}
|
||||
|
||||
limit := min(window, len(items))
|
||||
shuffled := make([]AIRecommendation, len(items))
|
||||
copy(shuffled, items)
|
||||
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
rng.Shuffle(limit, func(i, j int) {
|
||||
shuffled[i], shuffled[j] = shuffled[j], shuffled[i]
|
||||
})
|
||||
return shuffled
|
||||
}
|
||||
|
||||
func MergeRecommendations(recommended []AIRecommendation, ranked []SearchResult, limit int) []AIRecommendation {
|
||||
merged := make([]AIRecommendation, 0, min(limit, len(ranked)))
|
||||
seen := map[string]bool{}
|
||||
|
||||
Reference in New Issue
Block a user