72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
"""AI Worker schemas."""
|
|||
|
|
from pydantic import BaseModel, Field
|
||
|
|
from typing import Optional
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
|
||
|
|
class WorkerCreate(BaseModel):
|
||
|
|
name: str = Field(..., min_length=1, max_length=200)
|
||
|
|
description: str = ""
|
||
|
|
provider: str = "openai"
|
||
|
|
model_name: str = "gpt-4o-mini"
|
||
|
|
api_key: Optional[str] = None # If None, uses platform default
|
||
|
|
base_url: Optional[str] = None
|
||
|
|
temperature: float = 0.7
|
||
|
|
system_prompt: str = "You are a helpful AI assistant."
|
||
|
|
tools: str = "[]"
|
||
|
|
max_cost_per_task_cents: Optional[int] = None
|
||
|
|
max_cost_per_month_cents: Optional[int] = None
|
||
|
|
available_hours: str = '{"start": "00:00", "end": "23:59"}'
|
||
|
|
max_concurrent_tasks: int = 1
|
||
|
|
|
||
|
|
|
||
|
|
class WorkerUpdate(BaseModel):
|
||
|
|
name: Optional[str] = None
|
||
|
|
description: Optional[str] = None
|
||
|
|
provider: Optional[str] = None
|
||
|
|
model_name: Optional[str] = None
|
||
|
|
api_key: Optional[str] = None
|
||
|
|
base_url: Optional[str] = None
|
||
|
|
temperature: Optional[float] = None
|
||
|
|
system_prompt: Optional[str] = None
|
||
|
|
tools: Optional[str] = None
|
||
|
|
max_cost_per_task_cents: Optional[int] = None
|
||
|
|
max_cost_per_month_cents: Optional[int] = None
|
||
|
|
is_active: Optional[bool] = None
|
||
|
|
available_hours: Optional[str] = None
|
||
|
|
max_concurrent_tasks: Optional[int] = None
|
||
|
|
status: Optional[str] = None
|
||
|
|
|
||
|
|
|
||
|
|
class WorkerResponse(BaseModel):
|
||
|
|
id: int
|
||
|
|
name: str
|
||
|
|
description: str
|
||
|
|
provider: str
|
||
|
|
model_name: str
|
||
|
|
base_url: Optional[str] = None
|
||
|
|
temperature: float
|
||
|
|
system_prompt: str
|
||
|
|
tools: str
|
||
|
|
max_cost_per_task_cents: Optional[int] = None
|
||
|
|
max_cost_per_month_cents: Optional[int] = None
|
||
|
|
status: str
|
||
|
|
is_active: bool
|
||
|
|
current_task_count: int
|
||
|
|
max_concurrent_tasks: int
|
||
|
|
tenant_id: int
|
||
|
|
created_at: datetime
|
||
|
|
updated_at: datetime
|
||
|
|
|
||
|
|
model_config = {"from_attributes": True}
|
||
|
|
|
||
|
|
|
||
|
|
class WorkerTestRequest(BaseModel):
|
||
|
|
test_prompt: str = "Hello, respond with 'OK' if you can hear me."
|
||
|
|
|
||
|
|
|
||
|
|
class WorkerTestResult(BaseModel):
|
||
|
|
success: bool
|
||
|
|
response: str = ""
|
||
|
|
latency_ms: int = 0
|
||
|
|
error: Optional[str] = None
|