import random import json import os from datetime import datetime MEMORIA_FILE = "memoria_nuti.json" PERFIL_FILE = "perfil_usuario.json" # Archivo donde se guarda info del usuario # --- Funciones de carga y guardado --- # 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 clave --- # 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. 🌟" ] # --- Respuesta inteligente y contextual --- # 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"] # Detectar tema principal tema_detectado = None for tema in TEMAS: if tema in pregunta: tema_detectado = tema break # Generar respuesta base 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) # --- Ajustes personalizados según condición --- # 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}." # --- Ajustes adicionales según alergias --- # 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." # Guardar historial 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