Spaces:
Running
Running
Update app.py
Browse files
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:
|
| 1072 |
best_match_data = results[0]
|
| 1073 |
best_match = best_match_data['entry']
|
| 1074 |
|
| 1075 |
-
# Generar análisis
|
| 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
|
| 1097 |
word_file_buffer = generate_word_report(complete_report_string)
|
| 1098 |
|
| 1099 |
-
# --- PASO 2: CONSTRUIR LA INTERFAZ DE USUARIO
|
| 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 |
-
|
| 1105 |
-
|
| 1106 |
-
|
| 1107 |
-
|
| 1108 |
-
|
| 1109 |
-
|
| 1110 |
-
|
| 1111 |
-
|
| 1112 |
-
|
| 1113 |
-
|
| 1114 |
-
|
| 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:
|