M17idd commited on
Commit
afdedd8
·
1 Parent(s): a147c7f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -20
app.py CHANGED
@@ -29,29 +29,39 @@ st.markdown("""
29
  """, unsafe_allow_html=True)
30
  st.markdown("""
31
  <style>
 
32
  @font-face {
33
- font-family: 'Shabnam';
34
- src: url('https://cdn.jsdelivr.net/gh/rastikerdar/shabnam-font/dist/Shabnam.woff2') format('woff2'),
35
- url('https://cdn.jsdelivr.net/gh/rastikerdar/shabnam-font/dist/Shabnam.woff') format('woff');
36
  font-weight: 400;
37
  font-style: normal;
38
  }
 
 
39
  html, body, [class*="css"] {
40
- font-family: 'Shabnam', Tahoma, sans-serif !important;
41
- font-weight: 500 !important;
42
  direction: rtl;
43
  text-align: right;
 
 
44
  }
 
 
45
  .stApp {
46
  background: linear-gradient(to left, #4b5e40, #2e3b2e);
47
  color: #ffffff;
48
  }
 
 
49
  [data-testid="stSidebar"] {
50
  width: 260px !important;
51
  background-color: #1a2b1e;
52
  border: none !important;
53
  padding-top: 20px;
54
  }
 
 
55
  .menu-item {
56
  display: flex;
57
  align-items: center;
@@ -63,18 +73,24 @@ st.markdown("""
63
  cursor: pointer;
64
  transition: background-color 0.3s ease;
65
  }
 
 
66
  .menu-item:hover {
67
  background-color: #2e3b2e;
68
  color: #b8860b;
69
  }
 
 
70
  .menu-item img {
71
  width: 24px;
72
  height: 24px;
73
  }
 
 
