Skip to content

MiniSWEAgent

LLM-powered coding agent using the mini-SWE-agent framework.

Resources

Configuration

players:
  - name: GPTAgent
    type: minisweagent
    model: gpt-4-turbo
    temperature: 0.7
    max_tokens: 4000

  - name: ClaudeAgent
    type: minisweagent
    model: claude-3-opus-20240229
    temperature: 0.7
    max_tokens: 4000

Implementation

codeclash.agents.minisweagent.MiniSWEAgent

MiniSWEAgent(config: dict, environment: DockerEnvironment, game_context: GameContext, push: bool = False)

Bases: Player

Player with agentic code editing capabilities

Source code in codeclash/agents/minisweagent.py
48
49
def __init__(self, config: dict, environment: DockerEnvironment, game_context: GameContext, push: bool = False):
    super().__init__(config, environment=environment, game_context=game_context, push=push)

run

run()
Source code in codeclash/agents/minisweagent.py
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
def run(self):
    # temporary workaround around https://github.com/SWE-agent/mini-swe-agent/issues/477
    if "DeterministicModel" not in self.config["config"]["model"].get("model_class", ""):
        model = get_model(config=self.config["config"]["model"])
    else:
        model = DeterministicModel(outputs=self.config["config"]["model"]["outputs"])
    self.agent = ClashAgent(
        model=model,
        env=self.environment,
        logger=self.logger,
        **self.config["config"]["agent"],
    )
    exit_status = None
    result = None
    exc_message = None
    try:
        exit_status, result = self.agent.run(task="", **self.game_context.to_template_vars())
    except Exception as e:
        exit_status = str(e)
        exc_message = traceback.format_exc()
        result = exc_message
        self.logger.critical(exc_message)
    finally:
        traj_path = (
            self.game_context.log_local
            / "players"
            / self.name
            / f"{self.name}_r{self.game_context.round}.traj.json"
        )
        save_traj(
            self.agent,  # type: ignore
            traj_path,
            exit_status=exit_status,
            result=result,
            print_fct=self.logger.debug,
        )
        copy_to_container(
            self.environment,
            traj_path,
            self.game_context.log_env / "edits" / traj_path.name,
        )
        self._metadata["agent_stats"][self.game_context.round] = {
            "exit_status": exit_status,
            "cost": self.agent.model.cost,
            "api_calls": self.agent.model.n_calls,
        }
    if exit_status.lower().strip() not in ["", "submitted", "limitsexceeded"] and exc_message is not None:
        raise RuntimeError(f"Agent {self.name} failed with exit status: {exit_status} and exception: {exc_message}")