"""
工具加载器模块,用于自动加载所有已注册的工具
"""
import importlib
import pkgutil
import inspect
import os
import sys
from typing import List, Type
from . import BaseTool, ToolRegistry
def load_tools() -> List[Type[BaseTool]]:
"""
自动加载tools目录下的所有工具模块
Returns:
List[Type[BaseTool]]: 已加载的工具类列表
"""
# 获取当前模块的路径
package_path = os.path.dirname(__file__)
# 获取所有子模块
tool_modules = []
for _, name, is_pkg in pkgutil.iter_modules([package_path]):
# 跳过__init__.py和loader.py
if name in ['__init__', 'loader']:
continue
# 导入模块
module_name = f"{__package__}.{name}"
try:
module = importlib.import_module(module_name)
tool_modules.append(module)
except ImportError as e:
print(f"Warning: Failed to import module {module_name}: {e}")
# 收集所有已注册的工具类
tools = list(ToolRegistry._tools.values())
# 返回工具类列表
return tools
def get_tool_instances() -> dict:
"""
创建所有工具类的实例
Returns:
dict: 工具名称到工具实例的映射
"""
tools = load_tools()
tool_instances = {}
for tool_class in tools:
try:
tool_instance = tool_class()
tool_instances[tool_class.name] = tool_instance
except Exception as e:
print(f"Warning: Failed to instantiate tool {tool_class.name}: {e}")
return tool_instances