33from pydantic import BaseModel
44
55from app .models .profile import UserTasteProfile
6+ from app .services .gemini import gemini_service
67from app .services .tmdb .countries import COUNTRY_ADJECTIVES
78from app .services .tmdb .genre import movie_genres , series_genres
89from app .services .tmdb_service import TMDBService
@@ -62,38 +63,58 @@ def get_cname(code):
6263 return random .choice (adjectives )
6364 return ""
6465
65- # Strategy 1: Pure Keyword Row (Top Priority)
66+ # Strategy 1: Combined Keyword Row (Top Priority)
6667 if top_keywords :
67- k_id = top_keywords [0 ][0 ]
68- kw_name = await self ._get_keyword_name (k_id )
69- if kw_name :
68+ # keywords = random.sample(top_keywords, k=2)
69+ k_id1 = top_keywords [0 ][0 ]
70+ k_id2 = top_keywords [1 ][0 ]
71+ kw_name = await self ._get_keyword_name (k_id1 )
72+ kw_name2 = await self ._get_keyword_name (k_id2 )
73+ multiple_keywords = True
74+ title = gemini_service .generate_content (f"Keywords: { kw_name } + { kw_name2 } " )
75+ if not title :
76+ multiple_keywords = False
77+ title = normalize_keyword (kw_name )
78+ if multiple_keywords :
7079 rows .append (
7180 RowDefinition (
72- title = f"{ normalize_keyword (kw_name )} " ,
73- id = f"watchly.theme.k{ k_id } " ,
74- keywords = [k_id ],
81+ title = title ,
82+ id = f"watchly.theme.k{ k_id1 } .k{ k_id2 } " ,
83+ keywords = [k_id1 , k_id2 ],
84+ )
85+ )
86+ else :
87+ rows .append (
88+ RowDefinition (
89+ title = title ,
90+ id = f"watchly.theme.k{ k_id1 } " ,
91+ keywords = [k_id1 ],
7592 )
7693 )
7794
7895 # Strategy 2: Keyword + Genre (Specific Niche)
79- if top_genres and len (top_keywords ) > 1 :
96+ if top_genres and len (top_keywords ) > 2 :
8097 g_id = top_genres [0 ][0 ]
8198 # get random keywords: Just to surprise user in every refresh
82- k_id = random .choice (top_keywords [1 :])[0 ]
99+ k_id = random .choice (top_keywords [2 :])[0 ]
83100
84101 if k_id :
85102 kw_name = await self ._get_keyword_name (k_id )
86103 if kw_name :
87- title = f"{ normalize_keyword (kw_name )} { get_gname (g_id )} "
88- # keyword and genre can have same name sometimes, remove if so
89- words = title .split ()
90- seen_words = set ()
91- unique_words = []
92- for word in words :
93- if word not in seen_words :
94- unique_words .append (word )
95- seen_words .add (word )
96- title = " " .join (unique_words )
104+ title = gemini_service .generate_content (
105+ f"Genre: { get_gname (g_id )} + Keyword: { normalize_keyword (kw_name )} "
106+ )
107+ if not title :
108+ title = f"{ get_gname (g_id )} { normalize_keyword (kw_name )} "
109+ # keyword and genre can have same name sometimes, remove if so
110+ words = title .split ()
111+ seen_words = set ()
112+ unique_words = []
113+ for word in words :
114+ if word not in seen_words :
115+ unique_words .append (word )
116+ seen_words .add (word )
117+ title = " " .join (unique_words )
97118
98119 rows .append (
99120 RowDefinition (
@@ -110,9 +131,12 @@ def get_cname(code):
110131 c_code = top_countries [0 ][0 ]
111132 c_adj = get_cname (c_code )
112133 if c_adj :
134+ title = gemini_service .generate_content (f"Genre: { get_gname (g_id )} + Country: { c_adj } " )
135+ if not title :
136+ title = f"{ get_gname (g_id )} { c_adj } "
113137 rows .append (
114138 RowDefinition (
115- title = f" { c_adj } { get_gname ( g_id ) } " ,
139+ title = title ,
116140 id = f"watchly.theme.g{ g_id } .ct{ c_code } " , # ct for country
117141 genres = [g_id ],
118142 country = c_code ,
@@ -130,9 +154,12 @@ def get_cname(code):
130154 # # Only do this if decade is valid and somewhat old (nostalgia factor)
131155 if 1970 <= decade_start <= 2010 :
132156 decade_str = str (decade_start )[2 :] + "s" # "90s"
157+ title = gemini_service .generate_content (f"Genre: { get_gname (g_id )} + Era: { decade_str } " )
158+ if not title :
159+ title = f"{ get_gname (g_id )} { decade_str } "
133160 rows .append (
134161 RowDefinition (
135- title = f" { decade_str } { get_gname ( g_id ) } " ,
162+ title = title ,
136163 id = f"watchly.theme.g{ g_id } .y{ decade_start } " ,
137164 genres = [g_id ],
138165 year_range = (decade_start , decade_start + 9 ),
0 commit comments