QMetaRam / backend /qkernel /executors /tool_executor.py
metarm's picture
Upload folder using huggingface_hub (part 4)
945aae0 verified
Raw History Blame Contribute Delete
1.16 kB
import logging
from typing import Callable
from ..core import BaseService
logger = logging.getLogger("qkernel.executors.tool")
ToolHandler = Callable[[dict], object]
class ToolExecutor(BaseService):
name: str = "tool"
def __init__(self) -> None:
self._tools: dict[str, ToolHandler] = {}
def register(self, name: str, handler: ToolHandler) -> None:
self._tools[name] = handler
logger.info("Tool registered: %s", name)
async def process(self, event: dict) -> dict:
tool_name = event.get("tool", "")
params = event.get("params", {}) or {}
handler = self._tools.get(tool_name)
if handler is None:
available = list(self._tools.keys())
return {
"response": "",
"error": f"tool_not_found: {tool_name}",
"available": available,
}
try:
result = handler(params)
return {"response": result, "tool": tool_name}
except Exception as e:
logger.error("Tool %s failed: %s", tool_name, e)
return {"response": "", "tool": tool_name, "error": str(e)}