From 7f81be7bb2aea98a3b3dff34bba47db343b93b99 Mon Sep 17 00:00:00 2001 From: Kazuhiro Sera Date: Thu, 23 Jul 2026 17:49:43 +0900 Subject: [PATCH] feat: add tool decorator alias --- src/agents/decorators.py | 19 ++++++++++++++++++ tests/test_decorators.py | 42 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/agents/decorators.py create mode 100644 tests/test_decorators.py diff --git a/src/agents/decorators.py b/src/agents/decorators.py new file mode 100644 index 0000000000..8f40054377 --- /dev/null +++ b/src/agents/decorators.py @@ -0,0 +1,19 @@ +"""Public decorators for defining Agents SDK components. + +`tool` is an alias for `function_tool`. +""" + +from .guardrail import input_guardrail, output_guardrail +from .tool import function_tool +from .tool_guardrails import tool_input_guardrail, tool_output_guardrail + +tool = function_tool + +__all__ = [ + "function_tool", + "input_guardrail", + "output_guardrail", + "tool", + "tool_input_guardrail", + "tool_output_guardrail", +] diff --git a/tests/test_decorators.py b/tests/test_decorators.py new file mode 100644 index 0000000000..567300da2f --- /dev/null +++ b/tests/test_decorators.py @@ -0,0 +1,42 @@ +import types + +from typing_extensions import assert_type + +import agents.decorators as decorators_module +import agents.tool as tool_module +from agents import ( + FunctionTool, + function_tool, + input_guardrail, + output_guardrail, + tool_input_guardrail, + tool_output_guardrail, +) +from agents.decorators import function_tool as decorators_function_tool, tool + + +def test_decorator_module_preserves_existing_imports_and_identities() -> None: + assert isinstance(decorators_module, types.ModuleType) + assert isinstance(tool_module, types.ModuleType) + assert decorators_function_tool is function_tool + assert tool is function_tool + assert decorators_module.input_guardrail is input_guardrail + assert decorators_module.output_guardrail is output_guardrail + assert decorators_module.tool_input_guardrail is tool_input_guardrail + assert decorators_module.tool_output_guardrail is tool_output_guardrail + assert tool_module.function_tool is function_tool + + +def test_tool_alias_supports_bare_and_configured_decorator_forms() -> None: + @tool + def bare_alias() -> str: + return "bare" + + @tool(name_override="configured_alias") + async def configured_alias() -> str: + return "configured" + + assert_type(bare_alias, FunctionTool) + assert_type(configured_alias, FunctionTool) + assert bare_alias.name == "bare_alias" + assert configured_alias.name == "configured_alias"