"You might like" Home rows + taste profile (learn + apply) #91
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Server-side recommendation work. Three arcs, all CI-green on dev, no client changes.
"You might like" — in-library album/artist recommendation rows (#790)
Surfaces in-library albums/artists the listener doesn't actively spin but is
predicted to enjoy, derived from the same similarity + like-weighted engine that
powers For-You, rolled up from track scores to album/artist. Built in the daily
3am pass, atomic-replaced, read by
/api/home(+/api/home/index).artists, so a thin profile ships empty rather than near-random tiles.
read-time dedup vs Most Played / Rediscover / Last Played.
scoreAndSortCandidatesdrew jitter by slice position over an unstably-ordered candidate query, so
same-day rebuilds could reorder near-ties. Pinned candidate order by track id —
daily builds are now genuinely deterministic-within-a-day as documented.
Taste profile — phase 1 (learn) (#796)
A persistent, decaying per-user taste model, recomputed daily.
→ [-1,+1] (instant-skip → -1, ~0.30 neutral, ≥0.90 → +1), time-decayed
(~75d half-life) so recent listening dominates and drift is tracked.
track-scoped; artist/tag weight is the decayed SUM of its tracks' engagement, so
one skip nets out against many good plays (a loved artist can't be tanked by a
single skip). Floor clamp bounds magnitude.
internal/tastepackage; wired into the daily scheduler(best-effort, never blocks the playlist build).
Taste profile — phase 2a (apply) (#796)
The profile now changes what surfaces. A
TasteMatchscoring term re-ranks everycandidate by fit to learned taste (positive draws toward it, negative reflects
passive avoidance, 0 at cold start) — across system playlists, You-might-like, and
radio.
taste_weightis operator-tunable (1.5 daily mixes, 1.0 radio).Deferred: the You-might-like Android client row; taste phase 2b (taste_overlap
candidate arm + profile-seeded For-You) — best validated after the profile
accumulates real data; taste phases 3 (context) / 4 (observability).
🤖 Generated with Claude Code