|
|
|
import streamlit as st |
|
from typing import Optional, Dict, List |
|
from config import Config |
|
from chat_service import ChatService |
|
from chat_manager import ChatManager |
|
from chat_state import ChatState |
|
from ui_components import UIComponents |
|
|
|
|
|
def main(): |
|
config = Config() |
|
chat_service = ChatService(config.GROQ_API_KEY) |
|
chat_manager = ChatManager(config.SYSTEM_PROMPT) |
|
|
|
|
|
if "chat_state" not in st.session_state: |
|
st.session_state.chat_state = ChatState.initialize() |
|
|
|
chat_state = st.session_state.chat_state |
|
ui = UIComponents() |
|
|
|
|
|
ui.setup_page(config) |
|
ui.render_header() |
|
ui.render_sidebar(chat_state, chat_manager, chat_service) |
|
|
|
|
|
current_chat = chat_state.temp_chat or ( |
|
chat_state.chat_history[chat_state.current_chat_id] |
|
if chat_state.current_chat_id |
|
else None |
|
) |
|
|
|
if current_chat: |
|
for message in current_chat[1:]: |
|
with st.chat_message( |
|
message["role"], avatar="🧑🎓" if message["role"] == "user" else "🤖" |
|
): |
|
st.write(message["content"]) |
|
else: |
|
st.markdown( |
|
"<div style=\"color: black;\">.انقر على 'محادثة جديدة' لبدء محادثة مع المرشد التعليمي 👈</div>", |
|
unsafe_allow_html=True, |
|
) |
|
|
|
ui.render_footer() |
|
|
|
|
|
user_input = st.chat_input("...اكتب سؤالك هنا") |
|
if user_input: |
|
if chat_service.is_arabic(user_input): |
|
if not current_chat: |
|
chat_state.temp_chat = chat_manager.create_new_chat() |
|
current_chat = chat_state.temp_chat |
|
|
|
current_chat.append({"role": "user", "content": user_input}) |
|
with st.chat_message("user", avatar="🧑🎓"): |
|
st.write(user_input) |
|
|
|
with st.chat_message("assistant", avatar="🤖"): |
|
with st.spinner("جاري التفكير... ⏳"): |
|
assistant_response = chat_service.get_groq_response(current_chat) |
|
st.write(assistant_response) |
|
|
|
current_chat.append({"role": "assistant", "content": assistant_response}) |
|
|
|
if chat_state.temp_chat: |
|
new_chat_id = chat_manager.save_chat( |
|
chat_state.temp_chat, chat_state.chat_history |
|
) |
|
if new_chat_id: |
|
chat_state.current_chat_id = new_chat_id |
|
chat_state.temp_chat = None |
|
else: |
|
st.error("عذرًا، يرجى إدخال النص باللغة العربية فقط. 🚫") |
|
|
|
|
|
if __name__ == "__main__": |
|
main() |
|
|