Spaces:
Running
Running
# modules/studentact/current_situation_interface.py | |
import streamlit as st | |
import logging | |
from ..utils.widget_utils import generate_unique_key | |
logger = logging.getLogger(__name__) | |
def display_current_situation_interface(lang_code, nlp_models, t): | |
""" | |
Interfaz modular para el an谩lisis de la situaci贸n actual del estudiante. | |
Esta funci贸n maneja la presentaci贸n y la interacci贸n con el usuario. | |
Args: | |
lang_code: C贸digo del idioma actual | |
nlp_models: Diccionario de modelos de spaCy cargados | |
t: Diccionario de traducciones | |
""" | |
try: | |
st.markdown("## Mi Situaci贸n Actual de Escritura") | |
# Container principal para mejor organizaci贸n visual | |
with st.container(): | |
# Columnas para entrada y visualizaci贸n | |
text_col, visual_col = st.columns([1,2]) | |
with text_col: | |
# 脕rea de entrada de texto | |
text_input = st.text_area( | |
t.get('current_situation_input', "Ingresa tu texto para analizar:"), | |
height=400, | |
key=generate_unique_key("current_situation", "input") | |
) | |
# Bot贸n de an谩lisis | |
if st.button( | |
t.get('analyze_button', "Explorar mi escritura"), | |
type="primary", | |
disabled=not text_input, | |
key=generate_unique_key("current_situation", "analyze") | |
): | |
with st.spinner(t.get('processing', "Analizando texto...")): | |
try: | |
# 1. Procesar el texto | |
doc = nlp_models[lang_code](text_input) | |
metrics = analyze_text_dimensions(doc) | |
# 2. Mostrar visualizaciones en la columna derecha | |
with visual_col: | |
from .current_situation_analysis import display_current_situation_visual | |
display_current_situation_visual(doc, metrics) | |
# 3. Obtener retroalimentaci贸n de Claude | |
feedback = get_claude_feedback(metrics, text_input) | |
# 4. Guardar los resultados | |
from ..database.current_situation_mongo_db import store_current_situation_result | |
if store_current_situation_result( | |
st.session_state.username, | |
text_input, | |
metrics, | |
feedback | |
): | |
st.success(t.get('save_success', "An谩lisis guardado exitosamente")) | |
# 5. Mostrar recomendaciones | |
show_recommendations(feedback, t) | |
except Exception as e: | |
logger.error(f"Error en an谩lisis de situaci贸n actual: {str(e)}") | |
st.error(t.get('analysis_error', "Error al procesar el an谩lisis")) | |
def show_recommendations(feedback, t): | |
""" | |
Muestra las recomendaciones y ejercicios sugeridos. | |
""" | |
st.markdown("### " + t.get('recommendations_title', "Recomendaciones para mejorar")) | |
for area, exercises in feedback['recommendations'].items(): | |
with st.expander(f"馃挕 {area}"): | |
st.markdown(exercises['description']) | |
st.markdown("**Ejercicio sugerido:**") | |
st.markdown(exercises['activity']) | |
# Bot贸n para marcar ejercicio como completado | |
if st.button( | |
t.get('mark_complete', "Marcar como completado"), | |
key=generate_unique_key("exercise", area) | |
): | |
update_exercise_status( | |
st.session_state.username, | |
area, | |
exercises['activity'] | |
) |