Skip to content

Commit 3d85214

Browse files
committed
rolling out selected sources
1 parent b22b55a commit 3d85214

File tree

3 files changed

+32
-17
lines changed

3 files changed

+32
-17
lines changed

src/recommendations/candidates_ab.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Dict, List
2+
13
from sqlalchemy import text
24

35
from src.database import fetch_all
@@ -89,11 +91,26 @@ async def get_selected_sources(
8991
user_id: int,
9092
limit: int = 10,
9193
exclude_meme_ids: list[int] = [],
92-
):
94+
) -> List[Dict]:
9395
"""Implements a test version of an algotighm which takes best memes from
9496
some selected sources
9597
"""
9698

99+
query_lang = f"""
100+
SELECT language_code
101+
FROM user_language
102+
WHERE user_id = {user_id}
103+
"""
104+
105+
res = await fetch_all(text(query_lang))
106+
if not len(res):
107+
return []
108+
print(res)
109+
is_lang_ru_en = all([row["language_code"] in ("ru", "en") for row in res])
110+
111+
if not is_lang_ru_en:
112+
return []
113+
97114
query = f"""
98115
SELECT
99116
M.id

src/recommendations/meme_queue.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,9 @@ async def generate_cold_start_recommendations(user_id, limit=10):
4848

4949
candidates = []
5050

51-
# AB test
52-
if user_id % 100 < 50:
53-
candidates = await get_selected_sources(
54-
user_id, limit=limit, exclude_meme_ids=meme_ids_in_queue
55-
)
51+
candidates = await get_selected_sources(
52+
user_id, limit=limit, exclude_meme_ids=meme_ids_in_queue
53+
)
5654

5755
if len(candidates) == 0:
5856
candidates = await get_best_memes_from_each_source(
@@ -82,11 +80,10 @@ async def generate_recommendations(user_id, limit):
8280
candidates = []
8381

8482
if user_info["nmemes_sent"] < 30:
85-
# AB test
86-
if user_id % 100 < 50:
87-
candidates = await get_selected_sources(
88-
user_id, limit=limit, exclude_meme_ids=meme_ids_in_queue
89-
)
83+
candidates = await get_selected_sources(
84+
user_id, limit=limit, exclude_meme_ids=meme_ids_in_queue
85+
)
86+
9087
if len(candidates) == 0:
9188
candidates = await get_best_memes_from_each_source(
9289
user_id, limit=limit, exclude_meme_ids=meme_ids_in_queue

tests/recommendations/test_selected_sources.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ async def conn():
1818

1919
await conn.execute(
2020
insert(user),
21-
[{'id': 1, 'type': "user"}, {'id': 51, 'type': "user"}]
21+
[{'id': 1, 'type': 'user'}, {'id': 21, 'type': 'user'}]
2222
)
2323
await conn.execute(
2424
insert(meme_source),
@@ -46,14 +46,15 @@ async def conn():
4646
insert(user_language),
4747
[
4848
{'user_id': 1, 'language_code': 'ru', 'created_at': datetime(2024, 1, 1)},
49-
{'user_id': 51, 'language_code': 'ru', 'created_at': datetime(2024, 1, 1)}
49+
{'user_id': 21, 'language_code': 'en', 'created_at': datetime(2024, 1, 1)},
50+
{'user_id': 21, 'language_code': 'es', 'created_at': datetime(2024, 1, 1)}
5051
]
5152
)
5253
await conn.execute(
5354
insert(user_meme_reaction),
5455
[
5556
{'user_id': 1, 'meme_id': seen_meme, 'reaction_id': 1, 'recommended_by': '111', 'sent_at': datetime(2024, 1, 1)},
56-
{'user_id': 51, 'meme_id': seen_meme, 'reaction_id': 1, 'recommended_by': '111', 'sent_at': datetime(2024, 1, 1)}
57+
{'user_id': 21, 'meme_id': seen_meme, 'reaction_id': 1, 'recommended_by': '111', 'sent_at': datetime(2024, 1, 1)}
5758
]
5859
)
5960

@@ -78,7 +79,7 @@ async def conn():
7879

7980

8081
@pytest.mark.asyncio
81-
async def test_random_best(conn: AsyncConnection):
82+
async def test_selected_sources(conn: AsyncConnection):
8283
recs = await get_selected_sources(1, 10)
8384
assert len(recs) == 2
8485

@@ -92,8 +93,8 @@ async def test_meme_queue(conn: AsyncConnection):
9293
assert len(recs) == 2
9394
assert recs[0]['recommended_by'] == 'selected_sources_240513'
9495

95-
user_id = 51
96+
user_id = 21
9697
await generate_cold_start_recommendations(user_id)
9798
queue_key = redis.get_meme_queue_key(user_id)
9899
recs = await redis.get_all_memes_in_queue_by_key(queue_key)
99-
assert recs[0]['recommended_by'] != 'selected_sources_240513'
100+
assert len(recs) == 0

0 commit comments

Comments
 (0)