search.py
1 """Natural-language admin search endpoint backed by the system LLM.""" 2 from fastapi import APIRouter, Depends, HTTPException, Request 3 from pydantic import BaseModel, Field 4 5 from restai.auth import get_current_username 6 from restai.database import DBWrapper, get_db_wrapper 7 from restai.models.models import User 8 9 10 router = APIRouter() 11 12 13 class SearchRequest(BaseModel): 14 query: str = Field(max_length=1000, description="Natural-language search query") 15 16 17 @router.post("/search", tags=["Search"]) 18 async def smart_search( 19 request: Request, 20 body: SearchRequest, 21 user: User = Depends(get_current_username), 22 db_wrapper: DBWrapper = Depends(get_db_wrapper), 23 ): 24 """Translate a natural-language query into a structured search using the system LLM.""" 25 if not body.query or not body.query.strip(): 26 raise HTTPException(status_code=400, detail="Query is required") 27 28 from restai.utils.search_ai import run_search 29 try: 30 return await run_search(request.app.state.brain, db_wrapper, user, body.query) 31 except ValueError as e: 32 raise HTTPException(status_code=400, detail=str(e))