diginoron commited on
Commit
006375f
·
verified ·
1 Parent(s): 95239b8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -42
app.py CHANGED
@@ -1,69 +1,59 @@
 
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
- # بارگذاری کلیدها از محیط
8
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
9
- INDEX_NAME = "tiyam-chat"
10
 
11
- # اتصال به Pinecone
12
- pc = Pinecone(api_key=PINECONE_API_KEY)
13
- index = pc.Index(INDEX_NAME)
14
-
15
- # مدل بردارساز
16
  embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
17
 
18
- # مدل زبانی فارسی
19
- generator = pipeline("text-generation", model="HooshvareLab/gpt2-fa")
 
 
 
 
 
 
 
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([
37
- match['metadata'].get("answer", "") or match['metadata'].get("پاسخ", "")
38
- for match in result['matches'] if match['score'] > 0.7
39
- ])
40
-
41
- if not context.strip():
42
- return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
43
-
44
- prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده.
45
- اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم.
46
-
47
- اطلاعات:
48
- {context}
49
 
50
- سؤال: {message}
51
- پاسخ:"""
52
 
53
- response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text']
54
- answer = response.split("پاسخ:")[-1].strip()
55
 
56
- return answer if len(answer) > 3 else "متأسفم، پاسخ مشخصی برای این سوال ندارم."
 
57
 
58
- except Exception as e:
59
- return f"🚫 خطا: {str(e)}"
 
 
60
 
61
- # رابط چت Gradio
62
  chat_ui = gr.ChatInterface(
63
  fn=rag_chatbot,
64
- title="🤖 چت‌بات هوشمند تیام",
65
  description="پاسخ‌گویی بر پایه داده‌های واقعی شرکت + تولید متن با مدل فارسی",
66
- theme="soft",
67
  )
68
 
69
  chat_ui.launch()
 
1
+
2
  import os
3
  import gradio as gr
4
  from sentence_transformers import SentenceTransformer
5
+ from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
6
  from pinecone import Pinecone
7
 
8
+ # بارگذاری کلیدها
9
  PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
10
+ INDEX_NAME = os.environ.get("INDEX_NAME")
11
 
12
+ # مدل embedding
 
 
 
 
13
  embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
14
 
15
+ # مدل تولید متن فارسی MT5
16
+ tokenizer = AutoTokenizer.from_pretrained("m3hrdadfi/mt5-small-finetuned-persian-qa")
17
+ model = AutoModelForSeq2SeqLM.from_pretrained("m3hrdadfi/mt5-small-finetuned-persian-qa")
18
+
19
+ def generate_answer_mt5(question, context):
20
+ input_text = f"پرسش: {question} \n متن: {context}"
21
+ inputs = tokenizer.encode(input_text, return_tensors="pt", truncation=True)
22
+ outputs = model.generate(inputs, max_length=128, num_beams=4, early_stopping=True)
23
+ return tokenizer.decode(outputs[0], skip_special_tokens=True)
24
 
25
+ # اتصال به Pinecone
26
+ pc = Pinecone(api_key=PINECONE_API_KEY)
27
+ index = pc.Index(INDEX_NAME)
28
 
29
  # تابع چت
30
  def rag_chatbot(message, history):
31
+ greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید"]
32
  if message.strip() in greetings:
33
  return "سلام! چطور می‌تونم کمکتون کنم؟ 😊"
34
 
35
+ query_vector = embedder.encode(message).tolist()
36
+ result = index.query(vector=query_vector, top_k=3, include_metadata=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
+ if not result['matches']:
39
+ return "متأسفم، پاسخی در پایگاه داده پیدا نکردم."
40
 
41
+ context = "\n".join([match['metadata'].get("پاسخ", "") for match in result['matches']])
 
42
 
43
+ if not context.strip():
44
+ return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
45
 
46
+ answer = generate_answer_mt5(message, context)
47
+ if len(answer) < 3:
48
+ return "متأسفم، پاسخ مشخصی برای این سوال ندارم."
49
+ return answer
50
 
51
+ # رابط کاربری Gradio
52
  chat_ui = gr.ChatInterface(
53
  fn=rag_chatbot,
54
+ title="🤖 چت‌بات هوشمند تیام (نسخه RAG با MT5)",
55
  description="پاسخ‌گویی بر پایه داده‌های واقعی شرکت + تولید متن با مدل فارسی",
56
+ theme="soft"
57
  )
58
 
59
  chat_ui.launch()