AIdeaText commited on
Commit
c793db8
·
verified ·
1 Parent(s): 7bb27a4

Update modules/ui/ui.py

Browse files
Files changed (1) hide show
  1. modules/ui/ui.py +73 -87
modules/ui/ui.py CHANGED
@@ -284,7 +284,6 @@ def display_videos_and_info(lang_code, t):
284
  Nuevo León, México. Del 28 al 30 enero 2025
285
 
286
  ## 2024
287
-
288
  [1]
289
  AIdeaText, AIdeaText, recurso digital que emplea la técnica de Análisis de Resonancia Central para perfeccionar textos académicos**
290
  V Temporada SENDA - Organizado por el Seminario de Entornos y Narrativas Digitales en la Academia del
@@ -294,31 +293,26 @@ def display_videos_and_info(lang_code, t):
294
  Aproximación al Agente Cognitivo Vinculante (ACV) desde la Teoría del Actor Red (TAR)**
295
  Congreso HeETI 2024: Horizontes Expandidos de la Educación, la Tecnología y la Innovación
296
  Universidad el Claustro de Sor Juana. Del 25 al 27 septiembre 2024
297
-
298
  [3]
299
  AIdeaText, visualización de mapas semánticos**
300
  PyCon 2024, Organizado por el grupo de desarrolladores independientes de Python.
301
  Universidad EAFIT, Medellín, Colombia. Del 7 al 9 de junio de 2024.
302
 
303
  ## 2023
304
-
305
  **Aproximación al Agente Cognitivo Vinculante (ACV) desde la Teoría del Actor Red (TAR)**
306
  [1]
307
  XVII Congreso Nacional de Investigación Educativa - VII Encuentro de Estudiantes de Posgrado Educación.
308
  Consejo Mexicano de Investigación Educativa (COMIE)
309
  Villahermosa, Tabasco, México.
310
  Del 4 al 8 de diciembre 2023
311
-
312
  [2]
313
  XXXI Encuentro Internacional de Educación a Distancia
314
  Universidad de Guadalajara. Jalisco, México.
315
  Del 27 al 30 noviembre 2023
316
-
317
  [3]
318
  IV Temporada SENDA - Seminario de Entornos y Narrativas Digitales en la Academia
319
  Instituto de Investigaciones Antropológicas (IIA), UNAM.
320
  22 noviembre 2023
321
-
322
  [4]
323
  1er Congreso Internacional de Educación Digital
324
  Instituto Politécnico Nacional, sede Zacatecas. México.
@@ -372,39 +366,10 @@ def display_videos_and_info(lang_code, t):
372
 
373
  #Después de iniciar sesión
374
  ####################################
375
- ####################################
376
  def user_page(lang_code, t):
377
  logger.info(f"Entrando en user_page para el estudiante: {st.session_state.username}")
378
 
379
- # Funciones auxiliares para manejar los estados de los tabs (movidas al inicio)
380
- def get_tab_index(state_key):
381
- """Obtiene el índice del tab basado en la clave de estado"""
382
- index_map = {
383
- 'current_situation_active': 0,
384
- 'morpho_active': 1,
385
- 'semantic_live_active': 2,
386
- 'semantic_active': 3,
387
- 'discourse_live_active': 4,
388
- 'discourse_active': 5,
389
- 'activities_active': 6,
390
- 'feedback_active': 7
391
- }
392
- return index_map.get(state_key, -1)
393
-
394
- def get_state_key_for_index(index):
395
- """Obtiene la clave de estado basada en el índice del tab"""
396
- state_map = {
397
- 0: 'current_situation_active',
398
- 1: 'morpho_active',
399
- 2: 'semantic_live_active',
400
- 3: 'semantic_active',
401
- 4: 'discourse_live_active',
402
- 5: 'discourse_active',
403
- 6: 'activities_active',
404
- 7: 'feedback_active'
405
- }
406
- return state_map.get(index)
407
-
408
  # Inicializar el tab seleccionado si no existe
409
  if 'selected_tab' not in st.session_state:
410
  st.session_state.selected_tab = 0
@@ -426,12 +391,9 @@ def user_page(lang_code, t):
426
 
427
  logger.info(f"Idioma actual: {st.session_state.lang_code}")
