namespace TarninaHub.Application.Matchmaking; public sealed record RankedItem(T Item, double Score); public static class SemanticRanker { public static IReadOnlyList> Rank( IReadOnlyList queryVector, IEnumerable<(T Item, IReadOnlyList Vector)> candidates, int topK, double minScore = 0) { return candidates .Select(candidate => new RankedItem(candidate.Item, VectorMath.CosineSimilarity(queryVector, candidate.Vector))) .Where(ranked => ranked.Score >= minScore) .OrderByDescending(ranked => ranked.Score) .Take(topK) .ToList(); } }