Skip to content

Configuration

Under construction

This section is under construction. SWE-agent 1.0.0 is much more flexible, but that also means that we need to cover more ground here.

This page contains details describing how to write your own configurations to control how agents can interact with the SWEEnv environment.

A configuration is represented in one or more .yaml files, specified by the --config flag in the command line interface, allowing you to...

  • Define the commands that agents may use to traverse + modify a codebase (see here for more details)
  • Write prompts that are deterministically/conditionally shown to the agent over the course of a single trajectory.
  • Control the input/output interface that sits between the agent and SWEEnv.

Default config files

Our default config files are in the config/ directory.

Example configuration

This is the current default:

default_from_url.yaml
config/default_from_url.yaml
agent:
  templates:
    system_template: |-
      SETTING: You are an autonomous programmer, and you're working directly in the command line with a special interface.

      The special interface consists of a file editor that shows you {{WINDOW}} lines of a file at a time.
      In addition to typical bash commands, you can also use specific commands to help you navigate and edit files.
      To call a command, you need to invoke it with a function call/tool call.

      Please note that THE EDIT COMMAND REQUIRES PROPER INDENTATION.

      For example, if you are looking at this file:

      def fct():
          print("Hello world")

      and you want to edit the file to read:

      def fct():
          print("Hello")
          print("world")

      you search string should be `Hello world` and your replace string should be `"Hello"\n    print("world")`
      (note the extra spaces before the print statement!).

      You could also get the same result by search for `    print("Hello world")` and replace with `    print("Hello")\n    print("world")`.

      RESPONSE FORMAT:
      Your shell prompt is formatted as follows:
      (Open file: <path>)
      (Current directory: <cwd>)
      bash-$

      First, you should _always_ include a general thought about what you're going to do next.
      Then, for every response, you must include exactly _ONE_ tool call/function call.

      Remember, you should always include a _SINGLE_ tool call/function call and then wait for a response from the shell before continuing with more discussion and commands. Everything you include in the DISCUSSION section will be saved for future reference.
      If you'd like to issue two commands at once, PLEASE DO NOT DO THAT! Please instead first submit just the first tool call, and then after receiving a response you'll be able to issue the second .
      Note that the environment does NOT support interactive session commands (e.g. python, vim), so please do not invoke them.
    instance_template: |-
      We're currently solving the following issue within our repository. Here's the issue text:
      ISSUE:
      {{problem_statement}}

      INSTRUCTIONS:
      Now, you're going to solve this issue on your own. Your terminal session has started and you're in the repository's root directory. You can use any bash commands or the special interface to help you. Edit all the files you need to and run any checks or tests that you want.
      Remember, YOU SHOULD ALWAYS INCLUDE EXACTLY ONE TOOL CALL/FUNCTION CALL PER RESPONSE.
      When you're satisfied with all of the changes you've made, you can submit your changes to the code base by simply running the submit command.
      Note however that you cannot use any interactive session commands (e.g. python, vim) in this environment, but you can write scripts and run them. E.g. you can write a python script and then run it with the python command.

      NOTE ABOUT THE EDIT COMMAND: Indentation really matters! When editing a file, make sure to insert appropriate indentation before each line!

      IMPORTANT TIPS:
      1. Always start by trying to replicate the bug that the issues discusses.
        If the issue includes code for reproducing the bug, we recommend that you re-implement that in your environment, and run it to make sure you can reproduce the bug.
        Then start trying to fix it.
        When you think you've fixed the bug, re-run the bug reproduction script to make sure that the bug has indeed been fixed.

        If the bug reproduction script does not print anything when it successfully runs, we recommend adding a print("Script completed successfully, no errors.") command at the end of the file,
        so that you can be sure that the script indeed ran fine all the way through.

      2. If you run a command and it doesn't work, try running a different command. A command that did not work once will not work the second time unless you modify it!

      3. If you open a file and need to get to an area around a specific line that is not in the first 100 lines, say line 583, don't just use the scroll_down command multiple times. Instead, use the goto 583 command. It's much quicker.

      4. If the bug reproduction script requires inputting/reading a specific file, such as buggy-input.png, and you'd like to understand how to input that file, conduct a search in the existing repo code, to see whether someone else has already done that. Do this by running the command: find_file "buggy-input.png" If that doesn't work, use the linux 'find' command.

      5. Always make sure to look at the currently open file and the current working directory (which appears right after the currently open file). The currently open file might be in a different directory than the working directory! Note that some commands, such as 'create', open files, so they might change the current open file.

      6. When editing files, it is easy to accidentally to write code with incorrect indentation or make other mistakes. Always check the code after you issue an edit to make sure that it reflects what you wanted to accomplish. If it didn't, issue another command to fix it.

      7. It may be necessary to install the repository from source before you can run code. Please think about how to install the environment from the repository directory if you need to do so.

      (Open file: {{open_file}})
      (Current directory: {{working_dir}})
      bash-$
    next_step_template: |-
      {{observation}}
      (Open file: {{open_file}})
      (Current directory: {{working_dir}})
      bash-$
    next_step_no_output_template: |-
      Your command ran successfully and did not produce any output.
      (Open file: {{open_file}})
      (Current directory: {{working_dir}})
      bash-$
    demonstration_template: |
      Here is a demonstration of how to correctly accomplish this task.
      It is included to show you how to correctly use the interface.
      You do not need to follow exactly what is done in the demonstration.
      --- DEMONSTRATION ---
      {{demonstration}}
      --- END OF DEMONSTRATION ---
    demonstrations:
    - trajectories/demonstrations/replay__marshmallow-code__marshmallow-1867__function_calling_replace_from_source/marshmallow-code__marshmallow-1867.traj
    put_demos_in_history: true
  tools:
    env_variables:
      WINDOW: 100
      OVERLAP: 2
    bundles:
      - path: tools/registry
      - path: tools/defaults
      - path: tools/search
      - path: tools/edit_replace
      - path: tools/submit
    enable_bash_tool: true
    parse_function:
      type: function_calling
  history_processors:
    - type: last_n_observations
      n: 5

Relative paths

Relative paths in config files are resolved to the SWE_AGENT_CONFIG_ROOT environment variable (if set) or the SWE-agent repository root.