Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -585,6 +585,24 @@ if st.session_state.start_analysis:
|
|
| 585 |
if st.session_state.search_results is not None:
|
| 586 |
results = st.session_state.search_results
|
| 587 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 588 |
if not results:
|
| 589 |
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.")
|
| 590 |
else:
|
|
@@ -612,7 +630,7 @@ if st.session_state.search_results is not None:
|
|
| 612 |
score_col2.metric("Puntos por Síntomas", f"{best_match_data['score']['symptoms']}")
|
| 613 |
score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
|
| 614 |
|
| 615 |
-
# Contenido de la segunda columna
|
| 616 |
with col2:
|
| 617 |
st.write("") # Para alinear verticalmente el popover
|
| 618 |
if foodb_index:
|
|
@@ -647,8 +665,34 @@ if st.session_state.search_results is not None:
|
|
| 647 |
if not found_data:
|
| 648 |
st.warning("No se encontraron datos moleculares para los alimentos mencionados.")
|
| 649 |
|
| 650 |
-
# El separador y el spinner van DESPUÉS de las columnas, pero DENTRO del expander
|
| 651 |
st.markdown("---")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 652 |
with st.spinner("✍️ Generando un análisis personalizado con IA..."):
|
| 653 |
if 'best_match_analysis' not in st.session_state.analysis_cache:
|
| 654 |
try:
|
|
@@ -659,7 +703,6 @@ if st.session_state.search_results is not None:
|
|
| 659 |
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. Por favor, intenta de nuevo más tarde."
|
| 660 |
st.markdown(st.session_state.analysis_cache['best_match_analysis'])
|
| 661 |
|
| 662 |
-
# El expander de "Otras posibilidades" va DESPUÉS del expander principal
|
| 663 |
if len(results) > 1:
|
| 664 |
with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):
|
| 665 |
for i, result in enumerate(results[1:5]):
|
|
|
|
| 585 |
if st.session_state.search_results is not None:
|
| 586 |
results = st.session_state.search_results
|
| 587 |
|
| 588 |
+
if not results:
|
| 589 |
+
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.")
|
| 590 |
+
else:
|
| 591 |
+
col1, col2 = st.columns([3,1])
|
| 592 |
+
with col1:
|
| 593 |
+
st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
|
| 594 |
+
with col2:
|
| 595 |
+
report_data = generate_report_text(st.session_state.user_query, results)
|
| 596 |
+
st.download_button(label="📄 Descargar Informe", data=report_data, file_name=f"informe_detective_{datetime.now().strftime('%Y%m%d')}.txt", mime="text/plain")
|
| 597 |
+
|
| 598 |
+
st.subheader("Análisis de Relevancia de las Coincidencias")
|
| 599 |
+
st.altair_chart(create_relevance_chart(results), use_container_width=True)
|
| 600 |
+
|
| 601 |
+
best_match_data = results[0]
|
| 602 |
+
best_match = best_match_data['entry']
|
| 603 |
+
if st.session_state.search_results is not None:
|
| 604 |
+
results = st.session_state.search_results
|
| 605 |
+
|
| 606 |
if not results:
|
| 607 |
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.")
|
| 608 |
else:
|
|
|
|
| 630 |
score_col2.metric("Puntos por Síntomas", f"{best_match_data['score']['symptoms']}")
|
| 631 |
score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
|
| 632 |
|
| 633 |
+
# Contenido de la segunda columna con el popover de FoodB
|
| 634 |
with col2:
|
| 635 |
st.write("") # Para alinear verticalmente el popover
|
| 636 |
if foodb_index:
|
|
|
|
| 665 |
if not found_data:
|
| 666 |
st.warning("No se encontraron datos moleculares para los alimentos mencionados.")
|
| 667 |
|
|
|
|
| 668 |
st.markdown("---")
|
| 669 |
+
|
| 670 |
+
# --- NUEVA SECCIÓN INTEGRADA ---
|
| 671 |
+
with st.container(border=True):
|
| 672 |
+
st.markdown("##### 🧠 Posibles Efectos Neuropsicológicos de los Componentes")
|
| 673 |
+
|
| 674 |
+
user_foods = st.session_state.entities.get("alimentos", [])
|
| 675 |
+
relevant_compounds = set()
|
| 676 |
+
if user_foods:
|
| 677 |
+
for food in user_foods:
|
| 678 |
+
if food in FOOD_TO_COMPOUND_MAP:
|
| 679 |
+
relevant_compounds.update(FOOD_TO_COMPOUND_MAP[food])
|
| 680 |
+
|
| 681 |
+
found_neuro_effect = False
|
| 682 |
+
if relevant_compounds:
|
| 683 |
+
for compound in sorted(list(relevant_compounds)): # Ordenar para consistencia
|
| 684 |
+
if compound in INTEGRATED_NEURO_FOOD_MAP:
|
| 685 |
+
found_neuro_effect = True
|
| 686 |
+
effect_info = INTEGRATED_NEURO_FOOD_MAP[compound]
|
| 687 |
+
with st.container(border=True):
|
| 688 |
+
st.subheader(f"Componente: {compound.capitalize()}")
|
| 689 |
+
st.markdown(f"**Efecto:** {effect_info['efecto_neuropsicologico']}")
|
| 690 |
+
|
| 691 |
+
if not found_neuro_effect:
|
| 692 |
+
st.info("No se encontraron efectos neuropsicológicos específicos en la base de datos para los componentes de los alimentos mencionados.")
|
| 693 |
+
|
| 694 |
+
st.markdown("---")
|
| 695 |
+
|
| 696 |
with st.spinner("✍️ Generando un análisis personalizado con IA..."):
|
| 697 |
if 'best_match_analysis' not in st.session_state.analysis_cache:
|
| 698 |
try:
|
|
|
|
| 703 |
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. Por favor, intenta de nuevo más tarde."
|
| 704 |
st.markdown(st.session_state.analysis_cache['best_match_analysis'])
|
| 705 |
|
|
|
|
| 706 |
if len(results) > 1:
|
| 707 |
with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):
|
| 708 |
for i, result in enumerate(results[1:5]):
|