from __future__ import annotations from datetime import datetime from uuid import UUID from pydantic import BaseModel, Field from app.schemas.detection import DetectionModelCapability SegmentationModelCapability = DetectionModelCapability class SegmentationModelsResponse(BaseModel): models: list[SegmentationModelCapability] class SegmentationRunRequest(BaseModel): project_id: UUID dataset_id: UUID model_id: str 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 SegmentationQaRequest(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 SegmentationRunResponse(BaseModel): analysis_run_id: UUID job_id: UUID project_id: UUID dataset_id: UUID model_id: str status: str segmentation_count: int error_code: str | None = None message: str class SegmentationRunRead(BaseModel): 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 model_config = {"from_attributes": True} class SegmentationRunListResponse(BaseModel): items: list[SegmentationRunRead] total: int class SegmentationRead(BaseModel): 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 | None = None bbox_json: dict | None = None area_m2: float | None = None mask_path: str | None = None source_tile_path: str | None = None tile_index: int | None = None properties_json: dict | None = None provenance_json: dict | None = None created_at: datetime | None = None model_config = {"from_attributes": True} class SegmentationListResponse(BaseModel): items: list[SegmentationRead] total: int