AIdeaText commited on
Commit
448a8a7
·
verified ·
1 Parent(s): 76ae403

Update modules/chatbot/sidebar_chat.py

Browse files
Files changed (1) hide show
  1. modules/chatbot/sidebar_chat.py +132 -122
modules/chatbot/sidebar_chat.py CHANGED
@@ -1,123 +1,133 @@
1
- # modules/chatbot/sidebar_chat.py
2
- import streamlit as st
3
- from .chat_process import ChatProcessor
4
- from ..database.chat_mongo_db import store_chat_history
5
- import logging
6
-
7
- logger = logging.getLogger(__name__)
8
-
9
- def display_sidebar_chat(lang_code: str, chatbot_t: dict):
10
- """Chatbot mejorado con manejo completo del contexto semántico"""
11
- with st.sidebar:
12
- # Configuración de estilos
13
- st.markdown("""
14
- <style>
15
- .chat-container {
16
- max-height: 60vh;
17
- overflow-y: auto;
18
- padding: 10px;
19
- }
20
- .chat-message { margin-bottom: 15px; }
21
- </style>
22
- """, unsafe_allow_html=True)
23
-
24
- try:
25
- # Inicialización del procesador
26
- if 'chat_processor' not in st.session_state:
27
- st.session_state.chat_processor = ChatProcessor()
28
- logger.info("Nuevo ChatProcessor inicializado")
29
-
30
- # Configurar contexto semántico si está activo
31
- if st.session_state.get('semantic_agent_active', False):
32
- semantic_data = st.session_state.get('semantic_agent_data')
33
- if semantic_data and all(k in semantic_data for k in ['text', 'metrics']):
34
- try:
35
- st.session_state.chat_processor.set_semantic_context(
36
- text=semantic_data['text'],
37
- metrics=semantic_data['metrics'],
38
- graph_data=semantic_data.get('graph_data'),
39
- lang_code=lang_code
40
- )
41
- logger.info("Contexto semántico configurado en el chat")
42
- except Exception as e:
43
- logger.error(f"Error configurando contexto: {str(e)}")
44
- st.error("Error al configurar el análisis. Recargue el documento.")
45
- return
46
-
47
- # Interfaz del chat
48
- with st.expander("💬 Asistente de Análisis", expanded=True):
49
- # Inicializar historial si no existe
50
- if 'sidebar_messages' not in st.session_state:
51
- initial_msg = {
52
- 'en': "Hello! Ask me about the semantic analysis.",
53
- 'es': "¡Hola! Pregúntame sobre el análisis semántico.",
54
- 'pt': "Olá! Pergunte-me sobre a análise semântica."
55
- }.get(lang_code, "Hello!")
56
-
57
- st.session_state.sidebar_messages = [
58
- {"role": "assistant", "content": initial_msg}
59
- ]
60
-
61
- # Mostrar historial
62
- chat_container = st.container()
63
- with chat_container:
64
- for msg in st.session_state.sidebar_messages:
65
- st.chat_message(msg["role"]).write(msg["content"])
66
-
67
- # Manejo de mensajes nuevos
68
- user_input = st.chat_input(
69
- {
70
- 'en': "Ask about the analysis...",
71
- 'es': "Pregunta sobre el análisis...",
72
- 'pt': "Pergunte sobre a análise..."
73
- }.get(lang_code, "Message...")
74
- )
75
-
76
- if user_input:
77
- try:
78
- # Mostrar mensaje del usuario
79
- with chat_container:
80
- st.chat_message("user").write(user_input)
81
- st.session_state.sidebar_messages.append(
82
- {"role": "user", "content": user_input}
83
- )
84
-
85
- # Obtener y mostrar respuesta
86
- with st.chat_message("assistant"):
87
- response = st.write_stream(
88
- st.session_state.chat_processor.process_chat_input(
89
- user_input, lang_code
90
- )
91
- )
92
- st.session_state.sidebar_messages.append(
93
- {"role": "assistant", "content": response.replace("▌", "")}
94
- )
95
-
96
- # Guardar en base de datos
97
- if 'username' in st.session_state:
98
- store_chat_history(
99
- username=st.session_state.username,
100
- messages=st.session_state.sidebar_messages,
101
- chat_type='semantic_analysis',
102
- metadata={
103
- 'text_sample': st.session_state.semantic_agent_data['text'][:500],
104
- 'concepts': st.session_state.semantic_agent_data['metrics']['key_concepts'][:5]
105
- }
106
- )
107
-
108
- except Exception as e:
109
- logger.error(f"Error en conversación: {str(e)}", exc_info=True)
110
- st.error({
111
- 'en': "Error processing request. Try again.",
112
- 'es': "Error al procesar. Intente nuevamente.",
113
- 'pt': "Erro ao processar. Tente novamente."
114
- }.get(lang_code, "Error"))
115
-
116
- # Botón para reiniciar
117
- if st.button("🔄 Reiniciar Chat"):
118
- st.session_state.sidebar_messages = []
119
- st.rerun()
120
-
121
- except Exception as e:
122
- logger.error(f"Error fatal en sidebar_chat: {str(e)}", exc_info=True)
 
 
 
 
 
 
 
 
 
 
123
  st.error("System error. Please refresh the page.")
 