74
  .stButton>button {
75
  background-color: #b8860b !important;
76
  color: #1a2b1e !important;
77
- font-family: 'Shabnam', Tahoma;
78
  font-weight: 700 !important;
79
  border-radius: 10px;
80
  padding: 12px 24px;
@@ -84,11 +100,15 @@ st.markdown("""
84
  width: 100%;
85
  margin: 10px 0;
86
  }
 
 
87
  .stButton>button:hover {
88
  background-color: #8b6508 !important;
89
  transform: translateY(-2px);
90
  box-shadow: 0 4px 8px rgba(0,0,0,0.3);
91
  }
 
 
92
  .header-text {
93
  text-align: center;
94
  margin: 20px 0;
@@ -97,18 +117,25 @@ st.markdown("""
97
  border-radius: 15px;
98
  box-shadow: 0 6px 12px rgba(0,0,0,0.4);
99
  }
 
 
100
  .header-text h1 {
101
  font-size: 42px;
102
  color: #b8860b;
103
  margin: 0;
104
  font-weight: 800;
 
105
  }
 
 
106
  .subtitle {
107
  font-size: 18px;
108
  color: #d4d4d4;
109
  font-weight: 600;
110
  margin-top: 10px;
111
  }
 
 
112
  .chat-message {
113
  flex-wrap: wrap;
114
  background-color: rgba(26, 43, 30, 0.95);
@@ -126,28 +153,37 @@ st.markdown("""
126
  align-items: center;
127
  gap: 15px;
128
  }
 
 
129
  @keyframes fadeIn {
130
  from { opacity: 0; transform: translateY(10px); }
131
  to { opacity: 1; transform: translateY(0); }
132
  }
 
 
133
  .stTextInput>div>input, .stTextArea textarea {
134
  background-color: rgba(26, 43, 30, 0.95) !important;
135
  border-radius: 10px !important;
136
  border: 1px solid #b8860b !important;
137
  padding: 12px !important;
138
- font-family: 'Shabnam', Tahoma;
139
  font-weight: 500;
140
  font-size: 16px;
141
  color: #d4d4d4 !important;
142
  }
 
 
143
  hr {
144
  border: 1px solid #b8860b;
145
  margin: 15px 0;
146
  }
 
 
147
  [data-testid="stSidebar"] > div {
148
  border: none !important;
149
  }
150
- </style>
 
151
  """, unsafe_allow_html=True)
152
 
153
 
@@ -277,6 +313,11 @@ def load_and_process_documents(path):
277
 
278
  all_sentences = load_and_process_documents(folder_path)
279
 
 
 
 
 
 
280
 
281
  # all_sentences = load_and_process_documents(folder_path)
282
  # st.markdown(all_sentences[2])
@@ -411,24 +452,21 @@ sentEmbedding.load_model("C:/Users/ici/Downloads/sent2vec/sent2vec-naab.model")
411
 
412
 
413
 
414
- top_k = 5
415
- threshold = 0.8
416
 
417
  original_sentences = all_sentences.copy()
418
  all_vectors = [sentEmbedding.get_sentence_vector(sentence) for sentence in original_sentences]
419
 
420
  if query:
421
  found = False
422
- threshold = 85
423
 
424
  for idx, sentence in enumerate(all_sentences):
425
  similarity = fuzz.partial_ratio(query, sentence)
426
  if similarity >= threshold:
427
- st.markdown(sentence)
428
-
429
- # تولید پاسخ بازنویسی‌شده
430
  prompt = f"""
431
- تعدادی پاسخ برای سوال زیر تولید شده است. لطفاً ابتدا این پاسخ‌ها را بررسی کن، سپس با در نظر گرفتن محتوای سوال و لحن آن، یک پاسخ نهایی حرفه‌ای، دقیق و روان ارائه کن که هم به سوال پاسخ دهد و هم از نظر نگارشی و ساختاری در سطح بالایی باشد. پاسخ نهایی باید حداکثر ۵۱۲ کاراکتر باشد، خلاصه و واضح نوشته شود و فقط به زبان فارسی باشد. از تکرار اضافی پرهیز کن و محتوای چند پاسخ را در صورت نیاز با هم ترکیب کن.
432
 
433
  سوال:
434
  {query}
@@ -446,8 +484,8 @@ if query:
446
 
447
  # بررسی مرتبط بودن پاسخ با سؤال
448
  review_prompt = f"""
449
- لطفاً بررسی کن که آیا پاسخ زیر، دقیقاً به سوال زیر پاسخ داده است یا خیر. اگر پاسخ به سوال مرتبط، درست و قابل قبول است، فقط بنویس: 'تأیید شد'.
450
- اگر پاسخ اشتباه است یا ربطی به سوال ندارد، فقط بنویس: 'نیاز به اصلاح دارد'.
451
 
452
  سوال:
453
  {query}
@@ -460,13 +498,32 @@ if query:
460
  HumanMessage(content=review_prompt)
461
  ])
462
  review_result = review_response.content.strip()
463
-
464
  if "تأیید شد" in review_result:
 
465
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
466
  else:
467
- # تولید پاسخ جدید توسط مدل بدون استفاده از داده قبلی
468
  final_prompt = f"""
469
- لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد. از زبانی جز فارسی استفاده نکن:
470
 
471
  سوال:
472
  {query}
@@ -476,6 +533,7 @@ if query:
476
  HumanMessage(content=final_prompt)
477
  ])
478
  final_answer = new_response.content.strip()
 
479
  st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
480
 
481
  think.empty()
@@ -489,5 +547,6 @@ if query:
489
  HumanMessage(content=prompt)
490
  ])
491
  rewritten = response.content.strip()
 
492
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
493
  think.empty()
 
29
  """, unsafe_allow_html=True)
