Update modules/ui.py
Browse files- modules/ui.py +41 -34
modules/ui.py
CHANGED
@@ -5,10 +5,10 @@ import io
|
|
5 |
import base64
|
6 |
import matplotlib.pyplot as plt
|
7 |
import pandas as pd
|
|
|
8 |
from streamlit_player import st_player # Necesitarás instalar esta librería: pip install streamlit-player
|
9 |
from spacy import displacy
|
10 |
|
11 |
-
|
12 |
#Importaciones locales
|
13 |
#Importaciones locales de autenticación y base de datos
|
14 |
from .auth import authenticate_user, register_user, get_user_role
|
@@ -396,28 +396,25 @@ def display_discourse_analysis_interface(nlp_models, lang_code):
|
|
396 |
def display_chatbot_interface(lang_code):
|
397 |
translations = {
|
398 |
'es': {
|
399 |
-
'title': "
|
400 |
'input_placeholder': "Escribe tu mensaje aquí...",
|
401 |
-
'
|
402 |
-
'initial_message': "¡Hola! ¿En qué puedo ayudarte hoy?"
|
403 |
},
|
404 |
'en': {
|
405 |
-
'title': "
|
406 |
'input_placeholder': "Type your message here...",
|
407 |
-
'
|
408 |
-
'initial_message': "Hello! How can I assist you today?"
|
409 |
},
|
410 |
'fr': {
|
411 |
-
'title': "
|
412 |
'input_placeholder': "Écrivez votre message ici...",
|
413 |
-
'
|
414 |
-
'initial_message': "Bonjour! Comment puis-je vous aider aujourd'hui?"
|
415 |
}
|
416 |
}
|
417 |
|
418 |
t = translations[lang_code]
|
419 |
|
420 |
-
st.
|
421 |
|
422 |
if 'chatbot' not in st.session_state:
|
423 |
st.session_state.chatbot = initialize_chatbot()
|
@@ -425,31 +422,41 @@ def display_chatbot_interface(lang_code):
|
|
425 |
if 'messages' not in st.session_state:
|
426 |
st.session_state.messages = [{"role": "assistant", "content": t['initial_message']}]
|
427 |
|
428 |
-
|
429 |
-
for message in st.session_state.messages:
|
430 |
-
with st.chat_message(message["role"]):
|
431 |
-
st.markdown(message["content"])
|
432 |
-
|
433 |
-
# Input del usuario
|
434 |
-
if prompt := st.chat_input(t['input_placeholder']):
|
435 |
-
st.session_state.messages.append({"role": "user", "content": prompt})
|
436 |
-
with st.chat_message("user"):
|
437 |
-
st.markdown(prompt)
|
438 |
|
439 |
-
|
440 |
-
|
441 |
-
full_response = get_chatbot_response(st.session_state.chatbot, prompt, lang_code)
|
442 |
-
|
443 |
-
# Simular escritura gradual
|
444 |
-
for i in range(len(full_response)):
|
445 |
-
message_placeholder.markdown(full_response[:i+1] + "▌")
|
446 |
-
time.sleep(0.01)
|
447 |
-
message_placeholder.markdown(full_response)
|
448 |
-
|
449 |
-
st.session_state.messages.append({"role": "assistant", "content": full_response})
|
450 |
|
451 |
-
|
452 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
|
454 |
# Mostrar el número de llamadas a la API restantes
|
455 |
remaining_calls = 50 - st.session_state.get('api_calls', 0)
|
|
|
5 |
import base64
|
6 |
import matplotlib.pyplot as plt
|
7 |
import pandas as pd
|
8 |
+
import time
|
9 |
from streamlit_player import st_player # Necesitarás instalar esta librería: pip install streamlit-player
|
10 |
from spacy import displacy
|
11 |
|
|
|
12 |
#Importaciones locales
|
13 |
#Importaciones locales de autenticación y base de datos
|
14 |
from .auth import authenticate_user, register_user, get_user_role
|
|
|
396 |
def display_chatbot_interface(lang_code):
|
397 |
translations = {
|
398 |
'es': {
|
399 |
+
'title': "Expertos en Vacaciones",
|
400 |
'input_placeholder': "Escribe tu mensaje aquí...",
|
401 |
+
'initial_message': "¡Hola! ¿Cómo podemos ayudarte?"
|
|
|
402 |
},
|
403 |
'en': {
|
404 |
+
'title': "Vacation Experts",
|
405 |
'input_placeholder': "Type your message here...",
|
406 |
+
'initial_message': "Hi! How can we help you?"
|
|
|
407 |
},
|
408 |
'fr': {
|
409 |
+
'title': "Experts en Vacances",
|
410 |
'input_placeholder': "Écrivez votre message ici...",
|
411 |
+
'initial_message': "Bonjour! Comment pouvons-nous vous aider?"
|
|
|
412 |
}
|
413 |
}
|
414 |
|
415 |
t = translations[lang_code]
|
416 |
|
417 |
+
st.title(t['title'])
|
418 |
|
419 |
if 'chatbot' not in st.session_state:
|
420 |
st.session_state.chatbot = initialize_chatbot()
|
|
|
422 |
if 'messages' not in st.session_state:
|
423 |
st.session_state.messages = [{"role": "assistant", "content": t['initial_message']}]
|
424 |
|
425 |
+
chat_container = st.container()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
426 |
|
427 |
+
# Área de entrada del usuario
|
428 |
+
user_input = st.text_input(t['input_placeholder'], key="user_input")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
|
430 |
+
# Botón de envío (oculto, se activa con Enter)
|
431 |
+
if st.button("Send", key="send_button", style="display: none;") or user_input:
|
432 |
+
if user_input:
|
433 |
+
st.session_state.messages.append({"role": "user", "content": user_input})
|
434 |
+
with chat_container:
|
435 |
+
for message in st.session_state.messages:
|
436 |
+
if message["role"] == "user":
|
437 |
+
st.text_area("You:", value=message["content"], height=50, key=f"user_msg_{len(st.session_state.messages)}", disabled=True)
|
438 |
+
else:
|
439 |
+
st.text_area("Assistant:", value=message["content"], height=50, key=f"assistant_msg_{len(st.session_state.messages)}", disabled=True)
|
440 |
+
|
441 |
+
# Generar respuesta del chatbot
|
442 |
+
response = get_chatbot_response(st.session_state.chatbot, user_input, lang_code)
|
443 |
+
st.session_state.messages.append({"role": "assistant", "content": response})
|
444 |
+
|
445 |
+
# Mostrar la respuesta del chatbot con efecto de escritura
|
446 |
+
with chat_container:
|
447 |
+
assistant_message = st.empty()
|
448 |
+
full_response = ""
|
449 |
+
for char in response:
|
450 |
+
full_response += char
|
451 |
+
assistant_message.text_area("Assistant:", value=full_response + "▌", height=50, key=f"assistant_msg_{len(st.session_state.messages)+1}", disabled=True)
|
452 |
+
time.sleep(0.01)
|
453 |
+
assistant_message.text_area("Assistant:", value=full_response, height=50, key=f"assistant_msg_{len(st.session_state.messages)+1}", disabled=True)
|
454 |
+
|
455 |
+
# Guardar la conversación en la base de datos
|
456 |
+
store_chat_history(st.session_state.username, st.session_state.messages)
|
457 |
+
|
458 |
+
# Limpiar el input del usuario
|
459 |
+
st.session_state.user_input = ""
|
460 |
|
461 |
# Mostrar el número de llamadas a la API restantes
|
462 |
remaining_calls = 50 - st.session_state.get('api_calls', 0)
|