""", unsafe_allow_html=True)
else:
st.markdown("")
# استایلها برای چرخش و پیام در حال فکر کردن
st.markdown("""
""", unsafe_allow_html=True)
from sentence_transformers import SentenceTransformer, util
# بارگذاری مدل برای جستجوی معنایی
model = SentenceTransformer("nomic-ai/nomic-embed-text-v2-moe", trust_remote_code=True)
if query:
found = False
threshold = 0.55
query_embedding = model.encode(query, convert_to_tensor=True)
sentence_embeddings = model.encode(all_sentences, convert_to_tensor=True)
similarities = util.pytorch_cos_sim(query_embedding, sentence_embeddings)[0]
for idx, similarity in enumerate(similarities):
if similarity >= threshold:
sentence = all_sentences[idx]
prompt = f"""
تعدادی پاسخ برای سوال زیر تولید شده است. لطفاً ابتدا این پاسخها را بررسی کن، سپس با در نظر گرفتن محتوای سوال و لحن آن، یک پاسخ نهایی حرفهای، دقیق و روان ارائه کن که هم به سوال پاسخ دهد و هم از نظر نگارشی و ساختاری در سطح بالایی باشد. پاسخ نهایی باید حداکثر 1024 کاراکتر و حداقل 512 باشد، خلاصه و واضح نوشته شود و فقط به زبان فارسی باشد. از تکرار اضافی پرهیز کن و محتوای چند پاسخ را در صورت نیاز با هم ترکیب کن.
سوال:
{query}
پاسخها:
{sentence}
پاسخ نهایی حرفهای بازنویسیشده:
"""
response = llm([
SystemMessage(content="You are a helpful assistant."),
HumanMessage(content=prompt)
])
rewritten = response.content.strip()
# بررسی مرتبط بودن پاسخ با سؤال
review_prompt = f"""
لطفاً بررسی کن که آیا پاسخ زیر، حدودا به سوال زیر پاسخ داده است یا خیر یعنی کلمات کلیدی اصلی در سوال در پاسخ هست یا ن . اگر پاسخ به سوال مرتبط، درست و قابل قبول است، فقط بنویس: 'تأیید شد'. اگر پاسخ اشتباه است یا هیچ ربطی به سوال ندارد، فقط بنویس: 'نیاز به اصلاح دارد'.
سوال:
{query}
پاسخ:
{rewritten}
"""
review_response = llm([
SystemMessage(content="You are a helpful assistant."),
HumanMessage(content=review_prompt)
])
review_result = review_response.content.strip()
if "تأیید شد" in review_result:
rewritten = clean_text(rewritten)
st.markdown(f'
{rewritten}
', unsafe_allow_html=True)
else:
final_prompt = f"""
لطفاً برای سوال زیر پاسخی حرفهای، دقیق و روان تولید کن که مرتبط و معتبر باشد. و از مدارک داخل ویکی پدیا استفاده کن از زبانی جز فارسی استفاده نکن :
سوال:
{query}
"""
new_response = llm([
SystemMessage(content="You are a helpful assistant."),
HumanMessage(content=final_prompt)
])
final_answer = new_response.content.strip()
final_answer = clean_text(final_answer)
st.markdown(f'
{final_answer}
', unsafe_allow_html=True)
think.empty()
found = True
break
if not found:
prompt = f"لطفاً بر اساس سوال زیر یک متن مرتبط و معنادار تولید کن و جملات ساختگی استفاده نکن و از جملات موجود در اسناد و جملات معتبر استفاده کن که در ویکی پدیا موجود باشد و از زبانی جز فارسی استفاده نکن:\n\nسوال: {query}"
response = llm([
SystemMessage(content="You are a helpful assistant."),
HumanMessage(content=prompt)
])
rewritten = response.content.strip()
rewritten = clean_text(rewritten)
st.markdown(f'