import torch import gradio as gr import pandas as pd from sentence_transformers import SentenceTransformer, util df = pd.read_csv("movies_dataset.csv") df['full_text'] = ( df['title'].fillna('') + " | " + df['genres'].fillna('') + " | " + df['overview'].fillna('') + " | " + df['tagline'].fillna('') ) df = df.sort_values(by="popularity", ascending=False).head(5000).reset_index(drop=True) model = SentenceTransformer('all-MiniLM-L6-v2') df['full_text'] = df['full_text'].fillna('').astype(str) embeddings = model.encode(df['full_text'].tolist(), show_progress_bar=False) df['embeddings'] = embeddings.tolist() embedding_tensor = torch.tensor(embeddings) def recommend_movies(user_input, top_k=5): if not user_input.strip(): return "❗Please enter a movie description or genre." user_embedding = model.encode(user_input, convert_to_tensor=True) similarities = util.cos_sim(user_embedding, embedding_tensor)[0] top_indices = similarities.argsort(descending=True)[:top_k] results = [] for idx in top_indices: row = df.iloc[idx.item()] results.append(f"🎬 **{row['title']}**\n{row['overview'][:300]}...") return "\n\n".join(results) demo = gr.Interface( fn=recommend_movies, inputs=gr.Textbox(lines=2, placeholder="Describe a movie, mood, or genre..."), outputs=gr.Markdown(), title="🎬 Movie Recommender", description="Type in a description, vibe, or genre and get movie suggestions!" ) demo.launch()