Testing CLI Agent Configuration and Execution in gpt-engineer
This test suite validates the CLI Agent functionality in gpt-engineer, focusing on initialization and improvement capabilities across different configuration modes. The tests ensure proper file handling, code generation, and execution environment setup.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
gpt-engineer-org/gpt-engineer
tests/applications/cli/test_cli_agent.py
import os
import tempfile
import pytest
from langchain.schema import AIMessage
from gpt_engineer.applications.cli.cli_agent import CliAgent
from gpt_engineer.core.default.disk_execution_env import DiskExecutionEnv
from gpt_engineer.core.default.disk_memory import DiskMemory
# from gpt_engineer.core.default.git_version_manager import GitVersionManager
from gpt_engineer.core.default.paths import ENTRYPOINT_FILE, memory_path
from gpt_engineer.core.files_dict import FilesDict
from gpt_engineer.core.prompt import Prompt
from gpt_engineer.tools.custom_steps import clarified_gen, lite_gen
from tests.mock_ai import MockAI
def test_init_standard_config(monkeypatch):
monkeypatch.setattr("builtins.input", lambda _: "y")
temp_dir = tempfile.mkdtemp()
memory = DiskMemory(memory_path(temp_dir))
execution_env = DiskExecutionEnv()
mock_ai = MockAI(
[
AIMessage(
"hello_world.py
```
with open('output.txt', 'w') as file:
file.write('Hello World!')
```"
),
AIMessage("```run.sh
python3 hello_world.py
```"),
],
)
cli_agent = CliAgent.with_default_config(memory, execution_env, ai=mock_ai)
outfile = "output.txt"
os.path.join(temp_dir, outfile)
code = cli_agent.init(
Prompt(
f"Make a program that prints 'Hello World!' to a file called '{outfile}'"
)
)
env = DiskExecutionEnv()
env.upload(code).run(f"bash {ENTRYPOINT_FILE}")
code = env.download()
assert outfile in code
assert code[outfile] == "Hello World!"
def test_init_lite_config(monkeypatch):
monkeypatch.setattr("builtins.input", lambda _: "y")
temp_dir = tempfile.mkdtemp()
memory = DiskMemory(memory_path(temp_dir))
# version_manager = GitVersionManager(temp_dir)
execution_env = DiskExecutionEnv()
mock_ai = MockAI(
[
AIMessage(
"hello_world.py
```
with open('output.txt', 'w') as file:
file.write('Hello World!')
```"
),
AIMessage("```run.sh
python3 hello_world.py
```"),
],
)
cli_agent = CliAgent.with_default_config(
memory, execution_env, ai=mock_ai, code_gen_fn=lite_gen
)
outfile = "output.txt"
os.path.join(temp_dir, outfile)
code = cli_agent.init(
Prompt(
f"Make a program that prints 'Hello World!' to a file called '{outfile}'"
)
)
env = DiskExecutionEnv()
env.upload(code).run(f"bash {ENTRYPOINT_FILE}")
code = env.download()
assert outfile in code
assert code[outfile].strip() == "Hello World!"
def test_init_clarified_gen_config(monkeypatch):
monkeypatch.setattr("builtins.input", lambda _: "y")
temp_dir = tempfile.mkdtemp()
memory = DiskMemory(memory_path(temp_dir))
execution_env = DiskExecutionEnv()
mock_ai = MockAI(
[
AIMessage("nothing to clarify"),
AIMessage(
"hello_world.py
```
with open('output.txt', 'w') as file:
file.write('Hello World!')
```"
),
AIMessage("```run.sh
python3 hello_world.py
```"),
],
)
cli_agent = CliAgent.with_default_config(
memory, execution_env, ai=mock_ai, code_gen_fn=clarified_gen
)
outfile = "output.txt"
code = cli_agent.init(
Prompt(
f"Make a program that prints 'Hello World!' to a file called '{outfile} either using python or javascript'"
)
)
env = DiskExecutionEnv()
env.upload(code).run(f"bash {ENTRYPOINT_FILE}")
code = env.download()
assert outfile in code
assert code[outfile].strip() == "Hello World!"
def test_improve_standard_config(monkeypatch):
monkeypatch.setattr("builtins.input", lambda _: "y")
temp_dir = tempfile.mkdtemp()
code = FilesDict(
{
"main.py": "def write_hello_world_to_file(filename):
\"\"\"
Writes 'Hello World!' to the specified file.
:param filename: The name of the file to write to.
\"\"\"
with open(filename, 'w') as file:
file.write('Hello World!')
if __name__ == \"__main__\":
output_filename = 'output.txt'
write_hello_world_to_file(output_filename)",
"requirements.txt": "# No dependencies required",
"run.sh": "python3 main.py
",
}
)
memory = DiskMemory(memory_path(temp_dir))
# version_manager = GitVersionManager(temp_dir)
execution_env = DiskExecutionEnv()
mock_ai = MockAI(
[
AIMessage(
"```diff
--- main.py
+++ main.py
@@ -7,3 +7,3 @@
with open(filename, 'w') as file:
- file.write('Hello World!')
+ file.write('!dlroW olleH')
```"
)
]
)
cli_agent = CliAgent.with_default_config(memory, execution_env, ai=mock_ai)
code = cli_agent.improve(
code,
Prompt(
"Change the program so that it prints '!dlroW olleH' instead of 'Hello World!'"
),
)
env = DiskExecutionEnv()
env.upload(code).run(f"bash {ENTRYPOINT_FILE}")
code = env.download()
outfile = "output.txt"
assert outfile in code
assert code[outfile] == "!dlroW olleH"
if __name__ == "__main__":
pytest.main()