| 1 | import json
|
| 2 | import tempfile
|
| 3 | from pathlib import Path
|
| 4 |
|
| 5 | from minisweagent.agents.default import DefaultAgent
|
| 6 | from minisweagent.environments.local import LocalEnvironment
|
| 7 | from minisweagent.models.test_models import DeterministicModel, make_output
|
| 8 |
|
| 9 |
|
| 10 | def test_agent_save_includes_class_names():
|
| 11 | """Test that agent.save includes the full class names with import paths."""
|
| 12 | import yaml
|
| 13 |
|
| 14 | config_path = Path("src/minisweagent/config/default.yaml")
|
| 15 | with open(config_path) as f:
|
| 16 | default_config = yaml.safe_load(f)["agent"]
|
| 17 |
|
| 18 | model = DeterministicModel(outputs=[make_output("echo 'test'", [])])
|
| 19 | env = LocalEnvironment()
|
| 20 | agent = DefaultAgent(model, env, **default_config)
|
| 21 |
|
| 22 | agent.add_messages({"role": "system", "content": "test system message"})
|
| 23 | agent.add_messages({"role": "user", "content": "test user message"})
|
| 24 |
|
| 25 | with tempfile.TemporaryDirectory() as temp_dir:
|
| 26 | temp_path = Path(temp_dir) / "test_trajectory.json"
|
| 27 |
|
| 28 | agent.save(temp_path, {"info": {"exit_status": "Submitted", "submission": "test result"}})
|
| 29 |
|
| 30 | with temp_path.open() as f:
|
| 31 | saved_data = json.load(f)
|
| 32 |
|
| 33 | assert "info" in saved_data
|
| 34 | assert "config" in saved_data["info"]
|
| 35 |
|
| 36 | config = saved_data["info"]["config"]
|
| 37 |
|
| 38 | assert "agent_type" in config
|
| 39 | assert "model_type" in config
|
| 40 | assert "environment_type" in config
|
| 41 |
|
| 42 | assert config["agent_type"] == "minisweagent.agents.default.DefaultAgent"
|
| 43 | assert config["model_type"] == "minisweagent.models.test_models.DeterministicModel"
|
| 44 | assert config["environment_type"] == "minisweagent.environments.local.LocalEnvironment"
|
| 45 |
|
| 46 | assert saved_data["info"]["exit_status"] == "Submitted"
|
| 47 | assert saved_data["info"]["submission"] == "test result"
|
| 48 | assert saved_data["trajectory_format"] == "mini-swe-agent-1.1"
|
| 49 |
|
| 50 |
|
| 51 | def test_agent_serialize():
|
| 52 | """Test that agent.serialize returns the correct structure."""
|
| 53 | import yaml
|
| 54 |
|
| 55 | config_path = Path("src/minisweagent/config/default.yaml")
|
| 56 | with open(config_path) as f:
|
| 57 | default_config = yaml.safe_load(f)["agent"]
|
| 58 |
|
| 59 | model = DeterministicModel(outputs=[make_output("echo 'test'", [])])
|
| 60 | env = LocalEnvironment()
|
| 61 | agent = DefaultAgent(model, env, **default_config)
|
| 62 |
|
| 63 | agent.add_messages({"role": "system", "content": "test system message"})
|
| 64 | agent.add_messages({"role": "user", "content": "test user message"})
|
| 65 |
|
| 66 | data = agent.serialize()
|
| 67 |
|
| 68 | assert "info" in data
|
| 69 | assert "config" in data["info"]
|
| 70 | assert "messages" in data
|
| 71 |
|