Source code for tooluniverse.custom_tool
"""
CustomTool implementation for ToolUniverse
Handles execution of dynamically generated tools with external code files
"""
import importlib.util
import os
from typing import Dict, Any
from .base_tool import BaseTool
from .tool_registry import register_tool
[docs]
@register_tool("CustomTool")
class CustomTool(BaseTool):
"""
CustomTool class for executing dynamically generated tools
"""
[docs]
def __init__(self, tool_config: Dict):
super().__init__(tool_config)
self.code_file = tool_config.get("code_file")
self.name = tool_config.get("name", "CustomTool")
self.description = tool_config.get("description", "")
# Load the external code if code_file is specified
self.execute_function = None
if self.code_file and os.path.exists(self.code_file):
self._load_external_code()
elif (
"implementation" in tool_config
and "source_code" in tool_config["implementation"]
):
self._load_embedded_code(tool_config["implementation"])
def _load_external_code(self):
"""Load the execute_tool function from external Python file"""
try:
# Load module from file
spec = importlib.util.spec_from_file_location(
"custom_tool_module", self.code_file
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
# Get the execute_tool function
if hasattr(module, "execute_tool"):
self.execute_function = module.execute_tool
else:
print(f"Warning: No execute_tool function found in {self.code_file}")
except Exception as e:
print(f"Error loading external code from {self.code_file}: {e}")
def _load_embedded_code(self, implementation: Dict):
"""Load the execute_tool function from embedded source code"""
try:
source_code = implementation.get("source_code", "")
main_function = implementation.get("main_function", "execute_tool")
# Create a temporary module to execute the code
import types
module = types.ModuleType("embedded_tool_module")
# Execute the source code in the module namespace
exec(source_code, module.__dict__)
# Get the main function
if hasattr(module, main_function):
self.execute_function = getattr(module, main_function)
else:
print(f"Warning: No {main_function} function found in embedded code")
except Exception as e:
print(f"Error loading embedded code: {e}")
[docs]
def run(self, arguments: Any = None) -> Dict[str, Any]:
"""
Execute the custom tool
Args:
arguments: Input arguments for the tool
Returns:
Dict containing the result of tool execution
"""
try:
if self.execute_function:
# Use the loaded external function
result = self.execute_function(
arguments if arguments is not None else {}
)
return {"success": True, "result": result, "tool_name": self.name}
else:
# Fallback to basic processing
return {
"success": False,
"error": "No execute_tool function available",
"input_received": arguments,
"tool_name": self.name,
}
except Exception as e:
return {
"success": False,
"error": str(e),
"input_received": arguments,
"tool_name": self.name,
}