Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline | |
from woocommerce import API | |
# اتصال به ووکامرس | |
wcapi = API( | |
url="https://vashnia.com", | |
consumer_key="ck_f284e213686b919d3f4552dab91a336543274b04", | |
consumer_secret="cs_15fd20967c669efa724f7a0c683a11910ea441e6", | |
timeout=50 | |
) | |
# جستجوی محصولات و ساخت جدول HTML | |
def search_products(query): | |
try: | |
res = wcapi.get("products", params={"search": query}) | |
products = res.json() | |
if not isinstance(products, list) or len(products) == 0: | |
return "❌ محصولی با این نام پیدا نشد." | |
table = "<div style='display:flex; justify-content:center;'><table style='border-collapse:collapse; text-align:center; direction:rtl;'>" | |
table += "<thead><tr><th style='padding:10px; border:1px solid #ccc;'>نام محصول</th><th style='padding:10px; border:1px solid #ccc;'>قیمت و وزن</th><th style='padding:10px; border:1px solid #ccc;'>خرید</th></tr></thead><tbody>" | |
for product in products: | |
name = product.get("name", "نامشخص") | |
permalink = product.get("permalink", "#") | |
price_section = "" | |
# گرفتن قیمت و وزن از وارییشنها | |
variations = product.get("variations", []) | |
if variations: | |
for var_id in variations: | |
var_res = wcapi.get(f"products/variations/{var_id}") | |
var = var_res.json() | |
weight = "-" | |
for attr in var.get("attributes", []): | |
if "وزن" in attr.get("name", ""): | |
weight = attr.get("option", "") | |
price = var.get("price", "نامشخص") | |
price_section += f"{weight} : {price} تومان<br>" | |
else: | |
price = product.get("price", "نامشخص") | |
price_section = f"{price} تومان" | |
table += f""" | |
<tr> | |
<td style='padding:10px; border:1px solid #ccc;'>{name}</td> | |
<td style='padding:10px; border:1px solid #ccc;'>{price_section}</td> | |
<td style='padding:10px; border:1px solid #ccc;'> | |
<a href='{permalink}' target='_blank'> | |
<button style='background:#f97316; color:#fff; padding:8px 12px; border:none; border-radius:5px;'>خرید محصول</button> | |
</a> | |
</td> | |
</tr> | |
""" | |
table += "</tbody></table></div>" | |
return table | |
except Exception as e: | |
return f"❌ خطا در جستجوی محصولات: {str(e)}" | |
# بارگذاری مدل جدید GPT2 فارسی | |
model_name = "HooshvareLab/gpt2-fa" | |
tokenizer = AutoTokenizer.from_pretrained(model_name) | |
model = AutoModelForCausalLM.from_pretrained(model_name) | |
generator = pipeline("text-generation", model=model, tokenizer=tokenizer) | |
# تابع اصلی چت | |
def chat_with_agent(message, history): | |
message_lower = message.strip().lower() | |
# بررسی اگر پیام درباره قیمت محصول باشد | |
if any(x in message_lower for x in ["قیمت", "برنج", "پسته", "فندق", "بادام", "تخمه", "کشمش", "هندی"]): | |
product_name = message_lower.replace("قیمت", "").strip() | |
return search_products(product_name) | |
# پاسخ عمومی با GPT2 فارسی | |
prompt = f"پرسش: {message}\nپاسخ:" | |
result = generator(prompt, max_length=80, num_return_sequences=1, do_sample=True) | |
response = result[0]['generated_text'].replace(prompt, "").strip() | |
return response | |
# رابط چت Gradio | |
chat = gr.ChatInterface( | |
fn=chat_with_agent, | |
title="🛒 ایجنت چت فروشگاه وش نیا", | |
description="با ما چت کن، قیمت بپرس، سوال کن 😊", | |
chatbot=gr.Chatbot(height=450), | |
textbox=gr.Textbox(placeholder="مثلاً: قیمت بادام شور یا سلام 👋", label="پیام شما"), | |
theme="soft" | |
) | |
chat.launch() | |