File size: 4,980 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
 
 
 
 
edb914b
c623cf2
 
 
 
 
 
 
 
 
 
 
edb914b
c623cf2
 
 
edb914b
c623cf2
edb914b
1b7ac3d
c623cf2
1b7ac3d
 
 
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
# 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)
                            
                            # Guardar respuesta
                            st.session_state.sidebar_messages.append(
                                {"role": "assistant", "content": full_response.strip()}
                            )
                                    
                    # En la funci贸n donde guardamos el chat
                    store_chat_history(
                        username=st.session_state.username,
                        messages=st.session_state.sidebar_messages,
                        analysis_type='sidebar'  # Especificar el tipo
                    )

                # 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'])