Younes13 commited on
Commit
1e377a3
·
verified ·
1 Parent(s): 4ee575c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -18
app.py CHANGED
@@ -4,12 +4,12 @@ from transformers import AutoTokenizer, AutoModel
4
  from sklearn.metrics.pairwise import cosine_similarity
5
  import numpy as np
6
 
7
- # بارگذاری مدل و توکنایزر
8
  model_name = "HooshvareLab/bert-fa-base-uncased"
9
  tokenizer = AutoTokenizer.from_pretrained(model_name)
10
  model = AutoModel.from_pretrained(model_name)
11
 
12
- # لیست سوالات و پاسخ‌ها (شکل طبیعی‌تر)
13
  faq_dict = {
14
  "زمان انتخاب واحد چه موقع است؟": "معمولاً پایان شهریور و بهمن است.",
15
  "چه زمانی می‌توان حذف و اضافه انجام داد؟": "حدود یک هفته پس از شروع ترم تحصیلی است.",
@@ -19,19 +19,19 @@ faq_dict = {
19
  }
20
 
21
  faq_questions = list(faq_dict.keys())
 
22
 
23
- # تابع استخراج embedding
24
  def get_embedding(text):
25
  inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
26
  with torch.no_grad():
27
  outputs = model(**inputs)
28
- emb = outputs.last_hidden_state.mean(dim=1).squeeze().cpu().numpy()
29
- return emb
30
 
31
- # ساخت embedding برای سوالات FAQ
32
  faq_embeddings = [get_embedding(q) for q in faq_questions]
33
 
34
- # تابع پاسخ‌گویی ایجنت
35
  def student_bot(user_question):
36
  try:
37
  user_emb = get_embedding(user_question)
@@ -39,8 +39,6 @@ def student_bot(user_question):
39
  best_idx = int(np.argmax(sims))
40
  best_score = sims[best_idx]
41
 
42
- print(f"Similarity Scores: {sims}") # برای دیباگ
43
-
44
  if best_score > 0.6:
45
  return faq_dict[faq_questions[best_idx]]
46
  else:
@@ -48,14 +46,34 @@ def student_bot(user_question):
48
  except Exception as e:
49
  return f"❗️خطا: {str(e)}"
50
 
51
- # رابط Gradio
52
- iface = gr.Interface(
53
- fn=student_bot,
54
- inputs=gr.Textbox(label="سؤال خود را وارد کنید"),
55
- outputs=gr.Textbox(label="پاسخ"),
56
- title="ایجنت راهنمای دانشجویان",
57
- description="پاسخ‌دهی هوشمند به سؤالات پرتکرار با FarsiBERT"
58
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
- iface.launch()
 
 
 
 
 
61
 
 
 
4
  from sklearn.metrics.pairwise import cosine_similarity
5
  import numpy as np
6
 
7
+ # بارگذاری مدل
8
  model_name = "HooshvareLab/bert-fa-base-uncased"
9
  tokenizer = AutoTokenizer.from_pretrained(model_name)
10
  model = AutoModel.from_pretrained(model_name)
11
 
12
+ # پایگاه دانش اولیه
13
  faq_dict = {
14
  "زمان انتخاب واحد چه موقع است؟": "معمولاً پایان شهریور و بهمن است.",
15
  "چه زمانی می‌توان حذف و اضافه انجام داد؟": "حدود یک هفته پس از شروع ترم تحصیلی است.",
 
19
  }
20
 
21
  faq_questions = list(faq_dict.keys())
22
+ faq_embeddings = []
23
 
24
+ # تولید embedding
25
  def get_embedding(text):
26
  inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
27
  with torch.no_grad():
28
  outputs = model(**inputs)
29
+ return outputs.last_hidden_state.mean(dim=1).squeeze().cpu().numpy()
 
30
 
31
+ # ساخت embedding اولیه
32
  faq_embeddings = [get_embedding(q) for q in faq_questions]
33
 
34
+ # تابع پاسخ‌دهی
35
  def student_bot(user_question):
36
  try:
37
  user_emb = get_embedding(user_question)
 
39
  best_idx = int(np.argmax(sims))
40
  best_score = sims[best_idx]
41
 
 
 
42
  if best_score > 0.6:
43
  return faq_dict[faq_questions[best_idx]]
44
  else:
 
46
  except Exception as e:
47
  return f"❗️خطا: {str(e)}"
48
 
49
+ # تابع افزودن سؤال و جواب جدید
50
+ def add_faq(new_q, new_a):
51
+ if new_q.strip() == "" or new_a.strip() == "":
52
+ return "سؤال و پاسخ نمی‌توانند خالی باشند."
53
+
54
+ if new_q in faq_dict:
55
+ return "⚠️ این سؤال از قبل موجود است."
56
+
57
+ faq_dict[new_q] = new_a
58
+ faq_questions.append(new_q)
59
+ faq_embeddings.append(get_embedding(new_q))
60
+ return "✅ سؤال جدید با موفقیت افزوده شد."
61
+
62
+ # رابط Gradio با دو تب:
63
+ with gr.Blocks() as demo:
64
+ gr.Markdown("## 🤖 ایجنت راهنمای دانشجویان")
65
+
66
+ with gr.Tab("🟢 پرسش سؤال"):
67
+ user_input = gr.Textbox(label="سؤال شما")
68
+ response = gr.Textbox(label="پاسخ")
69
+ ask_btn = gr.Button("دریافت پاسخ")
70
+ ask_btn.click(fn=student_bot, inputs=user_input, outputs=response)
71
 
72
+ with gr.Tab("📝 افزودن سؤال جدید"):
73
+ new_q = gr.Textbox(label="سؤال جدید")
74
+ new_a = gr.Textbox(label="پاسخ مربوط به سؤال")
75
+ result = gr.Textbox(label="وضعیت ثبت")
76
+ add_btn = gr.Button("افزودن به پایگاه دانش")
77
+ add_btn.click(fn=add_faq, inputs=[new_q, new_a], outputs=result)
78
 
79
+ demo.launch()