Update app.py
Browse files
app.py
CHANGED
@@ -567,7 +567,7 @@ book_embeddings = load_embeddings_from_cache()
|
|
567 |
|
568 |
if query:
|
569 |
found = False
|
570 |
-
threshold = 0.66
|
571 |
|
572 |
# بررسی اینکه آیا امبدینگهای سوال قبلاً محاسبه شده یا خیر
|
573 |
query_embedding = model.encode(query, convert_to_tensor=True)
|
@@ -580,7 +580,7 @@ if query:
|
|
580 |
# ذخیره امبدینگهای کتاب در کش
|
581 |
book_embeddings = {idx: embedding.tolist() for idx, embedding in enumerate(all_sentences_embeddings)}
|
582 |
save_embeddings_to_cache(book_embeddings)
|
583 |
-
|
584 |
# محاسبه مشابهتها با استفاده از امبدینگهای کتاب
|
585 |
sentence_embeddings = [embedding for embedding in book_embeddings.values()]
|
586 |
similarities = util.pytorch_cos_sim(query_embedding, sentence_embeddings)[0]
|
@@ -601,7 +601,7 @@ if query:
|
|
601 |
|
602 |
# بررسی مرتبط بودن پاسخ با سؤال
|
603 |
review_prompt = f"""
|
604 |
-
لطفاً بررسی کن که آیا پاسخ زیر، حدودا به سوال زیر پاسخ داده است یا خیر یعنی کلمات کلیدی اصلی در سوال در پاسخ هست یا
|
605 |
سوال:
|
606 |
{query}
|
607 |
پاسخ:
|
@@ -609,19 +609,21 @@ if query:
|
|
609 |
"""
|
610 |
review_response = llm([SystemMessage(content="You are a helpful assistant."), HumanMessage(content=review_prompt)])
|
611 |
review_result = review_response.content.strip()
|
|
|
612 |
if "تأیید شد" in review_result:
|
613 |
rewritten = clean_text(rewritten)
|
614 |
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|
615 |
|
616 |
else:
|
617 |
-
|
618 |
-
|
|
|
619 |
سوال:
|
620 |
{query}
|
621 |
-
متن
|
622 |
{sentence}
|
623 |
"""
|
624 |
-
new_response = llm([SystemMessage(content="You are a helpful assistant."), HumanMessage(content=
|
625 |
final_answer = new_response.content.strip()
|
626 |
final_answer = clean_text(final_answer)
|
627 |
st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
|
@@ -631,7 +633,8 @@ if query:
|
|
631 |
break
|
632 |
|
633 |
if not found:
|
634 |
-
|
|
|
635 |
response = llm([SystemMessage(content="You are a helpful assistant."), HumanMessage(content=prompt)])
|
636 |
rewritten = response.content.strip()
|
637 |
rewritten = clean_text(rewritten)
|
|
|
567 |
|
568 |
if query:
|
569 |
found = False
|
570 |
+
threshold = 0.66 # حد مشابهت برای شناسایی جملات مرتبط
|
571 |
|
572 |
# بررسی اینکه آیا امبدینگهای سوال قبلاً محاسبه شده یا خیر
|
573 |
query_embedding = model.encode(query, convert_to_tensor=True)
|
|
|
580 |
# ذخیره امبدینگهای کتاب در کش
|
581 |
book_embeddings = {idx: embedding.tolist() for idx, embedding in enumerate(all_sentences_embeddings)}
|
582 |
save_embeddings_to_cache(book_embeddings)
|
583 |
+
|
584 |
# محاسبه مشابهتها با استفاده از امبدینگهای کتاب
|
585 |
sentence_embeddings = [embedding for embedding in book_embeddings.values()]
|
586 |
similarities = util.pytorch_cos_sim(query_embedding, sentence_embeddings)[0]
|
|
|
601 |
|
602 |
# بررسی مرتبط بودن پاسخ با سؤال
|
603 |
review_prompt = f"""
|
604 |
+
لطفاً بررسی کن که آیا پاسخ زیر، حدودا به سوال زیر پاسخ داده است یا خیر یعنی کلمات کلیدی اصلی در سوال در پاسخ هست یا نه. اگر پاسخ به سوال مرتبط، درست و قابل قبول است، فقط بنویس: 'تأیید شد'. اگر پاسخ اشتباه است یا هیچ ربطی به سوال ندارد، فقط بنویس: 'نیاز به اصلاح دارد'.
|
605 |
سوال:
|
606 |
{query}
|
607 |
پاسخ:
|
|
|
609 |
"""
|
610 |
review_response = llm([SystemMessage(content="You are a helpful assistant."), HumanMessage(content=review_prompt)])
|
611 |
review_result = review_response.content.strip()
|
612 |
+
|
613 |
if "تأیید شد" in review_result:
|
614 |
rewritten = clean_text(rewritten)
|
615 |
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|
616 |
|
617 |
else:
|
618 |
+
# استفاده از جملات مشابه از کتاب برای تکمیل پاسخ
|
619 |
+
prompt_to_extract = f"""
|
620 |
+
لطفاً برای سوال زیر پاسخی معتبر و مرتبط تولید کن که در متن کتاب موجود باشد و به سوال پاسخ دهد. اگر در متن کتاب چیزی برای پاسخ به سوال یافت نمیشود، از دانش خود برای ایجاد پاسخ استفاده کن.
|
621 |
سوال:
|
622 |
{query}
|
623 |
+
جملات مشابه از متن کتاب:
|
624 |
{sentence}
|
625 |
"""
|
626 |
+
new_response = llm([SystemMessage(content="You are a helpful assistant."), HumanMessage(content=prompt_to_extract)])
|
627 |
final_answer = new_response.content.strip()
|
628 |
final_answer = clean_text(final_answer)
|
629 |
st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
|
|
|
633 |
break
|
634 |
|
635 |
if not found:
|
636 |
+
# در صورتی که هیچ پاسخی در کتاب پیدا نشد، مدل از دانش خود استفاده کند
|
637 |
+
prompt = f"لطفاً بر اساس سوال زیر یک متن مرتبط و معنادار تولید کن و جملات ساختگی استفاده نکن و از جملات موجود در اسناد و جملات معتبر استفاده کن و از زبانی جز فارسی استفاده نکن:\n\nسوال: {query}"
|
638 |
response = llm([SystemMessage(content="You are a helpful assistant."), HumanMessage(content=prompt)])
|
639 |
rewritten = response.content.strip()
|
640 |
rewritten = clean_text(rewritten)
|