diginoron commited on
Commit
f8cb2b1
·
verified ·
1 Parent(s): 7ab0a97

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -19
app.py CHANGED
@@ -3,48 +3,41 @@ import gradio as gr
3
  from sentence_transformers import SentenceTransformer
4
  from transformers import pipeline
5
  from pinecone import Pinecone
6
- from pinecone.core.client.exceptions import PineconeException
7
 
8
- # بارگذاری مقادیر محرمانه از محیط
9
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
10
  INDEX_NAME = os.environ.get("INDEX_NAME")
11
 
12
- # مدل embedding هماهنگ با dimension = 384
13
  embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
14
 
15
- # مدل زبانی فارسی
16
  generator = pipeline("text-generation", model="HooshvareLab/gpt2-fa")
17
 
18
  # اتصال به Pinecone
19
  pc = Pinecone(api_key=PINECONE_API_KEY)
20
  index = pc.Index(INDEX_NAME)
21
 
22
- # پیام‌های سلام اولیه
23
  greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید", "سلام خوبی؟", "سلام عزیز"]
24
 
25
- # تابع چت RAG
26
  def rag_chatbot(message, history):
27
- try:
28
- # پاسخ ساده به سلام‌ها
29
- if message.strip() in greetings:
30
- return "سلام! چطور می‌تونم کمکتون کنم؟ 😊"
31
 
32
- # تبدیل پرسش به بردار
33
  query_vector = embedder.encode(message).tolist()
34
-
35
- # جستجوی مشابه‌ترین پاسخ‌ها در ایندکس
36
  result = index.query(vector=query_vector, top_k=3, include_metadata=True)
37
 
38
  if not result['matches']:
39
  return "متأسفم، پاسخی در پایگاه داده پیدا نکردم."
40
 
41
- # استخراج پاسخ‌های مرتبط
42
  context = "\n".join([m['metadata'].get("پاسخ", "") for m in result['matches'] if m['score'] > 0.7])
43
 
44
  if not context.strip():
45
  return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
46
 
47
- # ساخت پرامپت برای مدل زبانی
48
  prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده.
49
  اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم.
50
 
@@ -54,7 +47,6 @@ def rag_chatbot(message, history):
54
  سؤال: {message}
55
  پاسخ:"""
56
 
57
- # تولید پاسخ نهایی
58
  response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text']
59
  answer = response.split("پاسخ:")[-1].strip()
60
 
@@ -63,10 +55,8 @@ def rag_chatbot(message, history):
63
 
64
  return answer
65
 
66
- except PineconeException as e:
67
- return f"❗ خطای پایگاه داده: {str(e)}"
68
  except Exception as e:
69
- return f"🚫 خطای غیرمنتظره: {str(e)}"
70
 
71
  # رابط کاربری Gradio
72
  chat_ui = gr.ChatInterface(
 
3
  from sentence_transformers import SentenceTransformer
4
  from transformers import pipeline
5
  from pinecone import Pinecone
 
6
 
7
+ # بارگذاری کلیدهای محرمانه
8
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
9
  INDEX_NAME = os.environ.get("INDEX_NAME")
10
 
11
+ # مدل embedding با دایمنشن 384
12
  embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
13
 
14
+ # مدل تولید متن فارسی
15
  generator = pipeline("text-generation", model="HooshvareLab/gpt2-fa")
16
 
17
  # اتصال به Pinecone
18
  pc = Pinecone(api_key=PINECONE_API_KEY)
19
  index = pc.Index(INDEX_NAME)
20
 
21
+ # لیست خوش‌آمدگویی
22
  greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید", "سلام خوبی؟", "سلام عزیز"]
23
 
24
+ # تابع اصلی
25
  def rag_chatbot(message, history):
26
+ if message.strip() in greetings:
27
+ return "سلام! چطور می‌تونم کمکتون کنم؟ 😊"
 
 
28
 
29
+ try:
30
  query_vector = embedder.encode(message).tolist()
 
 
31
  result = index.query(vector=query_vector, top_k=3, include_metadata=True)
32
 
33
  if not result['matches']:
34
  return "متأسفم، پاسخی در پایگاه داده پیدا نکردم."
35
 
 
36
  context = "\n".join([m['metadata'].get("پاسخ", "") for m in result['matches'] if m['score'] > 0.7])
37
 
38
  if not context.strip():
39
  return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
40
 
 
41
  prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده.
42
  اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم.
43
 
 
47
  سؤال: {message}
48
  پاسخ:"""
49
 
 
50
  response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text']
51
  answer = response.split("پاسخ:")[-1].strip()
52
 
 
55
 
56
  return answer
57
 
 
 
58
  except Exception as e:
59
+ return f"🚫 خطا در پردازش: {str(e)}"
60
 
61
  # رابط کاربری Gradio
62
  chat_ui = gr.ChatInterface(