Spaces:
Sleeping
Sleeping
Commit
·
fcf3f37
1
Parent(s):
ffe8385
- app.py +2 -2
- nutrition.py +58 -5
app.py
CHANGED
|
@@ -7,7 +7,7 @@ import unicodedata
|
|
| 7 |
import json
|
| 8 |
import re
|
| 9 |
import random
|
| 10 |
-
from nutrition import UserProfile, build_basic_plan, gerar_plano_diario
|
| 11 |
|
| 12 |
# Carregar o JSON
|
| 13 |
with open("exercicios.json", "r", encoding="utf-8") as f:
|
|
@@ -1130,7 +1130,7 @@ def responder(prompt: str):
|
|
| 1130 |
intensidade="moderada",
|
| 1131 |
alergias=dados_usuario.get("alergias", []),
|
| 1132 |
)
|
| 1133 |
-
resposta_final["nutricao"] =
|
| 1134 |
|
| 1135 |
# 🚀 RECUPERAÇÃO
|
| 1136 |
if any(c["tipo"] == "recuperacao" and c.get("score", 0) >= 0.5 for c in conceitos):
|
|
|
|
| 7 |
import json
|
| 8 |
import re
|
| 9 |
import random
|
| 10 |
+
from nutrition import UserProfile, build_basic_plan, gerar_plano_diario, formatar_plano_nutricional
|
| 11 |
|
| 12 |
# Carregar o JSON
|
| 13 |
with open("exercicios.json", "r", encoding="utf-8") as f:
|
|
|
|
| 1130 |
intensidade="moderada",
|
| 1131 |
alergias=dados_usuario.get("alergias", []),
|
| 1132 |
)
|
| 1133 |
+
resposta_final["nutricao"] = formatar_plano_nutricional(resumo, plano)
|
| 1134 |
|
| 1135 |
# 🚀 RECUPERAÇÃO
|
| 1136 |
if any(c["tipo"] == "recuperacao" and c.get("score", 0) >= 0.5 for c in conceitos):
|
nutrition.py
CHANGED
|
@@ -335,9 +335,6 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 335 |
carb_restante -= macros_add["carboidrato"]
|
| 336 |
gord_restante -= macros_add["gordura"]
|
| 337 |
|
| 338 |
-
print(f"[DEBUG] Adicionado carboidrato: {carb['nome']} ({qtd_g:.1f}g) | "
|
| 339 |
-
f"Calorias restantes: {calorias_restantes:.1f}")
|
| 340 |
-
|
| 341 |
# Gordura
|
| 342 |
gordura_opcoes = [
|
| 343 |
a for a in alimentos_db
|
|
@@ -365,8 +362,6 @@ def sugerir_alimentos_para_refeicao(nome_refeicao, macros_ref, restricoes=None,
|
|
| 365 |
carb_restante -= macros_add["carboidrato"]
|
| 366 |
gord_restante -= macros_add["gordura"]
|
| 367 |
|
| 368 |
-
print(f"[DEBUG] Adicionada gordura: {gord['nome']} ({qtd_g:.1f}g) | "
|
| 369 |
-
f"Calorias restantes: {calorias_restantes:.1f}")
|
| 370 |
else:
|
| 371 |
break
|
| 372 |
|
|
@@ -424,3 +419,61 @@ def gerar_plano_diario(plano: PlanoNutricional, n_refeicoes: Optional[int] = Non
|
|
| 424 |
plano_diario[ref] = sugestao
|
| 425 |
|
| 426 |
return plano_diario
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 335 |
carb_restante -= macros_add["carboidrato"]
|
| 336 |
gord_restante -= macros_add["gordura"]
|
| 337 |
|
|
|
|
|
|
|
|
|
|
| 338 |
# Gordura
|
| 339 |
gordura_opcoes = [
|
| 340 |
a for a in alimentos_db
|
|
|
|
| 362 |
carb_restante -= macros_add["carboidrato"]
|
| 363 |
gord_restante -= macros_add["gordura"]
|
| 364 |
|
|
|
|
|
|
|
| 365 |
else:
|
| 366 |
break
|
| 367 |
|
|
|
|
| 419 |
plano_diario[ref] = sugestao
|
| 420 |
|
| 421 |
return plano_diario
|
| 422 |
+
|
| 423 |
+
def formatar_plano_nutricional(nutricao: dict, formato: str = "markdown") -> str:
|
| 424 |
+
"""
|
| 425 |
+
Formata o plano nutricional (dict) para texto humano legível em Markdown ou HTML.
|
| 426 |
+
|
| 427 |
+
Args:
|
| 428 |
+
nutricao: dicionário com chaves 'resumo' e 'plano'
|
| 429 |
+
formato: 'markdown' (default) ou 'html'
|
| 430 |
+
|
| 431 |
+
Returns:
|
| 432 |
+
str: texto formatado pronto para exibição
|
| 433 |
+
"""
|
| 434 |
+
resumo = nutricao.get("resumo", "").strip()
|
| 435 |
+
plano = nutricao.get("plano", {})
|
| 436 |
+
|
| 437 |
+
linhas = [resumo, ""] # começa com o resumo
|
| 438 |
+
|
| 439 |
+
# Ícones por refeição
|
| 440 |
+
icones_refeicao = {
|
| 441 |
+
"matabicho": "🍳",
|
| 442 |
+
"lanche1": "🥪",
|
| 443 |
+
"almoco": "🍽️",
|
| 444 |
+
"lanche2": "🍎",
|
| 445 |
+
"lanche3": "🥛",
|
| 446 |
+
"jantar": "🌙",
|
| 447 |
+
}
|
| 448 |
+
|
| 449 |
+
for refeicao, alimentos in plano.items():
|
| 450 |
+
icone = icones_refeicao.get(refeicao, "🍴")
|
| 451 |
+
nome_fmt = refeicao.capitalize()
|
| 452 |
+
|
| 453 |
+
linhas.append(f"### {icone} {nome_fmt}")
|
| 454 |
+
|
| 455 |
+
for item in alimentos:
|
| 456 |
+
nome = item["alimento"]
|
| 457 |
+
qtd = round(item["quantidade_g"])
|
| 458 |
+
macros = item["macros"]
|
| 459 |
+
|
| 460 |
+
cal = round(macros["calorias"])
|
| 461 |
+
p = round(macros["proteina"], 1)
|
| 462 |
+
c = round(macros["carboidrato"], 1)
|
| 463 |
+
g = round(macros["gordura"], 1)
|
| 464 |
+
|
| 465 |
+
linhas.append(
|
| 466 |
+
f"- **{nome}** – {qtd}g "
|
| 467 |
+
f"({cal} kcal, P: {p}g, C: {c}g, G: {g}g)"
|
| 468 |
+
)
|
| 469 |
+
|
| 470 |
+
linhas.append("") # quebra entre refeições
|
| 471 |
+
|
| 472 |
+
texto = "\n".join(linhas).strip()
|
| 473 |
+
|
| 474 |
+
# Conversão opcional para HTML
|
| 475 |
+
if formato == "html":
|
| 476 |
+
import markdown
|
| 477 |
+
texto = markdown.markdown(texto)
|
| 478 |
+
|
| 479 |
+
return texto
|