Spaces:
Sleeping
Sleeping
File size: 2,482 Bytes
0f5d2ed 9ad95ef 0f5d2ed 9ad95ef 0f5d2ed 012badc 281c0ae 012badc 0f5d2ed 012badc 74c93be 012badc 7291a91 012badc 0f5d2ed 012badc be823ee 012badc 08f847c 0f5d2ed f957bce 35e4839 f957bce 012badc 9ad95ef 012badc f957bce 9ad95ef 7291a91 012badc 0f5d2ed 012badc 0f5d2ed 012badc f957bce 012badc 0f5d2ed 012badc 0f5d2ed 7291a91 84a7b0a |
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 |
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()
|