Creating Tool Rules

Tool rules allows developer to define constrains on their tools, such as requiring that a tool terminate agent execution or be followed by another tool. We support the following tool rules:

  • TerminalToolRule(tool_name=...) - If the tool is called, the agent ends execution
  • InitToolRule(tool_name=...) - The tool must be called first when an agent is run
  • ChildToolRule(tool_name=..., children=[...]) - If the tool is called, it must be followed by one of the tools specified in children
  • ParentToolRule(tool_name=..., children=[...]) - The tool must be called before the tools specified in children can be called
  • ConditionalToolRule(tool_name=..., child_output_mapping={...}) - If the tool is called, it must be followed by one of the tools specified in children based off the tool’s output
  • ContinueToolRule(tool_name=...) - If the tool is called, the agent must continue execution
  • MaxCountPerStepToolRule(tool_name=..., max_count_limit=...) - The tool cannot be called more than max_count_limit times in a single step
    By default, the send_message tool is marked with TerminalToolRule, since you usually do not want the agent to continue executing after it has sent a message to the user.

For example, you can ensure that the agent will stop execution if either the send_message or roll_d20 tool is called by specifying tool rules in the agent creation:

python
1# create a new agent
2agent_state = client.create_agent(
3 # create the agent with an additional tool
4 tools=[tool.name],
5 # add tool rules that terminate execution after specific tools
6 tool_rules=[
7 # exit after roll_d20 is called
8 TerminalToolRule(tool_name=tool.name, type="exit_loop"),
9 # exit after send_message is called (default behavior)
10 TerminalToolRule(tool_name="send_message", type="exit_loop"),
11 ],
12)
13
14print(f"Created agent with name {agent_state.name} with tools {agent_state.tools}")

You can see a full working example of tool rules here.