47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""Schemas for signal source APIs."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Any, Optional
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class RecipeRecognitionRequest(BaseModel):
|
||
"""食谱识别请求"""
|
||
|
||
food_name: str = Field(..., description="食物名称")
|
||
food_description: Optional[str] = Field(None, description="食物描述")
|
||
image_url: Optional[str] = Field(None, description="图片URL")
|
||
category: Optional[str] = Field(None, description="分类")
|
||
cuisine: Optional[str] = Field(None, description="菜系")
|
||
|
||
calories: Optional[float] = Field(None, description="热量(千卡)")
|
||
protein: Optional[float] = Field(None, description="蛋白质(克)")
|
||
fat: Optional[float] = Field(None, description="脂肪(克)")
|
||
carbs: Optional[float] = Field(None, description="碳水化合物(克)")
|
||
fiber: Optional[float] = Field(None, description="膳食纤维(克)")
|
||
|
||
intent: str = Field(
|
||
default="analyze",
|
||
description="意图:analyze-热量分析, save-保存食谱, recommend-推荐菜谱",
|
||
)
|
||
|
||
user_name: Optional[str] = Field(None, description="用户名")
|
||
|
||
|
||
class RecipeRecognitionResponse(BaseModel):
|
||
"""响应"""
|
||
|
||
success: bool
|
||
signal_id: Optional[int] = None
|
||
project_id: Optional[int] = None
|
||
message: str
|
||
details: Optional[dict[str, Any]] = None
|
||
|
||
|
||
class RecipeBatchRequest(BaseModel):
|
||
"""批量导入请求"""
|
||
|
||
recipes: list[RecipeRecognitionRequest] = Field(..., description="食谱列表")
|