30
  st.markdown("""
31
  <style>
32
+ /* بارگذاری فونت Roboto */
33
  @font-face {
34
+ font-family: 'Roboto';
35
+ src: url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap') format('woff2');
 
36
  font-weight: 400;
37
  font-style: normal;
38
  }
39
+
40
+ /* تنظیم فونت برای کل سایت */
41
  html, body, [class*="css"] {
42
+ font-family: 'Roboto', Tahoma, sans-serif !important;
43
+ font-weight: 400 !important;
44
  direction: rtl;
45
  text-align: right;
46
+ background-color: #2e3b2e;
47
+ color: #ffffff;
48
  }
49
+
50
+ /* طراحی برای بخش استایل اپ */
51
  .stApp {
52
  background: linear-gradient(to left, #4b5e40, #2e3b2e);
53
  color: #ffffff;
54
  }
55
+
56
+ /* استایل برای سایدبار */
57
  [data-testid="stSidebar"] {
58
  width: 260px !important;
59
  background-color: #1a2b1e;
60
  border: none !important;
61
  padding-top: 20px;
62
  }
63
+
64
+ /* استایل برای آیتم‌های منو */
65
  .menu-item {
66
  display: flex;
67
  align-items: center;
 
73
  cursor: pointer;
74
  transition: background-color 0.3s ease;
75
  }
76
+
77
+ /* استایل برای آیتم‌های منو هنگام هاور */
78
  .menu-item:hover {
79
  background-color: #2e3b2e;
80
  color: #b8860b;
81
  }
82
+
83
+ /* استایل برای آیکون‌ها در منو */
84
  .menu-item img {
85
  width: 24px;
86
  height: 24px;
87
  }
88
+
89
+ /* استایل برای دکمه‌ها */
90
  .stButton>button {
91
  background-color: #b8860b !important;
92
  color: #1a2b1e !important;
93
+ font-family: 'Roboto', Tahoma, sans-serif;
94
  font-weight: 700 !important;
95
  border-radius: 10px;
96
  padding: 12px 24px;
 
100
  width: 100%;
101
  margin: 10px 0;
102
  }
103
+
104
+ /* استایل برای دکمه‌ها هنگام هاور */
105
  .stButton>button:hover {
106
  background-color: #8b6508 !important;
107
  transform: translateY(-2px);
108
  box-shadow: 0 4px 8px rgba(0,0,0,0.3);
109
  }
110
+
111
+ /* استایل برای متن هدر */
112
  .header-text {
113
  text-align: center;
114
  margin: 20px 0;
 
117
  border-radius: 15px;
118
  box-shadow: 0 6px 12px rgba(0,0,0,0.4);
119
  }
120
+
121
+ /* استایل برای عنوان هدر */
122
  .header-text h1 {
123
  font-size: 42px;
124
  color: #b8860b;
125
  margin: 0;
126
  font-weight: 800;
127
+ font-family: 'Roboto', Tahoma, sans-serif;
128
  }
129
+
130
+ /* استایل برای زیرنویس */
131
  .subtitle {
132
  font-size: 18px;
133
  color: #d4d4d4;
134
  font-weight: 600;
135
  margin-top: 10px;
136
  }
137
+
138
+ /* استایل برای پیام‌های چت */
139
  .chat-message {
140
  flex-wrap: wrap;
141
  background-color: rgba(26, 43, 30, 0.95);
 
153
  align-items: center;
154
  gap: 15px;
155
  }
156
+
157
+ /* انیمیشن برای ورود پیام چت */
158
  @keyframes fadeIn {
159
  from { opacity: 0; transform: translateY(10px); }
160
  to { opacity: 1; transform: translateY(0); }
161
  }
162
+
163
+ /* استایل برای ورودی متن */
164
  .stTextInput>div>input, .stTextArea textarea {
165
  background-color: rgba(26, 43, 30, 0.95) !important;
166
  border-radius: 10px !important;
167
  border: 1px solid #b8860b !important;
168
  padding: 12px !important;
169
+ font-family: 'Roboto', Tahoma;
170
  font-weight: 500;
171
  font-size: 16px;
172
  color: #d4d4d4 !important;
173
  }
174
+
175
+ /* استایل برای خط افقی */
176
  hr {
177
  border: 1px solid #b8860b;
178
  margin: 15px 0;
179
  }
180
+
181
+ /* حذف مرز از قسمت سایدبار */
182
  [data-testid="stSidebar"] > div {
183
  border: none !important;
184
  }
185
+ </style>
186
+
187
  """, unsafe_allow_html=True)
188
 
189
 
 
313
 
314
  all_sentences = load_and_process_documents(folder_path)
