diginoron commited on
Commit
35e4839
·
verified ·
1 Parent(s): 09d1da9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -7
app.py CHANGED
@@ -1,22 +1,44 @@
1
- # تابع اصلی RAG
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  def rag_chatbot(message, history):
3
  greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید"]
4
  if message.strip() in greetings:
5
  return "سلام! چطور می‌تونم کمکتون کنم؟ 😊"
6
 
 
7
  query_vector = embedder.encode(message).tolist()
8
  result = index.query(vector=query_vector, top_k=3, include_metadata=True)
9
 
10
- if not result['matches']:
 
11
  return "متأسفم، پاسخی در پایگاه داده پیدا نکردم."
12
 
13
- # ساخت context از نتایج
14
- context = "\n".join([match['metadata'].get("پاسخ", "") for match in result['matches']])
15
 
16
  if not context.strip():
17
  return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
18
 
19
- # ساخت پرامپت دقیق
20
  prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده.
21
  اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم.
22
 
@@ -26,11 +48,24 @@ def rag_chatbot(message, history):
26
  سؤال: {message}
27
  پاسخ:"""
28
 
29
- # تولید پاسخ
30
- response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text']
31
  answer = response.split("پاسخ:")[-1].strip()
32
 
 
33
  if len(answer) < 3:
34
  return "متأسفم، پاسخ مشخصی برای این سوال ندارم."
35
 
36
  return answer
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ from sentence_transformers import SentenceTransformer
4
+ from transformers import pipeline
5
+ from pinecone import Pinecone
6
+
7
+ # بارگذاری کلیدها از Secretها
8
+ PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
9
+ INDEX_NAME = os.environ.get("INDEX_NAME")
10
+
11
+ # مدل embedding برای بردارسازی سوالات
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
+ # تابع RAG چت‌بات
22
  def rag_chatbot(message, history):
23
  greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید"]
24
  if message.strip() in greetings:
25
  return "سلام! چطور می‌تونم کمکتون کنم؟ 😊"
26
 
27
+ # بردارسازی و جستجو در Pinecone
28
  query_vector = embedder.encode(message).tolist()
29
  result = index.query(vector=query_vector, top_k=3, include_metadata=True)
30
 
31
+ # بررسی وجود پاسخ
32
+ if not result.matches:
33
  return "متأسفم، پاسخی در پایگاه داده پیدا نکردم."
34
 
35
+ # استخراج پاسخ‌ها
36
+ context = "\n".join([match.metadata.get("پاسخ", "") for match in result.matches])
37
 
38
  if not context.strip():
39
  return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
40
 
41
+ # ساخت پرامپت
42
  prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده.
43
  اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم.
44
 
 
48
  سؤال: {message}
49
  پاسخ:"""
50
 
51
+ # تولید پاسخ توسط مدل زبان
52
+ response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]["generated_text"]
53
  answer = response.split("پاسخ:")[-1].strip()
54
 
55
+ # اگر خروجی بی‌معنا بود
56
  if len(answer) < 3:
57
  return "متأسفم، پاسخ مشخصی برای این سوال ندارم."
58
 
59
  return answer
60
+
61
+ # رابط کاربری Gradio
62
+ chat_ui = gr.ChatInterface(
63
+ fn=rag_chatbot,
64
+ title="🤖 چت‌بات هوشمند تیام (نسخه RAG)",
65
+ description="پاسخ‌گویی ترکیبی با داده‌های شرکت + تولید متن طبیعی هوشمند",
66
+ theme="soft",
67
+ )
68
+
69
+ # اجرا در Hugging Face
70
+ if __name__ == "__main__":
71
+ chat_ui.launch()