From a659a666388331476fd89b4161854471a4db7e2f Mon Sep 17 00:00:00 2001 From: Contributor Date: Mon, 23 Mar 2026 01:12:56 +0800 Subject: [PATCH 1/2] fix: use type(self) for polymorphic dispatch in CodeExecutorAgent Fixes #7205 The on_messages_stream method called CodeExecutorAgent._reflect_on_code_block_results_flow via the concrete class name, breaking polymorphism for subclasses that override this method. Changed to type(self)._reflect_on_code_block_results_flow to ensure the correct subclass implementation is called, matching the pattern used in AssistantAgent (fix for #5953). --- .../src/autogen_agentchat/agents/_code_executor_agent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/packages/autogen-agentchat/src/autogen_agentchat/agents/_code_executor_agent.py b/python/packages/autogen-agentchat/src/autogen_agentchat/agents/_code_executor_agent.py index 2343135a546a..a7e9ef9c72cd 100644 --- a/python/packages/autogen-agentchat/src/autogen_agentchat/agents/_code_executor_agent.py +++ b/python/packages/autogen-agentchat/src/autogen_agentchat/agents/_code_executor_agent.py @@ -664,7 +664,7 @@ async def on_messages_stream( ) # Always reflect on the execution result - async for reflection_response in CodeExecutorAgent._reflect_on_code_block_results_flow( + async for reflection_response in type(self)._reflect_on_code_block_results_flow( system_messages=system_messages, model_client=model_client, model_client_stream=model_client_stream, From 72584555b96d85d701199dc473468f34de6b28c9 Mon Sep 17 00:00:00 2001 From: r266-tech Date: Tue, 7 Apr 2026 20:34:46 +0800 Subject: [PATCH 2/2] test(agentchat): add regression test for CodeExecutorAgent subclass reflection override (#7205) --- .../tests/test_code_executor_agent.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/python/packages/autogen-agentchat/tests/test_code_executor_agent.py b/python/packages/autogen-agentchat/tests/test_code_executor_agent.py index 1ed98c89e1d5..2b323ca12ea4 100644 --- a/python/packages/autogen-agentchat/tests/test_code_executor_agent.py +++ b/python/packages/autogen-agentchat/tests/test_code_executor_agent.py @@ -632,3 +632,39 @@ async def test_approval_functionality_async( assert result.exit_code == expected_exit_code assert expected_in_output in result.output + + +@pytest.mark.asyncio +async def test_subclass_reflection_override_is_called() -> None: + """Regression test: ensures type(self) dispatch so subclass overrides of + _reflect_on_code_block_results_flow are honored (issue #7205).""" + + override_called = False + + class _CustomAgent(CodeExecutorAgent): + @classmethod + async def _reflect_on_code_block_results_flow(cls, **kwargs): # type: ignore[override] + nonlocal override_called + override_called = True + yield Response( + chat_message=TextMessage(content="custom reflection response", source=kwargs["agent_name"]) + ) + + model_client = ReplayChatCompletionClient(["```python\nprint('hello')\n```"]) + + agent = _CustomAgent( + name="test_agent", + code_executor=LocalCommandLineCodeExecutor(), + model_client=model_client, + ) + + async for _ in agent.on_messages_stream( + [TextMessage(content="Run something", source="user")], + CancellationToken(), + ): + pass + + assert override_called, ( + "Subclass _reflect_on_code_block_results_flow was not called; " + "base class CodeExecutorAgent._reflect_on_code_block_results_flow was dispatched instead" + )