File size: 4,977 Bytes
d4c16ef 9e1b438 cedddd0 d4c16ef c623cf2 d4c16ef c623cf2 9bcf433 d4c16ef 9bcf433 d4c16ef 9bcf433 c623cf2 9bcf433 d4c16ef c623cf2 9bcf433 c623cf2 9bcf433 c623cf2 d4c16ef c623cf2 d4c16ef c623cf2 d4c16ef c623cf2 9bcf433 c623cf2 d4c16ef c623cf2 9bcf433 c623cf2 9bcf433 c623cf2 d4c16ef c623cf2 9bcf433 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# modules/chatbot/sidebar_chat.py
import streamlit as st
from .chat_process import ChatProcessor
from ..database.chat_mongo_db import store_chat_history, get_chat_history
import logging
logger = logging.getLogger(__name__)
def display_sidebar_chat(lang_code: str, chatbot_t: dict):
"""
Muestra el chatbot en el sidebar
Args:
lang_code: Código del idioma
chatbot_t: Diccionario de traducciones del chatbot
"""
# Asegurar que tenemos las traducciones necesarias
default_translations = {
'error_message': 'An error occurred',
'expand_chat': 'Open Assistant',
'initial_message': 'Hi! How can I help?',
'input_placeholder': 'Type your message...',
'clear_chat': 'Clear chat'
}
# Combinar traducciones por defecto con las proporcionadas
translations = {**default_translations, **chatbot_t}
with st.sidebar:
# Chatbot expandible
with st.expander(translations['expand_chat'], expanded=False):
try:
# Inicializar procesador si no existe
if 'chat_processor' not in st.session_state:
try:
st.session_state.chat_processor = ChatProcessor()
except Exception as e:
logger.error(f"Error inicializando ChatProcessor: {str(e)}")
st.error("Error: No se pudo inicializar el chat. Verifica la configuración.")
return
# Inicializar mensajes si no existen
if 'sidebar_messages' not in st.session_state:
# Intentar recuperar historial previo
try:
history = get_chat_history(st.session_state.username, 'sidebar', 10)
if history:
st.session_state.sidebar_messages = history[0]['messages']
else:
st.session_state.sidebar_messages = [
{"role": "assistant", "content": translations['initial_message']}
]
except Exception as e:
logger.error(f"Error recuperando historial: {str(e)}")
st.session_state.sidebar_messages = [
{"role": "assistant", "content": translations['initial_message']}
]
# Contenedor del chat
chat_container = st.container()
# Mostrar mensajes existentes
with chat_container:
for message in st.session_state.sidebar_messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Input del usuario
user_input = st.text_input(
translations['input_placeholder'],
key='sidebar_chat_input'
)
if user_input:
# Agregar mensaje del usuario
st.session_state.sidebar_messages.append(
{"role": "user", "content": user_input}
)
# Generar y mostrar respuesta
with chat_container:
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
for chunk in st.session_state.chat_processor.process_chat_input(
user_input,
lang_code
):
full_response += chunk
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
# Guardar respuesta
st.session_state.sidebar_messages.append(
{"role": "assistant", "content": full_response}
)
# Guardar conversación
store_chat_history(
st.session_state.username,
'sidebar',
st.session_state.sidebar_messages
)
# Botón para limpiar chat
if st.button(translations['clear_chat']):
st.session_state.sidebar_messages = [
{"role": "assistant", "content": translations['initial_message']}
]
st.rerun()
except Exception as e:
logger.error(f"Error en sidebar chat: {str(e)}")
st.error(translations['error_message']) |