JairoCesar commited on
Commit
9996bda
·
verified ·
1 Parent(s): 9543761

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +42 -47
app.py CHANGED
@@ -492,7 +492,6 @@ if st.session_state.start_analysis:
492
  else:
493
  st.error("No se pudieron identificar alimentos o síntomas claros en tu descripción. Intenta ser más específico.")
494
  st.session_state.search_results = []
495
-
496
  if st.session_state.search_results is not None:
497
  results = st.session_state.search_results
498
 
@@ -500,7 +499,8 @@ if st.session_state.search_results is not None:
500
  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.")
501
  else:
502
  col1, col2 = st.columns([3,1])
503
- with col1: st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
 
504
  with col2:
505
  report_data = generate_report_text(st.session_state.user_query, results)
506
  st.download_button(label="📄 Descargar Informe", data=report_data, file_name=f"informe_detective_{datetime.now().strftime('%Y%m%d')}.txt", mime="text/plain")
@@ -511,14 +511,19 @@ if st.session_state.search_results is not None:
511
  best_match_data = results[0]
512
  best_match = best_match_data['entry']
513
  with st.expander(f"**Análisis Detallado de la Principal Coincidencia: {best_match.get('condicion_asociada')}**", expanded=True):
 
514
  col1, col2 = st.columns([3, 1])
 
 
515
  with col1:
516
  st.markdown("##### Desglose de la Puntuación de Relevancia:")
517
  score_col1, score_col2, score_col3 = st.columns(3)
518
  score_col1.metric("Puntos por Alimento(s)", f"{best_match_data['score']['food']}")
519
  score_col2.metric("Puntos por Síntomas", f"{best_match_data['score']['symptoms']}")
520
  score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
521
- with col2:
 
 
522
  st.write("") # Para alinear verticalmente el popover
523
  if foodb_index:
524
  with st.popover("🔬 Componentes moleculares"):
@@ -531,15 +536,12 @@ with col2:
531
  found_data = False
532
  displayed_foodb_keys = set()
533
 
534
- # Iterar sobre los alimentos que el usuario mencionó
535
  for alimento_es in user_foods_mentioned:
536
  search_terms_en = []
537
- # Traducir de español a inglés usando el diccionario
538
  for key_es, value_en_list in FOOD_NAME_TO_FOODB_KEY.items():
539
  if key_es in alimento_es.lower():
540
  search_terms_en.extend(value_en_list)
541
 
542
- # Buscar los términos en inglés en el índice de FoodB
543
  for term in set(search_terms_en):
544
  for foodb_key, foodb_data in foodb_index.items():
545
  if term in foodb_key and foodb_key not in displayed_foodb_keys:
@@ -547,7 +549,6 @@ with col2:
547
  displayed_foodb_keys.add(foodb_key)
548
  with st.container(border=True):
549
  st.subheader(f"Análisis de: {foodb_key.capitalize()}")
550
- # Mostrar los 3 compuestos más relevantes
551
  for item in foodb_data[:3]:
552
  st.write(f"**Compuesto:** {item['compound']}")
553
  st.write(f"**Efectos reportados:** {', '.join(item['effects'])}")
@@ -555,10 +556,8 @@ with col2:
555
 
556
  if not found_data:
557
  st.warning("No se encontraron datos moleculares para los alimentos mencionados.")
558
- if foodb_index:
559
- with st.popover("🔬 Componentes moleculares"):
560
- st.info("Información de la base de datos FoodB (en inglés).")
561
 
 
562
  st.markdown("---")
563
  with st.spinner("✍️ Generando un análisis personalizado con IA..."):
564
  if 'best_match_analysis' not in st.session_state.analysis_cache:
@@ -570,40 +569,36 @@ with col2:
570
  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."
571
  st.markdown(st.session_state.analysis_cache['best_match_analysis'])
572
 
573
- if len(results) > 1:
574
- with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):
575
- for i, result in enumerate(results[1:5]):
576
- with st.container(border=True):
577
- entry = result['entry']
578
- score = result['score']
579
-
580
- # Muestra la información de la condición
581
- st.subheader(f"{i+2}. {entry.get('condicion_asociada')}")
582
- col_info, col_action = st.columns([3, 1])
583
-
584
- with col_info:
585
- if result.get('matched_symptoms'):
586
- st.markdown(f"**Pistas Clave (Síntomas Coincidentes):** {', '.join(result['matched_symptoms']).capitalize()}")
587
- st.markdown(f"**Alimentos Típicos Asociados:** {entry.get('compuesto_alimento')}")
588
-
589
- # Muestra la métrica y el botón de acción
590
- with col_action:
591
- st.metric("Relevancia", score['total'])
592
- analysis_key = f"analysis_{i+2}"
593
-
594
- # Lógica para manejar el clic del botón
595
- if st.button("Generar análisis", key=analysis_key, help=f"Generar análisis de IA para {entry.get('condicion_asociada')}"):
596
- with st.spinner(f"Generando análisis para {entry.get('condicion_asociada')}..."):
597
- try:
598
- analysis_text = generate_detailed_analysis(st.session_state.user_query, entry)
599
- st.session_state.analysis_cache[analysis_key] = analysis_text
600
- except Exception as e:
601
- st.session_state.analysis_cache[analysis_key] = f"❌ Error al generar análisis para {entry.get('condicion_asociada')}."
602
-
603
- # Lógica para mostrar el resultado guardado
604
- if analysis_key in st.session_state.analysis_cache:
605
- st.info(st.session_state.analysis_cache[analysis_key])
606
-
607
- # Añade un separador visual entre las entradas
608
- if i < len(results[1:5]) - 1:
609
- st.markdown("---")
 
