Update app.py
Browse files
app.py
CHANGED
@@ -274,7 +274,6 @@ with st.sidebar:
|
|
274 |
("پشتیبانی فنی", "https://cdn-icons-png.flaticon.com/512/597/597177.png", None),
|
275 |
]
|
276 |
|
277 |
-
# لود فونت Vazir از CDN
|
278 |
st.markdown("""
|
279 |
<link href="https://cdn.jsdelivr.net/gh/rastikerdar/[email protected]/dist/font-face.css" rel="stylesheet" type="text/css" />
|
280 |
""", unsafe_allow_html=True)
|
@@ -540,98 +539,96 @@ st.markdown("""
|
|
540 |
|
541 |
|
542 |
|
543 |
-
import os
|
544 |
-
import json
|
545 |
from sentence_transformers import SentenceTransformer, util
|
546 |
|
547 |
-
|
548 |
-
model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True)
|
549 |
-
embeddings_cache_path = "book_embeddings_cache.json"
|
550 |
-
|
551 |
-
def load_embeddings_from_cache():
|
552 |
-
"""بارگذاری امبدینگها از کش (فایل JSON)"""
|
553 |
-
if os.path.exists(embeddings_cache_path):
|
554 |
-
with open(embeddings_cache_path, "r") as file:
|
555 |
-
return json.load(file)
|
556 |
-
return {}
|
557 |
-
|
558 |
-
def save_embeddings_to_cache(embeddings):
|
559 |
-
"""ذخیره امبدینگها به کش (فایل JSON)"""
|
560 |
-
with open(embeddings_cache_path, "w") as file:
|
561 |
-
json.dump(embeddings, file)
|
562 |
-
|
563 |
-
# بارگذاری امبدینگهای قبلی از کش (اگر موجود باشد)
|
564 |
-
book_embeddings = load_embeddings_from_cache()
|
565 |
|
566 |
if query:
|
567 |
found = False
|
568 |
-
threshold =0.
|
569 |
|
570 |
-
|
571 |
query_embedding = model.encode(query, convert_to_tensor=True)
|
572 |
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
prompt
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
603 |
سوال:
|
604 |
{query}
|
605 |
پاسخ:
|
|
|
|
|
606 |
{rewritten}
|
607 |
"""
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
""
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
|
|
627 |
|
628 |
think.empty()
|
629 |
found = True
|
630 |
break
|
631 |
|
632 |
if not found:
|
633 |
-
prompt = f"لطفاً بر اساس سوال زیر یک متن مرتبط و معنادار تولید کن و
|
634 |
-
response = llm([
|
|
|
|
|
|
|
635 |
rewritten = response.content.strip()
|
636 |
rewritten = clean_text(rewritten)
|
637 |
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|
|
|
274 |
("پشتیبانی فنی", "https://cdn-icons-png.flaticon.com/512/597/597177.png", None),
|
275 |
]
|
276 |
|
|
|
277 |
st.markdown("""
|
278 |
<link href="https://cdn.jsdelivr.net/gh/rastikerdar/[email protected]/dist/font-face.css" rel="stylesheet" type="text/css" />
|
279 |
""", unsafe_allow_html=True)
|
|
|
539 |
|
540 |
|
541 |
|
|
|
|
|
542 |
from sentence_transformers import SentenceTransformer, util
|
543 |
|
544 |
+
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
545 |
|
546 |
if query:
|
547 |
found = False
|
548 |
+
threshold = 0.70
|
549 |
|
550 |
+
sentence_embeddings = model.encode(all_sentences, convert_to_tensor=True)
|
551 |
query_embedding = model.encode(query, convert_to_tensor=True)
|
552 |
|
553 |
+
similarities = util.cos_sim(query_embedding, sentence_embeddings)[0]
|
554 |
+
|
555 |
+
top_indices = [i for i, sim in enumerate(similarities) if sim >= threshold]
|
556 |
+
|
557 |
+
for idx in top_indices:
|
558 |
+
sentence = all_sentences[idx]
|
559 |
+
prompt = f"""
|
560 |
+
تعدادی پاسخ برای سوال زیر تولید شده است. لطفاً ابتدا این پاسخها را بررسی کن، سپس با در نظر گرفتن محتوای سوال و لحن آن، یک پاسخ نهایی حرفه��ای، دقیق و روان ارائه کن که هم به سوال پاسخ دهد و هم از نظر نگارشی و ساختاری در سطح بالایی باشد. پاسخ نهایی باید حداکثر 2048 کاراکتر و حداقل 512 باشد، خلاصه و واضح نوشته شود و فقط به زبان فارسی باشد. از تکرار اضافی پرهیز کن و محتوای چند پاسخ را در صورت نیاز با هم ترکیب کن.
|
561 |
+
سوال:
|
562 |
+
{query}
|
563 |
+
پاسخها:
|
564 |
+
{sentence}
|
565 |
+
پاسخ نهایی حرفهای بازنویسیشده:
|
566 |
+
"""
|
567 |
+
response = llm([
|
568 |
+
SystemMessage(content="You are a helpful assistant."),
|
569 |
+
HumanMessage(content=prompt)
|
570 |
+
])
|
571 |
+
rewritten = response.content.strip()
|
572 |
+
|
573 |
+
# بررسی مرتبط بودن پاسخ با سؤال
|
574 |
+
review_prompt = f"""
|
575 |
+
لطفاً بررسی کن که آیا پاسخ زیر، حدودا به سوال زیر پاسخ داده است یا خیر یعنی کلمات کلیدی اصلی در سوال در پاسخ هست یا ن . اگر پاسخ به سوال مرتبط، درست و قابل قبول است، فقط بنویس: 'تأیید شد'. اگر کمی مربوط بود بنویس: 'کمی خوب'.
|
576 |
+
اگر پاسخ اشتباه است یا هیچ ربطی به سوال ندارد، فقط بنویس: 'نیاز به اصلاح دارد'.
|
577 |
+
سوال:
|
578 |
+
{query}
|
579 |
+
پاسخ:
|
580 |
+
{rewritten}
|
581 |
+
"""
|
582 |
+
review_response = llm([
|
583 |
+
SystemMessage(content="You are a helpful assistant."),
|
584 |
+
HumanMessage(content=review_prompt)
|
585 |
+
])
|
586 |
+
review_result = review_response.content.strip()
|
587 |
+
|
588 |
+
if "تأیید شد" in review_result:
|
589 |
+
rewritten = clean_text(rewritten)
|
590 |
+
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|
591 |
+
elif "کمی خوب" in review_result:
|
592 |
+
final_prompt = f"""
|
593 |
+
لطفاً برای سوال زیر پاسخی حرفهای، دقیق و روان تولید کن که مرتبط و معتبر باشد. از زبانی جز فارسی استفاده نکن و بیا هم از سوال هم دیتای زیر و هم از پاسخ استفاده کن و پاسخ مناسبی بنویس :
|
594 |
سوال:
|
595 |
{query}
|
596 |
پاسخ:
|
597 |
+
{review_result}
|
598 |
+
دیتا:
|
599 |
{rewritten}
|
600 |
"""
|
601 |
+
new_1response = llm([
|
602 |
+
SystemMessage(content="You are a helpful assistant."),
|
603 |
+
HumanMessage(content=final_prompt)
|
604 |
+
])
|
605 |
+
final_answer1 = new_1response.content.strip()
|
606 |
+
final_answer1 = clean_text(final_answer1)
|
607 |
+
st.markdown(f'<div class="chat-message">{final_answer1}</div>', unsafe_allow_html=True)
|
608 |
+
else:
|
609 |
+
final_prompt = f"""
|
610 |
+
لطفاً برای سوال زیر پاسخی حرفهای، دقیق و روان تولید کن که مرتبط و معتبر باشد. از زبانی جز فارسی استفاده نکن :
|
611 |
+
سوال:
|
612 |
+
{query}
|
613 |
+
"""
|
614 |
+
new_response = llm([
|
615 |
+
SystemMessage(content="You are a helpful assistant."),
|
616 |
+
HumanMessage(content=final_prompt)
|
617 |
+
])
|
618 |
+
final_answer = new_response.content.strip()
|
619 |
+
final_answer = clean_text(final_answer)
|
620 |
+
st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
|
621 |
|
622 |
think.empty()
|
623 |
found = True
|
624 |
break
|
625 |
|
626 |
if not found:
|
627 |
+
prompt = f"لطفاً بر اساس سوال زیر یک متن مرتبط و معنادار تولید کن و از خودت ننویس و جملات معتبر باشن و از زبانی جز فارسی استفاده نکن:\n\nسوال: {query}"
|
628 |
+
response = llm([
|
629 |
+
SystemMessage(content="You are a helpful assistant."),
|
630 |
+
HumanMessage(content=prompt)
|
631 |
+
])
|
632 |
rewritten = response.content.strip()
|
633 |
rewritten = clean_text(rewritten)
|
634 |
st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
|