JairoCesar commited on
Commit
559c276
·
verified ·
1 Parent(s): 9d4ea9e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -20
app.py CHANGED
@@ -1067,38 +1067,33 @@ if st.session_state.search_results is not None:
1067
  if not results:
1068
  st.warning(f"No se encontraron coincidencias claras para tu caso: '{st.session_state.user_query}'. Prueba a describir los síntomas de otra manera.")
1069
  else:
1070
- # Definimos las columnas
 
 
 
 
1071
  col1, col2 = st.columns([3,1])
1072
-
1073
- # Contenido de la primera columna
1074
  with col1:
1075
  st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
1076
 
1077
- # --- BLOQUE CORREGIDO: TODO LO SIGUIENTE ESTÁ AHORA DENTRO DE 'with col2:' ---
1078
  with col2:
1079
- # Inicializar el estado si no existe
1080
  if 'report_generated' not in st.session_state:
1081
  st.session_state.report_generated = False
1082
  st.session_state.word_file_buffer = None
1083
 
1084
- # Botón para iniciar la generación del informe
1085
  if st.button("📄 Preparar Informe (Word)", key="prepare_report"):
1086
  with st.spinner("Generando su informe personalizado, por favor espere..."):
1087
- # Generar todo el contenido del informe
1088
- ai_analysis_text = st.session_state.analysis_cache.get('best_match_analysis', "Análisis no disponible.")
1089
  base_report_text = generate_report_text(st.session_state.user_query, results)
1090
  neuro_report_text = generate_neuro_report_text(st.session_state.entities, FOOD_TO_COMPOUND_MAP, INTEGRATED_NEURO_FOOD_MAP)
1091
  molecular_report_text = generate_molecular_report_text(best_match, st.session_state.entities, foodb_index, FOOD_NAME_TO_FOODB_KEY, COMPOUND_SYNONYM_MAP, KNOWN_TRIGGERS_MAP)
1092
 
1093
  complete_report_string = f"{base_report_text}\n\n{ai_analysis_text}\n{neuro_report_text}\n{molecular_report_text}"
1094
 
1095
- # Guardar el buffer del archivo de Word en el estado de la sesión
1096
  st.session_state.word_file_buffer = generate_word_report(complete_report_string)
1097
  st.session_state.report_generated = True
1098
- # Forzar una re-ejecución para mostrar el botón de descarga inmediatamente
1099
  st.rerun()
1100
 
1101
- # Si el informe ya se generó, mostrar el botón de descarga
1102
  if st.session_state.report_generated and st.session_state.word_file_buffer:
1103
  st.download_button(
1104
  label="✅ Descargar Informe Ahora",
@@ -1107,15 +1102,14 @@ if st.session_state.search_results is not None:
1107
  mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1108
  key="download_word_report"
1109
  )
1110
- # Opcional: Mostrar un mensaje de éxito
1111
  st.success("¡Su informe está listo!")
1112
 
1113
- # El resto del código de visualización, correctamente alineado
1114
  st.subheader("Análisis de Relevancia de las Coincidencias")
1115
  st.altair_chart(create_relevance_chart(results), use_container_width=True)
1116
 
1117
  with st.expander(f"**Análisis Detallado de la Principal Coincidencia: {best_match.get('condicion_asociada')}**", expanded=True):
1118
  col1_expander, col2_expander = st.columns([3, 1])
 
1119
  with col1_expander:
1120
  st.markdown("##### Desglose de la Puntuación de Relevancia:")
1121
  score_col1, score_col2, score_col3 = st.columns(3)
@@ -1124,18 +1118,27 @@ if st.session_state.search_results is not None:
1124
  score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
1125
 
1126
  with col2_expander:
1127
- with st.popover("🔬 Componentes Moleculares"):
1128
- # Muestra el texto del informe molecular que ya generamos
1129
- st.markdown(molecular_report_text.replace("=", ""))
1130
 
1131
  st.markdown("---")
1132
  with st.container(border=True):
1133
- # Muestra el texto del informe neuropsicológico que ya generamos
1134
- st.markdown(neuro_report_text.replace("=", ""))
1135
 
1136
  st.markdown("---")
1137
- # Muestra el análisis detallado con IA que ya generamos
1138
- st.markdown(ai_analysis_text)
 
 
 
 
 
 
 
 
 
1139
 
1140
  if len(results) > 1:
1141
  with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):
 
1067
  if not results:
1068
  st.warning(f"No se encontraron coincidencias claras para tu caso: '{st.session_state.user_query}'. Prueba a describir los síntomas de otra manera.")
