Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -167,14 +167,14 @@ SYMPTOM_KEYWORD_MAP = {
|
|
| 167 |
def reinforce_entities_with_keywords(entities, query, food_map, symptom_map):
|
| 168 |
"""
|
| 169 |
Revisa la salida de la IA y añade alimentos Y síntomas clave si fueron omitidos.
|
| 170 |
-
Esta es
|
| 171 |
"""
|
| 172 |
if not entities:
|
| 173 |
entities = {"alimentos": [], "sintomas": []}
|
| 174 |
|
| 175 |
query_sanitized = sanitize_text(query)
|
| 176 |
|
| 177 |
-
# --- Reforzar Alimentos (Lógica existente) ---
|
| 178 |
current_foods = entities.get("alimentos", [])
|
| 179 |
current_foods_sanitized = {sanitize_text(f) for f in current_foods}
|
| 180 |
for food_keyword in food_map.keys():
|
|
@@ -183,15 +183,25 @@ def reinforce_entities_with_keywords(entities, query, food_map, symptom_map):
|
|
| 183 |
current_foods.append(food_keyword)
|
| 184 |
entities["alimentos"] = list(set(current_foods))
|
| 185 |
|
| 186 |
-
# ---
|
| 187 |
current_symptoms = entities.get("sintomas", [])
|
| 188 |
-
# A veces la IA devuelve None en la lista, lo limpiamos por seguridad
|
| 189 |
if current_symptoms is None: current_symptoms = []
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 193 |
logger.info(f"Red de seguridad (Síntoma): Añadiendo '{symptom_keyword}'.")
|
| 194 |
current_symptoms.append(symptom_keyword)
|
|
|
|
|
|
|
|
|
|
| 195 |
entities["sintomas"] = list(set(current_symptoms))
|
| 196 |
|
| 197 |
return entities
|
|
|
|
| 167 |
def reinforce_entities_with_keywords(entities, query, food_map, symptom_map):
|
| 168 |
"""
|
| 169 |
Revisa la salida de la IA y añade alimentos Y síntomas clave si fueron omitidos.
|
| 170 |
+
Esta versión es más inteligente para evitar la doble contabilización de síntomas.
|
| 171 |
"""
|
| 172 |
if not entities:
|
| 173 |
entities = {"alimentos": [], "sintomas": []}
|
| 174 |
|
| 175 |
query_sanitized = sanitize_text(query)
|
| 176 |
|
| 177 |
+
# --- Reforzar Alimentos (Lógica existente, sin cambios) ---
|
| 178 |
current_foods = entities.get("alimentos", [])
|
| 179 |
current_foods_sanitized = {sanitize_text(f) for f in current_foods}
|
| 180 |
for food_keyword in food_map.keys():
|
|
|
|
| 183 |
current_foods.append(food_keyword)
|
| 184 |
entities["alimentos"] = list(set(current_foods))
|
| 185 |
|
| 186 |
+
# --- LÓGICA MEJORADA: Reforzar Síntomas (Evita redundancia) ---
|
| 187 |
current_symptoms = entities.get("sintomas", [])
|
|
|
|
| 188 |
if current_symptoms is None: current_symptoms = []
|
| 189 |
+
|
| 190 |
+
# Usamos una copia de la consulta para poder modificarla
|
| 191 |
+
query_to_search_symptoms = query_sanitized
|
| 192 |
+
|
| 193 |
+
# Ordenamos las palabras clave de síntomas por longitud, de la más larga a la más corta
|
| 194 |
+
# Esto asegura que "dolor de cabeza" se procese antes que "dolor"
|
| 195 |
+
sorted_symptom_keywords = sorted(symptom_map.keys(), key=len, reverse=True)
|
| 196 |
+
|
| 197 |
+
for symptom_keyword in sorted_symptom_keywords:
|
| 198 |
+
# Si encontramos el síntoma más específico...
|
| 199 |
+
if symptom_keyword in query_to_search_symptoms:
|
| 200 |
logger.info(f"Red de seguridad (Síntoma): Añadiendo '{symptom_keyword}'.")
|
| 201 |
current_symptoms.append(symptom_keyword)
|
| 202 |
+
# ...lo eliminamos de la cadena de búsqueda para que sus sub-partes no se vuelvan a encontrar.
|
| 203 |
+
query_to_search_symptoms = query_to_search_symptoms.replace(symptom_keyword, "")
|
| 204 |
+
|
| 205 |
entities["sintomas"] = list(set(current_symptoms))
|
| 206 |
|
| 207 |
return entities
|