diff --git a/backend/app/services/recommender.py b/backend/app/services/recommender.py index 01d6d8e..5a464a1 100644 --- a/backend/app/services/recommender.py +++ b/backend/app/services/recommender.py @@ -138,6 +138,14 @@ async def generate_recommendations( profile = build_taste_profile(all_tracks) taste_context = f"Taste profile from {len(all_tracks)} tracks:\n{json.dumps(profile, indent=2)}" + # Load ALL previously recommended songs to exclude duplicates + prev_recs_result = await db.execute( + select(Recommendation.artist, Recommendation.title).where( + Recommendation.user_id == user.id, + ) + ) + previously_recommended = {f"{r.artist} - {r.title}".lower() for r in prev_recs_result.all()} + # Load disliked artists to exclude disliked_result = await db.execute( select(Recommendation.artist).where( @@ -204,6 +212,9 @@ IMPORTANT: If the user mentions specific artists or songs in their request, do N Already in their library (do NOT recommend these): {', '.join(list(existing_tracks)[:50]) if existing_tracks else 'None provided'} + +ALREADY RECOMMENDED BEFORE (do NOT repeat any of these — every recommendation must be NEW): +{', '.join(list(previously_recommended)[:100]) if previously_recommended else 'None yet'} {disliked_instruction} {exclude_instruction}