56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
import traceback
|
|
from typing import Any
|
|
|
|
from yuxi.utils import logger
|
|
|
|
|
|
def get_tool_info(tools) -> list[dict[str, Any]]:
|
|
"""获取所有工具的信息(用于前端展示)"""
|
|
tools_info = []
|
|
|
|
try:
|
|
# 获取注册的工具信息
|
|
for tool_obj in tools:
|
|
try:
|
|
metadata = getattr(tool_obj, "metadata", {}) or {}
|
|
info = {
|
|
"id": tool_obj.name,
|
|
"name": metadata.get("name", tool_obj.name),
|
|
"description": tool_obj.description,
|
|
"metadata": metadata,
|
|
"args": [],
|
|
# "is_async": is_async # Include async information
|
|
}
|
|
|
|
if hasattr(tool_obj, "args_schema") and tool_obj.args_schema:
|
|
if isinstance(tool_obj.args_schema, dict):
|
|
schema = tool_obj.args_schema
|
|
else:
|
|
schema = tool_obj.args_schema.schema()
|
|
|
|
for arg_name, arg_info in schema.get("properties", {}).items():
|
|
info["args"].append(
|
|
{
|
|
"name": arg_name,
|
|
"type": arg_info.get("type", ""),
|
|
"description": arg_info.get("description", ""),
|
|
}
|
|
)
|
|
|
|
tools_info.append(info)
|
|
# logger.debug(f"Successfully processed tool info for {tool_obj.name}")
|
|
|
|
except Exception as e:
|
|
logger.error(
|
|
f"Failed to process tool {getattr(tool_obj, 'name', 'unknown')}: {e}\n{traceback.format_exc()}. "
|
|
f"Details: {dict(tool_obj.__dict__)}"
|
|
)
|
|
continue
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to get tools info: {e}\n{traceback.format_exc()}")
|
|
return []
|
|
|
|
logger.info(f"Successfully extracted info for {len(tools_info)} tools")
|
|
return tools_info
|