JairoCesar commited on
Commit
5d020d5
·
verified ·
1 Parent(s): 689be8e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -33
app.py CHANGED
@@ -1068,13 +1068,13 @@ if st.session_state.search_results is not None:
1068
  if not results:
1069
  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.")
1070
  else:
1071
- # --- PASO 1: GENERAR TODO EL CONTENIDO DEL INFORME EN LA MEMORIA ---
1072
  best_match_data = results[0]
1073
  best_match = best_match_data['entry']
1074
 
1075
- # Generar análisis detallado con IA (la parte más lenta) y guardarlo en caché
1076
  if 'best_match_analysis' not in st.session_state.analysis_cache:
1077
- with st.spinner("✍️ Generando análisis personalizado con IA..."):
1078
  try:
1079
  analysis_text = generate_detailed_analysis(st.session_state.user_query, best_match)
1080
  st.session_state.analysis_cache['best_match_analysis'] = analysis_text
@@ -1082,7 +1082,6 @@ if st.session_state.search_results is not None:
1082
  logger.error(f"Falló la generación del análisis detallado principal: {e}")
1083
  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."
1084
 
1085
- # Recuperar o usar el texto ya generado
1086
  ai_analysis_text = st.session_state.analysis_cache['best_match_analysis']
1087
 
1088
  # Generar los otros componentes de texto para el informe
@@ -1093,40 +1092,30 @@ if st.session_state.search_results is not None:
1093
  # Unir todo en un solo string para el informe de Word
1094
  complete_report_string = f"{base_report_text}\n\n{ai_analysis_text}\n{neuro_report_text}\n{molecular_report_text}"
1095
 
1096
- # Generar el archivo de Word en memoria con todo el contenido
1097
  word_file_buffer = generate_word_report(complete_report_string)
1098
 
1099
- # --- PASO 2: CONSTRUIR LA INTERFAZ DE USUARIO USANDO EL CONTENIDO PRE-GENERADO ---
1100
  col1, col2 = st.columns([3,1])
1101
  with col1:
1102
  st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
1103
-
1104
- with col2:
1105
- # Botón de descarga único con mensaje informativo
1106
- if st.button("📄 Descargar Informe (Word)", help="La generación del informe puede tomar algunos segundos."):
1107
- with st.spinner("Generando su informe personalizado, por favor espere..."):
1108
- # Generar todo el contenido del informe en el momento
1109
- ai_analysis_text = st.session_state.analysis_cache.get('best_match_analysis', "Análisis con IA no generado.")
1110
- base_report_text = generate_report_text(st.session_state.user_query, results)
1111
- neuro_report_text = generate_neuro_report_text(st.session_state.entities, FOOD_TO_COMPOUND_MAP, INTEGRATED_NEURO_FOOD_MAP)
1112
- 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)
1113
-
1114
- complete_report_string = f"{base_report_text}\n\n{ai_analysis_text}\n{neuro_report_text}\n{molecular_report_text}"
1115
-
1116
- word_file_buffer = generate_word_report(complete_report_string)
1117
-
1118
- # Preparar el botón de descarga oculto para que Streamlit lo muestre al finalizar el spinner
1119
- if word_file_buffer:
1120
- st.download_button(
1121
- label="Descarga lista", # Esta etiqueta no será visible para el usuario
1122
- data=word_file_buffer,
1123
- file_name=f"Informe_Detective_Alimentos_{datetime.now().strftime('%Y%m%d')}.docx",
1124
- mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1125
- key="download_word_report_final"
1126
- )
1127
 
1128
  with st.expander(f"**Análisis Detallado de la Principal Coincidencia: {best_match.get('condicion_asociada')}**", expanded=True):
1129
  col1_expander, col2_expander = st.columns([3, 1])
 
1130
  with col1_expander:
1131
  st.markdown("##### Desglose de la Puntuación de Relevancia:")
1132
  score_col1, score_col2, score_col3 = st.columns(3)
