The listening-recs route now reads discovery.adventurousness (default 0.3) and re-ranks the stored recs through apply_adventurousness before reshaping — so globally-popular picks sink and obscure ones rise. Popularity is enriched at REQUEST time via a new MusicDatabase.get_similar_artist_popularities(names) lookup (the stored recs do not carry popularity inline), so it works on existing data with no re-scan. Both the lookup and the re-rank are fail-soft — any error leaves the original order. Default 0.3 is a gentle nudge; the slider to tune it is the next increment. Core pure function already has 5 seam tests; DB lookup smoke-verified against a temp DB. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| music_database.py | ||
| personalized_schema.py | ||