Newer
Older
vmk-360-data_collector / src / vmk_data_collector / schemas / search.py
@Eugene Sukhodolskiy Eugene Sukhodolskiy 1 day ago 1 KB feat: add pgvector semantic search
from typing import Any

from pydantic import BaseModel, Field

from vmk_data_collector.domain.enums import DealType


class SimilarSearchRequest(BaseModel):
    """Semantic search by text query (vector similarity)."""

    query: str = Field(..., min_length=1, max_length=2000)
    limit: int = Field(default=10, ge=1, le=100)
    deal_type: DealType | None = None
    city: str | None = Field(default=None, max_length=128)
    min_price: float | None = Field(default=None, ge=0)
    max_price: float | None = Field(default=None, ge=0)


class SimilarSearchResult(BaseModel):
    """One listing returned by semantic search."""

    id: int
    title: str | None = None
    description: str | None = None
    generated_description: str | None = None
    deal_type: DealType | None = None
    price: float | None = None
    currency: str | None = None
    city: str | None = None
    district: str | None = None
    rooms_count: int | None = None
    total_area: float | None = None
    url_source: str | None = None
    images_count: int | None = None
    similarity_score: float
    created_at: str | None = None


class SimilarSearchResponse(BaseModel):
    """Response wrapper for semantic search."""

    query: str
    results: list[SimilarSearchResult]
    total: int