| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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})
|