app.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import streamlit as st
  2. import os
  3. from dotenv import load_dotenv
  4. import uuid
  5. load_dotenv()
  6. # Import de tes fonctions (assure-toi que ton code précédent est dans le même dossier)
  7. # Ici je regroupe tout pour que ce soit fonctionnel
  8. # Tes infos utilisateur
  9. user_infos = {
  10. "username": "user123",
  11. "mdps": "pass123"
  12. }
  13. def login_page():
  14. col1, col2 , col3 = st.columns([5,2,2])
  15. with col1 :
  16. st.image("logo Dataltist.png" , width=150)
  17. with col2 :
  18. st.write("")
  19. with col3 :
  20. st.link_button("🌐 Notre Site","https://dataltist.fr/")
  21. st.title("Connexion au Chatbot")
  22. username = st.text_input("Nom d'utilisateur")
  23. password = st.text_input("Mot de passe", type="password")
  24. if st.button("Se Connecter"):
  25. if username == user_infos["username"] and password == user_infos["mdps"]:
  26. st.session_state["is_logged_in"] = True # On utilise la même clé
  27. st.success("Connexion réussie !")
  28. st.rerun()
  29. else :
  30. st.error("Identifiants incorrects")
  31. # --- LOGIQUE DE VÉRIFICATION ---
  32. # 1. Initialisation si la clé n'existe pas encore
  33. if "is_logged_in" not in st.session_state:
  34. st.session_state["is_logged_in"] = False
  35. # 2. Affichage conditionnel
  36. if not st.session_state["is_logged_in"]:
  37. login_page()
  38. else:
  39. st.set_page_config(page_title="Actuariat GPT", page_icon="📊")
  40. st.title("📊 Assistant Expert en Actuariat")
  41. st.markdown("Interrogez la base de 455 000 mémoires et thèses d'assurance.")
  42. # Initialisation de l'agent (on utilise @st.cache_resource pour ne pas recharger 455k lignes à chaque clic)
  43. @st.cache_resource
  44. def get_agent():
  45. # C'est ici qu'on appelle ta fonction create_agent()
  46. # Note : Assure-toi que les fonctions (get_vector_db, etc.) sont définies au-dessus
  47. from tools import create_agent
  48. return create_agent()
  49. try:
  50. with st.spinner("Initialisation de la base de données (cela peut être long la première fois)..."):
  51. agent_executor = get_agent()
  52. st.success("Agent prêt !")
  53. except Exception as e:
  54. st.error(f"Erreur d'initialisation : {e}")
  55. st.stop()
  56. # Gestion de l'historique des messages
  57. if "messages" not in st.session_state:
  58. st.session_state.messages = []
  59. # Affichage des messages
  60. for message in st.session_state.messages:
  61. with st.chat_message(message["role"]):
  62. st.markdown(message["content"])
  63. # Zone de saisie
  64. # Zone de saisie
  65. if prompt := st.chat_input("Posez votre question actuarielle..."):
  66. st.session_state.messages.append({"role": "user", "content": prompt})
  67. with st.chat_message("user"):
  68. st.markdown(prompt)
  69. with st.chat_message("assistant"):
  70. # 1. On crée un conteneur vide pour la réponse finale
  71. response_placeholder = st.empty()
  72. # 2. On affiche le spinner pendant la réflexion
  73. with st.spinner("L'expert analyse les mémoires et prépare une réponse..."):
  74. try:
  75. # Configuration de la session (mémoire)
  76. config = {"configurable": {"thread_id": st.session_state.get("thread_id", "1")}}
  77. input_data = {"messages": [("user", prompt)]}
  78. # Exécution de l'agent
  79. result = agent_executor.invoke(input_data, config)
  80. # Extraction de la réponse
  81. full_response = result["messages"][-1].content
  82. # 3. Affichage final dans le placeholder
  83. response_placeholder.markdown(full_response)
  84. # Sauvegarde dans l'historique
  85. st.session_state.messages.append({"role": "assistant", "content": full_response})
  86. except Exception as e:
  87. st.error(f"Désolé, une erreur est survenue : {e}")