import pytest from autogen_agentchat.agents import CodeExecutorAgent from autogen_agentchat.base import Response from autogen_agentchat.messages import TextMessage from autogen_core import CancellationToken from autogen_core.components.code_executor import LocalCommandLineCodeExecutor @pytest.mark.asyncio async def test_basic_code_execution() -> None: """Test basic code execution""" agent = CodeExecutorAgent(name="code_executor", code_executor=LocalCommandLineCodeExecutor()) messages = [ TextMessage( content=""" ```python import math number = 42 square_root = math.sqrt(number) print("%0.3f" % (square_root,)) ``` """.strip(), source="assistant", ) ] response = await agent.on_messages(messages, CancellationToken()) assert isinstance(response, Response) assert isinstance(response.chat_message, TextMessage) assert response.chat_message.content.strip() == "6.481" assert response.chat_message.source == "code_executor" @pytest.mark.asyncio async def test_code_execution_error() -> None: """Test basic code execution""" agent = CodeExecutorAgent(name="code_executor", code_executor=LocalCommandLineCodeExecutor()) messages = [ TextMessage( content=""" ```python import math number = -1.0 square_root = math.sqrt(number) print("%0.3f" % (square_root,)) ``` """.strip(), source="assistant", ) ] response = await agent.on_messages(messages, CancellationToken()) assert isinstance(response, Response) assert isinstance(response.chat_message, TextMessage) assert "The script ran, then exited with an error (POSIX exit code: 1)" in response.chat_message.content assert "ValueError: math domain error" in response.chat_message.content @pytest.mark.asyncio async def test_code_execution_no_output() -> None: """Test basic code execution""" agent = CodeExecutorAgent(name="code_executor", code_executor=LocalCommandLineCodeExecutor()) messages = [ TextMessage( content=""" ```python import math number = 42 square_root = math.sqrt(number) ``` """.strip(), source="assistant", ) ] response = await agent.on_messages(messages, CancellationToken()) assert isinstance(response, Response) assert isinstance(response.chat_message, TextMessage) assert ( "The script ran but produced no output to console. The POSIX exit code was: 0. If you were expecting output, consider revising the script to ensure content is printed to stdout." in response.chat_message.content ) @pytest.mark.asyncio async def test_code_execution_no_block() -> None: """Test basic code execution""" agent = CodeExecutorAgent(name="code_executor", code_executor=LocalCommandLineCodeExecutor()) messages = [ TextMessage( content=""" import math number = 42 square_root = math.sqrt(number) """.strip(), source="assistant", ) ] response = await agent.on_messages(messages, CancellationToken()) assert isinstance(response, Response) assert isinstance(response.chat_message, TextMessage) assert ( "No code blocks found in the thread. Please provide at least one markdown-encoded code block" in response.chat_message.content ) @pytest.mark.asyncio async def test_code_execution_multiple_blocks() -> None: """Test basic code execution""" agent = CodeExecutorAgent(name="code_executor", code_executor=LocalCommandLineCodeExecutor()) messages = [ TextMessage( content=""" ```python import math number = 42 square_root = math.sqrt(number) print("%0.3f" % (square_root,)) ``` And also: ```python import time print(f"The current time is: {time.time()}") ``` And this should result in an error: ```python import math number = -1.0 square_root = math.sqrt(number) print("%0.3f" % (square_root,)) ``` """.strip(), source="assistant", ) ] response = await agent.on_messages(messages, CancellationToken()) assert isinstance(response, Response) assert isinstance(response.chat_message, TextMessage) assert "6.481" in response.chat_message.content assert "The current time is:" in response.chat_message.content assert "The script ran, then exited with an error (POSIX exit code: 1)" in response.chat_message.content assert "ValueError: math domain error" in response.chat_message.content