File size: 3,604 Bytes
ab28335
f0f34af
 
 
 
 
ab28335
f0f34af
 
 
 
90462dd
f0f34af
 
 
 
90462dd
f0f34af
 
 
ccf7c37
f0f34af
 
 
ccf7c37
f0f34af
 
 
 
 
 
 
ccf7c37
f0f34af
 
 
ab28335
f0f34af
 
ab28335
f0f34af
 
 
 
 
 
 
ccf7c37
f0f34af
 
 
 
 
 
 
 
 
 
a716036
f0f34af
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ccf7c37
f0f34af
 
 
 
ccf7c37
 
f0f34af
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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()