JairoCesar commited on
Commit
aa6a261
·
verified ·
1 Parent(s): 3e58e62

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +4 -82
app.py CHANGED
@@ -973,47 +973,36 @@ if st.session_state.search_results is not None:
973
  score_col2.metric("Puntos por Síntomas", f"{best_match_data['score']['symptoms']}")
974
  score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
975
 
976
- with col2_expander:
977
  st.write("")
978
  if foodb_index:
979
  with st.popover("🔬 Componentes Moleculares del Diagnóstico"):
980
-
981
  st.info("Análisis de los compuestos en los alimentos mencionados que están directamente implicados en el diagnóstico principal.")
982
-
983
  user_foods_mentioned = st.session_state.entities.get("alimentos", [])
984
 
985
  if not user_foods_mentioned:
986
  st.warning("No se identificó un alimento específico para buscar.")
987
  else:
988
- # --- NUEVA LÓGICA DE ENRIQUECIMIENTO DE PISTAS ---
989
-
990
- # 1. RECOPILACIÓN DE PISTAS INICIALES
991
  initial_clues = set()
992
-
993
- # Pista Directa: del campo 'compuesto_alimento' del diagnóstico
994
  direct_text = best_match.get("compuesto_alimento", "").lower()
995
  cleaned_text = re.sub(r'\(.*?\)', '', direct_text)
996
  initial_clues.update(re.findall(r'\b[a-zA-Z-]+\b', cleaned_text))
997
 
998
- # Pistas Indirectas: de los síntomas del diagnóstico via KNOWN_TRIGGERS_MAP
999
  main_diagnosis_symptoms = set(s.lower() for s in best_match.get("sintomas_clave", []))
1000
  for compound, triggered_symptoms in KNOWN_TRIGGERS_MAP.items():
1001
  if main_diagnosis_symptoms.intersection(triggered_symptoms):
1002
  initial_clues.add(compound.lower())
1003
 
1004
- # 2. ENRIQUECIMIENTO DE PISTAS con sinónimos moleculares
1005
  final_search_keywords = set()
1006
  for clue in initial_clues:
1007
- final_search_keywords.add(clue) # Añadir la pista original
1008
  if clue in COMPOUND_SYNONYM_MAP:
1009
  final_search_keywords.update(COMPOUND_SYNONYM_MAP[clue])
1010
 
1011
  if not final_search_keywords:
1012
  st.warning(f"No se pudieron determinar los compuestos moleculares clave para '{best_match.get('condicion_asociada')}'.")
1013
  else:
1014
- logger.info(f"Buscando compuestos moleculares con las palabras clave: {final_search_keywords}")
1015
  best_food_matches = find_best_foodb_matches(user_foods_mentioned, foodb_index.keys(), FOOD_NAME_TO_FOODB_KEY)
1016
-
1017
  if not best_food_matches:
1018
  st.warning("No se encontraron datos moleculares para los alimentos específicos mencionados.")
1019
  else:
@@ -1025,7 +1014,6 @@ with col2_expander:
1025
  compound_name_lower = item['compound'].lower()
1026
  if any(target in compound_name_lower for target in final_search_keywords):
1027
  relevant_compounds.append(item)
1028
-
1029
  if relevant_compounds:
1030
  found_any_data = True
1031
  with st.container(border=True):
@@ -1037,9 +1025,9 @@ with col2_expander:
1037
  st.write(f"**Compuesto:** {item['compound']}")
1038
  st.caption(f"Este compuesto está directamente relacionado con '{best_match.get('condicion_asociada')}'.")
1039
  unique_compounds_shown.add(item['compound'])
1040
-
1041
  if not found_any_data:
1042
  st.warning(f"No se encontraron los compuestos específicos de '{best_match.get('condicion_asociada')}' en los alimentos analizados en la base de datos FoodB.")
 
1043
  st.markdown("---")
1044
  with st.container(border=True):
1045
  st.markdown("##### 🧠 Posibles Efectos Neuropsicológicos de los Componentes")
@@ -1105,70 +1093,4 @@ with col2_expander:
1105
  # --- LÍNEA CORREGIDA ---
1106
  # Esta línea ahora está fuera del 'with st.container' pero dentro del 'for' loop.
1107
  if i < len(results[1:5]) - 1:
