""" routers/search.py — /search endpoint. """ from __future__ import annotations import time from fastapi import APIRouter, Depends from fastapi.responses import JSONResponse from core.database import get_pool from models.requests import SearchRequest from models.responses import SearchResponse from services.embedder import EmbedService from services.retriever import hybrid_search from core.settings import Settings router = APIRouter(prefix='/search', tags=['search']) def _get_settings() -> Settings: from main import app_settings return app_settings @router.post('', response_model=SearchResponse) async def search(req: SearchRequest, settings: Settings = Depends(_get_settings)): pool = await get_pool() embedder = EmbedService(settings.ollama_url, settings.embedding_model) embedding = await embedder.embed(req.query) async with pool.acquire() as conn: results, elapsed = await hybrid_search( conn=conn, query=req.query, embedding=embedding, limit=req.limit, threshold=req.threshold, tags=req.tags, ) return SearchResponse(results=results, total=len(results), query_time_ms=elapsed)