""" Pydantic Models - GENERATED FILE Do not edit directly. Regenerate using modelgen. """ from datetime import datetime from enum import Enum from typing import Any, Dict, List, Optional from uuid import UUID from pydantic import BaseModel, Field class DetectRequest(BaseModel): """Request body for object detection.""" image: str model: Optional[str] = None confidence: Optional[float] = None target_classes: Optional[List[str]] = None class BBox(BaseModel): """A detected bounding box.""" x: int y: int w: int h: int confidence: float label: str class DetectResponse(BaseModel): """Response from object detection.""" detections: List[BBox] = Field(default_factory=list) class OCRRequest(BaseModel): """Request body for OCR.""" image: str languages: Optional[List[str]] = None class OCRTextResult(BaseModel): """A single OCR text extraction result.""" text: str confidence: float bbox: List[int] = Field(default_factory=list) class OCRResponse(BaseModel): """Response from OCR.""" results: List[OCRTextResult] = Field(default_factory=list) class PreprocessRequest(BaseModel): """Request body for image preprocessing.""" image: str binarize: bool = False deskew: bool = False contrast: bool = True class PreprocessResponse(BaseModel): """Response from preprocessing.""" image: str class VLMRequest(BaseModel): """Request body for visual language model query.""" image: str prompt: str model: Optional[str] = None class VLMResponse(BaseModel): """Response from VLM.""" brand: str confidence: float reasoning: str class AnalyzeRegionsRequest(BaseModel): """Request body for CV region analysis.""" image: str edge_canny_low: int = 50 edge_canny_high: int = 150 edge_hough_threshold: int = 80 edge_hough_min_length: int = 100 edge_hough_max_gap: int = 10 edge_pair_max_distance: int = 200 edge_pair_min_distance: int = 15 class RegionBox(BaseModel): """A candidate region from CV analysis.""" x: int y: int w: int h: int confidence: float label: str class AnalyzeRegionsResponse(BaseModel): """Response from CV region analysis.""" regions: List[RegionBox] = Field(default_factory=list) class AnalyzeRegionsDebugResponse(BaseModel): """Response from CV region analysis with debug overlays.""" regions: List[RegionBox] = Field(default_factory=list) edge_overlay_b64: str = "" lines_overlay_b64: str = "" horizontal_count: int = 0 pair_count: int = 0 class SegmentFieldRequest(BaseModel): """Request body for field segmentation.""" image: str hue_low: int = 30 hue_high: int = 85 sat_low: int = 30 sat_high: int = 255 val_low: int = 30 val_high: int = 255 morph_kernel: int = 15 min_area_ratio: float = 0.05 class SegmentFieldResponse(BaseModel): """Response from field segmentation.""" boundary: List[List[int]] = Field(default_factory=list) coverage: float = 0.0 mask_b64: str = "" class SegmentFieldDebugResponse(BaseModel): """Response from field segmentation with debug overlay.""" boundary: List[List[int]] = Field(default_factory=list) coverage: float = 0.0 mask_overlay_b64: str = "" class ConfigUpdate(BaseModel): """Request body for updating server configuration.""" device: Optional[str] = None yolo_model: Optional[str] = None yolo_confidence: Optional[float] = None vram_budget_mb: Optional[int] = None strategy: Optional[str] = None ocr_languages: Optional[List[str]] = None ocr_min_confidence: Optional[float] = None