mirror of
https://github.com/RYDE-WORK/Langchain-Chatchat.git
synced 2026-01-21 14:23:33 +08:00
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import List
|
|
|
|
from fastapi import APIRouter, Request, Body
|
|
|
|
from chatchat.configs import logger
|
|
from chatchat.server.utils import BaseResponse
|
|
|
|
|
|
tool_router = APIRouter(prefix="/tools", tags=["Toolkits"])
|
|
|
|
|
|
@tool_router.get("/", response_model=BaseResponse)
|
|
async def list_tools():
|
|
import importlib
|
|
from chatchat.server.agent.tools_factory import tools_registry
|
|
importlib.reload(tools_registry)
|
|
|
|
data = {t.name: {"name": t.name, "description": t.description, "args": t.args} for t in tools_registry.all_tools}
|
|
return {"data": data}
|
|
|
|
|
|
@tool_router.post("/call", response_model=BaseResponse)
|
|
async def call_tool(
|
|
name: str = Body(examples=["calculate"]),
|
|
kwargs: dict = Body({}, examples=[{"a":1,"b":2,"operator":"+"}]),
|
|
):
|
|
import importlib
|
|
from chatchat.server.agent.tools_factory import tools_registry
|
|
importlib.reload(tools_registry)
|
|
|
|
tool_names = {t.name: t for t in tools_registry.all_tools}
|
|
if tool := tool_names.get(name):
|
|
try:
|
|
result = await tool.ainvoke(kwargs)
|
|
return {"data": result}
|
|
except Exception:
|
|
msg = f"failed to call tool '{name}'"
|
|
logger.error(msg, exc_info=True)
|
|
return {"code": 500, "msg": msg}
|
|
else:
|
|
return {"code": 500, "msg": f"no tool named '{name}'"}
|