from typing import Any from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from sqlmodel import Session from app.api import deps from app.ai.nutrition import nutrition_module, NutritionalInfo from app.core.security import create_access_token # Just ensuring we have auth imports if needed later from app.models.user import User router = APIRouter() class AnalyzeRequest(BaseModel): description: str from app.models.food import FoodLog, FoodItem from app.api.deps import get_session from app.core.security import get_password_hash # Not needed from app.config import settings @router.post("/analyze", response_model=NutritionalInfo) def analyze_food( request: AnalyzeRequest, ) -> Any: """ Analyze food description and return nutritional info using DSPy. """ try: result = nutrition_module(description=request.description) return result.nutritional_info except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.post("/log", response_model=FoodLog) def log_food( *, session: Session = Depends(deps.get_session), nutrition_info: NutritionalInfo, current_user: deps.CurrentUser, ) -> Any: """ Save food log to database. """ food_log = FoodLog( user_id=current_user.id, name=nutrition_info.name, calories=nutrition_info.calories, protein=nutrition_info.protein, carbs=nutrition_info.carbs, fats=nutrition_info.fats, ) session.add(food_log) session.commit() session.refresh(food_log) return food_log