diff --git a/python/packages/core/agent_framework/_agents.py b/python/packages/core/agent_framework/_agents.py index 379601fa256..3e293b15fd8 100644 --- a/python/packages/core/agent_framework/_agents.py +++ b/python/packages/core/agent_framework/_agents.py @@ -2,6 +2,7 @@ from __future__ import annotations +import keyword import logging import re import sys @@ -248,6 +249,10 @@ def _sanitize_agent_name(agent_name: str | None) -> str | None: if sanitized and sanitized[0].isdigit(): sanitized = f"_{sanitized}" + # Suffix with underscore if the sanitized name is a reserved Python keyword + if keyword.iskeyword(sanitized): + sanitized = f"{sanitized}_" + return sanitized diff --git a/python/packages/core/tests/core/test_agents.py b/python/packages/core/tests/core/test_agents.py index c3e132656aa..b9c0b633249 100644 --- a/python/packages/core/tests/core/test_agents.py +++ b/python/packages/core/tests/core/test_agents.py @@ -3458,6 +3458,16 @@ def test_sanitize_agent_name_replaces_invalid_chars(): assert "!" not in result # type: ignore[operator] # pyrefly: ignore[not-iterable] # ty: ignore[unsupported-operator] +def test_sanitize_agent_name_handles_python_keywords(): + """Test _sanitize_agent_name appends trailing underscore for Python keywords.""" + assert _sanitize_agent_name("for") == "for_" + assert _sanitize_agent_name("def") == "def_" + assert _sanitize_agent_name("class") == "class_" + assert _sanitize_agent_name("return") == "return_" + assert _sanitize_agent_name("import") == "import_" + assert _sanitize_agent_name("pass") == "pass_" + + # endregion