428
  logger.info(f"Modelos NLP cargados: {'nlp_models' in st.session_state}")
429
-
430
- # Registra las traducciones disponibles para depuración
431
- logger.info(f"Claves de traducción disponibles: {list(t.keys())}")
432
 
433
  # Configuración de idiomas disponibles
434
- languages = {'Español': 'es', 'Português': 'pt', 'Français': 'fr', 'English': 'en'}
435
 
436
  # Estilos CSS personalizados
437
  st.markdown("""
@@ -455,11 +417,11 @@ def user_page(lang_code, t):
455
  with st.container():
456
  col1, col2, col3 = st.columns([2, 2, 1])
457
  with col1:
458
- st.markdown(f"<h3 style='margin-bottom: 0; padding-top: 10px;'>{t.get('welcome', 'Bienvenido')}, {st.session_state.username}</h3>",
459
  unsafe_allow_html=True)
460
  with col2:
461
  selected_lang = st.selectbox(
462
- t.get('select_language', 'Seleccionar idioma'),
463
  list(languages.keys()),
464
  index=list(languages.values()).index(st.session_state.lang_code),
465
  key=f"language_selector_{st.session_state.username}_{st.session_state.lang_code}"
@@ -467,10 +429,9 @@ def user_page(lang_code, t):
467
  new_lang_code = languages[selected_lang]
468
  if st.session_state.lang_code != new_lang_code:
469
  st.session_state.lang_code = new_lang_code
470
- logger.info(f"Cambiando idioma de {st.session_state.lang_code} a {new_lang_code}")
471
  st.rerun()
472
  with col3:
473
- if st.button(t.get('logout', 'Cerrar sesión'),
474
  key=f"logout_button_{st.session_state.username}_{st.session_state.lang_code}"):
475
  st.session_state.clear()
476
  st.rerun()
@@ -478,7 +439,7 @@ def user_page(lang_code, t):
478
  st.markdown("---")
479
 
480
  # Asegurarse de que tenemos las traducciones del chatbot
481
- chatbot_t = t.get('CHATBOT_TRANSLATIONS', {})
482
 
483
  # Mostrar chatbot en sidebar
484
  display_sidebar_chat(lang_code, chatbot_t)
@@ -498,20 +459,16 @@ def user_page(lang_code, t):
498
 
499
  # Sistema de tabs
500
  tab_names = [
501
- t.get('TABS', {}).get('current_situation_tab', "Mi Situación Actual"),
502
- t.get('TABS', {}).get('morpho_tab', 'Análisis Morfosintáctico'),
503
- t.get('TABS', {}).get('semantic_live_tab', 'Análisis Semántico Vivo'),
504
- t.get('TABS', {}).get('semantic_tab', 'Análisis Semántico'),
505
- t.get('TABS', {}).get('discourse_live_tab', 'Análisis de Discurso Vivo'),
506
- t.get('TABS', {}).get('discourse_tab', 'Análsis de Discurso'),
507
- t.get('TABS', {}).get('activities_tab', 'Mis Actividades'),
508
- t.get('TABS', {}).get('feedback_tab', 'Formulario de Comentarios')
509
  ]
510
 
511
- # Log para depuración de traducciones de tabs
512
- logger.info(f"Tab names for {lang_code}: {tab_names}")
513
-
514
- # Crear tabs
515
  tabs = st.tabs(tab_names)
516
 
517
  # Manejar el contenido de cada tab
@@ -527,70 +484,72 @@ def user_page(lang_code, t):
527
  break
528
  if can_switch:
529
  st.session_state.selected_tab = index
530
-
531
  if index == 0: # Situación actual
532
  st.session_state.tab_states['current_situation_active'] = True
533
  display_current_situation_interface(
534
- lang_code=st.session_state.lang_code,
535
- nlp_models=st.session_state.nlp_models,
536
- current_situation_t=t.get('CURRENT_SITUATION', {})
537
  )
538
-
539
  elif index == 1: # Morfosintáctico
540
  st.session_state.tab_states['morpho_active'] = True
541
  display_morphosyntax_interface(
542
- lang_code=st.session_state.lang_code,
543
- nlp_models=st.session_state.nlp_models,
544
- morpho_t=t.get('MORPHOSYNTACTIC', {})
545
  )
 
546
 
547
  elif index == 2: # Semántico Vivo
548
  st.session_state.tab_states['semantic_live_active'] = True
549
  display_semantic_live_interface(
550
- lang_code=st.session_state.lang_code,
551
- nlp_models=st.session_state.nlp_models,
552
- semantic_t=t.get('SEMANTIC', {})
553
  )
554
-
555
  elif index == 3: # Semántico
556
  st.session_state.tab_states['semantic_active'] = True
557
  display_semantic_interface(
558
- lang_code=st.session_state.lang_code,
559
- nlp_models=st.session_state.nlp_models,
560
- semantic_t=t.get('SEMANTIC', {})
561
  )
562
-
563
  elif index == 4: # Discurso Vivo
564
  st.session_state.tab_states['discourse_live_active'] = True
565
  display_discourse_live_interface(
566
- lang_code=st.session_state.lang_code,
567
- nlp_models=st.session_state.nlp_models,
568
- discourse_t=t.get('DISCOURSE', {})
569
  )
570
 
 
571
  elif index == 5: # Discurso
572
  st.session_state.tab_states['discourse_active'] = True
573
  display_discourse_interface(
574
- lang_code=st.session_state.lang_code,
575
- nlp_models=st.session_state.nlp_models,
576
- discourse_t=t.get('DISCOURSE', {})
577
  )
578
-
579
  elif index == 6: # Actividades
580
  st.session_state.tab_states['activities_active'] = True
581
  display_student_activities(
582
  username=st.session_state.username,
583
  lang_code=st.session_state.lang_code,
584
- t=t.get('ACTIVITIES', {})
585
  )
586
-
587
  elif index == 7: # Feedback
588
  st.session_state.tab_states['feedback_active'] = True
589
  display_feedback_form(
590
- lang_code=st.session_state.lang_code,
591
- t=t.get('FEEDBACK', {})
592
  )
593
-
594
  except Exception as e:
595
  # Desactivar el estado en caso de error
596
  state_key = get_state_key_for_index(index)
@@ -599,6 +558,35 @@ def user_page(lang_code, t):
599
  logger.error(f"Error en tab {index}: {str(e)}")
600
  st.error(t.get('tab_error', 'Error al cargar esta sección'))
601
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
602
  # Panel de depuración (solo visible en desarrollo)
603
  if st.session_state.get('debug_mode', False):
604
  with st.expander("Debug Info"):
@@ -608,9 +596,7 @@ def user_page(lang_code, t):
608
  st.write(f"Idioma: {st.session_state.lang_code}")
609
  st.write(f"Tab seleccionado: {st.session_state.selected_tab}")
610
  st.write(f"Última actualización de datos: {st.session_state.get('last_data_fetch', 'Nunca')}")
611
- st.write(f"Traducciones disponibles: {list(t.keys())}")
612
 
613
- ####################################
614
  ########################################################################
615
  def display_feedback_form(lang_code, t):
616
  logging.info(f"display_feedback_form called with lang_code: {lang_code}")
 
284
  Nuevo León, México. Del 28 al 30 enero 2025
285
 
286
  ## 2024
 
287
  [1]
288
  AIdeaText, AIdeaText, recurso digital que emplea la técnica de Análisis de Resonancia Central para perfeccionar textos académicos**
289
  V Temporada SENDA - Organizado por el Seminario de Entornos y Narrativas Digitales en la Academia del
 
293
  Aproximación al Agente Cognitivo Vinculante (ACV) desde la Teoría del Actor Red (TAR)**
294
  Congreso HeETI 2024: Horizontes Expandidos de la Educación, la Tecnología y la Innovación
295
  Universidad el Claustro de Sor Juana. Del 25 al 27 septiembre 2024
 
296
  [3]
297
  AIdeaText, visualización de mapas semánticos**
298
  PyCon 2024, Organizado por el grupo de desarrolladores independientes de Python.
299
  Universidad EAFIT, Medellín, Colombia. Del 7 al 9 de junio de 2024.
300
 
301
  ## 2023
 
302
  **Aproximación al Agente Cognitivo Vinculante (ACV) desde la Teoría del Actor Red (TAR)**
303
  [1]
304
  XVII Congreso Nacional de Investigación Educativa - VII Encuentro de Estudiantes de Posgrado Educación.
305
  Consejo Mexicano de Investigación Educativa (COMIE)
306
  Villahermosa, Tabasco, México.
307
  Del 4 al 8 de diciembre 2023
 
308
  [2]
309
  XXXI Encuentro Internacional de Educación a Distancia
310
  Universidad de Guadalajara. Jalisco, México.
311
  Del 27 al 30 noviembre 2023
 
312
  [3]
313
  IV Temporada SENDA - Seminario de Entornos y Narrativas Digitales en la Academia
314
  Instituto de Investigaciones Antropológicas (IIA), UNAM.
315
  22 noviembre 2023
 
316
  [4]
317
  1er Congreso Internacional de Educación Digital
318
  Instituto Politécnico Nacional, sede Zacatecas. México.
 
366
 
367
  #Después de iniciar sesión
368
  ####################################
369
+
370
  def user_page(lang_code, t):
371
  logger.info(f"Entrando en user_page para el estudiante: {st.session_state.username}")
372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  # Inicializar el tab seleccionado si no existe
374
  if 'selected_tab' not in st.session_state:
375
  st.session_state.selected_tab = 0
 
391
 
392
  logger.info(f"Idioma actual: {st.session_state.lang_code}")
393
  logger.info(f"Modelos NLP cargados: {'nlp_models' in st.session_state}")
 
 
 
394
 
395
  # Configuración de idiomas disponibles
396
+ languages = {'Español': 'es', 'English': 'en', 'Français': 'fr'}
397
 
398
  # Estilos CSS personalizados
399
  st.markdown("""
 
417
  with st.container():
418
  col1, col2, col3 = st.columns([2, 2, 1])
419
  with col1:
420
+ st.markdown(f"<h3 style='margin-bottom: 0; padding-top: 10px;'>{t['welcome']}, {st.session_state.username}</h3>",
421
  unsafe_allow_html=True)
422
  with col2:
423
  selected_lang = st.selectbox(
424
+ t['select_language'],
425
  list(languages.keys()),
426
  index=list(languages.values()).index(st.session_state.lang_code),
427
  key=f"language_selector_{st.session_state.username}_{st.session_state.lang_code}"
 
429
  new_lang_code = languages[selected_lang]
430
  if st.session_state.lang_code != new_lang_code:
431
  st.session_state.lang_code = new_lang_code
 
432
  st.rerun()
433
  with col3:
434
+ if st.button(t['logout'],
435
  key=f"logout_button_{st.session_state.username}_{st.session_state.lang_code}"):
436
  st.session_state.clear()
437
  st.rerun()
 
439
  st.markdown("---")
440
 
441
  # Asegurarse de que tenemos las traducciones del chatbot
442
+ chatbot_t = t.get('CHATBOT_TRANSLATIONS', {}).get(lang_code, {})
443
 
444
  # Mostrar chatbot en sidebar
445
  display_sidebar_chat(lang_code, chatbot_t)
 
459
 
460
  # Sistema de tabs
461
  tab_names = [
462
+ t.get('current_situation_tab', "Mi Situación Actual"),
463
+ t.get('morpho_tab', 'Análisis Morfosintáctico'),
464
+ t.get('semantic_live_tab', 'Análisis Semántico Vivo'),
465
+ t.get('semantic_tab', 'Análisis Semántico'),
466
+ t.get('discourse_live_tab', 'Análisis de Discurso Vivo'),
467
+ t.get('discourse_tab', 'Análsis de Discurso'),
468
+ t.get('activities_tab', 'Mis Actividades'),
469
+ t.get('feedback_tab', 'Formulario de Comentarios')
470
  ]
471
 
 
 
 
 
472
  tabs = st.tabs(tab_names)
473
 
474
  # Manejar el contenido de cada tab
 
484
  break
485
  if can_switch:
486
  st.session_state.selected_tab = index
487
+
488
  if index == 0: # Situación actual
489
  st.session_state.tab_states['current_situation_active'] = True
490
  display_current_situation_interface(
491
+ st.session_state.lang_code,
492
+ st.session_state.nlp_models,
493
+ t.get('TRANSLATIONS', {})
494
  )
495
+
496
  elif index == 1: # Morfosintáctico
497
  st.session_state.tab_states['morpho_active'] = True
498
  display_morphosyntax_interface(
499
+ st.session_state.lang_code,
500
+ st.session_state.nlp_models,
501
+ t.get('TRANSLATIONS', {})
502
  )
503
+
504
 
505
  elif index == 2: # Semántico Vivo
506
  st.session_state.tab_states['semantic_live_active'] = True
507
  display_semantic_live_interface(
508
+ st.session_state.lang_code,
509
+ st.session_state.nlp_models,
510
+ t.get('TRANSLATIONS', {})
511
  )
512
+
513
  elif index == 3: # Semántico
514
  st.session_state.tab_states['semantic_active'] = True
515
  display_semantic_interface(
516
+ st.session_state.lang_code,
517
+ st.session_state.nlp_models,
518
+ t.get('TRANSLATIONS', {})
519
  )
520
+
521
  elif index == 4: # Discurso Vivo
522
  st.session_state.tab_states['discourse_live_active'] = True
523
  display_discourse_live_interface(
524
+ st.session_state.lang_code,
525
+ st.session_state.nlp_models,
526
+ t.get('TRANSLATIONS', {})
527
  )
528
 
529
+
530
  elif index == 5: # Discurso
531
  st.session_state.tab_states['discourse_active'] = True
532
  display_discourse_interface(
533
+ st.session_state.lang_code,
534
+ st.session_state.nlp_models,
535
+ t.get('TRANSLATIONS', {})
536
  )
537
+
538
  elif index == 6: # Actividades
539
  st.session_state.tab_states['activities_active'] = True
540
  display_student_activities(
541
  username=st.session_state.username,
542
  lang_code=st.session_state.lang_code,
543
+ t=t.get('ACTIVITIES_TRANSLATIONS', {})
544
  )
545
+
546
  elif index == 7: # Feedback
547
  st.session_state.tab_states['feedback_active'] = True
548
  display_feedback_form(
549
+ st.session_state.lang_code,
550
+ t
551
  )
552
+
553
  except Exception as e:
554
  # Desactivar el estado en caso de error
555
  state_key = get_state_key_for_index(index)
 
558
  logger.error(f"Error en tab {index}: {str(e)}")
559
  st.error(t.get('tab_error', 'Error al cargar esta sección'))
560
 
561
+ # Funciones auxiliares para manejar los estados de los tabs
562
+ def get_tab_index(state_key):
563
+ """Obtiene el índice del tab basado en la clave de estado"""
564
+ index_map = {
565
+ 'current_situation_active': 0,
566
+ 'morpho_active': 1,
567
+ 'semantic_live_active': 2,
568
+ 'semantic_active': 3,
569
+ 'discourse_live_active': 4,
570
+ 'discourse_active': 5,
571
+ 'activities_active': 6,
572
+ 'feedback_active': 7
573
+ }
574
+ return index_map.get(state_key, -1)
575
+
576
+ def get_state_key_for_index(index):
577
+ """Obtiene la clave de estado basada en el índice del tab"""
578
+ state_map = {
579
+ 0: 'current_situation_active',
580
+ 1: 'morpho_active',
581
+ 2: 'semantic_live_active',
582
+ 3: 'semantic_active',
583
+ 4: 'discourse_live_active',
584
+ 5: 'discourse_active',
585
+ 6: 'activities_active',
586
+ 7: 'feedback_active'
587
+ }
588
+ return state_map.get(index)
589
+
590
  # Panel de depuración (solo visible en desarrollo)
591
  if st.session_state.get('debug_mode', False):
592
  with st.expander("Debug Info"):
 
596
  st.write(f"Idioma: {st.session_state.lang_code}")
597
  st.write(f"Tab seleccionado: {st.session_state.selected_tab}")
598
  st.write(f"Última actualización de datos: {st.session_state.get('last_data_fetch', 'Nunca')}")
 
599
 
 
600
  ########################################################################
601
  def display_feedback_form(lang_code, t):
602
  logging.info(f"display_feedback_form called with lang_code: {lang_code}")