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,54 @@ 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+ k_id1 = top_keywords [0 ][0 ]
69+ kw_name1 = await self ._get_keyword_name (k_id1 )
70+
71+ use_single_keyword_row = True
72+ if len (top_keywords ) >= 2 :
73+ k_id2 = top_keywords [1 ][0 ]
74+ kw_name2 = await self ._get_keyword_name (k_id2 )
75+ title = ""
76+ if kw_name1 and kw_name2 :
77+ title = gemini_service .generate_content (f"Keywords: { kw_name1 } + { kw_name2 } " )
78+
79+ if title :
80+ rows .append (
81+ RowDefinition (
82+ title = title ,
83+ id = f"watchly.theme.k{ k_id1 } .k{ k_id2 } " ,
84+ keywords = [k_id1 , k_id2 ],
85+ )
86+ )
87+ use_single_keyword_row = False
88+
89+ if use_single_keyword_row and kw_name1 :
7090 rows .append (
7191 RowDefinition (
72- title = f" { normalize_keyword (kw_name ) } " ,
73- id = f"watchly.theme.k{ k_id } " ,
74- keywords = [k_id ],
92+ title = normalize_keyword (kw_name1 ) ,
93+ id = f"watchly.theme.k{ k_id1 } " ,
94+ keywords = [k_id1 ],
7595 )
7696 )
7797
7898 # Strategy 2: Keyword + Genre (Specific Niche)
79- if top_genres and len (top_keywords ) > 1 :
99+ if top_genres and len (top_keywords ) > 2 :
80100 g_id = top_genres [0 ][0 ]
81101 # get random keywords: Just to surprise user in every refresh
82- k_id = random .choice (top_keywords [1 :])[0 ]
102+ k_id = random .choice (top_keywords [2 :])[0 ]
83103
84104 if k_id :
85105 kw_name = await self ._get_keyword_name (k_id )
86106 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 )
107+ title = gemini_service .generate_content (
108+ f"Genre: { get_gname (g_id )} + Keyword: { normalize_keyword (kw_name )} "
109+ )
110+ if not title :
111+ title = f"{ get_gname (g_id )} { normalize_keyword (kw_name )} "
112+ # keyword and genre can have same name sometimes, remove if so
113+ title = " " .join (dict .fromkeys (title .split ()))
97114
98115 rows .append (
99116 RowDefinition (
@@ -110,9 +127,12 @@ def get_cname(code):
110127 c_code = top_countries [0 ][0 ]
111128 c_adj = get_cname (c_code )
112129 if c_adj :
130+ title = gemini_service .generate_content (f"Genre: { get_gname (g_id )} + Country: { c_adj } " )
131+ if not title :
132+ title = f"{ get_gname (g_id )} { c_adj } "
113133 rows .append (
114134 RowDefinition (
115- title = f" { c_adj } { get_gname ( g_id ) } " ,
135+ title = title ,
116136 id = f"watchly.theme.g{ g_id } .ct{ c_code } " , # ct for country
117137 genres = [g_id ],
118138 country = c_code ,
@@ -130,9 +150,12 @@ def get_cname(code):
130150 # # Only do this if decade is valid and somewhat old (nostalgia factor)
131151 if 1970 <= decade_start <= 2010 :
132152 decade_str = str (decade_start )[2 :] + "s" # "90s"
153+ title = gemini_service .generate_content (f"Genre: { get_gname (g_id )} + Era: { decade_str } " )
154+ if not title :
155+ title = f"{ get_gname (g_id )} { decade_str } "
133156 rows .append (
134157 RowDefinition (
135- title = f" { decade_str } { get_gname ( g_id ) } " ,
158+ title = title ,
136159 id = f"watchly.theme.g{ g_id } .y{ decade_start } " ,
137160 genres = [g_id ],
138161 year_range = (decade_start , decade_start + 9 ),
0 commit comments