71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
"""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
|