AIdeaText commited on
Commit
808928d
·
verified ·
1 Parent(s): cefa6cf

Update modules/studentact/current_situation_interface.py

Browse files
modules/studentact/current_situation_interface.py CHANGED
@@ -97,14 +97,15 @@ def display_current_situation_interface(lang_code, nlp_models, t):
97
  """
98
  TAB:
99
  - Expander con radio para tipo de texto
100
- Contenedor-1 (2 filas con borde):
101
- - Fila 1: Métricas base
102
- - Fila 2: Métricas iteración
103
  Contenedor-2 (2 columnas):
104
  - Col1: Texto base
105
  - Col2: Texto iteración
106
- Al final, Recomendaciones en un expander (una sola fila).
107
  """
 
108
  # --- Inicializar session_state ---
109
  if 'base_text' not in st.session_state:
110
  st.session_state.base_text = ""
@@ -135,42 +136,26 @@ def display_current_situation_interface(lang_code, nlp_models, t):
135
  st.markdown("---")
136
 
137
  # ---------------------------------------------------------------------
138
- # CONTENEDOR-1: Métricas (2 filas con borde)
139
  # ---------------------------------------------------------------------
140
  with st.container():
141
- # Fila 1: Métricas de la línea base
142
- st.markdown(
143
- """
144
- <div style="border:1px solid black; padding:10px; margin-bottom:10px;">
145
- <p style="font-weight:bold;">Métricas de la línea base</p>
146
- """,
147
- unsafe_allow_html=True
148
- )
149
-
150
- # Si se presionó "Analizar Base", se muestran los valores
151
- # De lo contrario, mostramos la maqueta vacía
152
- if st.session_state.show_base and st.session_state.base_metrics:
153
- display_metrics_in_one_row(st.session_state.base_metrics, text_type)
154
- else:
155
- display_empty_metrics_row()
156
-
157
- st.markdown("</div>", unsafe_allow_html=True)
158
-
159
- # Fila 2: Métricas de iteración
160
- st.markdown(
161
- """
162
- <div style="border:1px solid black; padding:10px; margin-bottom:10px;">
163
- <p style="font-weight:bold;">Métricas de la iteración</p>
164
- """,
165
- unsafe_allow_html=True
166
- )
167
 
168
- if st.session_state.show_iter and st.session_state.iter_metrics:
169
- display_metrics_in_one_row(st.session_state.iter_metrics, text_type)
170
- else:
171
- display_empty_metrics_row()
 
 
172
 
173
- st.markdown("</div>", unsafe_allow_html=True)
174
 
175
  # ---------------------------------------------------------------------
176
  # CONTENEDOR-2: 2 columnas (texto base | texto iteración)
@@ -178,13 +163,14 @@ def display_current_situation_interface(lang_code, nlp_models, t):
178
  with st.container():
179
  col_left, col_right = st.columns(2)
180
 
 
181
  with col_left:
182
  st.markdown("**Texto base**")
183
  text_base = st.text_area(
184
  label="",
185
  value=st.session_state.base_text,
186
  key="text_base_area",
187
- placeholder="Pega aquí tu texto base"
188
  )
189
  if st.button("Analizar Base"):
190
  with st.spinner("Analizando texto base..."):
@@ -197,6 +183,7 @@ def display_current_situation_interface(lang_code, nlp_models, t):
197
  # Al analizar base, reiniciamos la iteración
198
  st.session_state.show_iter = False
199
 
 
200
  with col_right:
201
  st.markdown("**Texto de iteración**")
