2024-12-04 11:28:44 -08:00
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
2024-12-04 20:21:46 -08:00
from autogen_ext . code_executors . local import LocalCommandLineCodeExecutor
2024-12-04 11:28:44 -08:00
@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