mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 12:05:54 +00:00
* feat: add tools API endpoint and tools-selector form type Backend: - Add GET /api/v1/tools — list all available tools (plugin + MCP) - Add GET /api/v1/tools/<tool_name> — get specific tool details Frontend: - Add TOOLS_SELECTOR form type for plugin config forms - Multi-select dialog with tool name and description - Add PluginTool entity type and API client methods * fix: remove unused quart import, fix prettier formatting * style: ruff format tools.py * chore: bump langbot-plugin to 0.3.7
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from ... import group
|
|
|
|
|
|
@group.group_class('tools', '/api/v1/tools')
|
|
class ToolsRouterGroup(group.RouterGroup):
|
|
async def initialize(self) -> None:
|
|
@self.route('', methods=['GET'], auth_type=group.AuthType.USER_TOKEN)
|
|
async def _() -> str:
|
|
"""获取所有可用工具列表"""
|
|
tools = await self.ap.tool_mgr.get_all_tools()
|
|
|
|
tool_list = []
|
|
for tool in tools:
|
|
tool_list.append(
|
|
{
|
|
'name': tool.name,
|
|
'description': tool.description,
|
|
'human_desc': tool.human_desc,
|
|
'parameters': tool.parameters,
|
|
}
|
|
)
|
|
|
|
return self.success(data={'tools': tool_list})
|
|
|
|
@self.route('/<tool_name>', methods=['GET'], auth_type=group.AuthType.USER_TOKEN)
|
|
async def _(tool_name: str) -> str:
|
|
"""获取特定工具详情"""
|
|
tools = await self.ap.tool_mgr.get_all_tools()
|
|
|
|
for tool in tools:
|
|
if tool.name == tool_name:
|
|
return self.success(
|
|
data={
|
|
'tool': {
|
|
'name': tool.name,
|
|
'description': tool.description,
|
|
'human_desc': tool.human_desc,
|
|
'parameters': tool.parameters,
|
|
}
|
|
}
|
|
)
|
|
|
|
return self.http_status(404, -1, f'Tool not found: {tool_name}')
|