import streamlit as st import os from dotenv import load_dotenv import uuid load_dotenv() # Import de tes fonctions (assure-toi que ton code précédent est dans le même dossier) # Ici je regroupe tout pour que ce soit fonctionnel # Tes infos utilisateur user_infos = { "username": "user123", "mdps": "pass123" } def login_page(): col1, col2 , col3 = st.columns([5,2,2]) with col1 : st.image("logo Dataltist.png" , width=150) with col2 : st.write("") with col3 : st.link_button("🌐 Notre Site","https://dataltist.fr/") st.title("Connexion au Chatbot") username = st.text_input("Nom d'utilisateur") password = st.text_input("Mot de passe", type="password") if st.button("Se Connecter"): if username == user_infos["username"] and password == user_infos["mdps"]: st.session_state["is_logged_in"] = True # On utilise la même clé st.success("Connexion réussie !") st.rerun() else : st.error("Identifiants incorrects") # --- LOGIQUE DE VÉRIFICATION --- # 1. Initialisation si la clé n'existe pas encore if "is_logged_in" not in st.session_state: st.session_state["is_logged_in"] = False # 2. Affichage conditionnel if not st.session_state["is_logged_in"]: login_page() else: st.set_page_config(page_title="Actuariat GPT", page_icon="📊") st.title("📊 Assistant Expert en Actuariat") st.markdown("Interrogez la base de 455 000 mémoires et thèses d'assurance.") # Initialisation de l'agent (on utilise @st.cache_resource pour ne pas recharger 455k lignes à chaque clic) @st.cache_resource def get_agent(): # C'est ici qu'on appelle ta fonction create_agent() # Note : Assure-toi que les fonctions (get_vector_db, etc.) sont définies au-dessus from tools import create_agent return create_agent() try: with st.spinner("Initialisation de la base de données (cela peut être long la première fois)..."): agent_executor = get_agent() st.success("Agent prêt !") except Exception as e: st.error(f"Erreur d'initialisation : {e}") st.stop() # Gestion de l'historique des messages if "messages" not in st.session_state: st.session_state.messages = [] # Affichage des messages for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) # Zone de saisie # Zone de saisie if prompt := st.chat_input("Posez votre question actuarielle..."): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.markdown(prompt) with st.chat_message("assistant"): # 1. On crée un conteneur vide pour la réponse finale response_placeholder = st.empty() # 2. On affiche le spinner pendant la réflexion with st.spinner("L'expert analyse les mémoires et prépare une réponse..."): try: # Configuration de la session (mémoire) config = {"configurable": {"thread_id": st.session_state.get("thread_id", "1")}} input_data = {"messages": [("user", prompt)]} # Exécution de l'agent result = agent_executor.invoke(input_data, config) # Extraction de la réponse full_response = result["messages"][-1].content # 3. Affichage final dans le placeholder response_placeholder.markdown(full_response) # Sauvegarde dans l'historique st.session_state.messages.append({"role": "assistant", "content": full_response}) except Exception as e: st.error(f"Désolé, une erreur est survenue : {e}")