1108
- st.markdown("---")
1109
-
1110
-
1111
- with st.container(border=True):
1112
- st.markdown("##### 🧠 Posibles Efectos Neuropsicológicos de los Componentes")
1113
- user_foods = st.session_state.entities.get("alimentos", [])
1114
- relevant_compounds = set()
1115
- if user_foods:
1116
- for food in user_foods:
1117
- if food in FOOD_TO_COMPOUND_MAP:
1118
- relevant_compounds.update(FOOD_TO_COMPOUND_MAP[food])
1119
- found_neuro_effect = False
1120
- if relevant_compounds:
1121
- for compound in sorted(list(relevant_compounds)):
1122
- if compound in INTEGRATED_NEURO_FOOD_MAP:
1123
- found_neuro_effect = True
1124
- effect_info = INTEGRATED_NEURO_FOOD_MAP[compound]
1125
- with st.container(border=True):
1126
- st.subheader(f"Componente: {compound.capitalize()}")
1127
- st.markdown(f"**Efecto:** {effect_info['efecto_neuropsicologico']}")
1128
- if not found_neuro_effect:
1129
- st.info("No se encontraron efectos neuropsicológicos específicos en la base de datos para los componentes de los alimentos mencionados.")
1130
-
1131
- st.markdown("---")
1132
- with st.spinner("✍️ Generando un análisis personalizado con IA..."):
1133
- if 'best_match_analysis' not in st.session_state.analysis_cache:
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. Por favor, intenta de nuevo más tarde."
1140
- st.markdown(st.session_state.analysis_cache['best_match_analysis'])
1141
-
1142
- if len(results) > 1:
1143
- with st.expander("🔍 **Explora otras posibilidades relevantes (Diagnóstico Diferencial)**"):
1144
- for i, result in enumerate(results[1:5]):
1145
- with st.container(border=True):
1146
- entry = result['entry']
1147
- score = result['score']
1148
-
1149
- st.subheader(f"{i+2}. {entry.get('condicion_asociada')}")
1150
- col_info, col_action = st.columns([3, 1])
1151
-
1152
- with col_info:
1153
- if result.get('matched_symptoms'):
1154
- st.markdown(f"**Pistas Clave (Síntomas Coincidentes):** {', '.join(result['matched_symptoms']).capitalize()}")
1155
- st.markdown(f"**Alimentos Típicos Asociados:** {entry.get('compuesto_alimento')}")
1156
-
1157
- with col_action:
1158
- st.metric("Relevancia", score['total'])
1159
- analysis_key = f"analysis_{i+2}"
1160
-
1161
- if st.button("Generar análisis", key=analysis_key, help=f"Generar análisis de IA para {entry.get('condicion_asociada')}"):
1162
- with st.spinner(f"Generando análisis para {entry.get('condicion_asociada')}..."):
1163
- try:
1164
- analysis_text = generate_detailed_analysis(st.session_state.user_query, entry)
1165
- st.session_state.analysis_cache[analysis_key] = analysis_text
1166
- except Exception as e:
1167
- st.session_state.analysis_cache[analysis_key] = f"❌ Error al generar análisis para {entry.get('condicion_asociada')}."
1168
-
1169
- if analysis_key in st.session_state.analysis_cache:
1170
- st.info(st.session_state.analysis_cache[analysis_key])
1171
-
1172
- # Esta es la línea que probablemente causaba el error, ahora está correctamente indentada
1173
- if i < len(results[1:5]) - 1:
1174
- st.markdown("---")
 
973
  score_col2.metric("Puntos por Síntomas", f"{best_match_data['score']['symptoms']}")
974
  score_col3.metric("PUNTUACIÓN TOTAL", f"{best_match_data['score']['total']}", delta="Máxima coincidencia")
975
 
976
+ with col2_expander:
977
  st.write("")
978
  if foodb_index:
979
  with st.popover("🔬 Componentes Moleculares del Diagnóstico"):
 
980
  st.info("Análisis de los compuestos en los alimentos mencionados que están directamente implicados en el diagnóstico principal.")
 
981
  user_foods_mentioned = st.session_state.entities.get("alimentos", [])
982
 
983
  if not user_foods_mentioned:
984
  st.warning("No se identificó un alimento específico para buscar.")
985
  else:
 
 
 
986
  initial_clues = set()
 
 
987
  direct_text = best_match.get("compuesto_alimento", "").lower()
988
  cleaned_text = re.sub(r'\(.*?\)', '', direct_text)
989
  initial_clues.update(re.findall(r'\b[a-zA-Z-]+\b', cleaned_text))
990
 
 
991
  main_diagnosis_symptoms = set(s.lower() for s in best_match.get("sintomas_clave", []))
992
  for compound, triggered_symptoms in KNOWN_TRIGGERS_MAP.items():
993
  if main_diagnosis_symptoms.intersection(triggered_symptoms):
994
  initial_clues.add(compound.lower())
995
 
 
996
  final_search_keywords = set()
997
  for clue in initial_clues:
998
+ final_search_keywords.add(clue)
999
  if clue in COMPOUND_SYNONYM_MAP:
1000
  final_search_keywords.update(COMPOUND_SYNONYM_MAP[clue])
1001
 
1002
  if not final_search_keywords:
1003
  st.warning(f"No se pudieron determinar los compuestos moleculares clave para '{best_match.get('condicion_asociada')}'.")
1004
  else:
 
1005
  best_food_matches = find_best_foodb_matches(user_foods_mentioned, foodb_index.keys(), FOOD_NAME_TO_FOODB_KEY)
 
1006
  if not best_food_matches:
1007
  st.warning("No se encontraron datos moleculares para los alimentos específicos mencionados.")
1008
  else:
 
1014
  compound_name_lower = item['compound'].lower()
1015
  if any(target in compound_name_lower for target in final_search_keywords):
1016
  relevant_compounds.append(item)
 
1017
  if relevant_compounds:
1018
  found_any_data = True
1019
  with st.container(border=True):
 
1025
  st.write(f"**Compuesto:** {item['compound']}")
1026
  st.caption(f"Este compuesto está directamente relacionado con '{best_match.get('condicion_asociada')}'.")
1027
  unique_compounds_shown.add(item['compound'])
 
1028
  if not found_any_data:
1029
  st.warning(f"No se encontraron los compuestos específicos de '{best_match.get('condicion_asociada')}' en los alimentos analizados en la base de datos FoodB.")
1030
+
1031
  st.markdown("---")
1032
  with st.container(border=True):
1033
  st.markdown("##### 🧠 Posibles Efectos Neuropsicológicos de los Componentes")
 
1093
  # --- LÍNEA CORREGIDA ---
1094
  # Esta línea ahora está fuera del 'with st.container' pero dentro del 'for' loop.
1095
  if i < len(results[1:5]) - 1:
1096
+ st.markdown("---")