Find-My-Anime / app.py
Prashasst's picture
Create app.py
25ffa44 verified
raw
history blame
1.79 kB
import gradio as gr
import numpy as np
import faiss
from sentence_transformers import SentenceTransformer
model=SentenceTransformer("Prashasst/anime-recommendation-model")
embeddings = np.load('data/embeddings.npy')
embeddings_id = np.load('data/embeddings_id.npy')
index=faiss.read_index('data/anime_faiss.index')
def recommend_anime(query, k=5):
"""
Recommends anime based on a query using a FAISS index and a Prashasst's SentenceTransformer model.
Args:
query (str): The input query to find similar anime.
k (int): The number of recommendations to return.
Returns:
List[str]: A list of recommended anime ids.
"""
# Encode the query
query_embedding = model.encode(query).reshape(1, -1) # Reshape to 2D array
# Search for similar anime
distances, indices = index.search(query_embedding, k=k)
# Get the anime titles
recommended_anime = []
for i in indices[0]:
anime_id = embeddings_id[i]
# anime_name = df.loc[df['id'] == anime_id, 'title_english'].values[0]
# if pd.isna(anime_name):
# anime_name = df.loc[df['id'] == anime_id, 'title_romaji'].values[0]
recommended_anime.append(anime_id)
return {"ids":recommended_anime}
# Create the Gradio app
with gr.Blocks() as app:
gr.Markdown("## Anime Recommendation System")
with gr.Row():
query = gr.Textbox(label="Enter your anime preferences or query:")
top_k = gr.Slider(1, 10, value=5, label="Number of Recommendations")
with gr.Row():
recommend_button = gr.Button("Get Recommendations")
output = gr.JSON(label="Recommended Anime")
recommend_button.click(recommend_anime, inputs=[query, top_k], outputs=output)
# Launch the app
app.launch(share=True)