Spaces:
Sleeping
Sleeping
File size: 2,365 Bytes
006375f 35e4839 006375f 35e4839 006375f 35e4839 006375f 35e4839 006375f 03e3067 006375f 03e3067 006375f be823ee 537e43e c036b5f 006375f f8cb2b1 be823ee 006375f e1de535 006375f e1de535 006375f be823ee 006375f e1de535 006375f 35e4839 006375f 35e4839 006375f 03e3067 006375f 35e4839 be823ee |
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 |
import os
import gradio as gr
from sentence_transformers import SentenceTransformer
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
from pinecone import Pinecone
# بارگذاری کلیدها
PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
INDEX_NAME = os.environ.get("INDEX_NAME")
# مدل embedding
embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
# مدل تولید متن فارسی MT5
tokenizer = AutoTokenizer.from_pretrained("m3hrdadfi/mt5-small-finetuned-persian-qa")
model = AutoModelForSeq2SeqLM.from_pretrained("m3hrdadfi/mt5-small-finetuned-persian-qa")
def generate_answer_mt5(question, context):
input_text = f"پرسش: {question} \n متن: {context}"
inputs = tokenizer.encode(input_text, return_tensors="pt", truncation=True)
outputs = model.generate(inputs, max_length=128, num_beams=4, early_stopping=True)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# اتصال به Pinecone
pc = Pinecone(api_key=PINECONE_API_KEY)
index = pc.Index(INDEX_NAME)
# تابع چت
def rag_chatbot(message, history):
greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید"]
if message.strip() in greetings:
return "سلام! چطور میتونم کمکتون کنم؟ 😊"
query_vector = embedder.encode(message).tolist()
result = index.query(vector=query_vector, top_k=3, include_metadata=True)
if not result['matches']:
return "متأسفم، پاسخی در پایگاه داده پیدا نکردم."
context = "\n".join([match['metadata'].get("پاسخ", "") for match in result['matches']])
if not context.strip():
return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
answer = generate_answer_mt5(message, context)
if len(answer) < 3:
return "متأسفم، پاسخ مشخصی برای این سوال ندارم."
return answer
# رابط کاربری Gradio
chat_ui = gr.ChatInterface(
fn=rag_chatbot,
title="🤖 چتبات هوشمند تیام (نسخه RAG با MT5)",
description="پاسخگویی بر پایه دادههای واقعی شرکت + تولید متن با مدل فارسی",
theme="soft"
)
chat_ui.launch()
|