From 1f5bc86bbd4e1c20db967ffaffe5b74a09ba2201 Mon Sep 17 00:00:00 2001 From: Manohar Paturi <186662190+ManoharPaturi@users.noreply.github.com> Date: Wed, 23 Sep 2026 19:05:06 +0530 Subject: [PATCH] fix(core): prevent Python keywords from producing invalid tool names in _sanitize_agent_name Signed-off-by: Manohar Paturi <186662190+ManoharPaturi@users.noreply.github.com> --- python/packages/core/agent_framework/_agents.py | 5 +++++ python/packages/core/tests/core/test_agents.py | 10 ++++++++++ 2 files changed, 15 insertions(+) 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