202
  text_iter = st.text_area(
@@ -210,6 +197,7 @@ def display_current_situation_interface(lang_code, nlp_models, t):
210
  with st.spinner("Analizando iteración..."):
211
  doc = nlp_models[lang_code](text_iter)
212
  metrics = analyze_text_dimensions(doc)
 
213
  st.session_state.iter_text = text_iter
214
  st.session_state.iter_metrics = metrics
215
  st.session_state.show_iter = True
@@ -217,7 +205,6 @@ def display_current_situation_interface(lang_code, nlp_models, t):
217
  # ---------------------------------------------------------------------
218
  # Recomendaciones al final en un expander (una sola “fila”)
219
  # ---------------------------------------------------------------------
220
- # Solo mostramos si tenemos iteración
221
  if st.session_state.show_iter:
222
  with st.expander("Recomendaciones", expanded=False):
223
  reco_list = []
@@ -225,30 +212,35 @@ def display_current_situation_interface(lang_code, nlp_models, t):
225
  score = values['normalized_score']
226
  target = TEXT_TYPES[text_type]['thresholds'][dimension]['target']
227
  if score < target:
228
- suggestions = get_dimension_suggestions(dimension) # Ejemplo
 
229
  reco_list.extend(suggestions)
230
 
231
  if reco_list:
232
- # Todas en una sola línea, separadas por " | "
233
  st.write(" | ".join(reco_list))
234
  else:
235
  st.info("¡No hay recomendaciones! Todas las métricas superan la meta.")
236
 
237
 
238
 
 
 
 
 
239
  #Funciones de visualización ##################################
240
- ##############################################################################
241
- # Función para mostrar métricas en una sola fila
242
- ##############################################################################
 
243
  def display_metrics_in_one_row(metrics, text_type):
244
  """
245
  Muestra las cuatro dimensiones (Vocabulario, Estructura, Cohesión, Claridad)
246
- en una sola línea, usando 4 columnas.
247
  """
248
  thresholds = TEXT_TYPES[text_type]['thresholds']
249
  dimensions = ["vocabulary", "structure", "cohesion", "clarity"]
250
 
251
- # Forzamos ancho uniforme de columnas con: st.columns([1,1,1,1])
252
  col1, col2, col3, col4 = st.columns([1,1,1,1])
253
  cols = [col1, col2, col3, col4]
254
 
@@ -257,7 +249,6 @@ def display_metrics_in_one_row(metrics, text_type):
257
  target = thresholds[dim]['target']
258
  min_val = thresholds[dim]['min']
259
 
260
- # Determinar estado y color
261
  if score < min_val:
262
  status = "⚠️ Por mejorar"
263
  color = "inverse"
@@ -299,6 +290,7 @@ def display_empty_metrics_row():
299
  )
300
 
301
 
 
302
  ####################################################################
303
 
304
  def display_metrics_analysis(metrics, text_type=None):
@@ -551,16 +543,24 @@ def display_radar_chart(metrics_config, thresholds, baseline_metrics=None):
551
  st.error("Error al mostrar el gráfico")
552
 
553
  #Funciones auxiliares ##################################
554
- def suggest_improvement_tools(dimension):
555
- """Sugiere herramientas basadas en la dimensión"""
 
 
 
 
 
 
 
 
556
  suggestions = []
557
  for analysis, mapping in ANALYSIS_DIMENSION_MAPPING.items():
558
- if dimension in mapping['primary']:
 
559
  suggestions.extend(mapping['tools'])
560
-
561
- st.info(f"Herramientas sugeridas para mejorar {dimension}:")
562
- for tool in suggestions:
563
- st.write(f"- {tool}")
564
 
565
  def prepare_metrics_config(metrics, text_type='student_essay'):
566
  """
 
97
  """
98
  TAB:
99
  - Expander con radio para tipo de texto
100
+ Contenedor-1 con expanders:
101
+ - Expander "Métricas de la línea base"
102
+ - Expander "Métricas de la iteración"
103
  Contenedor-2 (2 columnas):
104
  - Col1: Texto base
105
  - Col2: Texto iteración
