"""Pydantic schemas for the Unified Search plugin.""" from __future__ import annotations from typing import Any from pydantic import BaseModel, Field # ─── Search ─── class SearchRequest(BaseModel): query: str = Field(..., min_length=1, max_length=500) entity_types: list[str] | None = None limit: int = Field(default=20, ge=1, le=100) offset: int = Field(default=0, ge=0) class SearchResult(BaseModel): entity_type: str entity_id: str title: str snippet: str score: float data: dict[str, Any] = Field(default_factory=dict) class SearchResponse(BaseModel): query: str normalized_query: str results: list[SearchResult] facets: dict[str, Any] summary: str suggestions: list[str] # ─── Similar ─── class SimilarRequest(BaseModel): entity_type: str entity_id: str limit: int = Field(default=5, ge=1, le=50) class SimilarResponse(BaseModel): similar: dict[str, list[SearchResult]] # ─── Suggest ─── class SuggestRequest(BaseModel): q: str = Field(..., min_length=1, max_length=200) limit: int = Field(default=10, ge=1, le=50) class SuggestResponse(BaseModel): suggestions: list[str] # ─── Reindex ─── class ReindexRequest(BaseModel): entity_types: list[str] = Field(default_factory=list) # ─── Provider ─── class ProviderResponse(BaseModel): entity_type: str plugin_name: str is_active: bool