from pydantic import BaseModel, Field, confloat, HttpUrl from typing import Optional, List, Dict, Any class ImageTo3DRequest(BaseModel): input_images: List[str] = Field(..., description="输入图片路径列表") model: str = Field(default="single", description="模型类型: single 或 multi") bucket_name: str = Field(..., description="输入图片路径列表") user_id: str = Field(..., description="用户id") task_id: str = Field(...) callback_url: str # 必填,客户端提供的回调地址 class ToSVGRequest(BaseModel): minio_glb_path: str = Field(..., description="输入图片路径列表") bucket_name: str = Field(..., description="输入图片路径列表") user_id: str = Field(..., description="用户id") task_id: str = Field(...) callback_url: str # 必填 class Tripo3dApiModel(BaseModel): input_images: List[str] = Field(..., description="输入图片路径列表") bucket_name: str = Field(..., description="输入图片路径列表") user_id: str = Field(..., description="用户id") callback_url: str # 必填,客户端提供的回调地址 task_id: str = Field() model: str = Field(default="single", description="模型类型: single 或 multi") model_version: Optional[str] = Field(default="v3.1-20260211", description="Model version, e.g. v3.1-20260211 / v3.0-20250812 / v2.5-20250123") poll_interval: Optional[float] = Field(default=2.0, description="Polling interval (seconds)") poll_timeout: Optional[float] = Field(default=1800.0, description="Max polling time (seconds)") request_timeout: Optional[float] = Field(default=120.0, description="HTTP request timeout (seconds)") texture: Optional[bool] = Field(default=True, description="是否生成纹理") pbr: Optional[bool] = Field(default=True, description="是否生成 PBR 材质") texture_quality: Optional[str] = Field(default="standard", description="Texture quality: standard / detailed") texture_alignment: Optional[str] = Field(default="original_image", description="Texture alignment mode: original_image / geometry") orientation: Optional[str] = Field(default="default", description="Orientation mode: default / align_image") face_limit: Optional[int] = Field(default=None, description="限制输出模型的面数") model_seed: Optional[int] = Field(default=None, description="模型生成随机种子") texture_seed: Optional[int] = Field(default=None, description="纹理生成随机种子") auto_size: Optional[str] = Field(default=None, description="Auto size option") quad: Optional[str] = Field(default=None, description="Enable quad remeshing") compress: Optional[str] = Field(default=None, description="Compress option") generate_parts: Optional[str] = Field(default=None, description="Generate segmented parts") smart_low_poly: Optional[str] = Field(default=None, description="Smart low poly optimization") download_outputs: Optional[bool] = Field(default=True, description="是否下载输出文件(现在改为上传到 MinIO)") save_task_json: Optional[bool] = Field(default=True, description="是否保存 task JSON") print_payload: Optional[bool] = Field(default=False, description="是否打印请求 payload") print_output: Optional[bool] = Field(default=True, description="是否打印输出结果")