app.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import streamlit as st
  2. import os
  3. from workflow_Agent import app # Ton graphe compilé
  4. import glob
  5. st.set_page_config(page_title="Dataltist AI Assistant", layout="wide")
  6. st.title("📊 Dataltist BI Chat")
  7. # --- 1. Gestion du Fichier ---
  8. with st.sidebar:
  9. st.header("Données")
  10. uploaded_file = st.file_uploader("Charge ton fichier (CSV/Excel)", type=["csv", "xlsx"])
  11. if uploaded_file:
  12. # On sauvegarde le fichier dans le dossier 'data'
  13. file_path = os.path.join("data", uploaded_file.name)
  14. with open(file_path, "wb") as f:
  15. f.write(uploaded_file.getbuffer())
  16. st.success(f"Fichier {uploaded_file.name} chargé !")
  17. # --- 2. Interface de Chat ---
  18. if "messages" not in st.session_state:
  19. st.session_state.messages = []
  20. if st.sidebar.button("🗑️ Effacer la discussion"):
  21. st.session_state.messages = []
  22. st.rerun()
  23. # Affichage de l'historique
  24. for message in st.session_state.messages:
  25. with st.chat_message(message["role"]):
  26. st.markdown(message["content"])
  27. # --- 3. Interaction avec les Agents ---
  28. if prompt := st.chat_input("Pose ta question sur tes données..."):
  29. # 1. Affichage du message utilisateur
  30. st.session_state.messages.append({"role": "user", "content": prompt})
  31. with st.chat_message("user"):
  32. st.markdown(prompt)
  33. # 2. Appel des agents
  34. with st.chat_message("assistant"):
  35. with st.status("Analyse en cours par les agents Dataltist...", expanded=True) as status:
  36. # On définit les entrées pour ton graphe
  37. inputs = {
  38. "messages": [("user", prompt)],
  39. "current_df_path": file_path # Le chemin vers le CSV chargé
  40. }
  41. # Exécution du workflow
  42. final_state = app.invoke(inputs)
  43. # RÉCUPÉRATION : On prend le message du DERNIER agent (le Reporter)
  44. response_text = final_state["messages"][-1].content
  45. st.markdown(response_text)
  46. # --- AFFICHAGE DES GRAPHIQUES ---
  47. st.subheader("📊 Visualisations générées")
  48. # On récupère tous les fichiers .png dans le dossier outputs
  49. list_of_plots = glob.glob("outputs/*.png")
  50. if list_of_plots:
  51. # On crée des colonnes si on a plusieurs graphiques
  52. cols = st.columns(len(list_of_plots))
  53. for idx, plot_path in enumerate(list_of_plots):
  54. with cols[idx]:
  55. st.image(plot_path, use_container_width=True, caption=os.path.basename(plot_path))
  56. else:
  57. st.info("Aucun graphique n'a été généré pour cette analyse.")
  58. status.update(label="Analyse terminée !", state="complete")
  59. # 3. Sauvegarde dans l'historique de session
  60. st.session_state.messages.append({"role": "assistant", "content": response_text})