from typing import TYPE_CHECKING from core_domain import HumanTaskContract, HumanTaskCreateContract, HumanTaskStatus from core_shared import JSONValue from pydantic import BaseModel, Field if TYPE_CHECKING: from app.db.models import HumanTask class HumanTaskCreateRequest(HumanTaskCreateContract): pass class HumanTaskListRequest(BaseModel): status: HumanTaskStatus | None = None assigned_to: str | None = None run_id: str | None = None limit: int = Field(default=100, ge=1, le=500) class HumanTaskDetailRequest(BaseModel): human_task_id: str class HumanTaskClaimRequest(BaseModel): claimed_by: str class HumanTaskClaimPostRequest(HumanTaskClaimRequest): human_task_id: str class HumanTaskCompleteRequest(BaseModel): status: HumanTaskStatus response_payload_json: dict[str, JSONValue] = Field(default_factory=dict) class HumanTaskCompletePostRequest(HumanTaskCompleteRequest): human_task_id: str class HumanTaskResponse(HumanTaskContract): @classmethod def from_entity(cls, entity: "HumanTask") -> "HumanTaskResponse": return cls.model_validate(entity, from_attributes=True)