Tripo MCP Server
by VAST-AI-Research
Verified
"""
Data models for the Tripo API client.
"""
from dataclasses import dataclass
from typing import Dict, List, Optional, Any, Union
from enum import Enum
import datetime
class TaskStatus(str, Enum):
"""Task status enum."""
QUEUED = "queued"
RUNNING = "running"
SUCCESS = "success"
FAILED = "failed"
CANCELLED = "cancelled"
UNKNOWN = "unknown"
BANNED = "banned"
EXPIRED = "expired"
class TopologyType(str, Enum):
"""Topology type enum."""
BIP = "bip"
QUAD = "quad"
@dataclass
class TaskOutput:
"""Task output data."""
model: Optional[str] = None
base_model: Optional[str] = None
pbr_model: Optional[str] = None
rendered_image: Optional[str] = None
riggable: Optional[bool] = None
topology: Optional[TopologyType] = None
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> 'TaskOutput':
"""Create a TaskOutput from a dictionary."""
topology = data.get('topology')
if topology and isinstance(topology, str):
try:
topology = TopologyType(topology)
except ValueError:
topology = None
return cls(
model=data.get('model'),
base_model=data.get('base_model'),
pbr_model=data.get('pbr_model'),
rendered_image=data.get('rendered_image'),
riggable=data.get('riggable'),
topology=topology
)
@dataclass
class Task:
"""Task data model."""
task_id: str
type: str
status: TaskStatus
input: Dict[str, Any]
output: TaskOutput
progress: int
create_time: int
@property
def created_at(self) -> datetime.datetime:
"""Get the creation time as a datetime object."""
return datetime.datetime.fromtimestamp(self.create_time)
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> 'Task':
"""Create a Task from a dictionary."""
return cls(
task_id=data['task_id'],
type=data['type'],
status=TaskStatus(data['status']),
input=data['input'],
output=TaskOutput.from_dict(data['output']),
progress=data['progress'],
create_time=data['create_time']
)
@dataclass
class Balance:
"""User balance data model."""
balance: float
frozen: float
@classmethod
def from_dict(cls, data: Dict[str, Any]) -> 'Balance':
"""Create a Balance from a dictionary."""
return cls(
balance=data['balance'],
frozen=data['frozen']
)