Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -261,7 +261,36 @@ FOOD_NAME_TO_FOODB_KEY = {
|
|
| 261 |
"vino": ["wine", "red wine", "white wine"]
|
| 262 |
}
|
| 263 |
|
|
|
|
| 264 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 265 |
# --- L脫GICA DE B脷SQUEDA Y AN脕LISIS ---
|
| 266 |
# (Todas las funciones auxiliares se mantienen igual que en la versi贸n anterior)
|
| 267 |
def sanitize_text(text):
|
|
@@ -501,6 +530,8 @@ if submitted:
|
|
| 501 |
else:
|
| 502 |
with st.spinner("馃 Interpretando tu caso y buscando pistas con IA..."):
|
| 503 |
entities = extract_and_infer_with_gemini(query, lista_condiciones)
|
|
|
|
|
|
|
| 504 |
st.session_state.entities = entities
|
| 505 |
if entities and (entities.get("alimentos") or entities.get("sintomas")):
|
| 506 |
info_str = f"IA identific贸 - Alimentos: {', '.join(entities.get('alimentos',[])) or 'Ninguno'}, S铆ntomas: {', '.join(entities.get('sintomas',[])) or 'Ninguno'}"
|
|
|
|
| 261 |
"vino": ["wine", "red wine", "white wine"]
|
| 262 |
}
|
| 263 |
|
| 264 |
+
# --- A脩ADE ESTA FUNCI脫N NUEVA EN TU C脫DIGO ---
|
| 265 |
|
| 266 |
+
def reinforce_entities_with_keywords(entities, query, food_map):
|
| 267 |
+
"""
|
| 268 |
+
Revisa la salida de la IA y a帽ade alimentos clave si fueron omitidos.
|
| 269 |
+
Esta es una red de seguridad contra las fallas de extracci贸n de la IA.
|
| 270 |
+
"""
|
| 271 |
+
if not entities:
|
| 272 |
+
entities = {"alimentos": [], "sintomas": []}
|
| 273 |
+
|
| 274 |
+
query_sanitized = sanitize_text(query)
|
| 275 |
+
current_foods = entities.get("alimentos", [])
|
| 276 |
+
|
| 277 |
+
# Si la IA ya encontr贸 alimentos, los sanitizamos para la comparaci贸n
|
| 278 |
+
current_foods_sanitized = {sanitize_text(f) for f in current_foods}
|
| 279 |
+
|
| 280 |
+
# Iteramos por nuestra lista de alimentos conocidos
|
| 281 |
+
for food_keyword in food_map.keys():
|
| 282 |
+
# Si una palabra clave de alimento est谩 en la consulta...
|
| 283 |
+
if food_keyword in query_sanitized:
|
| 284 |
+
# ...y la IA NO la incluy贸 en su lista...
|
| 285 |
+
if food_keyword not in current_foods_sanitized:
|
| 286 |
+
# ...la a帽adimos nosotros.
|
| 287 |
+
logger.info(f"Red de seguridad: La IA omiti贸 '{food_keyword}', a帽adi茅ndolo manualmente.")
|
| 288 |
+
current_foods.append(food_keyword)
|
| 289 |
+
|
| 290 |
+
entities["alimentos"] = list(set(current_foods)) # Eliminar duplicados
|
| 291 |
+
return entities
|
| 292 |
+
|
| 293 |
+
|
| 294 |
# --- L脫GICA DE B脷SQUEDA Y AN脕LISIS ---
|
| 295 |
# (Todas las funciones auxiliares se mantienen igual que en la versi贸n anterior)
|
| 296 |
def sanitize_text(text):
|
|
|
|
| 530 |
else:
|
| 531 |
with st.spinner("馃 Interpretando tu caso y buscando pistas con IA..."):
|
| 532 |
entities = extract_and_infer_with_gemini(query, lista_condiciones)
|
| 533 |
+
# --- A脩ADE ESTA L脥NEA PARA ACTIVAR LA RED DE SEGURIDAD ---
|
| 534 |
+
entities = reinforce_entities_with_keywords(entities, query, FOOD_TO_COMPOUND_MAP)
|
| 535 |
st.session_state.entities = entities
|
| 536 |
if entities and (entities.get("alimentos") or entities.get("sintomas")):
|
| 537 |
info_str = f"IA identific贸 - Alimentos: {', '.join(entities.get('alimentos',[])) or 'Ninguno'}, S铆ntomas: {', '.join(entities.get('sintomas',[])) or 'Ninguno'}"
|