492
  else:
493
  st.error("No se pudieron identificar alimentos o síntomas claros en tu descripción. Intenta ser más específico.")
494
  st.session_state.search_results = []
 
495
  if st.session_state.search_results is not None:
496
  results = st.session_state.search_results
497
 
 
499
  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.")
500
  else:
501
  col1, col2 = st.columns([3,1])
502
+ with col1:
503
+ st.success(f"Hemos encontrado {len(results)} posible(s) causa(s) relacionada(s) con tu caso.")
504
  with col2:
505
  report_data = generate_report_text(st.session_state.user_query, results)
506
  st.download_button(label="📄 Descargar Informe", data=report_data, file_name=f"informe_detective_{datetime.now().strftime('%Y%m%d')}.txt", mime="text/plain")
 
511
  best_match_data = results[0]
512
  best_match = best_match_data['entry']
513
  with st.expander(f"**Análisis Detallado de la Principal Coincidencia: {best_match.get('condicion_asociada')}**", expanded=True):
514
+ # Las columnas se crean DENTRO del expander
515
  col1, col2 = st.columns([3, 1])
516
+
517
+ # Contenido de la primera columna
518
  with col1:
519
  st.markdown("##### Desglose de la Puntuación de Relevancia:")
520
  score_col1, score_col2, score_col3 = st.columns(3)
521
  score_col1.metric("Puntos por Alimento(s)", f"{best_match_data['score']['food']}")
522
  score_col2.metric("Puntos por Síntomas", f"{best_match_data['score']['symptoms']}")
523
  score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
524
+
525
+ # Contenido de la segunda columna (AHORA CORRECTAMENTE INDENTADO)
526
+ with col2:
527
  st.write("") # Para alinear verticalmente el popover
528
  if foodb_index:
529
  with st.popover("🔬 Componentes moleculares"):
 
536
  found_data = False
537
  displayed_foodb_keys = set()
538
 
 
539
  for alimento_es in user_foods_mentioned:
540
  search_terms_en = []
 
541
  for key_es, value_en_list in FOOD_NAME_TO_FOODB_KEY.items():
542
  if key_es in alimento_es.lower():
543
  search_terms_en.extend(value_en_list)
544
 
 
545
  for term in set(search_terms_en):
546
  for foodb_key, foodb_data in foodb_index.items():
547
  if term in foodb_key and foodb_key not in displayed_foodb_keys:
 
549
  displayed_foodb_keys.add(foodb_key)
550
  with st.container(border=True):
551
  st.subheader(f"Análisis de: {foodb_key.capitalize()}")
 
552
  for item in foodb_data[:3]:
553
  st.write(f"**Compuesto:** {item['compound']}")
554
  st.write(f"**Efectos reportados:** {', '.join(item['effects'])}")
 
556
 
557
  if not found_data:
558
  st.warning("No se encontraron datos moleculares para los alimentos mencionados.")
 
 
 
559
 
560
+ # El separador y el spinner van DESPUÉS de las columnas, pero DENTRO del expander
561
  st.markdown("---")
562
  with st.spinner("✍️ Generando un análisis personalizado con IA..."):
563
  if 'best_match_analysis' not in st.session_state.analysis_cache:
 
569
  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."
570
  st.markdown(st.session_state.analysis_cache['best_match_analysis'])
571
 
572
+ # El expander de "Otras posibilidades" va DESPUÉS del expander principal
573
+ if len(results) > 1:
574
+ with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):
575
+ for i, result in enumerate(results[1:5]):
576
+ with st.container(border=True):
577
+ entry = result['entry']
578
+ score = result['score']
579
+
580
+ st.subheader(f"{i+2}. {entry.get('condicion_asociada')}")
581
+ col_info, col_action = st.columns([3, 1])
582
+
583
+ with col_info:
584
+ if result.get('matched_symptoms'):
585
+ st.markdown(f"**Pistas Clave (Síntomas Coincidentes):** {', '.join(result['matched_symptoms']).capitalize()}")
586
+ st.markdown(f"**Alimentos Típicos Asociados:** {entry.get('compuesto_alimento')}")
587
+
588
+ with col_action:
589
+ st.metric("Relevancia", score['total'])
590
+ analysis_key = f"analysis_{i+2}"
591
+
592
+ if st.button("Generar análisis", key=analysis_key, help=f"Generar análisis de IA para {entry.get('condicion_asociada')}"):
593
+ with st.spinner(f"Generando análisis para {entry.get('condicion_asociada')}..."):
594
+ try:
595
+ analysis_text = generate_detailed_analysis(st.session_state.user_query, entry)
596
+ st.session_state.analysis_cache[analysis_key] = analysis_text
597
+ except Exception as e:
598
+ st.session_state.analysis_cache[analysis_key] = f"❌ Error al generar análisis para {entry.get('condicion_asociada')}."
599
+
600
+ if analysis_key in st.session_state.analysis_cache:
601
+ st.info(st.session_state.analysis_cache[analysis_key])
602
+
603
+ if i < len(results[1:5]) - 1:
604
+ st.markdown("---")