Task 13: StyleAdapter with 5 cuisine templates (Italian, Latin, East Asian,
Eastern European, Mediterranean). Each template includes weighted method_bias
(sums to 1.0), element-filtered aromatics/depth/structure helpers, and
seasoning/finishing-fat vectors. StyleTemplate is a fully immutable frozen
dataclass with tuple fields.
Task 14: LLMRecipeGenerator for Levels 3 and 4. Level 3 builds a structured
element-scaffold prompt; Level 4 generates a minimal wildcard prompt (<1500
chars). Allergy hard-exclusion wired through RecipeRequest.allergies into
both prompt builders and the generate() call path. Parsed LLM response
(title, ingredients, directions, notes) fully propagated to RecipeSuggestion.
Task 15: User settings key-value store. Migration 012 adds user_settings
table. Store.get_setting / set_setting with upsert. GET/PUT /settings/{key}
endpoints with Pydantic SettingBody, key allowlist, get_session dependency.
RecipeEngine reads cooking_equipment from settings when hard_day_mode=True.
55 tests passing.
13 lines
No EOL
825 B
Python
13 lines
No EOL
825 B
Python
from fastapi import APIRouter
|
|
from app.api.endpoints import health, receipts, export, inventory, ocr, recipes, settings, staples
|
|
|
|
api_router = APIRouter()
|
|
|
|
api_router.include_router(health.router, prefix="/health", tags=["health"])
|
|
api_router.include_router(receipts.router, prefix="/receipts", tags=["receipts"])
|
|
api_router.include_router(ocr.router, prefix="/receipts", tags=["ocr"])
|
|
api_router.include_router(export.router, tags=["export"])
|
|
api_router.include_router(inventory.router, prefix="/inventory", tags=["inventory"])
|
|
api_router.include_router(recipes.router, prefix="/recipes", tags=["recipes"])
|
|
api_router.include_router(settings.router, prefix="/settings", tags=["settings"])
|
|
api_router.include_router(staples.router, prefix="/staples", tags=["staples"]) |