/ restai / routers / search.py
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))