import streamlit as st import os from workflow_Agent import app # Ton graphe compilé import glob st.set_page_config(page_title="Dataltist AI Assistant", layout="wide") st.title("📊 Dataltist BI Chat") # --- 1. Gestion du Fichier --- with st.sidebar: st.header("Données") uploaded_file = st.file_uploader("Charge ton fichier (CSV/Excel)", type=["csv", "xlsx"]) if uploaded_file: # On sauvegarde le fichier dans le dossier 'data' file_path = os.path.join("data", uploaded_file.name) with open(file_path, "wb") as f: f.write(uploaded_file.getbuffer()) st.success(f"Fichier {uploaded_file.name} chargé !") # --- 2. Interface de Chat --- if "messages" not in st.session_state: st.session_state.messages = [] if st.sidebar.button("🗑️ Effacer la discussion"): st.session_state.messages = [] st.rerun() # Affichage de l'historique for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"]) # --- 3. Interaction avec les Agents --- if prompt := st.chat_input("Pose ta question sur tes données..."): # 1. Affichage du message utilisateur st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.markdown(prompt) # 2. Appel des agents with st.chat_message("assistant"): with st.status("Analyse en cours par les agents Dataltist...", expanded=True) as status: # On définit les entrées pour ton graphe inputs = { "messages": [("user", prompt)], "current_df_path": file_path # Le chemin vers le CSV chargé } # Exécution du workflow final_state = app.invoke(inputs) # RÉCUPÉRATION : On prend le message du DERNIER agent (le Reporter) response_text = final_state["messages"][-1].content st.markdown(response_text) # --- AFFICHAGE DES GRAPHIQUES --- st.subheader("📊 Visualisations générées") # On récupère tous les fichiers .png dans le dossier outputs list_of_plots = glob.glob("outputs/*.png") if list_of_plots: # On crée des colonnes si on a plusieurs graphiques cols = st.columns(len(list_of_plots)) for idx, plot_path in enumerate(list_of_plots): with cols[idx]: st.image(plot_path, use_container_width=True, caption=os.path.basename(plot_path)) else: st.info("Aucun graphique n'a été généré pour cette analyse.") status.update(label="Analyse terminée !", state="complete") # 3. Sauvegarde dans l'historique de session st.session_state.messages.append({"role": "assistant", "content": response_text})