315
 
316
+ def clean_text(text):
317
+ cleaned_text = re.sub(r'[^آ-ی۰-۹0-9،.؟!؛+\-* ]+', '', text)
318
+
319
+ return cleaned_text
320
+
321
 
322
  # all_sentences = load_and_process_documents(folder_path)
323
  # st.markdown(all_sentences[2])
 
452
 
453
 
454
 
455
+ #top_k = 5
456
+ #threshold = 0.8
457
 
458
  original_sentences = all_sentences.copy()
459
  all_vectors = [sentEmbedding.get_sentence_vector(sentence) for sentence in original_sentences]
460
 
461
  if query:
462
  found = False
463
+ threshold = 62
464
 
465
  for idx, sentence in enumerate(all_sentences):
466
  similarity = fuzz.partial_ratio(query, sentence)
467
  if similarity >= threshold:
 
 
 
468
  prompt = f"""
469
+ تعدادی پاسخ برای سوال زیر تولید شده است. لطفاً ابتدا این پاسخ‌ها را بررسی کن، سپس با در نظر گرفتن محتوای سوال و لحن آن، یک پاسخ نهایی حرفه‌ای، دقیق و روان ارائه کن که هم به سوال پاسخ دهد و هم از نظر نگارشی و ساختاری در سطح بالایی باشد. پاسخ نهایی باید حداکثر 1024 کاراکتر و حداقل 512 باشد، خلاصه و واضح نوشته شود و فقط به زبان فارسی باشد. از تکرار اضافی پرهیز کن و محتوای چند پاسخ را در صورت نیاز با هم ترکیب کن.
470
 
471
  سوال:
472
  {query}
 
484
 
485
  # بررسی مرتبط بودن پاسخ با سؤال
486
  review_prompt = f"""
487
+ لطفاً بررسی کن که آیا پاسخ زیر، حدودا به سوال زیر پاسخ داده است یا خیر یعنی کلمات کلیدی اصلی در سوال در پاسخ هست یا ن . اگر پاسخ به سوال مرتبط، درست و قابل قبول است، فقط بنویس: 'تأیید شدواگر کمی مربوط بود بنویس: 'کمی خوب''.
488
+ اگر پاسخ اشتباه است یا هیچ ربطی به سوال ندارد، فقط بنویس: 'نیاز به اصلاح دارد'.
489
 
490
  سوال:
491
  {query}
 
498
  HumanMessage(content=review_prompt)
499
  ])
500
  review_result = review_response.content.strip()
 
501
  if "تأیید شد" in review_result:
502
+ rewritten = clean_text(rewritten)
503
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
504
+ elif "کمی خوب" in review_result:
505
+ final_prompt = f"""
506
+ لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد. از زبانی جز فارسی استفاده نکن و بیا هم از سوال هم دیتای زیر و هم از پاسخ استفاده کن و پاسخ مناسبی بنویس :
507
+
508
+ سوال:
509
+ {query}
510
+ پاسخ:
511
+ {review_result}
512
+ دیتا:
513
+ {rewritten}
514
+
515
+ """
516
+ new_1response = llm([
517
+ SystemMessage(content="You are a helpful assistant."),
518
+ HumanMessage(content=final_prompt)
519
+ ])
520
+ final_answer1 = new_1response.content.strip()
521
+ final_answer1 = clean_text(final_answer1)
522
+ st.markdown(f'<div class="chat-message">{final_answer1}</div>', unsafe_allow_html=True)
523
+
524
  else:
 
525
  final_prompt = f"""
526
+ لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد. ا�� زبانی جز فارسی استفاده نکن :
527
 
528
  سوال:
529
  {query}
 
533
  HumanMessage(content=final_prompt)
534
  ])
535
  final_answer = new_response.content.strip()
536
+ final_answer = clean_text(final_answer)
537
  st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
538
 
539
  think.empty()
 
547
  HumanMessage(content=prompt)
548
  ])
549
  rewritten = response.content.strip()
550
+ rewritten = clean_text(rewritten)
551
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
552
  think.empty()