import streamlit as st import pandas as pd from datetime import datetime from RAG import answer_question, retrieve_chunks, embed_question, build_context # Configuration de la page st.set_page_config( page_title="Tindle RAG Chat", page_icon="💬", layout="wide", initial_sidebar_state="expanded" ) # CSS personnalisé pour le thème st.markdown(""" """, unsafe_allow_html=True) # Sidebar pour les paramètres with st.sidebar: st.title("⚙️ Paramètres") # Sélecteur de thème theme = st.selectbox( "🎨 Thème", ["Clair", "Sombre"], index=0 ) # Appliquer le thème if theme == "Sombre": st.markdown(""" """, unsafe_allow_html=True) # Paramètres RAG st.subheader("🔍 Paramètres de recherche") top_k = st.slider("Nombre de passages à récupérer", 5, 20, 10) show_sources = st.checkbox("Afficher les sources", value=True) # Statistiques st.subheader("📊 Statistiques") if "messages" in st.session_state: st.metric("Questions posées", len([m for m in st.session_state["messages"] if m["role"] == "user"])) # Bouton de réinitialisation if st.button("🗑️ Effacer l'historique"): st.session_state["messages"] = [] st.session_state["sources"] = [] st.rerun() # Titre principal st.title("💬 Tindle RAG Chat") st.markdown("Posez une question sur le droit fiscal, l'assistant RAG vous répondra en s'appuyant sur les sources indexées.") # Initialisation des variables de session if "messages" not in st.session_state: st.session_state["messages"] = [] if "sources" not in st.session_state: st.session_state["sources"] = [] # Affichage de l'historique du chat avec sources for i, msg in enumerate(st.session_state["messages"]): if msg["role"] == "user": with st.chat_message("user"): st.markdown(msg["content"]) else: with st.chat_message("assistant"): st.markdown(msg["content"]) # Afficher les sources si disponibles et demandées # Correction de l'index : on cherche les sources pour cette réponse spécifique source_index = len([m for m in st.session_state["messages"][:i] if m["role"] == "assistant"]) if show_sources and source_index < len(st.session_state["sources"]) and st.session_state["sources"][source_index]: with st.expander(f"📚 Sources utilisées ({len(st.session_state['sources'][source_index])} passages)"): for j, source in enumerate(st.session_state["sources"][source_index], 1): # Construire la section métadonnées metadata_parts = [] for key, value in source["metadata"].items(): metadata_parts.append(f"{key}: {value}") metadata_str = f" | ".join(metadata_parts) if metadata_parts else "" source_info = f"Source {j}: {source['id']}" if metadata_str: source_info += f" | {metadata_str}" source_info += f" (score: {source['score']:.3f})" st.markdown(f"""