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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user