""" Request and response models for the API. """ from pydantic import BaseModel, Field from typing import List, Dict, Any, Optional class SearchRequest(BaseModel): """Search request model.""" query: str = Field(..., description="Search query string") size: int = Field(10, ge=1, le=100, description="Number of results to return") from_: int = Field(0, ge=0, alias="from", description="Offset for pagination") filters: Optional[Dict[str, Any]] = Field(None, description="Additional filters") min_score: Optional[float] = Field(None, description="Minimum score threshold") class ImageSearchRequest(BaseModel): """Image search request model.""" image_url: str = Field(..., description="URL of the query image") size: int = Field(10, ge=1, le=100, description="Number of results to return") filters: Optional[Dict[str, Any]] = Field(None, description="Additional filters") class SearchResponse(BaseModel): """Search response model.""" hits: List[Dict[str, Any]] = Field(..., description="Search results") total: int = Field(..., description="Total number of matching documents") max_score: float = Field(..., description="Maximum relevance score") took_ms: int = Field(..., description="Time taken in milliseconds") aggregations: Dict[str, Any] = Field(default_factory=dict, description="Aggregation results") query_info: Dict[str, Any] = Field(default_factory=dict, description="Query processing information") performance_info: Optional[Dict[str, Any]] = Field(None, description="Detailed performance timing information") class DocumentResponse(BaseModel): """Single document response model.""" id: str = Field(..., description="Document ID") source: Dict[str, Any] = Field(..., description="Document source") class HealthResponse(BaseModel): """Health check response model.""" status: str = Field(..., description="Service status") elasticsearch: str = Field(..., description="Elasticsearch status") customer_id: str = Field(..., description="Customer configuration ID") class ErrorResponse(BaseModel): """Error response model.""" error: str = Field(..., description="Error message") detail: Optional[str] = Field(None, description="Detailed error information")