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
50
51
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
 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
 99
100
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}")