Update modules/studentact/student_activities_v2.py
Browse files
modules/studentact/student_activities_v2.py
CHANGED
|
@@ -23,6 +23,7 @@ from ..database.discourse_mongo_db import get_student_discourse_analysis
|
|
| 23 |
from ..database.chat_mongo_db import get_chat_history
|
| 24 |
from ..database.current_situation_mongo_db import get_current_situation_analysis
|
| 25 |
from ..database.claude_recommendations_mongo_db import get_claude_recommendations
|
|
|
|
| 26 |
|
| 27 |
# Importar la función generate_unique_key
|
| 28 |
from ..utils.widget_utils import generate_unique_key
|
|
@@ -46,31 +47,25 @@ def display_student_activities(username: str, lang_code: str, t: dict):
|
|
| 46 |
# Tabs para diferentes tipos de análisis
|
| 47 |
# Cambiado "Análisis del Discurso" a "Análisis comparado de textos"
|
| 48 |
tabs = st.tabs([
|
| 49 |
-
|
| 50 |
-
#t.get('morpho_activities', 'Registros de mis análisis morfosintácticos'),
|
| 51 |
t.get('semantic_activities', 'Registros de mis análisis semánticos'),
|
| 52 |
t.get('discourse_activities', 'Registros de mis análisis comparado de textos'),
|
| 53 |
t.get('chat_activities', 'Registros de mis conversaciones con el tutor virtual')
|
| 54 |
])
|
| 55 |
|
| 56 |
-
# Tab de Situación Actual
|
| 57 |
-
#with tabs[0]:
|
| 58 |
-
# display_current_situation_activities(username, t)
|
| 59 |
-
|
| 60 |
-
# Tab de Análisis Morfosintáctico
|
| 61 |
-
#with tabs[1]:
|
| 62 |
-
# display_morphosyntax_activities(username, t)
|
| 63 |
-
|
| 64 |
# Tab de Análisis Semántico
|
| 65 |
with tabs[0]:
|
|
|
|
|
|
|
|
|
|
| 66 |
display_semantic_activities(username, t)
|
| 67 |
|
| 68 |
# Tab de Análisis del Discurso (mantiene nombre interno pero UI muestra "Análisis comparado de textos")
|
| 69 |
-
with tabs[
|
| 70 |
display_discourse_activities(username, t)
|
| 71 |
|
| 72 |
# Tab de Conversaciones del Chat
|
| 73 |
-
with tabs[
|
| 74 |
display_chat_activities(username, t)
|
| 75 |
|
| 76 |
except Exception as e:
|
|
@@ -80,6 +75,53 @@ def display_student_activities(username: str, lang_code: str, t: dict):
|
|
| 80 |
|
| 81 |
###############################################################################################
|
| 82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
def display_semantic_activities(username: str, t: dict):
|
| 84 |
"""Muestra actividades de análisis semántico"""
|
| 85 |
try:
|
|
|
|
| 23 |
from ..database.chat_mongo_db import get_chat_history
|
| 24 |
from ..database.current_situation_mongo_db import get_current_situation_analysis
|
| 25 |
from ..database.claude_recommendations_mongo_db import get_claude_recommendations
|
| 26 |
+
from ..database.semantic_mongo_live_db import get_student_semantic_live_analysis #7-7-2025
|
| 27 |
|
| 28 |
# Importar la función generate_unique_key
|
| 29 |
from ..utils.widget_utils import generate_unique_key
|
|
|
|
| 47 |
# Tabs para diferentes tipos de análisis
|
| 48 |
# Cambiado "Análisis del Discurso" a "Análisis comparado de textos"
|
| 49 |
tabs = st.tabs([
|
| 50 |
+
t.get('semantic_live_activities', 'Registros de análisis en vivo'),
|
|
|
|
| 51 |
t.get('semantic_activities', 'Registros de mis análisis semánticos'),
|
| 52 |
t.get('discourse_activities', 'Registros de mis análisis comparado de textos'),
|
| 53 |
t.get('chat_activities', 'Registros de mis conversaciones con el tutor virtual')
|
| 54 |
])
|
| 55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
# Tab de Análisis Semántico
|
| 57 |
with tabs[0]:
|
| 58 |
+
display_semantic_live_activities(username, t)
|
| 59 |
+
|
| 60 |
+
with tabs[1]:
|
| 61 |
display_semantic_activities(username, t)
|
| 62 |
|
| 63 |
# Tab de Análisis del Discurso (mantiene nombre interno pero UI muestra "Análisis comparado de textos")
|
| 64 |
+
with tabs[2]:
|
| 65 |
display_discourse_activities(username, t)
|
| 66 |
|
| 67 |
# Tab de Conversaciones del Chat
|
| 68 |
+
with tabs[3]:
|
| 69 |
display_chat_activities(username, t)
|
| 70 |
|
| 71 |
except Exception as e:
|
|
|
|
| 75 |
|
| 76 |
###############################################################################################
|
| 77 |
|
| 78 |
+
def display_semantic_live_activities(username: str, t: dict):
|
| 79 |
+
"""Muestra actividades de análisis semántico en vivo"""
|
| 80 |
+
try:
|
| 81 |
+
analyses = get_student_semantic_live_analysis(username)
|
| 82 |
+
|
| 83 |
+
if not analyses:
|
| 84 |
+
st.info(t.get('no_semantic_live_analyses', 'No hay análisis semánticos en vivo registrados'))
|
| 85 |
+
return
|
| 86 |
+
|
| 87 |
+
for analysis in analyses:
|
| 88 |
+
try:
|
| 89 |
+
timestamp = datetime.fromisoformat(analysis['timestamp'].replace('Z', '+00:00'))
|
| 90 |
+
formatted_date = timestamp.strftime("%d/%m/%Y %H:%M:%S")
|
| 91 |
+
|
| 92 |
+
with st.expander(f"{t.get('analysis_date', 'Fecha')}: {formatted_date}", expanded=False):
|
| 93 |
+
# Mostrar texto (primeros 200 caracteres)
|
| 94 |
+
st.text_area(
|
| 95 |
+
"Texto analizado",
|
| 96 |
+
value=analysis.get('text', '')[:200] + ("..." if len(analysis.get('text', '')) > 200 else ""),
|
| 97 |
+
height=100,
|
| 98 |
+
disabled=True
|
| 99 |
+
)
|
| 100 |
+
|
| 101 |
+
# Mostrar gráfico si existe
|
| 102 |
+
if analysis.get('concept_graph'):
|
| 103 |
+
try:
|
| 104 |
+
image_data = analysis['concept_graph']
|
| 105 |
+
image_bytes = base64.b64decode(image_data) if isinstance(image_data, str) else image_data
|
| 106 |
+
|
| 107 |
+
st.image(
|
| 108 |
+
image_bytes,
|
| 109 |
+
caption=t.get('concept_network', 'Red de Conceptos'),
|
| 110 |
+
use_container_width=True
|
| 111 |
+
)
|
| 112 |
+
except Exception as img_error:
|
| 113 |
+
logger.error(f"Error procesando gráfico: {str(img_error)}")
|
| 114 |
+
st.error(t.get('error_loading_graph', 'Error al cargar el gráfico'))
|
| 115 |
+
|
| 116 |
+
except Exception as e:
|
| 117 |
+
logger.error(f"Error procesando análisis individual: {str(e)}")
|
| 118 |
+
continue
|
| 119 |
+
|
| 120 |
+
except Exception as e:
|
| 121 |
+
logger.error(f"Error mostrando análisis semántico en vivo: {str(e)}")
|
| 122 |
+
st.error(t.get('error_semantic_live', 'Error al mostrar análisis semántico en vivo'))
|
| 123 |
+
|
| 124 |
+
###############################################################################################
|
| 125 |
def display_semantic_activities(username: str, t: dict):
|
| 126 |
"""Muestra actividades de análisis semántico"""
|
| 127 |
try:
|