106
+ Al final, Recomendaciones en un expander (una sola fila).
107
  """
108
+
109
  # --- Inicializar session_state ---
110
  if 'base_text' not in st.session_state:
111
  st.session_state.base_text = ""
 
136
  st.markdown("---")
137
 
138
  # ---------------------------------------------------------------------
139
+ # CONTENEDOR-1: Expanders para métricas base e iteración
140
  # ---------------------------------------------------------------------
141
  with st.container():
142
+ # --- Expander para la línea base ---
143
+ with st.expander("Métricas de la línea base", expanded=False):
144
+ if st.session_state.show_base and st.session_state.base_metrics:
145
+ # Mostramos los valores reales
146
+ display_metrics_in_one_row(st.session_state.base_metrics, text_type)
147
+ else:
148
+ # Mostramos la maqueta vacía
149
+ display_empty_metrics_row()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
 
151
+ # --- Expander para la iteración ---
152
+ with st.expander("Métricas de la iteración", expanded=False):
153
+ if st.session_state.show_iter and st.session_state.iter_metrics:
154
+ display_metrics_in_one_row(st.session_state.iter_metrics, text_type)
155
+ else:
156
+ display_empty_metrics_row()
157
 
158
+ st.markdown("---")
159
 
160
  # ---------------------------------------------------------------------
161
  # CONTENEDOR-2: 2 columnas (texto base | texto iteración)
 
163
  with st.container():
164
  col_left, col_right = st.columns(2)
165
 
166
+ # Columna izquierda: Texto base
167
  with col_left:
168
  st.markdown("**Texto base**")
169
  text_base = st.text_area(
170
  label="",
171
  value=st.session_state.base_text,
172
  key="text_base_area",
173
+ placeholder="Pega aquí tu texto base",
174
  )
175
  if st.button("Analizar Base"):
176
  with st.spinner("Analizando texto base..."):
 
183
  # Al analizar base, reiniciamos la iteración
184
  st.session_state.show_iter = False
185
 
186
+ # Columna derecha: Texto iteración
187
  with col_right:
188
  st.markdown("**Texto de iteración**")
189
  text_iter = st.text_area(
 
197
  with st.spinner("Analizando iteración..."):
198
  doc = nlp_models[lang_code](text_iter)
199
  metrics = analyze_text_dimensions(doc)
200
+
201
  st.session_state.iter_text = text_iter
202
  st.session_state.iter_metrics = metrics
203
  st.session_state.show_iter = True
 
205
  # ---------------------------------------------------------------------
206
  # Recomendaciones al final en un expander (una sola “fila”)
207
  # ---------------------------------------------------------------------
 
208
  if st.session_state.show_iter:
209
  with st.expander("Recomendaciones", expanded=False):
210
  reco_list = []
 
212
  score = values['normalized_score']
213
  target = TEXT_TYPES[text_type]['thresholds'][dimension]['target']
214
  if score < target:
215
+ # Aquí, en lugar de get_dimension_suggestions, unificamos con:
216
+ suggestions = suggest_improvement_tools_list(dimension)
217
  reco_list.extend(suggestions)
218
 
219
  if reco_list:
220
+ # Todas en una sola línea
221
  st.write(" | ".join(reco_list))
222
  else:
223
  st.info("¡No hay recomendaciones! Todas las métricas superan la meta.")
224
 
225
 
226
 
227
+
228
+
229
+
230
+
231
  #Funciones de visualización ##################################
232
+ ############################################################
233
+ # Funciones de visualización para las métricas
234
+ ############################################################
235
+
236
  def display_metrics_in_one_row(metrics, text_type):
237
  """
238
  Muestra las cuatro dimensiones (Vocabulario, Estructura, Cohesión, Claridad)
239
+ en una sola línea, usando 4 columnas con ancho uniforme.
240
  """
241
  thresholds = TEXT_TYPES[text_type]['thresholds']
242
  dimensions = ["vocabulary", "structure", "cohesion", "clarity"]
243
 
 
244
  col1, col2, col3, col4 = st.columns([1,1,1,1])
245
  cols = [col1, col2, col3, col4]
246
 
 
249
  target = thresholds[dim]['target']
250
  min_val = thresholds[dim]['min']
251
 
 
252
  if score < min_val:
253
  status = "⚠️ Por mejorar"
254
  color = "inverse"
 
290
  )
291
 
292
 
293
+
294
  ####################################################################
295
 
296
  def display_metrics_analysis(metrics, text_type=None):
 
543
  st.error("Error al mostrar el gráfico")
544
 
545
  #Funciones auxiliares ##################################
546
+
547
+
548
+ ############################################################
549
+ # Unificamos la lógica de sugerencias en una función
550
+ ############################################################
551
+ def suggest_improvement_tools_list(dimension):
552
+ """
553
+ Retorna en forma de lista las herramientas sugeridas
554
+ basadas en 'ANALYSIS_DIMENSION_MAPPING'.
555
+ """
556
  suggestions = []
557
  for analysis, mapping in ANALYSIS_DIMENSION_MAPPING.items():
558
+ # Verificamos si la dimensión está en primary o secondary
559
+ if dimension in mapping['primary'] or dimension in mapping['secondary']:
560
  suggestions.extend(mapping['tools'])
561
+ # Si no hay nada, al menos retornamos un placeholder
562
+ return suggestions if suggestions else ["Sin sugerencias específicas."]
563
+
 
564
 
565
  def prepare_metrics_config(metrics, text_type='student_essay'):
566
  """