"""Pydantic response schemas""" from pydantic import BaseModel from typing import Optional, List from datetime import datetime class PhotoResponse(BaseModel): """Response model for photo metadata""" id: int filename: str image_url: str description: str tags: List[str] caption: str created_at: datetime class Config: from_attributes = True class PhotoDetailResponse(PhotoResponse): """Detailed photo response with embedding info""" # embedding: Optional[List[float]] = None pass class SearchResult(BaseModel): """Search result with similarity score""" photo_id: int filename: str image_url: str tags: List[str] caption: str description: str distance: float # L2 distance (lower is more similar) class Config: from_attributes = True class SearchResponse(BaseModel): """Response for search endpoint""" query: str results: List[SearchResult] total_results: int class UploadResponse(BaseModel): """Response after uploading a photo""" id: int filename: str image_url: str # tags: List[str] # caption: str message: str class PhotoItem(BaseModel): photo_id: int filename: str image_url: str tags: List[str] caption: str description: str distance: float class AlbumItem(BaseModel): # album_summary: str album: List[PhotoItem] AlbumsResponse = List[AlbumItem] class GenerateImageResponse(BaseModel): """Response for generating a similar image""" description: str generated_image_url: str message: str