|
|
| import streamlit as st
|
| from .chat_process import ChatProcessor
|
| from ..database.chat_mongo_db import store_chat_history
|
| import logging
|
|
|
| logger = logging.getLogger(__name__)
|
|
|
| def display_sidebar_chat(lang_code: str, chatbot_t: dict):
|
| """Chatbot mejorado con manejo completo del contexto semántico"""
|
| with st.sidebar:
|
|
|
| st.markdown("""
|
| <style>
|
| .chat-container {
|
| max-height: 60vh;
|
| overflow-y: auto;
|
| padding: 10px;
|
| }
|
| .chat-message { margin-bottom: 15px; }
|
| </style>
|
| """, unsafe_allow_html=True)
|
|
|
| try:
|
|
|
| if 'chat_processor' not in st.session_state:
|
| st.session_state.chat_processor = ChatProcessor()
|
| logger.info("Nuevo ChatProcessor inicializado")
|
|
|
|
|
| if st.session_state.get('semantic_agent_active', False):
|
| semantic_data = st.session_state.get('semantic_agent_data')
|
| if semantic_data and all(k in semantic_data for k in ['text', 'metrics']):
|
| try:
|
| st.session_state.chat_processor.set_semantic_context(
|
| text=semantic_data['text'],
|
| metrics=semantic_data['metrics'],
|
| graph_data=semantic_data.get('graph_data'),
|
| lang_code=lang_code
|
| )
|
| logger.info("Contexto semántico configurado en el chat")
|
| except Exception as e:
|
| logger.error(f"Error configurando contexto: {str(e)}")
|
| st.error("Error al configurar el análisis. Recargue el documento.")
|
| return
|
|
|
|
|
| with st.expander("💬 Asistente de Análisis", expanded=True):
|
|
|
| if 'sidebar_messages' not in st.session_state:
|
| initial_msg = {
|
| 'en': "Hello! Ask me about the semantic analysis.",
|
| 'es': "¡Hola! Pregúntame sobre el análisis semántico.",
|
| 'pt': "Olá! Pergunte-me sobre a análise semântica."
|
| }.get(lang_code, "Hello!")
|
|
|
| st.session_state.sidebar_messages = [
|
| {"role": "assistant", "content": initial_msg}
|
| ]
|
|
|
|
|
| chat_container = st.container()
|
| with chat_container:
|
| for msg in st.session_state.sidebar_messages:
|
| st.chat_message(msg["role"]).write(msg["content"])
|
|
|
|
|
| user_input = st.chat_input(
|
| {
|
| 'en': "Ask about the analysis...",
|
| 'es': "Pregunta sobre el análisis...",
|
| 'pt': "Pergunte sobre a análise..."
|
| }.get(lang_code, "Message...")
|
| )
|
|
|
| if user_input:
|
| try:
|
|
|
| with chat_container:
|
| st.chat_message("user").write(user_input)
|
| st.session_state.sidebar_messages.append(
|
| {"role": "user", "content": user_input}
|
| )
|
|
|
|
|
| with st.chat_message("assistant"):
|
| response = st.write_stream(
|
| st.session_state.chat_processor.process_chat_input(
|
| user_input, lang_code
|
| )
|
| )
|
| st.session_state.sidebar_messages.append(
|
| {"role": "assistant", "content": response.replace("▌", "")}
|
| )
|
|
|
|
|
| if 'username' in st.session_state:
|
| store_chat_history(
|
| username=st.session_state.username,
|
| messages=st.session_state.sidebar_messages,
|
| chat_type='semantic_analysis',
|
| metadata={
|
| 'text_sample': st.session_state.semantic_agent_data['text'][:500],
|
| 'concepts': st.session_state.semantic_agent_data['metrics']['key_concepts'][:5]
|
| }
|
| )
|
|
|
| except Exception as e:
|
| logger.error(f"Error en conversación: {str(e)}", exc_info=True)
|
| st.error({
|
| 'en': "Error processing request. Try again.",
|
| 'es': "Error al procesar. Intente nuevamente.",
|
| 'pt': "Erro ao processar. Tente novamente."
|
| }.get(lang_code, "Error"))
|
|
|
|
|
| if st.button("🔄 Reiniciar Chat"):
|
| st.session_state.sidebar_messages = []
|
| st.rerun()
|
|
|
| except Exception as e:
|
| logger.error(f"Error fatal en sidebar_chat: {str(e)}", exc_info=True)
|
| st.error("System error. Please refresh the page.") |