diginoron commited on
Commit
186714c
·
verified ·
1 Parent(s): f4abf81

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -9
app.py CHANGED
@@ -3,34 +3,87 @@ from sentence_transformers import SentenceTransformer
3
  from pinecone import Pinecone
4
  import json
5
  import gradio as gr
 
 
6
 
7
  # بارگذاری مدل embedding
8
  model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
9
 
10
- # بارگذاری داده محلی برای نمایش اولیه (در صورت نیاز)
11
  with open("tiyam_qa_data.json", "r", encoding="utf-8") as f:
12
  data = json.load(f)
13
 
14
  # اتصال به Pinecone
15
- pc = Pinecone(api_key="pcsk_6p6AmJ_Qua4tQN69badNHEGZTj3tt5Bd7LiyiDGcXDj92LxSaBzK2ypYxTRx2rafTEJhjL") # 🔐 جایگزین کن با کلیدت
16
- index = pc.Index("tiyam-chat") # ایندکس از قبل ساخته‌شده
 
 
 
 
17
 
18
- # تابع پاسخ‌گو
19
  def retrieve_answer(query, threshold=0.65, top_k=1):
20
  query_embedding = model.encode([query])[0]
21
  result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)
22
 
23
  if result['matches'] and result['matches'][0]['score'] > threshold:
24
- print(f"📊 Similarity: {result['matches'][0]['score']:.3f}")
25
  metadata = result['matches'][0]['metadata']
26
  return metadata.get('answer', 'پاسخ یافت نشد')
27
  else:
 
 
 
 
28
  return "متأسفم، پاسخ دقیقی برای این سوال نداریم. لطفاً با ما تماس بگیرید."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
- # رابط Gradio
31
  def chat_interface(question):
32
- return retrieve_answer(question)
 
 
33
 
34
- demo = gr.Interface(fn=chat_interface, inputs="text", outputs="text", title="چت‌بات تیام", description="سؤالات خود را از آژانس دیجیتال مارکتینگ تیام بپرسید.")
 
 
 
 
 
 
35
 
36
- demo.launch()
 
 
3
  from pinecone import Pinecone
4
  import json
5
  import gradio as gr
6
+ from huggingface_hub import InferenceApi
7
+ import os
8
 
9
  # بارگذاری مدل embedding
10
  model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
11
 
12
+ # بارگذاری داده محلی در صورت نیاز (اگر لازم نیست، این قسمت را حذف کنید)
13
  with open("tiyam_qa_data.json", "r", encoding="utf-8") as f:
14
  data = json.load(f)
15
 
16
  # اتصال به Pinecone
17
+ pc = Pinecone(api_key="pcsk_6p6AmJ_Qua4tQN69badNHEGZTj3tt5Bd7LiyiDGcXDj92LxSaBzK2ypYxTRx2rafTEJhjL") # جایگزین کن با کلید خودت
18
+ index = pc.Index("tiyam-chat") # ایندکس از قبل ساخته شده
19
+
20
+ # بارگذاری API چت جی پی تی از هاگینگ فیس از سکرت اسپیس
21
+ space_id = "openai" # نام سکرت اسپیس شما در هاگینگ فیس
22
+ hf_api = InferenceApi(repo_id=space_id, token=os.getenv("HF_API_TOKEN")) # فرض بر اینکه توکن در متغیر محیطی HF_API_TOKEN هست
23
 
 
24
  def retrieve_answer(query, threshold=0.65, top_k=1):
25
  query_embedding = model.encode([query])[0]
26
  result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)
27
 
28
  if result['matches'] and result['matches'][0]['score'] > threshold:
 
29
  metadata = result['matches'][0]['metadata']
30
  return metadata.get('answer', 'پاسخ یافت نشد')
31
  else:
32
+ return None
33
+
34
+ def generate_human_response(context_text):
35
+ if not context_text:
36
  return "متأسفم، پاسخ دقیقی برای این سوال نداریم. لطفاً با ما تماس بگیرید."
37
+
38
+ prompt = (
39
+ f"این متن پاسخ سوال مشتری است: \"{context_text}\".\n"
40
+ "لطفاً یک پاسخ کوتاه، رسمی و کاملاً مختصر و مفید به زبان فارسی تولید کن که فقط بر اساس همین متن باشد و هیچ اطلاعات اضافی نده."
41
+ )
42
+
43
+ # درخواست به هاگینگ فیس برای تولید پاسخ با مدل چت جی پی تی
44
+ try:
45
+ response = hf_api(
46
+ {
47
+ "inputs": prompt,
48
+ "parameters": {
49
+ "max_new_tokens": 100,
50
+ "temperature": 0.2,
51
+ "do_sample": False,
52
+ "top_p": 0.9,
53
+ }
54
+ }
55
+ )
56
+ # پاسخ به صورت متن
57
+ if isinstance(response, dict) and "error" in response:
58
+ return "خطا در ارتباط با مدل چت‌بات."
59
+ # بعضی مدل‌ها پاسخ رو به صورت لیست یا دیکشنری برمی‌گردونن، پس کنترل کن
60
+ if isinstance(response, list):
61
+ text = response[0].get("generated_text", "")
62
+ elif isinstance(response, dict):
63
+ text = response.get("generated_text", "")
64
+ else:
65
+ text = str(response)
66
+
67
+ # در صورت وجود prompt در متن خروجی، حذف کن
68
+ if text.startswith(prompt):
69
+ text = text[len(prompt):].strip()
70
+
71
+ return text.strip() or "متأسفم، پاسخی تولید نشد."
72
+ except Exception as e:
73
+ return "خطا در پردازش درخواست."
74
 
 
75
  def chat_interface(question):
76
+ answer = retrieve_answer(question)
77
+ final_answer = generate_human_response(answer)
78
+ return final_answer
79
 
80
+ demo = gr.Interface(
81
+ fn=chat_interface,
82
+ inputs="text",
83
+ outputs="text",
84
+ title="چت‌بات تیام",
85
+ description="سؤالات خود را از آژانس دیجیتال مارکتینگ تیام بپرسید."
86
+ )
87
 
88
+ if __name__ == "__main__":
89
+ demo.launch()