Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add "py" as lang in conversable agent (#1062) #2144

Merged
merged 10 commits into from
Apr 12, 2024
3 changes: 2 additions & 1 deletion autogen/agentchat/conversable_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from ..cache.cache import AbstractCache
from ..code_utils import (
UNKNOWN,
PYTHON_VARIANTS,
check_can_use_docker_or_throw,
content_str,
decide_use_docker,
Expand Down Expand Up @@ -2079,7 +2080,7 @@ def execute_code_blocks(self, code_blocks):
)
if lang in ["bash", "shell", "sh"]:
exitcode, logs, image = self.run_code(code, lang=lang, **self._code_execution_config)
elif lang in ["python", "Python"]:
elif lang in PYTHON_VARIANTS:
if code.startswith("# filename: "):
filename = code[11 : code.find("\n")].strip()
else:
Expand Down
3 changes: 3 additions & 0 deletions autogen/code_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
DEFAULT_TIMEOUT = 600
WIN32 = sys.platform == "win32"
PATH_SEPARATOR = WIN32 and "\\" or "/"
PYTHON_VARIANTS = ["python", "Python", "py"]

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -244,6 +245,8 @@ def get_powershell_command():


def _cmd(lang: str) -> str:
if lang in ["Python", "py"]:
JoshTrim marked this conversation as resolved.
Show resolved Hide resolved
return "python"
if lang.startswith("python") or lang in ["bash", "sh"]:
return lang
if lang in ["shell"]:
Expand Down
3 changes: 3 additions & 0 deletions autogen/coding/local_commandline_code_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,9 @@ def _execute_code_dont_check_setup(self, code_blocks: List[CodeBlock]) -> Comman
LocalCommandLineCodeExecutor.sanitize_command(lang, code)
code = silence_pip(code, lang)

if lang in ["Python", "py"]:
JoshTrim marked this conversation as resolved.
Show resolved Hide resolved
lang = "python"

if WIN32 and lang in ["sh", "shell"]:
lang = "ps1"

Expand Down
18 changes: 10 additions & 8 deletions test/coding/test_commandline_code_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

UNIX_SHELLS = ["bash", "sh", "shell"]
WINDOWS_SHELLS = ["ps1", "pwsh", "powershell"]

PYTHON_VARIANTS = ["python", "Python", "py"]

@pytest.mark.parametrize("cls", classes_to_test)
def test_is_code_executor(cls) -> None:
Expand Down Expand Up @@ -60,23 +60,25 @@ def test_commandline_executor_init(cls) -> None:
executor = cls(timeout=111, work_dir="/invalid/directory")


@pytest.mark.parametrize("py_variant", PYTHON_VARIANTS)
@pytest.mark.parametrize("cls", classes_to_test)
def test_commandline_executor_execute_code(cls) -> None:
def test_commandline_executor_execute_code(cls, py_variant) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
executor = cls(work_dir=temp_dir)
_test_execute_code(executor=executor)
_test_execute_code(py_variant, executor=executor)

@pytest.mark.parametrize("py_variant", PYTHON_VARIANTS)
def _test_execute_code(py_variant, executor: CodeExecutor) -> None:

def _test_execute_code(executor: CodeExecutor) -> None:
# Test single code block.
code_blocks = [CodeBlock(code="import sys; print('hello world!')", language="python")]
code_blocks = [CodeBlock(code="import sys; print('hello world!')", language=py_variant)]
code_result = executor.execute_code_blocks(code_blocks)
assert code_result.exit_code == 0 and "hello world!" in code_result.output and code_result.code_file is not None

# Test multiple code blocks.
code_blocks = [
CodeBlock(code="import sys; print('hello world!')", language="python"),
CodeBlock(code="a = 100 + 100; print(a)", language="python"),
CodeBlock(code="import sys; print('hello world!')", language=py_variant),
CodeBlock(code="a = 100 + 100; print(a)", language=py_variant),
]
code_result = executor.execute_code_blocks(code_blocks)
assert (
Expand All @@ -94,7 +96,7 @@ def _test_execute_code(executor: CodeExecutor) -> None:

# Test running code.
file_lines = ["import sys", "print('hello world!')", "a = 100 + 100", "print(a)"]
code_blocks = [CodeBlock(code="\n".join(file_lines), language="python")]
code_blocks = [CodeBlock(code="\n".join(file_lines), language=py_variant)]
code_result = executor.execute_code_blocks(code_blocks)
assert (
code_result.exit_code == 0
Expand Down