from __future__ import annotations from enum import Enum from typing import Optional, List from pydantic import BaseModel, Field class Rodin3DGenerateRequest(BaseModel): seed: int = Field(..., description="seed_") tier: str = Field(..., description="Tier of generation.") material: str = Field(..., description="The material type.") quality: str = Field(..., description="The generation quality of the mesh.") mesh_mode: str = Field(..., description="It controls the type of faces of generated models.") class GenerateJobsData(BaseModel): uuids: List[str] = Field(..., description="str LIST") subscription_key: str = Field(..., description="subscription key") class Rodin3DGenerateResponse(BaseModel): message: Optional[str] = Field(None, description="Return message.") prompt: Optional[str] = Field(None, description="Generated Prompt from image.") submit_time: Optional[str] = Field(None, description="Submit Time") uuid: Optional[str] = Field(None, description="Task str") jobs: Optional[GenerateJobsData] = Field(None, description="Details of jobs") class JobStatus(str, Enum): """ Status for jobs """ Done = "Done" Failed = "Failed" Generating = "Generating" Waiting = "Waiting" class Rodin3DCheckStatusRequest(BaseModel): subscription_key: str = Field(..., description="subscription from generate endpoint") class JobItem(BaseModel): uuid: str = Field(..., description="uuid") status: JobStatus = Field(...,description="Status Currently") class Rodin3DCheckStatusResponse(BaseModel): jobs: List[JobItem] = Field(..., description="Job status List") class Rodin3DDownloadRequest(BaseModel): task_uuid: str = Field(..., description="Task str") class RodinResourceItem(BaseModel): url: str = Field(..., description="Download Url") name: str = Field(..., description="File name with ext") class Rodin3DDownloadResponse(BaseModel): list: List[RodinResourceItem] = Field(..., description="Source List")