Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions src/agents/decorators.py
Original file line number Diff line number Diff line change
@@ -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
Comment thread
seratch marked this conversation as resolved.

__all__ = [
"function_tool",
"input_guardrail",
"output_guardrail",
"tool",
"tool_input_guardrail",
"tool_output_guardrail",
]
42 changes: 42 additions & 0 deletions tests/test_decorators.py
Original file line number Diff line number Diff line change
@@ -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"