v4 / modules /studentact /urrent_situation_interface.py
AIdeaText's picture
Create urrent_situation_interface.py
ef45bdf verified
raw
history blame
4.24 kB
# 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']
)