| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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}")
|