Manishkumaryadav's picture
Update app.py
f0f34af verified
import gradio as gr
import pandas as pd
import numpy as np
from transformers import BlenderbotTokenizer, BlenderbotForConditionalGeneration, M2M100ForConditionalGeneration, M2M100Tokenizer
from datasets import load_dataset
from deep_translator import GoogleTranslator
# Load Chatbot (BlenderBot 3B)
model_name = "facebook/blenderbot-3B"
tokenizer = BlenderbotTokenizer.from_pretrained(model_name)
chatbot_model = BlenderbotForConditionalGeneration.from_pretrained(model_name)
# Load Translation Model (Multilingual)
translate_model_name = "facebook/m2m100_418M"
translate_tokenizer = M2M100Tokenizer.from_pretrained(translate_model_name)
translate_model = M2M100ForConditionalGeneration.from_pretrained(translate_model_name)
# Load Hugging Face Dataset (Amazon Reviews)
dataset = load_dataset("amazon_us_reviews", split="train")
df = pd.DataFrame(dataset)
# Keep necessary columns
df = df[["product_category", "product_title", "star_rating", "review_body"]].dropna()
df["star_rating"] = df["star_rating"].astype(float)
# Function to translate text
def translate_text(text, target_lang="en"):
if target_lang == "en":
return text # No translation needed for English
inputs = translate_tokenizer(text, return_tensors="pt", src_lang="en")
translated_tokens = translate_model.generate(**inputs, forced_bos_token_id=translate_tokenizer.get_lang_id(target_lang))
return translate_tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
# Function to recommend products based on user input with filters
def recommend_products(user_query, min_rating=3.5):
keywords = user_query.lower().split()
# Filter based on keywords & minimum rating
recommended = df[(df["product_category"].str.lower().isin(keywords)) & (df["star_rating"] >= min_rating)]
if recommended.empty:
return "No recommendations found. Try searching for 'Electronics', 'Books', or 'Beauty products'."
# Sort by highest rating
recommended = recommended.sort_values(by="star_rating", ascending=False).head(5)
return recommended[["product_title", "star_rating"]].to_string(index=False)
# Chatbot Response Function with improved answers
def chatbot_response(user_input, language="en", min_rating=3.5):
# Translate input if not in English
if language != "en":
user_input = translate_text(user_input, target_lang="en")
# Generate chatbot response
inputs = tokenizer([user_input], return_tensors="pt")
reply_ids = chatbot_model.generate(**inputs, max_length=100)
response = tokenizer.decode(reply_ids[0], skip_special_tokens=True)
# Get product recommendations
recommendations = recommend_products(user_input, min_rating)
# Translate output if needed
if language != "en":
response = translate_text(response, target_lang=language)
recommendations = translate_text(recommendations, target_lang=language)
return f"πŸ€– AI: {response}\n\nπŸ” Recommended Products:\n{recommendations}"
# Gradio UI with Filters & Multi-Language
iface = gr.Interface(
fn=chatbot_response,
inputs=[
gr.Textbox(label="Ask me about products!"),
gr.Dropdown(["en", "es", "fr", "de", "hi"], label="Language", value="en"), # Supports English, Spanish, French, German, Hindi
gr.Slider(1, 5, value=3.5, step=0.5, label="Minimum Star Rating")
],
outputs="text",
title="πŸ›οΈ AI Shopping Assistant",
description="Chat with an AI to get product recommendations with filters & multilingual support!",
theme="default"
)
# Launch the App
iface.launch()