# retoor from __future__ import annotations import json import logging from typing import Any from ..config import Settings from ..errors import ToolInputError logger = logging.getLogger("devii.docs") DEFAULT_MAX_RESULTS = 5 CONTENT_CHARS = 2400 class DocsController: def __init__(self, settings: Settings, is_admin: bool = False) -> None: self._settings = settings self._is_admin = is_admin async def dispatch(self, name: str, arguments: dict[str, Any]) -> str: if name != "search_docs": raise ToolInputError(f"Unknown docs tool: {name}") return await self._search(arguments) async def _search(self, arguments: dict[str, Any]) -> str: from devplacepy import docs_search query = str(arguments.get("query", "")).strip() if not query: raise ToolInputError("search_docs requires a query.") max_results = int( arguments.get("max_results", DEFAULT_MAX_RESULTS) or DEFAULT_MAX_RESULTS ) max_results = max(1, min(max_results, 10)) results = docs_search.search_pages( query, user=None, is_admin=self._is_admin, limit=max_results, content_chars=CONTENT_CHARS, ) return json.dumps( { "status": "success", "query": query, "count": len(results), "results": results, }, ensure_ascii=False, )