from pydantic import BaseModel from typing import Optional, List class FoodRecognizeRequest(BaseModel): image_url: str prompt: str = "识别图片中的主要食材,返回 JSON 格式:[{name, confidence, category}]" class FoodsItem(BaseModel): name: str confidence: float category: str = "unknown" class FoodRecognizeResponse(BaseModel): foods: List[FoodsItem] raw_response: str = "" trace_id: str = "" class MenuGenerateRequest(BaseModel): selected_foods: str participants: str date: str allergies: Optional[str] = None avoid_foods: Optional[str] = None health_goals: Optional[str] = None spice_level: Optional[int] = None cuisine_pref: Optional[str] = None # CR-C / AC-23:Java AiGateway 下发的午/晚餐标准菜数 D(N)。 # 默认 None 让旧调用方 100% 兼容;菜数硬保证在 Java normalizeMenu,此处仅软引导 prompt。 dish_count: Optional[int] = None class MenuIngredient(BaseModel): name: str grams: int class MenuDish(BaseModel): name: str ingredients: List[MenuIngredient] cooking_method: str = "" nutrition: Optional[dict] = None notes: str = "" class MenuGenerateResponse(BaseModel): menu_json: str = "" trace_id: str = ""