""" 图片生成数据传输对象定义 定义图片生成API请求和响应的数据结构 """ from datetime import datetime from typing import List, Optional from decimal import Decimal from pydantic import BaseModel, ConfigDict, Field class TextToImageRequest(BaseModel): """文生图请求""" prompt: str = Field(..., min_length=1, description="文本提示词") model: str = Field(default="wanx2.1-t2i-turbo", description="模型名称") n: int = Field(default=1, ge=1, le=4, description="生成图片数量") size: str = Field(default="1024*1024", description="图片尺寸") negative_prompt: Optional[str] = Field(default=None, description="负面提示词") prompt_extend: bool = Field(default=True, description="是否开启提示词智能改写(wan2.6)") watermark: bool = Field(default=False, description="是否添加水印") seed: Optional[int] = Field(default=None, description="随机数种子") class TextToImageResponse(BaseModel): """文生图响应""" success: bool images: List[str] = Field(default_factory=list, description="OSS图片URL列表") bill: Decimal = Field(default=Decimal("0"), description="费用") record_id: int = Field(default=0, description="记录ID") error: Optional[str] = Field(default=None, description="错误信息") class ImageToImageRequest(BaseModel): """图生图请求""" prompt: str = Field(..., min_length=1, description="文本提示词") model: str = Field(default="wanx2.1-imageedit", description="模型名称") n: int = Field(default=1, ge=1, le=4, description="生成图片数量") size: str = Field(default="1024*1024", description="图片尺寸") class ImageToImageResponse(BaseModel): """图生图响应""" success: bool images: List[str] = Field(default_factory=list, description="OSS图片URL列表") bill: Decimal = Field(default=Decimal("0"), description="费用") record_id: int = Field(default=0, description="记录ID") error: Optional[str] = Field(default=None, description="错误信息") class ImageModelInfo(BaseModel): """图片模型信息""" model_id: str = Field(..., description="模型ID") model_name: str = Field(..., description="模型名称") description: str = Field(default="", description="模型描述") price_per_image: Decimal = Field(..., description="每张图片价格") supported_sizes: List[str] = Field(default_factory=list, description="支持的尺寸") class ImageHistoryItem(BaseModel): """历史记录项""" id: int model_name: str input_type: str input_data: str image_count: int output_images: List[str] bill: Decimal created_at: datetime model_config = ConfigDict(from_attributes=True) class ImageHistoryResponse(BaseModel): """历史记录响应""" items: List[ImageHistoryItem] total: int page: int page_size: int