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