added fitness
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from app.llm.client import LLMClient
|
||||
from app.projects.structuring import strip_markdown_json
|
||||
|
||||
MEAL_PROMPT = """
|
||||
Преобразуй описание еды в JSON. Только JSON, без markdown.
|
||||
Схема:
|
||||
{
|
||||
"meal_type": "breakfast|lunch|dinner|snack",
|
||||
"description": "краткое описание",
|
||||
"calories": 0,
|
||||
"protein_g": 0,
|
||||
"fat_g": 0,
|
||||
"carbs_g": 0,
|
||||
"estimated": true
|
||||
}
|
||||
Правила:
|
||||
- Оцени ккал и БЖУ по типичным значениям для России/СНГ.
|
||||
- Все числа — float/int, метрическая система (г, ккал).
|
||||
- meal_type угадай из контекста или snack.
|
||||
- estimated всегда true для LLM-оценки.
|
||||
""".strip()
|
||||
|
||||
WORKOUT_PROMPT = """
|
||||
Преобразуй описание тренировки в JSON. Только JSON.
|
||||
Схема:
|
||||
{
|
||||
"title": "название",
|
||||
"duration_min": null,
|
||||
"notes": "",
|
||||
"exercises": [
|
||||
{"name": "жим лёжа", "sets": 3, "reps": 8, "weight_kg": 80}
|
||||
]
|
||||
}
|
||||
Правила:
|
||||
- weight_kg в кг, метрическая система.
|
||||
- Если данных нет — null или пустой массив.
|
||||
""".strip()
|
||||
|
||||
|
||||
async def structure_meal(raw_text: str) -> dict[str, Any]:
|
||||
llm = LLMClient()
|
||||
result = await llm.complete(
|
||||
[
|
||||
{"role": "system", "content": MEAL_PROMPT},
|
||||
{"role": "user", "content": raw_text},
|
||||
],
|
||||
temperature=0.2,
|
||||
)
|
||||
raw = strip_markdown_json(result.get("content") or "")
|
||||
return json.loads(raw)
|
||||
|
||||
|
||||
async def structure_workout(raw_text: str) -> dict[str, Any]:
|
||||
llm = LLMClient()
|
||||
result = await llm.complete(
|
||||
[
|
||||
{"role": "system", "content": WORKOUT_PROMPT},
|
||||
{"role": "user", "content": raw_text},
|
||||
],
|
||||
temperature=0.2,
|
||||
)
|
||||
raw = strip_markdown_json(result.get("content") or "")
|
||||
return json.loads(raw)
|
||||
Reference in New Issue
Block a user