Skip to content

Commit da82b2c

Browse files
authored
fix: #2951 warn for tool name character replacement (#2953)
1 parent cebc763 commit da82b2c

File tree

2 files changed

+47
-6
lines changed

2 files changed

+47
-6
lines changed

src/agents/util/_transforms.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,16 @@
44

55

66
def transform_string_function_style(name: str) -> str:
7-
# Replace spaces with underscores
8-
name = name.replace(" ", "_")
7+
transformed_name = name.replace(" ", "_")
98

10-
# Replace non-alphanumeric characters with underscores
11-
transformed_name = re.sub(r"[^a-zA-Z0-9_]", "_", name)
9+
transformed_name = re.sub(r"[^a-zA-Z0-9_]", "_", transformed_name)
10+
final_name = transformed_name.lower()
1211

1312
if transformed_name != name:
14-
final_name = transformed_name.lower()
1513
logger.warning(
1614
f"Tool name {name!r} contains invalid characters for function calling and has been "
1715
f"transformed to {final_name!r}. Please use only letters, digits, and underscores "
1816
"to avoid potential naming conflicts."
1917
)
2018

21-
return transformed_name.lower()
19+
return final_name

tests/test_transforms.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import logging
2+
3+
import pytest
4+
5+
from agents.util._transforms import transform_string_function_style
6+
7+
8+
@pytest.mark.parametrize(
9+
("name", "transformed"),
10+
[
11+
("My Tool", "my_tool"),
12+
("My-Tool", "my_tool"),
13+
],
14+
)
15+
def test_transform_string_function_style_warns_for_replaced_characters(
16+
caplog: pytest.LogCaptureFixture,
17+
name: str,
18+
transformed: str,
19+
) -> None:
20+
with caplog.at_level(logging.WARNING, logger="openai.agents"):
21+
assert transform_string_function_style(name) == transformed
22+
23+
assert f"Tool name {name!r} contains invalid characters" in caplog.text
24+
assert f"transformed to {transformed!r}" in caplog.text
25+
26+
27+
@pytest.mark.parametrize(
28+
("name", "transformed"),
29+
[
30+
("MyTool", "mytool"),
31+
("transfer_to_Agent", "transfer_to_agent"),
32+
("snake_case", "snake_case"),
33+
],
34+
)
35+
def test_transform_string_function_style_does_not_warn_for_case_only_changes(
36+
caplog: pytest.LogCaptureFixture,
37+
name: str,
38+
transformed: str,
39+
) -> None:
40+
with caplog.at_level(logging.WARNING, logger="openai.agents"):
41+
assert transform_string_function_style(name) == transformed
42+
43+
assert caplog.records == []

0 commit comments

Comments
 (0)