tiyam-chatbot / app.py
diginoron's picture
Update app.py
012badc verified
raw
history blame
2.48 kB
import os
import json
import torch
import gradio as gr
from sentence_transformers import SentenceTransformer
from pinecone import Pinecone
from transformers import T5Tokenizer, T5ForConditionalGeneration
# بارگذاری توکن‌ها از محیط امن
HF_TOKEN = os.environ.get("HF_TOKEN")
PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
PINECONE_INDEX_NAME = os.environ.get("PINECONE_INDEX_NAME")
# بارگذاری مدل embedding
embedding_model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", use_auth_token=HF_TOKEN)
# اتصال به Pinecone
pc = Pinecone(api_key=PINECONE_API_KEY)
index = pc.Index(PINECONE_INDEX_NAME)
# بارگذاری مدل زبانی MT5
tokenizer = T5Tokenizer.from_pretrained("google/mt5-small", token=HF_TOKEN)
language_model = T5ForConditionalGeneration.from_pretrained("google/mt5-small", token=HF_TOKEN)
# تابع جستجو در Pinecone
def retrieve_answer(query, threshold=0.65, top_k=3):
query_embedding = embedding_model.encode([query])[0]
result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)
if result['matches'] and result['matches'][0]['score'] > threshold:
print(f"📊 Similarity: {result['matches'][0]['score']:.3f}")
metadata = result['matches'][0]['metadata']
return metadata.get('answer', 'پاسخی یافت نشد.')
else:
return "متأسفم، پاسخ دقیقی برای این سوال نداریم. لطفاً با ما تماس بگیرید."
# تابع تولید پاسخ طبیعی با MT5
def generate_natural_answer(question, raw_answer):
prompt = f"پرسش: {question}\nپاسخ دقیق: {raw_answer}\nپاسخ طبیعی:"
inputs = tokenizer(prompt, return_tensors="pt", padding=True).to(language_model.device)
with torch.no_grad():
outputs = language_model.generate(**inputs, max_new_tokens=128, do_sample=False)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# اتصال همه‌چیز در رابط Gradio
def chat_interface(user_question):
raw_answer = retrieve_answer(user_question)
return generate_natural_answer(user_question, raw_answer)
# رابط Gradio
demo = gr.Interface(
fn=chat_interface,
inputs="text",
outputs="text",
title="چت‌بات تیام",
description="سؤالات خود را از آژانس دیجیتال مارکتینگ تیام بپرسید."
)
demo.launch()