from __future__ import annotations from datetime import datetime from uuid import UUID from pydantic import BaseModel, ConfigDict, Field class DetectionModelCapability(BaseModel): model_config = ConfigDict(protected_namespaces=()) model_id: str display_name: str framework: str task_type: str supported_classes: list[str] configured: bool status: str limitation_message: str version: str | None = None class DetectionModelsResponse(BaseModel): models: list[DetectionModelCapability] class ModelAssetRead(BaseModel): model_config = ConfigDict(protected_namespaces=()) model_asset_id: str filename: str display_name: str model_path: str suffix: str framework: str task_type: str size_bytes: int sha256: str active: bool status: str limitation_message: str will_download_models: bool = False class ModelAssetListResponse(BaseModel): model_config = ConfigDict(protected_namespaces=()) items: list[ModelAssetRead] total: int model_directory: str class DetectionRunRequest(BaseModel): model_config = ConfigDict(protected_namespaces=()) project_id: UUID dataset_id: UUID model_id: str model_asset_id: str | None = None confidence_threshold: float = Field(default=0.5, ge=0.0, le=1.0) class_filter: list[str] | None = None tile_manifest_path: str | None = None parameters_json: dict = Field(default_factory=dict) class DetectionQaRequest(BaseModel): reference_dataset_id: UUID iou_threshold: float = Field(default=0.5, ge=0.0, le=1.0) class_name: str | None = None min_confidence: float | None = Field(default=None, ge=0.0, le=1.0) class DetectionRunResponse(BaseModel): model_config = ConfigDict(protected_namespaces=()) analysis_run_id: UUID job_id: UUID project_id: UUID dataset_id: UUID model_id: str status: str detection_count: int error_code: str | None = None message: str class DetectionRunRead(BaseModel): model_config = ConfigDict(from_attributes=True, protected_namespaces=()) id: UUID project_id: UUID dataset_id: UUID | None = None job_id: UUID | None = None analysis_type: str status: str model_name: str | None = None model_version: str | None = None parameters_json: dict result_json: dict | None = None error_message: str | None = None created_at: datetime | None = None started_at: datetime | None = None finished_at: datetime | None = None class DetectionRunListResponse(BaseModel): items: list[DetectionRunRead] total: int class DetectionRead(BaseModel): model_config = ConfigDict(from_attributes=True, protected_namespaces=()) id: UUID project_id: UUID dataset_id: UUID | None = None analysis_run_id: UUID | None = None job_id: UUID | None = None model_name: str model_version: str | None = None class_name: str confidence: float bbox_json: dict | None = None source_tile_path: str | None = None properties_json: dict | None = None created_at: datetime | None = None class DetectionListResponse(BaseModel): items: list[DetectionRead] total: int