diff --git a/backend/app/schemas/worker.py b/backend/app/schemas/worker.py new file mode 100644 index 0000000..bdf1a91 --- /dev/null +++ b/backend/app/schemas/worker.py @@ -0,0 +1,72 @@ +"""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