Luxx/alcor/routes/tools.py

74 lines
1.9 KiB
Python

"""工具路由"""
from typing import Optional, List, Dict, Any
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from alcor.database import get_db
from alcor.models import User
from alcor.routes.auth import get_current_user
from alcor.tools.core import registry
from alcor.utils.helpers import success_response
router = APIRouter(prefix="/tools", tags=["工具"])
@router.get("/", response_model=dict)
def list_tools(
category: Optional[str] = None,
current_user: User = Depends(get_current_user)
):
"""获取可用工具列表"""
if category:
tools = registry.list_by_category(category)
else:
tools = registry.list_all()
# 按分类分组
categorized = {}
for tool in tools:
cat = tool.get("function", {}).get("category", "general")
if cat not in categorized:
categorized[cat] = []
categorized[cat].append(tool)
return success_response(data={
"tools": tools,
"categorized": categorized,
"total": registry.tool_count
})
@router.get("/{name}", response_model=dict)
def get_tool(
name: str,
current_user: User = Depends(get_current_user)
):
"""获取工具详情"""
tool = registry.get(name)
if not tool:
return {"success": False, "message": "工具不存在", "code": 404}
return success_response(data={
"name": tool.name,
"description": tool.description,
"parameters": tool.parameters,
"category": tool.category
})
@router.post("/{name}/execute", response_model=dict)
def execute_tool(
name: str,
arguments: Dict[str, Any],
current_user: User = Depends(get_current_user)
):
"""手动执行工具"""
result = registry.execute(name, arguments)
if not result.get("success"):
return {"success": False, "message": result.get("error"), "code": 400}
return success_response(data=result)