|
|
import random |
|
|
import json |
|
|
import os |
|
|
from datetime import datetime |
|
|
|
|
|
MEMORIA_FILE = "memoria_nuti.json" |
|
|
PERFIL_FILE = "perfil_usuario.json" |
|
|
|
|
|
|
|
|
def cargar_memoria(): |
|
|
if os.path.exists(MEMORIA_FILE): |
|
|
with open(MEMORIA_FILE, "r", encoding="utf-8") as f: |
|
|
return json.load(f) |
|
|
return {} |
|
|
|
|
|
def guardar_memoria(memoria): |
|
|
with open(MEMORIA_FILE, "w", encoding="utf-8") as f: |
|
|
json.dump(memoria, f, ensure_ascii=False, indent=2) |
|
|
|
|
|
def obtener_perfil_usuario(): |
|
|
"""Lee condición alimenticia y alergias desde el perfil.""" |
|
|
if os.path.exists(PERFIL_FILE): |
|
|
with open(PERFIL_FILE, "r", encoding="utf-8") as f: |
|
|
perfil = json.load(f) |
|
|
return { |
|
|
"condicion": perfil.get("condicion", "").lower(), |
|
|
"alergias": perfil.get("alergias", "").lower() |
|
|
} |
|
|
return {"condicion": "", "alergias": ""} |
|
|
|
|
|
|
|
|
TEMAS = { |
|
|
"agua": [ |
|
|
"El agua regula todo tu cuerpo 💧: digestión, energía y concentración. Trata de tomar un vaso cada hora.", |
|
|
"Si te cuesta beber agua sola, puedes agregarle pepino, menta o rodajas de limón. 🍋", |
|
|
"Mantenerte hidratado también mejora el ánimo y la piel." |
|
|
], |
|
|
"desayuno": [ |
|
|
"El desayuno activa tu metabolismo 🌞. Prueba algo con proteína, como yogurt o huevo, más fruta y avena.", |
|
|
"Saltarte el desayuno puede afectar tu energía y concentración, especialmente si estás en crecimiento.", |
|
|
"Empieza el día con alimentos reales, no procesados: te sentirás con más claridad mental." |
|
|
], |
|
|
"ansiedad": [ |
|
|
"Si comes por ansiedad, prueba algo que te relaje sin comer: respiraciones lentas, música suave o caminar 5 minutos. 🌿", |
|
|
"A veces el hambre emocional busca consuelo, no comida. Haz una pausa antes de decidir.", |
|
|
"Tener un snack saludable preparado (como nueces o plátano) puede ayudarte a no comer impulsivamente." |
|
|
], |
|
|
"peso": [ |
|
|
"No te enfoques solo en el número de la báscula. Lo que importa es cómo te sientes y tu energía. ❤️", |
|
|
"Bajar o subir de peso de forma saludable requiere constancia, no perfección. Paso a paso.", |
|
|
"Tu cuerpo cambia contigo: aprende a escucharlo, no a pelear con él." |
|
|
], |
|
|
"ejercicio": [ |
|
|
"Moverte aunque sea 10 minutos al día ya mejora tu circulación y tu humor. 💪", |
|
|
"Combinar movimiento y buena comida potencia los resultados, no te castigues si un día descansas.", |
|
|
"Después de entrenar, hidrátate y come algo con proteína, te ayudará a recuperarte." |
|
|
] |
|
|
} |
|
|
|
|
|
MENSAJES_BASE = [ |
|
|
"Tu cuerpo te acompaña siempre, cuídalo con cariño y paciencia. 💚", |
|
|
"Cada día que eliges comer mejor, te estás eligiendo a ti. 🌱", |
|
|
"No busques comer perfecto, busca sentirte bien contigo y con tu cuerpo.", |
|
|
"Pequeños hábitos constantes crean grandes resultados. 🌟" |
|
|
] |
|
|
|
|
|
|
|
|
def buscar_respuesta(pregunta, historial): |
|
|
pregunta = pregunta.lower().strip() |
|
|
memoria = cargar_memoria() |
|
|
perfil = obtener_perfil_usuario() |
|
|
condicion = perfil["condicion"] |
|
|
alergias = perfil["alergias"] |
|
|
|
|
|
usuario = "default_user" |
|
|
if usuario not in memoria: |
|
|
memoria[usuario] = {"historial": [], "temas_previos": []} |
|
|
|
|
|
historial_usuario = memoria[usuario]["historial"] |
|
|
temas_previos = memoria[usuario]["temas_previos"] |
|
|
|
|
|
|
|
|
tema_detectado = None |
|
|
for tema in TEMAS: |
|
|
if tema in pregunta: |
|
|
tema_detectado = tema |
|
|
break |
|
|
|
|
|
|
|
|
if tema_detectado: |
|
|
respuesta_base = random.choice(TEMAS[tema_detectado]) |
|
|
respuesta = f"{respuesta_base} Además, recuerda que cada pequeño paso que das cuenta. 💪" |
|
|
temas_previos.append(tema_detectado) |
|
|
else: |
|
|
if historial_usuario: |
|
|
ultimo_tema = temas_previos[-1] if temas_previos else "alimentación" |
|
|
respuesta = ( |
|
|
f"Sobre lo que mencionaste antes acerca de {ultimo_tema}, " |
|
|
f"creo que podrías intentar algo nuevo: {random.choice(TEMAS.get(ultimo_tema, MENSAJES_BASE))}" |
|
|
) |
|
|
else: |
|
|
respuesta = random.choice(MENSAJES_BASE) |
|
|
|
|
|
|
|
|
if condicion: |
|
|
if "diabet" in condicion: |
|
|
respuesta += "\n\n💡 Como tienes diabetes, controla los azúcares simples y elige frutas de bajo índice glucémico." |
|
|
elif "hipertens" in condicion: |
|
|
respuesta += "\n\n💡 Consejo para tu hipertensión: modera la sal y los alimentos procesados." |
|
|
elif "lactosa" in condicion: |
|
|
respuesta += "\n\n🥛 Ojo con los lácteos: elige sin lactosa o bebidas vegetales." |
|
|
elif "celia" in condicion or "gluten" in condicion: |
|
|
respuesta += "\n\n🌾 Evita el gluten. Prefiere avena sin gluten, arroz o quinoa." |
|
|
elif "anemia" in condicion: |
|
|
respuesta += "\n\n🥬 Agrega alimentos ricos en hierro como lentejas, espinacas y carne magra." |
|
|
elif "colesterol" in condicion: |
|
|
respuesta += "\n\n❤️ Reduce frituras y elige aguacate, nueces y aceite de oliva." |
|
|
else: |
|
|
respuesta += f"\n\n🤖 Estoy tomando en cuenta tu condición: {condicion}." |
|
|
|
|
|
|
|
|
if alergias: |
|
|
alergias_lista = [a.strip() for a in alergias.split(",")] |
|
|
respuesta += "\n\n⚠️ También recordaré tus alergias para evitar riesgos: " |
|
|
respuesta += ", ".join(alergias_lista) + "." |
|
|
respuesta += "\nTen cuidado con etiquetas de productos y avísame si notas alguna reacción." |
|
|
|
|
|
|
|
|
historial_usuario.append({ |
|
|
"fecha": str(datetime.now()), |
|
|
"pregunta": pregunta, |
|
|
"respuesta": respuesta |
|
|
}) |
|
|
memoria[usuario]["historial"] = historial_usuario |
|
|
memoria[usuario]["temas_previos"] = temas_previos |
|
|
guardar_memoria(memoria) |
|
|
|
|
|
return respuesta |
|
|
|