diginoron commited on
Commit
9ad95ef
·
verified ·
1 Parent(s): 353aeae

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -77
app.py CHANGED
@@ -1,92 +1,36 @@
1
- import gradio as gr
2
  from sentence_transformers import SentenceTransformer
3
- from transformers import GPT2Tokenizer, GPT2LMHeadModel
4
  from pinecone import Pinecone
 
 
5
 
6
- # ===============================
7
- # 🌐 اتصال به Pinecone
8
- # ===============================
9
- PINECONE_API_KEY = "pcsk_6p6AmJ_Qua4tQN69badNHEGZTj3tt5Bd7LiyiDGcXDj92LxSaBzK2ypYxTRx2rafTEJhjL"
10
- PINECONE_INDEX_NAME = "tiyam-chat"
11
-
12
- pc = Pinecone(api_key=PINECONE_API_KEY)
13
- index = pc.Index(PINECONE_INDEX_NAME)
14
 
15
- # ===============================
16
- # 🔤 بارگذاری مدل embedding
17
- # ===============================
18
- embedding_model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
19
 
20
- # ===============================
21
- # 🧠 بارگذاری مدل GPT-2 برای تولید پاسخ
22
- # ===============================
23
- gpt2_tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
24
- gpt2_model = GPT2LMHeadModel.from_pretrained("openai-community/gpt2")
25
 
26
- # ===============================
27
- # 🔍 بازیابی پاسخ از Pinecone
28
- # ===============================
29
  def retrieve_answer(query, threshold=0.65, top_k=1):
30
- query_embedding = embedding_model.encode([query])[0]
31
  result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)
32
 
33
  if result['matches'] and result['matches'][0]['score'] > threshold:
34
- return result['matches'][0]['metadata'].get('answer', 'پاسخ یافت نشد')
 
 
35
  else:
36
- return None
37
 
38
- # ===============================
39
- # ✨ تولید پاسخ با GPT-2
40
- # ===============================
41
- def generate_response_with_gpt2(answer, user_question):
42
- # ساخت پرامپت
43
- prompt = f"پاسخ به سوال: {user_question} بر اساس اطلاعات: {answer}"
44
-
45
- # تبدیل پرامپت به توکن‌ها
46
- input_ids = gpt2_tokenizer.encode(prompt, return_tensors="pt", truncation=True)
47
-
48
- # تولید خروجی از مدل GPT2
49
- output_ids = gpt2_model.generate(input_ids, max_new_tokens=80, num_return_sequences=1, no_repeat_ngram_size=2, top_p=0.95, temperature=0.7)
50
-
51
- # تبدیل توکن‌ها به متن
52
- generated_text = gpt2_tokenizer.decode(output_ids[0], skip_special_tokens=True)
53
-
54
- return generated_text
55
-
56
- # ===============================
57
- # ✨ تولید پاسخ نهایی
58
- # ===============================
59
- def final_answer(user_question):
60
- # ابتدا پاسخ را از Pinecone جستجو می‌کنیم
61
- answer = retrieve_answer(user_question)
62
-
63
- if answer:
64
- # اگر پاسخی از Pinecone پیدا شد، آن را به GPT2 بدهیم برای تولید پاسخ طبیعی
65
- return generate_response_with_gpt2(answer, user_question)
66
- else:
67
- # اگر پاسخی از Pinecone یافت نشد، برای سوالات عمومی از GPT2 استفاده می‌کنیم
68
- general_responses = {
69
- "سلام": "سلام! خوش آمدید 😊",
70
- "خوبی؟": "مرسی! حال شما چطور است؟",
71
- "مرسی": "خواهش می‌کنم، در خدمت شما هستیم."
72
- }
73
-
74
- for key, value in general_responses.items():
75
- if key in user_question:
76
- return value
77
-
78
- # اگر سوال عمومی نبود، از GPT2 برای تولید پاسخ طبیعی استفاده می‌کنیم
79
- return generate_response_with_gpt2("", user_question)
80
 
81
- # ===============================
82
- # 🎛️ رابط Gradio
83
- # ===============================
84
- demo = gr.Interface(
85
- fn=final_answer,
86
- inputs=gr.Textbox(lines=2, label="سؤال شما"),
87
- outputs=gr.Textbox(label="پاسخ تیام"),
88
- title="💬 چت‌بات هوشمند تیام",
89
- description="سؤالات خود را از آژانس دیجیتال مارکتینگ تیام بپرسید. سیستم از ترکیب جستجوی دقیق و تولید پاسخ طبیعی استفاده می‌کند."
90
- )
91
 
92
  demo.launch()
 
1
+ # app.py
2
  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()