File size: 3,940 Bytes
d4c16ef
c623cf2
d4c16ef
c623cf2
 
d4c16ef
 
 
 
c623cf2
d4c16ef
 
c623cf2
 
 
d4c16ef
 
 
c623cf2
 
 
 
 
d4c16ef
c623cf2
 
 
 
 
 
 
 
 
 
d4c16ef
c623cf2
 
d4c16ef
c623cf2
 
 
 
 
d4c16ef
c623cf2
 
 
 
d4c16ef
 
c623cf2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d4c16ef
c623cf2
 
 
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
# modules/chatbot/sidebar_chat.py
# modules/chatbot/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: Traducciones del chatbot del archivo central
    """
    with st.sidebar:
        # Chatbot expandible
        with st.expander(chatbot_t.get('expand_chat', 'Open assistant'), expanded=False):
            try:
                # Inicializar procesador si no existe
                if 'chat_processor' not in st.session_state:
                    st.session_state.chat_processor = ChatProcessor()
                
                # Inicializar mensajes si no existen
                if 'sidebar_messages' not in st.session_state:
                    # Intentar recuperar historial previo
                    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": chatbot_t['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(
                    chatbot_t['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(chatbot_t['clear_chat']):
                    st.session_state.sidebar_messages = [
                        {"role": "assistant", "content": chatbot_t['initial_message']}
                    ]
                    st.rerun()

            except Exception as e:
                logger.error(f"Error en sidebar chat: {str(e)}")
                st.error(chatbot_t['error_message'])