import streamlit as st
from hazm import Normalizer, SentenceTokenizer
import os
import docx
from langchain.chat_models import ChatOpenAI
from langchain.schema import SystemMessage, HumanMessage
from rapidfuzz import fuzz
# ---------- استایل ----------
st.markdown("""
""", unsafe_allow_html=True)
# ---------- احراز هویت ----------
if "authenticated" not in st.session_state:
st.session_state.authenticated = False
if not st.session_state.authenticated:
st.markdown("
ورود به رزمیار ارتش
", unsafe_allow_html=True)
username = st.text_input("نام کاربری:", placeholder="شناسه نظامی خود را وارد کنید")
password = st.text_input("رمز عبور:", type="password", placeholder="رمز عبور نظامی")
if st.button("ورود"):
if username == "admin" and password == "123":
st.session_state.authenticated = True
st.rerun()
else:
st.error("نام کاربری یا رمز عبور اشتباه است.")
st.stop()
# ---------- سایدبار ----------
with st.sidebar:
st.image("log.png", use_container_width=True)
menu_items = [
("گزارش عملیاتی", "https://cdn-icons-png.flaticon.com/512/3596/3596165.png"),
("تاریخچه ماموریتها", "https://cdn-icons-png.flaticon.com/512/709/709496.png"),
("تحلیل دادههای نظامی", "https://cdn-icons-png.flaticon.com/512/1828/1828932.png"),
("مدیریت منابع", "https://cdn-icons-png.flaticon.com/512/681/681494.png"),
("دستیار فرماندهی", "https://cdn-icons-png.flaticon.com/512/3601/3601646.png"),
("تنظیمات امنیتی", "https://cdn-icons-png.flaticon.com/512/2099/2099058.png"),
("پشتیبانی فنی", "https://cdn-icons-png.flaticon.com/512/597/597177.png"),
]
for idx, (text, icon) in enumerate(menu_items):
st.markdown(f"""
""", unsafe_allow_html=True)
if idx in [1, 3, 5]:
st.markdown("
", unsafe_allow_html=True)
# ---------- سربرگ ----------
st.markdown("""
""", unsafe_allow_html=True)
# ---------- مدل زبانی ----------
llm = ChatOpenAI(
base_url="https://api.together.xyz/v1",
api_key='0291f33aee03412a47fa5d8e562e515182dcc5d9aac5a7fb5eefdd1759005979',
model="meta-llama/Llama-3.3-70B-Instruct-Turbo-Free"
)
# ---------- پردازش فایلها ----------
folder_path = 'C:/Users/ici/Downloads/Telegram Desktop/45/46'
texts = []
for filename in os.listdir(folder_path):
if filename.endswith(".docx"):
full_path = os.path.join(folder_path, filename)
doc = docx.Document(full_path)
file_text = "\n".join([para.text for para in doc.paragraphs])
if file_text.strip():
texts.append(file_text)
normalizer = Normalizer()
sentence_tokenizer = SentenceTokenizer()
all_sentences = []
for text in texts:
normalized = normalizer.normalize(text)
sentences = sentence_tokenizer.tokenize(normalized)
all_sentences.extend(sentences)
# ---------- ورودی جستجو ----------
query = st.text_input("🔎 کلمه یا عبارت موردنظر خود را وارد کنید:")
if query:
found = False
threshold = 80
for idx, sentence in enumerate(all_sentences):
similarity = fuzz.partial_ratio(query, sentence)
if similarity >= threshold:
next_sentences = []
for i in range(1, 6):
if idx + i < len(all_sentences):
next_sentences.append(all_sentences[idx + i])
total_text = sentence + " " + " ".join(next_sentences)
prompt = f"پاسخی که باید بازنویسی شود:\n{total_text}\n\nلطفاً این پاسخ را با در نظر گرفتن محتوای سوال زیر و لحن آن بازنویسی کن:\n\nسوال: {query}"
response = llm([
SystemMessage(content="You are a helpful assistant."),
HumanMessage(content=prompt)
])
rewritten = response.content.strip()
st.markdown(f'{rewritten}
', unsafe_allow_html=True)
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()
st.markdown(f'{rewritten}
', unsafe_allow_html=True)