"""Tool routes""" from typing import Optional, List, Dict, Any from fastapi import APIRouter, Depends, Body from pydantic import BaseModel from luxx.database import get_db from luxx.models import User from luxx.routes.auth import get_current_user from luxx.tools.core import registry from luxx.utils.helpers import success_response router = APIRouter(prefix="/tools", tags=["Tools"]) @router.get("/", response_model=dict) def list_tools( category: Optional[str] = None, current_user: User = Depends(get_current_user) ): """Get available tools list""" # Get tool definitions directly from registry to access category from luxx.tools.core import ToolDefinition if category: all_tools = [t for t in registry._tools.values() if t.category == category] tools = [t.to_openai_format() for t in all_tools] categorized_tools = [t for t in registry._tools.values() if t.category == category] else: all_tools = list(registry._tools.values()) tools = registry.list_all() categorized_tools = all_tools categorized = {} for tool in categorized_tools: cat = tool.category if cat not in categorized: categorized[cat] = [] categorized[cat].append(tool.to_openai_format()) return success_response(data={ "tools": tools, "categorized": categorized, "total": len(tools) }) @router.get("/{name}", response_model=dict) def get_tool( name: str, current_user: User = Depends(get_current_user) ): """Get tool details""" tool = registry.get(name) if not tool: return {"success": False, "message": "Tool not found", "code": 404} return success_response(data=tool.to_openai_format()) @router.post("/{name}/execute", response_model=dict) def execute_tool( name: str, arguments: Dict[str, Any] = Body(...), current_user: User = Depends(get_current_user) ): """Execute tool manually""" result = registry.execute(name, arguments) return result