File size: 6,727 Bytes
c58df45 |
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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
#modules/morphosyntax/morphosyntax_interface.py
import streamlit as st
from streamlit_float import *
from streamlit_antd_components import *
from streamlit.components.v1 import html
import base64
from .morphosyntax_process import process_morphosyntactic_input
from ..chatbot.chatbot import initialize_chatbot
from ..utils.widget_utils import generate_unique_key
from ..database.database_oldFromV2 import store_morphosyntax_result
import logging
logger = logging.getLogger(__name__)
####################### VERSION ANTERIOR A LAS 20:00 24-9-24
def display_morphosyntax_interface(lang_code, nlp_models, t):
# Estilo CSS personalizado
st.markdown("""
<style>
.morpho-initial-message {
background-color: #f0f2f6;
border-left: 5px solid #4CAF50;
padding: 10px;
border-radius: 5px;
font-size: 16px;
margin-bottom: 20px;
}
</style>
""", unsafe_allow_html=True)
# Mostrar el mensaje inicial como un párrafo estilizado
st.markdown(f"""
<div class="morpho-initial-message">
{t['morpho_initial_message']}
</div>
""", unsafe_allow_html=True)
# Inicializar el chatbot si no existe
if 'morphosyntax_chatbot' not in st.session_state:
st.session_state.morphosyntax_chatbot = initialize_chatbot('morphosyntactic')
# Crear un contenedor para el chat
chat_container = st.container()
# Mostrar el historial del chat
with chat_container:
if 'morphosyntax_chat_history' not in st.session_state:
st.session_state.morphosyntax_chat_history = []
for i, message in enumerate(st.session_state.morphosyntax_chat_history):
with st.chat_message(message["role"]):
st.write(message["content"])
if "visualizations" in message:
for viz in message["visualizations"]:
st.components.v1.html(
f"""
<div style="width: 100%; overflow-x: auto; white-space: nowrap;">
<div style="min-width: 1200px;">
{viz}
</div>
</div>
""",
height=370,
scrolling=True
)
# Input del usuario
user_input = st.chat_input(
t['morpho_input_label'],
key=generate_unique_key('morphosyntax', "chat_input")
)
if user_input:
# Añadir el mensaje del usuario al historial
st.session_state.morphosyntax_chat_history.append({"role": "user", "content": user_input})
# Mostrar indicador de carga
with st.spinner(t.get('processing', 'Processing...')):
try:
# Procesar el input del usuario
response, visualizations, result = process_morphosyntactic_input(user_input, lang_code, nlp_models, t)
# Añadir la respuesta al historial
message = {
"role": "assistant",
"content": response
}
if visualizations:
message["visualizations"] = visualizations
st.session_state.morphosyntax_chat_history.append(message)
# Mostrar la respuesta más reciente
with st.chat_message("assistant"):
st.write(response)
if visualizations:
for i, viz in enumerate(visualizations):
st.components.v1.html(
f"""
<div style="width: 100%; overflow-x: auto; white-space: nowrap;">
<div style="min-width: 1200px;">
{viz}
</div>
</div>
""",
height=350,
scrolling=True
)
# Si es un análisis, guardarlo en la base de datos
if user_input.startswith('/analisis_morfosintactico') and result:
store_morphosyntax_result(
st.session_state.username,
user_input.split('[', 1)[1].rsplit(']', 1)[0], # texto analizado
result.get('repeated_words', {}),
visualizations,
result.get('pos_analysis', []),
result.get('morphological_analysis', []),
result.get('sentence_structure', [])
)
except Exception as e:
st.error(f"{t['error_processing']}: {str(e)}")
# Si es un análisis, guardarlo en la base de datos
if user_input.startswith('/analisis_morfosintactico') and result:
store_morphosyntax_result(
st.session_state.username,
user_input.split('[', 1)[1].rsplit(']', 1)[0], # texto analizado
result['repeated_words'],
visualizations, # Ahora pasamos todas las visualizaciones
result['pos_analysis'],
result['morphological_analysis'],
result['sentence_structure']
)
# Forzar la actualización de la interfaz
st.rerun()
# Botón para limpiar el historial del chat
if st.button(t['clear_chat'], key=generate_unique_key('morphosyntax', 'clear_chat')):
st.session_state.morphosyntax_chat_history = []
st.rerun()
'''
############ MODULO PARA DEPURACIÓN Y PRUEBAS #####################################################
def display_morphosyntax_interface(lang_code, nlp_models, t):
st.subheader(t['morpho_title'])
text_input = st.text_area(
t['warning_message'],
height=150,
key=generate_unique_key("morphosyntax", "text_area")
)
if st.button(
t['results_title'],
key=generate_unique_key("morphosyntax", "analyze_button")
):
if text_input:
# Aquí iría tu lógica de análisis morfosintáctico
# Por ahora, solo mostraremos un mensaje de placeholder
st.info(t['analysis_placeholder'])
else:
st.warning(t['no_text_warning'])
###
#################################################
'''
|