Manishkumaryadav's picture
Update app.py
f0f34af verified
raw
history blame
3.6 kB
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()