54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
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
|