Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -60,7 +60,9 @@ def get_gemini_client():
|
|
| 60 |
try:
|
| 61 |
return genai.Client(
|
| 62 |
api_key=api_key,
|
| 63 |
-
|
|
|
|
|
|
|
| 64 |
)
|
| 65 |
except Exception as e:
|
| 66 |
logger.warning(f"❌ Error instanciando cliente Gemini: {e}")
|
|
@@ -573,9 +575,12 @@ def get_compounds_for_food(food_name, food_map):
|
|
| 573 |
return food_map[fuzzy_matches[0]]
|
| 574 |
|
| 575 |
# 4. Búsqueda por subcadena dentro del diccionario
|
|
|
|
|
|
|
|
|
|
| 576 |
matched_compounds = set()
|
| 577 |
for key, compounds in food_map.items():
|
| 578 |
-
if key
|
| 579 |
matched_compounds.update(compounds)
|
| 580 |
|
| 581 |
if matched_compounds:
|
|
@@ -677,7 +682,11 @@ def reinforce_entities_with_keywords(entities, query, food_map, master_symptom_m
|
|
| 677 |
query_sanitized = sanitize_text(query)
|
| 678 |
current_foods = set(entities.get("alimentos", []))
|
| 679 |
for food_keyword in food_map.keys():
|
| 680 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 681 |
current_foods.add(food_keyword)
|
| 682 |
|
| 683 |
if not current_foods:
|
|
|
|
| 60 |
try:
|
| 61 |
return genai.Client(
|
| 62 |
api_key=api_key,
|
| 63 |
+
# OJO: HttpOptions.timeout se define en MILISEGUNDOS (no en segundos).
|
| 64 |
+
# timeout=15.0 equivalía a 15 ms -> toda llamada expiraba de inmediato.
|
| 65 |
+
http_options=types.HttpOptions(timeout=15000) # 15000 ms = 15 segundos
|
| 66 |
)
|
| 67 |
except Exception as e:
|
| 68 |
logger.warning(f"❌ Error instanciando cliente Gemini: {e}")
|
|
|
|
| 575 |
return food_map[fuzzy_matches[0]]
|
| 576 |
|
| 577 |
# 4. Búsqueda por subcadena dentro del diccionario
|
| 578 |
+
# Antes: "key in food_clean" permitía falsos positivos con claves cortas
|
| 579 |
+
# (p.ej. "res" o "ajo" dentro de otra palabra). Ahora se exige que la
|
| 580 |
+
# clave aparezca como palabra completa dentro del nombre del alimento.
|
| 581 |
matched_compounds = set()
|
| 582 |
for key, compounds in food_map.items():
|
| 583 |
+
if re.search(r'\b' + re.escape(key) + r'\b', food_clean) or food_clean in key:
|
| 584 |
matched_compounds.update(compounds)
|
| 585 |
|
| 586 |
if matched_compounds:
|
|
|
|
| 682 |
query_sanitized = sanitize_text(query)
|
| 683 |
current_foods = set(entities.get("alimentos", []))
|
| 684 |
for food_keyword in food_map.keys():
|
| 685 |
+
# Antes: "food_keyword in query_sanitized" (subcadena simple).
|
| 686 |
+
# Esto producía falsos positivos con claves cortas: "ajo" coincidía
|
| 687 |
+
# dentro de "trabajo", "res" dentro de "interesante", "pan" dentro
|
| 688 |
+
# de "hispano", etc. Se usa \b para exigir palabra completa.
|
| 689 |
+
if re.search(r'\b' + re.escape(food_keyword) + r'\b', query_sanitized):
|
| 690 |
current_foods.add(food_keyword)
|
| 691 |
|
| 692 |
if not current_foods:
|