1
+ # modules/chatbot/sidebar_chat.py
2
+ import streamlit as st
3
+ from .chat_process import ChatProcessor
4
+ from ..database.chat_mongo_db import store_chat_history
5
+ import logging
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ def display_sidebar_chat(lang_code: str, chatbot_t: dict):
10
+ """Chatbot mejorado con manejo completo del contexto semántico"""
11
+ with st.sidebar:
12
+ # Configuración de estilos
13
+ st.markdown("""
14
+ <style>
15
+ .chat-container {
16
+ max-height: 60vh;
17
+ overflow-y: auto;
18
+ padding: 10px;
19
+ }
20
+ .chat-message { margin-bottom: 15px; }
21
+ </style>
22
+ """, unsafe_allow_html=True)
23
+
24
+ try:
25
+ # Inicialización del procesador
26
+ if 'chat_processor' not in st.session_state:
27
+ st.session_state.chat_processor = ChatProcessor()
28
+ logger.info("Nuevo ChatProcessor inicializado")
29
+
30
+ # Configurar contexto semántico si está activo
31
+ if st.session_state.get('semantic_agent_active', False):
32
+ semantic_data = st.session_state.get('semantic_agent_data')
33
+ if semantic_data and all(k in semantic_data for k in ['text', 'metrics']):
34
+ try:
35
+ st.session_state.chat_processor.set_semantic_context(
36
+ text=semantic_data['text'],
37
+ metrics=semantic_data['metrics'],
38
+ graph_data=semantic_data.get('graph_data'),
39
+ lang_code=lang_code
40
+ )
41
+ logger.info("Contexto semántico configurado en el chat")
42
+ except Exception as e:
43
+ logger.error(f"Error configurando contexto: {str(e)}")
44
+ st.error("Error al configurar el análisis. Recargue el documento.")
45
+ return
46
+
47
+ # Interfaz del chat
48
+ with st.expander("💬 Asistente de Análisis", expanded=True):
49
+ # Inicializar historial si no existe
50
+ if 'sidebar_messages' not in st.session_state:
51
+ initial_msg = {
52
+ 'en': "Hello! Ask me about the semantic analysis.",
53
+ 'es': "¡Hola! Pregúntame sobre el análisis semántico.",
54
+ 'pt': "Olá! Pergunte-me sobre a análise semântica."
55
+ }.get(lang_code, "Hello!")
56
+
57
+ st.session_state.sidebar_messages = [
58
+ {"role": "assistant", "content": initial_msg}
59
+ ]
60
+
61
+ # Mostrar historial
62
+ chat_container = st.container()
63
+ with chat_container:
64
+ for msg in st.session_state.sidebar_messages:
65
+ st.chat_message(msg["role"]).write(msg["content"])
66
+
67
+ # Manejo de mensajes nuevos
68
+ user_input = st.chat_input(
69
+ {
70
+ 'en': "Ask about the analysis...",
71
+ 'es': "Pregunta sobre el análisis...",
72
+ 'fr': "Question sur l'analyse...",
73
+ 'pt': "Pergunte sobre a análise..."
74
+ }.get(lang_code, "Message...")
75
+ )
76
+
77
+ if user_input:
78
+ try:
79
+ # Mostrar mensaje del usuario
80
+ with chat_container:
81
+ st.chat_message("user").write(user_input)
82
+ st.session_state.sidebar_messages.append(
83
+ {"role": "user", "content": user_input}
84
+ )
85
+
86
+ # Obtener y mostrar respuesta (con limpieza de caracteres)
87
+ with st.chat_message("assistant"):
88
+ response_stream = st.session_state.chat_processor.process_chat_input(
89
+ user_input, lang_code
90
+ )
91
+
92
+ # Limpiar el stream de respuesta
93
+ def clean_response_stream(stream):
94
+ for chunk in stream:
95
+ yield chunk.replace("▌", "")
96
+
97
+ response = st.write_stream(clean_response_stream(response_stream))
98
+
99
+ # Guardar respuesta limpia
100
+ clean_response = response.replace("▌", "")
101
+ st.session_state.sidebar_messages.append(
102
+ {"role": "assistant", "content": clean_response}
103
+ )
104
+
105
+ # Guardar en base de datos (con texto limpio)
106
+ if 'username' in st.session_state:
107
+ store_chat_history(
108
+ username=st.session_state.username,
109
+ messages=st.session_state.sidebar_messages,
110
+ chat_type='semantic_analysis',
111
+ metadata={
112
+ 'text_sample': st.session_state.semantic_agent_data['text'][:500],
113
+ 'concepts': st.session_state.semantic_agent_data['metrics']['key_concepts'][:5]
114
+ }
115
+ )
116
+
117
+ except Exception as e:
118
+ logger.error(f"Error en conversación: {str(e)}", exc_info=True)
119
+ st.error({
120
+ 'en': "Error processing request. Try again.",
121
+ 'es': "Error al procesar. Intente nuevamente.",
122
+ 'fr': "Erreur de traitement. Veuillez réessayer.",
123
+ 'pt': "Erro ao processar. Tente novamente."
124
+ }.get(lang_code, "Error"))
125
+
126
+ # Botón para reiniciar
127
+ if st.button("🔄 Reiniciar Chat"):
128
+ st.session_state.sidebar_messages = []
129
+ st.rerun()
130
+
131
+ except Exception as e:
132
+ logger.error(f"Error fatal en sidebar_chat: {str(e)}", exc_info=True)
133
  st.error("System error. Please refresh the page.")