Update chatbot_nuti.py
Browse files- chatbot_nuti.py +36 -26
chatbot_nuti.py
CHANGED
|
@@ -4,9 +4,9 @@ import os
|
|
| 4 |
from datetime import datetime
|
| 5 |
|
| 6 |
MEMORIA_FILE = "memoria_nuti.json"
|
| 7 |
-
PERFIL_FILE = "perfil_usuario.json" #
|
| 8 |
|
| 9 |
-
# ---
|
| 10 |
def cargar_memoria():
|
| 11 |
if os.path.exists(MEMORIA_FILE):
|
| 12 |
with open(MEMORIA_FILE, "r", encoding="utf-8") as f:
|
|
@@ -17,7 +17,18 @@ def guardar_memoria(memoria):
|
|
| 17 |
with open(MEMORIA_FILE, "w", encoding="utf-8") as f:
|
| 18 |
json.dump(memoria, f, ensure_ascii=False, indent=2)
|
| 19 |
|
| 20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
TEMAS = {
|
| 22 |
"agua": [
|
| 23 |
"El agua regula todo tu cuerpo 💧: digestión, energía y concentración. Trata de tomar un vaso cada hora.",
|
|
@@ -53,20 +64,13 @@ MENSAJES_BASE = [
|
|
| 53 |
"Pequeños hábitos constantes crean grandes resultados. 🌟"
|
| 54 |
]
|
| 55 |
|
| 56 |
-
# ---
|
| 57 |
-
def obtener_condicion_usuario():
|
| 58 |
-
if os.path.exists(PERFIL_FILE):
|
| 59 |
-
with open(PERFIL_FILE, "r", encoding="utf-8") as f:
|
| 60 |
-
perfil = json.load(f)
|
| 61 |
-
return perfil.get("condicion", "").lower()
|
| 62 |
-
return ""
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
# --- Función principal: Respuesta inteligente y contextual --- #
|
| 66 |
def buscar_respuesta(pregunta, historial):
|
| 67 |
pregunta = pregunta.lower().strip()
|
| 68 |
memoria = cargar_memoria()
|
| 69 |
-
|
|
|
|
|
|
|
| 70 |
|
| 71 |
usuario = "default_user"
|
| 72 |
if usuario not in memoria:
|
|
@@ -75,14 +79,14 @@ def buscar_respuesta(pregunta, historial):
|
|
| 75 |
historial_usuario = memoria[usuario]["historial"]
|
| 76 |
temas_previos = memoria[usuario]["temas_previos"]
|
| 77 |
|
| 78 |
-
# Detectar tema
|
| 79 |
tema_detectado = None
|
| 80 |
for tema in TEMAS:
|
| 81 |
if tema in pregunta:
|
| 82 |
tema_detectado = tema
|
| 83 |
break
|
| 84 |
|
| 85 |
-
#
|
| 86 |
if tema_detectado:
|
| 87 |
respuesta_base = random.choice(TEMAS[tema_detectado])
|
| 88 |
respuesta = f"{respuesta_base} Además, recuerda que cada pequeño paso que das cuenta. 💪"
|
|
@@ -97,30 +101,36 @@ def buscar_respuesta(pregunta, historial):
|
|
| 97 |
else:
|
| 98 |
respuesta = random.choice(MENSAJES_BASE)
|
| 99 |
|
| 100 |
-
# ---
|
| 101 |
if condicion:
|
| 102 |
if "diabet" in condicion:
|
| 103 |
-
respuesta += "\n\n💡 Como tienes diabetes,
|
| 104 |
elif "hipertens" in condicion:
|
| 105 |
-
respuesta += "\n\n💡 Consejo para tu hipertensión:
|
| 106 |
elif "lactosa" in condicion:
|
| 107 |
-
respuesta += "\n\n🥛 Ojo con los lácteos: elige
|
| 108 |
elif "celia" in condicion or "gluten" in condicion:
|
| 109 |
-
respuesta += "\n\n🌾
|
| 110 |
elif "anemia" in condicion:
|
| 111 |
-
respuesta += "\n\n🥬
|
| 112 |
elif "colesterol" in condicion:
|
| 113 |
-
respuesta += "\n\n❤️
|
| 114 |
else:
|
| 115 |
-
respuesta += f"\n\n🤖 Estoy
|
| 116 |
|
| 117 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
historial_usuario.append({
|
| 119 |
"fecha": str(datetime.now()),
|
| 120 |
"pregunta": pregunta,
|
| 121 |
"respuesta": respuesta
|
| 122 |
})
|
| 123 |
-
|
| 124 |
memoria[usuario]["historial"] = historial_usuario
|
| 125 |
memoria[usuario]["temas_previos"] = temas_previos
|
| 126 |
guardar_memoria(memoria)
|
|
|
|
| 4 |
from datetime import datetime
|
| 5 |
|
| 6 |
MEMORIA_FILE = "memoria_nuti.json"
|
| 7 |
+
PERFIL_FILE = "perfil_usuario.json" # Archivo donde se guarda info del usuario
|
| 8 |
|
| 9 |
+
# --- Funciones de carga y guardado --- #
|
| 10 |
def cargar_memoria():
|
| 11 |
if os.path.exists(MEMORIA_FILE):
|
| 12 |
with open(MEMORIA_FILE, "r", encoding="utf-8") as f:
|
|
|
|
| 17 |
with open(MEMORIA_FILE, "w", encoding="utf-8") as f:
|
| 18 |
json.dump(memoria, f, ensure_ascii=False, indent=2)
|
| 19 |
|
| 20 |
+
def obtener_perfil_usuario():
|
| 21 |
+
"""Lee condición alimenticia y alergias desde el perfil."""
|
| 22 |
+
if os.path.exists(PERFIL_FILE):
|
| 23 |
+
with open(PERFIL_FILE, "r", encoding="utf-8") as f:
|
| 24 |
+
perfil = json.load(f)
|
| 25 |
+
return {
|
| 26 |
+
"condicion": perfil.get("condicion", "").lower(),
|
| 27 |
+
"alergias": perfil.get("alergias", "").lower()
|
| 28 |
+
}
|
| 29 |
+
return {"condicion": "", "alergias": ""}
|
| 30 |
+
|
| 31 |
+
# --- Temas clave --- #
|
| 32 |
TEMAS = {
|
| 33 |
"agua": [
|
| 34 |
"El agua regula todo tu cuerpo 💧: digestión, energía y concentración. Trata de tomar un vaso cada hora.",
|
|
|
|
| 64 |
"Pequeños hábitos constantes crean grandes resultados. 🌟"
|
| 65 |
]
|
| 66 |
|
| 67 |
+
# --- Respuesta inteligente y contextual --- #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
def buscar_respuesta(pregunta, historial):
|
| 69 |
pregunta = pregunta.lower().strip()
|
| 70 |
memoria = cargar_memoria()
|
| 71 |
+
perfil = obtener_perfil_usuario()
|
| 72 |
+
condicion = perfil["condicion"]
|
| 73 |
+
alergias = perfil["alergias"]
|
| 74 |
|
| 75 |
usuario = "default_user"
|
| 76 |
if usuario not in memoria:
|
|
|
|
| 79 |
historial_usuario = memoria[usuario]["historial"]
|
| 80 |
temas_previos = memoria[usuario]["temas_previos"]
|
| 81 |
|
| 82 |
+
# Detectar tema principal
|
| 83 |
tema_detectado = None
|
| 84 |
for tema in TEMAS:
|
| 85 |
if tema in pregunta:
|
| 86 |
tema_detectado = tema
|
| 87 |
break
|
| 88 |
|
| 89 |
+
# Generar respuesta base
|
| 90 |
if tema_detectado:
|
| 91 |
respuesta_base = random.choice(TEMAS[tema_detectado])
|
| 92 |
respuesta = f"{respuesta_base} Además, recuerda que cada pequeño paso que das cuenta. 💪"
|
|
|
|
| 101 |
else:
|
| 102 |
respuesta = random.choice(MENSAJES_BASE)
|
| 103 |
|
| 104 |
+
# --- Ajustes personalizados según condición --- #
|
| 105 |
if condicion:
|
| 106 |
if "diabet" in condicion:
|
| 107 |
+
respuesta += "\n\n💡 Como tienes diabetes, controla los azúcares simples y elige frutas de bajo índice glucémico."
|
| 108 |
elif "hipertens" in condicion:
|
| 109 |
+
respuesta += "\n\n💡 Consejo para tu hipertensión: modera la sal y los alimentos procesados."
|
| 110 |
elif "lactosa" in condicion:
|
| 111 |
+
respuesta += "\n\n🥛 Ojo con los lácteos: elige sin lactosa o bebidas vegetales."
|
| 112 |
elif "celia" in condicion or "gluten" in condicion:
|
| 113 |
+
respuesta += "\n\n🌾 Evita el gluten. Prefiere avena sin gluten, arroz o quinoa."
|
| 114 |
elif "anemia" in condicion:
|
| 115 |
+
respuesta += "\n\n🥬 Agrega alimentos ricos en hierro como lentejas, espinacas y carne magra."
|
| 116 |
elif "colesterol" in condicion:
|
| 117 |
+
respuesta += "\n\n❤️ Reduce frituras y elige aguacate, nueces y aceite de oliva."
|
| 118 |
else:
|
| 119 |
+
respuesta += f"\n\n🤖 Estoy tomando en cuenta tu condición: {condicion}."
|
| 120 |
|
| 121 |
+
# --- Ajustes adicionales según alergias --- #
|
| 122 |
+
if alergias:
|
| 123 |
+
alergias_lista = [a.strip() for a in alergias.split(",")]
|
| 124 |
+
respuesta += "\n\n⚠️ También recordaré tus alergias para evitar riesgos: "
|
| 125 |
+
respuesta += ", ".join(alergias_lista) + "."
|
| 126 |
+
respuesta += "\nTen cuidado con etiquetas de productos y avísame si notas alguna reacción."
|
| 127 |
+
|
| 128 |
+
# Guardar historial
|
| 129 |
historial_usuario.append({
|
| 130 |
"fecha": str(datetime.now()),
|
| 131 |
"pregunta": pregunta,
|
| 132 |
"respuesta": respuesta
|
| 133 |
})
|
|
|
|
| 134 |
memoria[usuario]["historial"] = historial_usuario
|
| 135 |
memoria[usuario]["temas_previos"] = temas_previos
|
| 136 |
guardar_memoria(memoria)
|