Tools¶
AgentFly provides a comprehensive tool system that enables agents to interact with external systems and APIs. Tools can be stateful (with environment management) or stateless, and support both synchronous and asynchronous execution.
Structure¶
- Tool - Base tool class and decorator
- Predefined Tools - Built-in tools
Basic Tool Definition¶
from agentfly.tools import tool
@tool(name="AdditionTool", description="Adds two numbers.")
def add(a, b: int = 1):
"""
Adds two numbers.
Args:
a (int): The first number.
b (int): The second number which should be a non-negative integer.
Returns:
int: The sum of a and b.
"""
return a + b
Stateful Tool with ResourceEngine¶
from agentfly.core import Context
from agentfly.envs.python_env import PythonSandboxSpec
from agentfly.tools import tool
@tool(
name="code_interpreter",
description="Run the code in docker container and return the output from stdout or stderr",
)
async def code_interpreter(code: str, context: Context):
"""
Run the code in docker container and return the output from stdout or stderr.
Uses one Python sandbox per rollout (acquired via Context); the sandbox is
released when the rollout ends. Warm the pool at training start with
ResourceEngine.start(python_sandbox_spec(), size=32, backend="local") if needed.
Args:
code: The code to run.
context: Injected rollout context; used to acquire the sandbox resource.
Returns:
str: The output from stdout or stderr.
"""
code = str(code)
spec = PythonSandboxSpec
env = await context.acquire_resource(spec=spec, scope="global", backend="local")
try:
obs = await env.step(code)
return str(obs)
except Exception as e:
return f"Error: {str(e)}\n{traceback.format_exc()}"