FOOD-AI / chatbot_nuti.py
caissaa23's picture
Update chatbot_nuti.py
4be0570 verified
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