1069
  else:
1070
+ # --- CORRECCIÓN APLICADA: Definir best_match y best_match_data al principio ---
1071
+ best_match_data = results[0]
1072
+ best_match = best_match_data['entry']
1073
+
1074
+ # Ahora el resto del código puede usar 'best_match' y 'best_match_data' sin problemas
1075
  col1, col2 = st.columns([3,1])
 
 
1076
  with col1:
1077
  st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
1078
 
 
1079
  with col2:
 
1080
  if 'report_generated' not in st.session_state:
1081
  st.session_state.report_generated = False
1082
  st.session_state.word_file_buffer = None
1083
 
 
1084
  if st.button("📄 Preparar Informe (Word)", key="prepare_report"):
1085
  with st.spinner("Generando su informe personalizado, por favor espere..."):
1086
+ ai_analysis_text = st.session_state.analysis_cache.get('best_match_analysis', "Análisis con IA no generado.")
 
1087
  base_report_text = generate_report_text(st.session_state.user_query, results)
1088
  neuro_report_text = generate_neuro_report_text(st.session_state.entities, FOOD_TO_COMPOUND_MAP, INTEGRATED_NEURO_FOOD_MAP)
1089
  molecular_report_text = generate_molecular_report_text(best_match, st.session_state.entities, foodb_index, FOOD_NAME_TO_FOODB_KEY, COMPOUND_SYNONYM_MAP, KNOWN_TRIGGERS_MAP)
1090
 
1091
  complete_report_string = f"{base_report_text}\n\n{ai_analysis_text}\n{neuro_report_text}\n{molecular_report_text}"
1092
 
 
1093
  st.session_state.word_file_buffer = generate_word_report(complete_report_string)
1094
  st.session_state.report_generated = True
 
1095
  st.rerun()
1096
 
 
1097
  if st.session_state.report_generated and st.session_state.word_file_buffer:
1098
  st.download_button(
1099
  label="✅ Descargar Informe Ahora",
 
1102
  mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1103
  key="download_word_report"
1104
  )
 
1105
  st.success("¡Su informe está listo!")
1106
 
 
1107
  st.subheader("Análisis de Relevancia de las Coincidencias")
1108
  st.altair_chart(create_relevance_chart(results), use_container_width=True)
1109
 
1110
  with st.expander(f"**Análisis Detallado de la Principal Coincidencia: {best_match.get('condicion_asociada')}**", expanded=True):
1111
  col1_expander, col2_expander = st.columns([3, 1])
1112
+
1113
  with col1_expander:
1114
  st.markdown("##### Desglose de la Puntuación de Relevancia:")
1115
  score_col1, score_col2, score_col3 = st.columns(3)
 
1118
  score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
1119
 
1120
  with col2_expander:
1121
+ with st.popover("🔬 Componentes Moleculares del Diagnóstico"):
1122
+ molecular_report_text_display = generate_molecular_report_text(best_match, st.session_state.entities, foodb_index, FOOD_NAME_TO_FOODB_KEY, COMPOUND_SYNONYM_MAP, KNOWN_TRIGGERS_MAP)
1123
+ st.markdown(molecular_report_text_display.replace("=", ""))
1124
 
1125
  st.markdown("---")
1126
  with st.container(border=True):
1127
+ neuro_report_text_display = generate_neuro_report_text(st.session_state.entities, FOOD_TO_COMPOUND_MAP, INTEGRATED_NEURO_FOOD_MAP)
1128
+ st.markdown(neuro_report_text_display.replace("=", ""))
1129
 
1130
  st.markdown("---")
1131
+
1132
+ if 'best_match_analysis' not in st.session_state.analysis_cache:
1133
+ with st.spinner("✍️ Generando análisis personalizado con IA..."):
1134
+ try:
1135
+ analysis_text = generate_detailed_analysis(st.session_state.user_query, best_match)
1136
+ st.session_state.analysis_cache['best_match_analysis'] = analysis_text
1137
+ except Exception as e:
1138
+ logger.error(f"Falló la generación del análisis detallado principal: {e}")
1139
+ st.session_state.analysis_cache['best_match_analysis'] = "❌ Lo sentimos, no se pudo generar el análisis detallado en este momento debido a un problema con la IA."
1140
+
1141
+ st.markdown(st.session_state.analysis_cache.get('best_match_analysis', "Cargando análisis..."))
1142
 
1143
  if len(results) > 1:
1144
  with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):