@@ -1136,16 +1125,13 @@ if st.session_state.search_results is not None:
1136
 
1137
  with col2_expander:
1138
  with st.popover("🔬 Componentes Moleculares"):
1139
- # Muestra el texto del informe molecular que ya generamos
1140
  st.markdown(molecular_report_text.replace("=", ""))
1141
 
1142
  st.markdown("---")
1143
  with st.container(border=True):
1144
- # Muestra el texto del informe neuropsicológico que ya generamos
1145
  st.markdown(neuro_report_text.replace("=", ""))
1146
 
1147
  st.markdown("---")
1148
- # Muestra el análisis detallado con IA que ya generamos
1149
  st.markdown(ai_analysis_text)
1150
 
1151
  if len(results) > 1:
 
1068
  if not results:
1069
  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.")
1070
  else:
1071
+ # --- PASO 1: DEFINIR EL DIAGNÓSTICO PRINCIPAL Y GENERAR TODO EL CONTENIDO ---
1072
  best_match_data = results[0]
1073
  best_match = best_match_data['entry']
1074
 
1075
+ # Generar análisis de IA (la parte más lenta) y guardarlo en caché
1076
  if 'best_match_analysis' not in st.session_state.analysis_cache:
1077
+ with st.spinner("✍️ Generando análisis personalizado con IA... (esto puede tardar un momento)"):
1078
  try:
1079
  analysis_text = generate_detailed_analysis(st.session_state.user_query, best_match)
1080
  st.session_state.analysis_cache['best_match_analysis'] = analysis_text
 
1082
  logger.error(f"Falló la generación del análisis detallado principal: {e}")
1083
  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."
1084
 
 
1085
  ai_analysis_text = st.session_state.analysis_cache['best_match_analysis']
1086
 
1087
  # Generar los otros componentes de texto para el informe
 
1092
  # Unir todo en un solo string para el informe de Word
1093
  complete_report_string = f"{base_report_text}\n\n{ai_analysis_text}\n{neuro_report_text}\n{molecular_report_text}"
1094
 
1095
+ # Generar el archivo de Word en memoria
1096
  word_file_buffer = generate_word_report(complete_report_string)
1097
 
1098
+ # --- PASO 2: CONSTRUIR LA INTERFAZ DE USUARIO CON EL CONTENIDO YA GENERADO ---
1099
  col1, col2 = st.columns([3,1])
1100
  with col1:
1101
  st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
1102
+ with col2:
1103
+ if word_file_buffer:
1104
+ st.download_button(
1105
+ label="📄 Descargar Informe (Word)",
1106
+ data=word_file_buffer,
1107
+ file_name=f"Informe_Detective_Alimentos_{datetime.now().strftime('%Y%m%d')}.docx",
1108
+ mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
1109
+ key="download_word_report",
1110
+ help="Genera y descarga un informe completo en formato Word con todos los análisis."
1111
+ )
1112
+
1113
+ st.subheader("Análisis de Relevancia de las Coincidencias")
1114
+ st.altair_chart(create_relevance_chart(results), use_container_width=True)
 
 
 
 
 
 
 
 
 
 
 
1115
 
1116
  with st.expander(f"**Análisis Detallado de la Principal Coincidencia: {best_match.get('condicion_asociada')}**", expanded=True):
1117
  col1_expander, col2_expander = st.columns([3, 1])
1118
+
1119
  with col1_expander:
1120
  st.markdown("##### Desglose de la Puntuación de Relevancia:")
1121
  score_col1, score_col2, score_col3 = st.columns(3)
 
1125
 
1126
  with col2_expander:
1127
  with st.popover("🔬 Componentes Moleculares"):
 
1128
  st.markdown(molecular_report_text.replace("=", ""))
1129
 
1130
  st.markdown("---")
1131
  with st.container(border=True):
 
1132
  st.markdown(neuro_report_text.replace("=", ""))
1133
 
1134
  st.markdown("---")
 
1135
  st.markdown(ai_analysis_text)
1136
 
1137
  if len(results) > 1: