Update app.py
Browse files
app.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
import random
|
|
|
|
| 3 |
from datetime import datetime
|
| 4 |
from chatbot_nuti import buscar_respuesta
|
| 5 |
from coach_emocional import coach_emocional_inteligente
|
|
@@ -13,6 +14,8 @@ MEMORIA_COACH = []
|
|
| 13 |
calorias_totales = 0
|
| 14 |
calorias_restantes = 0
|
| 15 |
historial_comidas = []
|
|
|
|
|
|
|
| 16 |
|
| 17 |
# ---------- CHATBOT NUTI ---------- #
|
| 18 |
def conversar_nuti(mensaje, historial):
|
|
@@ -22,6 +25,7 @@ def conversar_nuti(mensaje, historial):
|
|
| 22 |
historial = historial + [(mensaje, respuesta)]
|
| 23 |
return historial, ""
|
| 24 |
|
|
|
|
| 25 |
# ---------- COACH EMOCIONAL ---------- #
|
| 26 |
def conversar_coach(mensaje, historial):
|
| 27 |
MEMORIA_COACH.append({"user": mensaje})
|
|
@@ -30,6 +34,7 @@ def conversar_coach(mensaje, historial):
|
|
| 30 |
historial = historial + [(mensaje, respuesta)]
|
| 31 |
return historial, ""
|
| 32 |
|
|
|
|
| 33 |
# ---------- CÁLCULO DE CALORÍAS ---------- #
|
| 34 |
def calcular_calorias(edad, peso, altura, genero, actividad, meta):
|
| 35 |
global calorias_totales, calorias_restantes
|
|
@@ -48,7 +53,6 @@ def calcular_calorias(edad, peso, altura, genero, actividad, meta):
|
|
| 48 |
|
| 49 |
calorias_base = bmr * factores.get(actividad.lower(), 1.55)
|
| 50 |
|
| 51 |
-
# Ajuste según meta del usuario
|
| 52 |
if meta.lower() == "bajar de peso":
|
| 53 |
calorias_totales = round(calorias_base * 0.8)
|
| 54 |
elif meta.lower() == "subir de peso":
|
|
@@ -60,23 +64,17 @@ def calcular_calorias(edad, peso, altura, genero, actividad, meta):
|
|
| 60 |
return f"🎯 Tu meta es **{meta.lower()}**.\n🔥 Puedes consumir aproximadamente **{calorias_totales} calorías por día**."
|
| 61 |
|
| 62 |
|
| 63 |
-
# ----------
|
| 64 |
def calorias_reloj(calorias_quemadas):
|
| 65 |
global calorias_restantes
|
| 66 |
calorias_restantes += calorias_quemadas
|
| 67 |
return f"⌚ Has quemado **{calorias_quemadas} kcal** según tu reloj. Te quedan **{calorias_restantes} kcal** disponibles hoy."
|
| 68 |
|
| 69 |
-
|
|
|
|
| 70 |
def analizar_foto(imagen):
|
| 71 |
-
"""
|
| 72 |
-
Aquí normalmente se usaría un modelo de visión (por ejemplo, FoodAI o CLIP)
|
| 73 |
-
para detectar la comida y estimar las calorías.
|
| 74 |
-
En esta versión simulamos un reconocimiento básico.
|
| 75 |
-
"""
|
| 76 |
if imagen is None:
|
| 77 |
-
return "⚠️ Sube una foto de tu comida."
|
| 78 |
-
|
| 79 |
-
# Simulación de detección aleatoria de platillos
|
| 80 |
comidas = [
|
| 81 |
("Ensalada de pollo", 350),
|
| 82 |
("Hamburguesa con papas", 800),
|
|
@@ -90,7 +88,7 @@ def analizar_foto(imagen):
|
|
| 90 |
nombre, calorias = random.choice(comidas)
|
| 91 |
return f"🍽️ Parece que comiste **{nombre}** (~{calorias} kcal).", calorias
|
| 92 |
|
| 93 |
-
|
| 94 |
def registrar_comida(imagen):
|
| 95 |
global calorias_restantes, historial_comidas
|
| 96 |
info, calorias = analizar_foto(imagen)
|
|
@@ -100,6 +98,7 @@ def registrar_comida(imagen):
|
|
| 100 |
historial_comidas.append({"comida": info, "calorias": calorias})
|
| 101 |
return f"{info}\n\n🔥 Calorías restantes del día: **{calorias_restantes} kcal**."
|
| 102 |
|
|
|
|
| 103 |
def mostrar_historial():
|
| 104 |
if not historial_comidas:
|
| 105 |
return "📭 Aún no has registrado comidas hoy."
|
|
@@ -109,14 +108,15 @@ def mostrar_historial():
|
|
| 109 |
texto += f"\n🔥 Te quedan **{calorias_restantes} kcal** por consumir hoy."
|
| 110 |
return texto
|
| 111 |
|
|
|
|
| 112 |
# ---------- RECETAS ---------- #
|
| 113 |
-
RECETAS = []
|
| 114 |
def subir_receta(nombre, descripcion, imagen):
|
| 115 |
if nombre and descripcion:
|
| 116 |
RECETAS.append({"nombre": nombre, "descripcion": descripcion, "imagen": imagen})
|
| 117 |
return f"✅ Receta '{nombre}' añadida correctamente."
|
| 118 |
return "⚠️ Ingresa nombre y descripción."
|
| 119 |
|
|
|
|
| 120 |
def mostrar_recetas():
|
| 121 |
if not RECETAS:
|
| 122 |
return "📭 No hay recetas cargadas aún."
|
|
@@ -125,36 +125,13 @@ def mostrar_recetas():
|
|
| 125 |
texto += f"**{r['nombre']}**\n{r['descripcion']}\n\n"
|
| 126 |
return texto
|
| 127 |
|
|
|
|
| 128 |
# ---------- BUSCADOR DE NUTRIÓLOGOS ---------- #
|
| 129 |
def buscar_nutriologos(pais, estado, ciudad):
|
| 130 |
ejemplos = [
|
| 131 |
-
{
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
"estado": "Sonora",
|
| 135 |
-
"ciudad": "Hermosillo",
|
| 136 |
-
"especialidad": "Nutrición deportiva",
|
| 137 |
-
"redes": "@nutrisofi (Instagram)",
|
| 138 |
-
"reseña": "⭐️⭐️⭐️⭐️⭐️ 4.9"
|
| 139 |
-
},
|
| 140 |
-
{
|
| 141 |
-
"nombre": "Lic. Andrés Gómez",
|
| 142 |
-
"pais": "México",
|
| 143 |
-
"estado": "CDMX",
|
| 144 |
-
"ciudad": "Coyoacán",
|
| 145 |
-
"especialidad": "Nutrición clínica",
|
| 146 |
-
"redes": "@andresnutricion (TikTok)",
|
| 147 |
-
"reseña": "⭐️⭐️⭐️⭐️ 4.7"
|
| 148 |
-
},
|
| 149 |
-
{
|
| 150 |
-
"nombre": "Dra. Camila Silva",
|
| 151 |
-
"pais": "Chile",
|
| 152 |
-
"estado": "Región Metropolitana",
|
| 153 |
-
"ciudad": "Santiago",
|
| 154 |
-
"especialidad": "Salud emocional",
|
| 155 |
-
"redes": "@camila.wellness (Instagram)",
|
| 156 |
-
"reseña": "⭐️⭐️⭐️⭐️⭐️ 5.0"
|
| 157 |
-
}
|
| 158 |
]
|
| 159 |
resultados = [n for n in ejemplos if n["pais"].lower() == pais.lower() or n["ciudad"].lower() == ciudad.lower() or n["estado"].lower() == estado.lower()]
|
| 160 |
if not resultados:
|
|
@@ -164,59 +141,40 @@ def buscar_nutriologos(pais, estado, ciudad):
|
|
| 164 |
texto += f"**{n['nombre']}** - {n['especialidad']} ({n['ciudad']}, {n['pais']})\n📱 {n['redes']}\n💬 {n['reseña']}\n\n"
|
| 165 |
return texto
|
| 166 |
|
| 167 |
-
|
|
|
|
| 168 |
def main():
|
| 169 |
with gr.Blocks(title="NutriBot IA 🥗") as app:
|
| 170 |
gr.Markdown("# 🧠 Bienvenido a **NutriBot IA** 🍎")
|
| 171 |
-
gr.Markdown("Comer sano, inteligente y divertido
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
with gr.
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
"nombre": nombre,
|
| 201 |
-
"edad": edad,
|
| 202 |
-
"peso": peso,
|
| 203 |
-
"altura": altura,
|
| 204 |
-
"genero": genero,
|
| 205 |
-
"actividad": actividad,
|
| 206 |
-
"meta": meta,
|
| 207 |
-
"condicion": condicion
|
| 208 |
-
}
|
| 209 |
-
with open("perfil_usuario.json", "w") as f:
|
| 210 |
-
json.dump(perfil, f, indent=4)
|
| 211 |
-
return f"✅ Información guardada. Nuti ahora sabe que tienes: **{condicion or 'ninguna condición registrada'}**."
|
| 212 |
-
|
| 213 |
-
guardar_datos.click(
|
| 214 |
-
guardar_informacion,
|
| 215 |
-
inputs=[nombre, edad, peso, altura, genero, actividad, meta, condicion],
|
| 216 |
-
outputs=salida_datos
|
| 217 |
-
)
|
| 218 |
-
|
| 219 |
-
# --- FOTO DE COMIDA --- #
|
| 220 |
with gr.Tab("📸 Registro de Comidas"):
|
| 221 |
gr.Markdown("Sube una foto de tu comida y NutriBot estimará las calorías 🍽️")
|
| 222 |
imagen = gr.Image(label="Foto de tu comida", type="filepath")
|
|
@@ -228,41 +186,36 @@ with gr.Tab("👤 Datos Personales"):
|
|
| 228 |
salida_historial = gr.Markdown()
|
| 229 |
boton_historial.click(mostrar_historial, outputs=salida_historial)
|
| 230 |
|
| 231 |
-
# --- RELOJ INTELIGENTE --- #
|
| 232 |
with gr.Tab("⌚ Calorías del Reloj"):
|
| 233 |
calorias_quemadas = gr.Number(label="Calorías quemadas (reloj inteligente)")
|
| 234 |
boton_reloj = gr.Button("Actualizar 🔁")
|
| 235 |
salida_reloj = gr.Markdown()
|
| 236 |
boton_reloj.click(calorias_reloj, inputs=[calorias_quemadas], outputs=salida_reloj)
|
| 237 |
|
| 238 |
-
# --- CHAT NUTI --- #
|
| 239 |
with gr.Tab("🤖 Chat con Nuti"):
|
| 240 |
chat_nuti = gr.Chatbot(label="Nuti - Tu guía de nutrición 🍎")
|
| 241 |
entrada_nuti = gr.Textbox(label="Escribe algo para Nuti...")
|
| 242 |
boton_nuti = gr.Button("Enviar")
|
| 243 |
boton_nuti.click(conversar_nuti, inputs=[entrada_nuti, chat_nuti], outputs=[chat_nuti, entrada_nuti])
|
| 244 |
|
| 245 |
-
# --- COACH EMOCIONAL --- #
|
| 246 |
with gr.Tab("🧘 Coach Emocional"):
|
| 247 |
chat_coach = gr.Chatbot(label="Coach Emocional 🌿")
|
| 248 |
entrada_coach = gr.Textbox(label="Cuéntame cómo te sientes hoy...")
|
| 249 |
boton_coach = gr.Button("Enviar")
|
| 250 |
boton_coach.click(conversar_coach, inputs=[entrada_coach, chat_coach], outputs=[chat_coach, entrada_coach])
|
| 251 |
|
| 252 |
-
# --- RECETAS --- #
|
| 253 |
with gr.Tab("🍽️ Recetas del Nutriólogo"):
|
| 254 |
-
|
| 255 |
descripcion = gr.Textbox(label="Descripción o ingredientes")
|
| 256 |
imagen_receta = gr.Image(label="Imagen (opcional)")
|
| 257 |
boton_subir = gr.Button("Subir receta")
|
| 258 |
salida_subir = gr.Textbox(label="Estado")
|
| 259 |
-
boton_subir.click(subir_receta, inputs=[
|
| 260 |
|
| 261 |
boton_ver = gr.Button("Ver recetas disponibles 🍲")
|
| 262 |
salida_recetas = gr.Markdown()
|
| 263 |
boton_ver.click(mostrar_recetas, outputs=salida_recetas)
|
| 264 |
|
| 265 |
-
# --- RETOS SALUDABLES --- #
|
| 266 |
with gr.Tab("🎯 Retos Saludables"):
|
| 267 |
salida_retos = gr.Markdown()
|
| 268 |
boton_ver_retos = gr.Button("Ver Retos del Día")
|
|
@@ -272,8 +225,6 @@ with gr.Tab("👤 Datos Personales"):
|
|
| 272 |
boton_completar = gr.Button("Completar Reto 🏅")
|
| 273 |
boton_completar.click(completar_reto, inputs=[numero_reto], outputs=salida_retos)
|
| 274 |
|
| 275 |
-
|
| 276 |
-
# --- NUTRIÓLOGOS --- #
|
| 277 |
with gr.Tab("🧑⚕️ Buscar Nutriólogos"):
|
| 278 |
pais = gr.Textbox(label="País")
|
| 279 |
estado = gr.Textbox(label="Estado")
|
|
@@ -282,7 +233,8 @@ with gr.Tab("👤 Datos Personales"):
|
|
| 282 |
salida_nutri = gr.Markdown()
|
| 283 |
boton_buscar.click(buscar_nutriologos, inputs=[pais, estado, ciudad], outputs=salida_nutri)
|
| 284 |
|
| 285 |
-
|
|
|
|
| 286 |
|
| 287 |
if __name__ == "__main__":
|
| 288 |
main()
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import random
|
| 3 |
+
import json
|
| 4 |
from datetime import datetime
|
| 5 |
from chatbot_nuti import buscar_respuesta
|
| 6 |
from coach_emocional import coach_emocional_inteligente
|
|
|
|
| 14 |
calorias_totales = 0
|
| 15 |
calorias_restantes = 0
|
| 16 |
historial_comidas = []
|
| 17 |
+
RECETAS = []
|
| 18 |
+
|
| 19 |
|
| 20 |
# ---------- CHATBOT NUTI ---------- #
|
| 21 |
def conversar_nuti(mensaje, historial):
|
|
|
|
| 25 |
historial = historial + [(mensaje, respuesta)]
|
| 26 |
return historial, ""
|
| 27 |
|
| 28 |
+
|
| 29 |
# ---------- COACH EMOCIONAL ---------- #
|
| 30 |
def conversar_coach(mensaje, historial):
|
| 31 |
MEMORIA_COACH.append({"user": mensaje})
|
|
|
|
| 34 |
historial = historial + [(mensaje, respuesta)]
|
| 35 |
return historial, ""
|
| 36 |
|
| 37 |
+
|
| 38 |
# ---------- CÁLCULO DE CALORÍAS ---------- #
|
| 39 |
def calcular_calorias(edad, peso, altura, genero, actividad, meta):
|
| 40 |
global calorias_totales, calorias_restantes
|
|
|
|
| 53 |
|
| 54 |
calorias_base = bmr * factores.get(actividad.lower(), 1.55)
|
| 55 |
|
|
|
|
| 56 |
if meta.lower() == "bajar de peso":
|
| 57 |
calorias_totales = round(calorias_base * 0.8)
|
| 58 |
elif meta.lower() == "subir de peso":
|
|
|
|
| 64 |
return f"🎯 Tu meta es **{meta.lower()}**.\n🔥 Puedes consumir aproximadamente **{calorias_totales} calorías por día**."
|
| 65 |
|
| 66 |
|
| 67 |
+
# ---------- RELOJ INTELIGENTE ---------- #
|
| 68 |
def calorias_reloj(calorias_quemadas):
|
| 69 |
global calorias_restantes
|
| 70 |
calorias_restantes += calorias_quemadas
|
| 71 |
return f"⌚ Has quemado **{calorias_quemadas} kcal** según tu reloj. Te quedan **{calorias_restantes} kcal** disponibles hoy."
|
| 72 |
|
| 73 |
+
|
| 74 |
+
# ---------- DETECCIÓN DE COMIDA (SIMULADA) ---------- #
|
| 75 |
def analizar_foto(imagen):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 76 |
if imagen is None:
|
| 77 |
+
return "⚠️ Sube una foto de tu comida.", 0
|
|
|
|
|
|
|
| 78 |
comidas = [
|
| 79 |
("Ensalada de pollo", 350),
|
| 80 |
("Hamburguesa con papas", 800),
|
|
|
|
| 88 |
nombre, calorias = random.choice(comidas)
|
| 89 |
return f"🍽️ Parece que comiste **{nombre}** (~{calorias} kcal).", calorias
|
| 90 |
|
| 91 |
+
|
| 92 |
def registrar_comida(imagen):
|
| 93 |
global calorias_restantes, historial_comidas
|
| 94 |
info, calorias = analizar_foto(imagen)
|
|
|
|
| 98 |
historial_comidas.append({"comida": info, "calorias": calorias})
|
| 99 |
return f"{info}\n\n🔥 Calorías restantes del día: **{calorias_restantes} kcal**."
|
| 100 |
|
| 101 |
+
|
| 102 |
def mostrar_historial():
|
| 103 |
if not historial_comidas:
|
| 104 |
return "📭 Aún no has registrado comidas hoy."
|
|
|
|
| 108 |
texto += f"\n🔥 Te quedan **{calorias_restantes} kcal** por consumir hoy."
|
| 109 |
return texto
|
| 110 |
|
| 111 |
+
|
| 112 |
# ---------- RECETAS ---------- #
|
|
|
|
| 113 |
def subir_receta(nombre, descripcion, imagen):
|
| 114 |
if nombre and descripcion:
|
| 115 |
RECETAS.append({"nombre": nombre, "descripcion": descripcion, "imagen": imagen})
|
| 116 |
return f"✅ Receta '{nombre}' añadida correctamente."
|
| 117 |
return "⚠️ Ingresa nombre y descripción."
|
| 118 |
|
| 119 |
+
|
| 120 |
def mostrar_recetas():
|
| 121 |
if not RECETAS:
|
| 122 |
return "📭 No hay recetas cargadas aún."
|
|
|
|
| 125 |
texto += f"**{r['nombre']}**\n{r['descripcion']}\n\n"
|
| 126 |
return texto
|
| 127 |
|
| 128 |
+
|
| 129 |
# ---------- BUSCADOR DE NUTRIÓLOGOS ---------- #
|
| 130 |
def buscar_nutriologos(pais, estado, ciudad):
|
| 131 |
ejemplos = [
|
| 132 |
+
{"nombre": "Dra. Sofía Martínez", "pais": "México", "estado": "Sonora", "ciudad": "Hermosillo", "especialidad": "Nutrición deportiva", "redes": "@nutrisofi (Instagram)", "reseña": "⭐️⭐️⭐️⭐️⭐️ 4.9"},
|
| 133 |
+
{"nombre": "Lic. Andrés Gómez", "pais": "México", "estado": "CDMX", "ciudad": "Coyoacán", "especialidad": "Nutrición clínica", "redes": "@andresnutricion (TikTok)", "reseña": "⭐️⭐️⭐️⭐️ 4.7"},
|
| 134 |
+
{"nombre": "Dra. Camila Silva", "pais": "Chile", "estado": "Región Metropolitana", "ciudad": "Santiago", "especialidad": "Salud emocional", "redes": "@camila.wellness (Instagram)", "reseña": "⭐️⭐️⭐️⭐️⭐️ 5.0"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
]
|
| 136 |
resultados = [n for n in ejemplos if n["pais"].lower() == pais.lower() or n["ciudad"].lower() == ciudad.lower() or n["estado"].lower() == estado.lower()]
|
| 137 |
if not resultados:
|
|
|
|
| 141 |
texto += f"**{n['nombre']}** - {n['especialidad']} ({n['ciudad']}, {n['pais']})\n📱 {n['redes']}\n💬 {n['reseña']}\n\n"
|
| 142 |
return texto
|
| 143 |
|
| 144 |
+
|
| 145 |
+
# ---------- INTERFAZ ---------- #
|
| 146 |
def main():
|
| 147 |
with gr.Blocks(title="NutriBot IA 🥗") as app:
|
| 148 |
gr.Markdown("# 🧠 Bienvenido a **NutriBot IA** 🍎")
|
| 149 |
+
gr.Markdown("Comer sano, inteligente y divertido 🌿")
|
| 150 |
+
|
| 151 |
+
with gr.Tab("👤 Datos Personales"):
|
| 152 |
+
with gr.Row():
|
| 153 |
+
nombre = gr.Textbox(label="Nombre completo")
|
| 154 |
+
edad = gr.Number(label="Edad (años)")
|
| 155 |
+
peso = gr.Number(label="Peso (kg)")
|
| 156 |
+
altura = gr.Number(label="Altura (cm)")
|
| 157 |
+
genero = gr.Radio(["Hombre", "Mujer"], label="Género")
|
| 158 |
+
actividad = gr.Dropdown(["Sedentario", "Ligero", "Moderado", "Activo", "Muy activo"], label="Nivel de actividad física")
|
| 159 |
+
meta = gr.Radio(["Bajar de peso", "Mantener peso", "Subir de peso"], label="🎯 Meta personal")
|
| 160 |
+
|
| 161 |
+
condicion = gr.Textbox(label="🩺 ¿Tienes alguna enfermedad o condición alimenticia?",
|
| 162 |
+
placeholder="Ejemplo: diabetes, hipertensión, intolerancia a la lactosa...")
|
| 163 |
+
|
| 164 |
+
guardar_datos = gr.Button("Guardar información 🧾")
|
| 165 |
+
salida_datos = gr.Markdown()
|
| 166 |
+
|
| 167 |
+
def guardar_informacion(nombre, edad, peso, altura, genero, actividad, meta, condicion):
|
| 168 |
+
perfil = {"nombre": nombre, "edad": edad, "peso": peso, "altura": altura,
|
| 169 |
+
"genero": genero, "actividad": actividad, "meta": meta, "condicion": condicion}
|
| 170 |
+
with open("perfil_usuario.json", "w") as f:
|
| 171 |
+
json.dump(perfil, f, indent=4)
|
| 172 |
+
return f"✅ Información guardada. Nuti ahora sabe que tienes: **{condicion or 'ninguna condición registrada'}**."
|
| 173 |
+
|
| 174 |
+
guardar_datos.click(guardar_informacion,
|
| 175 |
+
inputs=[nombre, edad, peso, altura, genero, actividad, meta, condicion],
|
| 176 |
+
outputs=salida_datos)
|
| 177 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
with gr.Tab("📸 Registro de Comidas"):
|
| 179 |
gr.Markdown("Sube una foto de tu comida y NutriBot estimará las calorías 🍽️")
|
| 180 |
imagen = gr.Image(label="Foto de tu comida", type="filepath")
|
|
|
|
| 186 |
salida_historial = gr.Markdown()
|
| 187 |
boton_historial.click(mostrar_historial, outputs=salida_historial)
|
| 188 |
|
|
|
|
| 189 |
with gr.Tab("⌚ Calorías del Reloj"):
|
| 190 |
calorias_quemadas = gr.Number(label="Calorías quemadas (reloj inteligente)")
|
| 191 |
boton_reloj = gr.Button("Actualizar 🔁")
|
| 192 |
salida_reloj = gr.Markdown()
|
| 193 |
boton_reloj.click(calorias_reloj, inputs=[calorias_quemadas], outputs=salida_reloj)
|
| 194 |
|
|
|
|
| 195 |
with gr.Tab("🤖 Chat con Nuti"):
|
| 196 |
chat_nuti = gr.Chatbot(label="Nuti - Tu guía de nutrición 🍎")
|
| 197 |
entrada_nuti = gr.Textbox(label="Escribe algo para Nuti...")
|
| 198 |
boton_nuti = gr.Button("Enviar")
|
| 199 |
boton_nuti.click(conversar_nuti, inputs=[entrada_nuti, chat_nuti], outputs=[chat_nuti, entrada_nuti])
|
| 200 |
|
|
|
|
| 201 |
with gr.Tab("🧘 Coach Emocional"):
|
| 202 |
chat_coach = gr.Chatbot(label="Coach Emocional 🌿")
|
| 203 |
entrada_coach = gr.Textbox(label="Cuéntame cómo te sientes hoy...")
|
| 204 |
boton_coach = gr.Button("Enviar")
|
| 205 |
boton_coach.click(conversar_coach, inputs=[entrada_coach, chat_coach], outputs=[chat_coach, entrada_coach])
|
| 206 |
|
|
|
|
| 207 |
with gr.Tab("🍽️ Recetas del Nutriólogo"):
|
| 208 |
+
nombre_r = gr.Textbox(label="Nombre de la receta")
|
| 209 |
descripcion = gr.Textbox(label="Descripción o ingredientes")
|
| 210 |
imagen_receta = gr.Image(label="Imagen (opcional)")
|
| 211 |
boton_subir = gr.Button("Subir receta")
|
| 212 |
salida_subir = gr.Textbox(label="Estado")
|
| 213 |
+
boton_subir.click(subir_receta, inputs=[nombre_r, descripcion, imagen_receta], outputs=salida_subir)
|
| 214 |
|
| 215 |
boton_ver = gr.Button("Ver recetas disponibles 🍲")
|
| 216 |
salida_recetas = gr.Markdown()
|
| 217 |
boton_ver.click(mostrar_recetas, outputs=salida_recetas)
|
| 218 |
|
|
|
|
| 219 |
with gr.Tab("🎯 Retos Saludables"):
|
| 220 |
salida_retos = gr.Markdown()
|
| 221 |
boton_ver_retos = gr.Button("Ver Retos del Día")
|
|
|
|
| 225 |
boton_completar = gr.Button("Completar Reto 🏅")
|
| 226 |
boton_completar.click(completar_reto, inputs=[numero_reto], outputs=salida_retos)
|
| 227 |
|
|
|
|
|
|
|
| 228 |
with gr.Tab("🧑⚕️ Buscar Nutriólogos"):
|
| 229 |
pais = gr.Textbox(label="País")
|
| 230 |
estado = gr.Textbox(label="Estado")
|
|
|
|
| 233 |
salida_nutri = gr.Markdown()
|
| 234 |
boton_buscar.click(buscar_nutriologos, inputs=[pais, estado, ciudad], outputs=salida_nutri)
|
| 235 |
|
| 236 |
+
app.launch()
|
| 237 |
+
|
| 238 |
|
| 239 |
if __name__ == "__main__":
|
| 240 |
main()
|