Increase recommendation density in For You feed to ~25%

1 discovery card per 3 followed videos (was 1 per 5).
Lower-ranked discovery cards also get shuffled so the same
channels don't always appear at fixed positions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 01:17:04 +02:00
parent bbf7cc939b
commit 9d35cc7c68

View File

@@ -395,8 +395,8 @@ def home_feed(
for item in top
]
# Inject discovery cards on every page: 1 every 5 followed cards.
disc_per_page = max(limit // 5, 1)
# Inject discovery cards: 1 every 3 followed cards (~25% recommendations).
disc_per_page = max(limit // 3, 1)
disc_offset = (offset // limit) * disc_per_page if limit > 0 else 0
disc_rows = db.execute(
@@ -426,17 +426,23 @@ def home_feed(
{"user_id": current_user.id, "disc_limit": disc_per_page, "disc_offset": disc_offset},
).mappings().all()
import random as _rand
disc_list = [dict(r) for r in disc_rows]
# Shuffle top-tier recs so the same channel doesn't always appear first
if len(disc_list) > 3:
top, rest = disc_list[:3], disc_list[3:]
_rand.shuffle(rest)
disc_list = top + rest
disc = [
VideoDetail(**{k: v for k, v in dict(r).items()},
is_recommended=True, is_watched=False, is_downloaded=False)
for r in disc_rows
VideoDetail(**r, is_recommended=True, is_watched=False, is_downloaded=False)
for r in disc_list
]
# Interleave: one discovery card every 5 followed cards
# Interleave: one discovery card every 3 followed cards
result: list[VideoDetail] = []
disc_iter = iter(disc)
for i, v in enumerate(followed):
if i > 0 and i % 5 == 0:
if i > 0 and i % 3 == 0:
rec = next(disc_iter, None)
if rec:
result.append(rec)