from pydantic import BaseModel, Field, ConfigDict, field_validator from typing import Optional, Any from datetime import datetime class AIModelBase(BaseModel): model_config = ConfigDict(protected_namespaces=()) model_type: str = Field(..., pattern="^(asr|llm)$") provider: str = Field(..., max_length=50) model_name: str = Field(..., max_length=100) display_name: Optional[str] = Field(None, max_length=100) api_key: Optional[str] = None base_url: Optional[str] = None api_path: Optional[str] = None config: Optional[dict[str, Any]] = None is_default: bool = False status: int = 1 @field_validator('is_default', mode='before') @classmethod def parse_is_default(cls, v): if isinstance(v, int): return bool(v) return v class AIModelCreate(AIModelBase): pass class AIModelUpdate(BaseModel): model_config = ConfigDict(protected_namespaces=()) model_type: Optional[str] = None provider: Optional[str] = None model_name: Optional[str] = None display_name: Optional[str] = None api_key: Optional[str] = None base_url: Optional[str] = None api_path: Optional[str] = None config: Optional[dict[str, Any]] = None is_default: Optional[bool] = None status: Optional[int] = None class AIModelOut(AIModelBase): model_id: int created_at: datetime updated_at: datetime class Config: from_attributes = True