Commit graph

706 commits

Author SHA1 Message Date
Paul Gauthier
35f812859e Rationalized openai model attributes #458 2024-02-07 12:07:30 -08:00
Paul Gauthier
174702babe Updated gpt-4 turbo model switches 2024-02-03 08:39:19 -08:00
Paul Gauthier
1317ee1ace Added --openrouter 2024-01-31 17:33:50 -08:00
Paul Gauthier
e79732dcf7 Added env_vars for all the OPENAI_ env vars 2024-01-31 15:26:53 -08:00
Zachary Vorhies
c6ced90e51
fix https://github.com/paul-gauthier/aider/issues/452
Adds option to skip the check for an update, better supports tooling which wants to do it's own update mechanism and not have aider print it out unconditionally.
2024-01-22 18:52:06 -08:00
Paul Gauthier
6a77657d95 added --4turbo and --4 aliases 2024-01-10 07:48:17 -08:00
Paul Gauthier
bd1c8b625d aider: Add --check-update to make aider check for update and return status in the exit code.
# Aider chat conversation:

USER: add --check-update to make aider check for update and return status in the exit code.

ASSISTANT: To implement the `--check-update` option, I will make the following changes:

1. Add the `--check-update` argument to the argument parser in `aider/main.py`.
2. Modify the `check_version` function in `aider/versioncheck.py` to return a boolean indicating whether an update is available.
3. Use the returned value from `check_version` in `aider/main.py` to set the exit status code when `--check-update` is used.

Here are the diffs for those changes:

```diff
--- aider/versioncheck.py
+++ aider/versioncheck.py
@@ ... @@
 def check_version(print_cmd):
     try:
         response = requests.get("https://pypi.org/pypi/aider-chat/json")
         data = response.json()
         latest_version = data["info"]["version"]
         current_version = aider.__version__

-        if packaging.version.parse(latest_version) <= packaging.version.parse(current_version):
-            return
+        is_update_available = packaging.version.parse(latest_version) > packaging.version.parse(current_version)

-        print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:")
-        py = sys.executable
-        print_cmd(f"{py} -m pip install --upgrade aider-chat")
+        if is_update_available:
+            print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:")
+            py = sys.executable
+            print_cmd(f"{py} -m pip install --upgrade aider-chat")
+
+        return is_update_available
     except Exception as err:
         print_cmd(f"Error checking pypi for new version: {err}")
+        return False

--- aider/main.py
+++ aider/main.py
@@ ... @@
     other_group.add_argument(
         "--version",
         action="version",
         version=f"%(prog)s {__version__}",
         help="Show the version number and exit",
     )
+    other_group.add_argument(
+        "--check-update",
+        action="store_true",
+        help="Check for updates and return status in the exit code",
+        default=False,
+    )
     other_group.add_argument(
         "--apply",
         metavar="FILE",
@@ ... @@
     check_version(io.tool_error)

+    if args.check_update:
+        update_available = check_version(lambda msg: None)
+        sys.exit(0 if not update_available else 1)
+
     if "VSCODE_GIT_IPC_HANDLE" in os.environ:
         args.pretty = False
         io.tool_output("VSCode terminal detected, pretty output has been disabled.")
```

These changes will add the `--check-update` option to the command-line interface and use the `check_version` function to determine if an update is available, exiting with status code `0` if no update is available and `1` if an update is available.

USER: UnifiedDiffNoMatch: hunk failed to apply!

aider/versioncheck.py does not contain lines that match the diff you provided!
Try again.
DO NOT skip blank lines, comments, docstrings, etc!
The diff needs to apply cleanly to the lines in aider/versioncheck.py!

aider/versioncheck.py does not contain these 17 exact lines in a row:
```
def check_version(print_cmd):
    try:
        response = requests.get("https://pypi.org/pypi/aider-chat/json")
        data = response.json()
        latest_version = data["info"]["version"]
        current_version = aider.__version__

        if packaging.version.parse(latest_version) <= packaging.version.parse(current_version):
            return

        print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:")
        py = sys.executable
        print_cmd(f"{py} -m pip install --upgrade aider-chat")
    except Exception as err:
        print_cmd(f"Error checking pypi for new version: {err}")

-- aider/main.py
```

UnifiedDiffNoMatch: hunk failed to apply!

aider/versioncheck.py does not contain lines that match the diff you provided!
Try again.
DO NOT skip blank lines, comments, docstrings, etc!
The diff needs to apply cleanly to the lines in aider/versioncheck.py!

aider/versioncheck.py does not contain these 9 exact lines in a row:
```
    other_group.add_argument(
        "--version",
        action="version",
        version=f"%(prog)s {__version__}",
        help="Show the version number and exit",
    )
    other_group.add_argument(
        "--apply",
        metavar="FILE",
```

UnifiedDiffNoMatch: hunk failed to apply!

aider/versioncheck.py does not contain lines that match the diff you provided!
Try again.
DO NOT skip blank lines, comments, docstrings, etc!
The diff needs to apply cleanly to the lines in aider/versioncheck.py!

aider/versioncheck.py does not contain these 5 exact lines in a row:
```
    check_version(io.tool_error)

    if "VSCODE_GIT_IPC_HANDLE" in os.environ:
        args.pretty = False
        io.tool_output("VSCode terminal detected, pretty output has been disabled.")
```

ASSISTANT: I apologize for the confusion. Let's try again with the correct diffs.

Here are the diffs for the changes to `aider/versioncheck.py` and `aider/main.py`:

```diff
--- aider/versioncheck.py
+++ aider/versioncheck.py
@@ ... @@
 import sys

 import packaging.version
 import requests

 import aider

 def check_version(print_cmd):
     try:
         response = requests.get("https://pypi.org/pypi/aider-chat/json")
         data = response.json()
         latest_version = data["info"]["version"]
         current_version = aider.__version__

-        if packaging.version.parse(latest_version) <= packaging.version.parse(current_version):
-            return
+        is_update_available = packaging.version.parse(latest_version) > packaging.version.parse(current_version)

-        print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:")
-        py = sys.executable
-        print_cmd(f"{py} -m pip install --upgrade aider-chat")
+        if is_update_available:
+            print_cmd(f"Newer version v{latest_version} is available. To upgrade, run:")
+            py = sys.executable
+            print_cmd(f"{py} -m pip install --upgrade aider-chat")
+
+        return is_update_available
     except Exception as err:
         print_cmd(f"Error checking pypi for new version: {err}")
+        return False
```

```diff
--- aider/main.py
+++ aider/main.py
@@ ... @@
     other_group.add_argument(
         "--version",
         action="version",
         version=f"%(prog)s {__version__}",
         help="Show the version number and exit",
     )
+    other_group.add_argument(
+        "--check-update",
+        action="store_true",
+        help="Check for updates and return status in the exit code",
+        default=False,
+    )
     other_group.add_argument(
         "--apply",
         metavar="FILE",
@@ ... @@
     check_version(io.tool_error)

+    if args.check_update:
+        update_available = check_version(lambda msg: None)
+        sys.exit(0 if not update_available else 1)
+
     if "VSCODE_GIT_IPC_HANDLE" in os.environ:
         args.pretty = False
         io.tool_output("VSCode terminal detected, pretty output has been disabled.")
```

These diffs should apply cleanly to the current contents of the files. The `check_version` function in `aider/versioncheck.py` now returns a boolean indicating whether an update is available, and `aider/main.py` has been updated to include the `--check-update` argument and to use the return value from `check_version` to set the exit status code.
2024-01-04 12:27:31 -08:00
Paul Gauthier
7113a30271 unified diffs 2023-12-17 12:54:34 -08:00
Paul Gauthier
ff96369ed6 cleanup 2023-12-06 14:09:32 -08:00
Paul Gauthier
922a56b194 Merge branch 'main' into openai-upgrade 2023-12-06 09:26:05 -08:00
Paul Gauthier
b85ed45504 add deployment_id to AzureOpenAI call per @itlackey 2023-12-06 09:22:04 -08:00
Paul Gauthier
57ab2cc9da Revert "implement deployment id"
This reverts commit b107db98fa.
2023-12-06 09:20:53 -08:00
Your Name
4692a689fe Improvements: flag -f (not -mf); unitest improvements. 2023-12-05 23:55:10 +01:00
Your Name
743179a4bd aider: Add --message-file flag to specify a file containing the message to send GPT, process reply, then exit (disables chat mode).
# Aider chat conversation:

USER: Am I correct that currently if one wants to launch aider from commandline , the way to go is to use --message flag that allows providing prompt as command line parameter?

ASSISTANT: Yes, you are correct. The `--message` or `-m` flag can be used to provide a single message to send to GPT, process the reply, and then exit the application. This flag disables the interactive chat mode and is suitable for scripting or when you want to issue a single command without entering the interactive chat session.

USER: Is there a way to run prompt from command line like `--message` or `-m` however by providing prompt as file ?

ASSISTANT: Currently, there is no direct command-line option in the `aider` tool to provide a prompt from a file. The `--message` or `-m` flag only accepts a string as an argument. If you want to provide a prompt from a file, you would need to read the content of the file and pass it as a string to the `--message` flag.

However, this functionality can be added to the `aider` tool by implementing a new command-line option that reads the content of a specified file and uses it as the prompt message.

Would you like me to implement this feature for you? If so, please provide the `aider/main.py` file, and I will suggest the necessary changes.

USER: How would you name such flag to match current convention and how would you describe it?

ASSISTANT: Following the current naming convention used in the `aider` tool, a suitable name for the flag that allows providing a prompt from a file could be `--message-file` or `-mf`. This flag would be described as:

"Specify a file containing the message to send to GPT, process the reply, then exit (disables chat mode)."

This description aligns with the existing `--message` flag while clearly indicating that the input is expected to be a file containing the message rather than a direct string input.

USER: could you please add such flag?

ASSISTANT: To add the `--message-file` flag to the `aider` tool, we need to modify the `aider/main.py` file. Please add the `aider/main.py` file to the chat so I can provide you with the necessary changes.

USER: could you please add such flag?

ASSISTANT: To add the `--message-file` flag to the `aider` tool, we need to modify the `aider/main.py` file. Please add the `aider/main.py` file to the chat so I can provide you with the necessary changes.

USER: could you please add such flag?

ASSISTANT: To add the `--message-file` flag to the `aider` tool, we need to modify the `aider/main.py` file. Please add the `aider/main.py` file to the chat so I can provide you with the necessary changes.

USER: I added these *read-write* files: /home/gw-t490/github/VariousForks/aider-patching-for-pull-requests/aider/main.py

ASSISTANT: Great, now that you've added the `aider/main.py` file, I will provide you with the necessary changes to implement the `--message-file` flag.

We will need to:

1. Add a new command-line argument `--message-file` to the argument parser.
2. Read the content of the file specified by `--message-file` and pass it to the `coder.run()` method.

Here are the *SEARCH/REPLACE* blocks for the changes:

aider/main.py
```python
<<<<<<< SEARCH
    other_group.add_argument(
        "--message",
        "--msg",
        "-m",
        metavar="COMMAND",
        help="Specify a single message to send GPT, process reply then exit (disables chat mode)",
    )
=======
    other_group.add_argument(
        "--message",
        "--msg",
        "-m",
        metavar="COMMAND",
        help="Specify a single message to send GPT, process reply then exit (disables chat mode)",
    )
    other_group.add_argument(
        "--message-file",
        "-mf",
        metavar="MESSAGE_FILE",
        help="Specify a file containing the message to send GPT, process reply, then exit (disables chat mode)",
    )
>>>>>>> REPLACE
```

aider/main.py
```python
<<<<<<< SEARCH
    if args.message:
        io.tool_output()
        coder.run(with_message=args.message)
    else:
        coder.run()
=======
    if args.message:
        io.tool_output()
        coder.run(with_message=args.message)
    elif args.message_file:
        try:
            with open(args.message_file, 'r', encoding='utf-8') as file:
                message_from_file = file.read()
            io.tool_output()
            coder.run(with_message=message_from_file)
        except FileNotFoundError:
            io.tool_error(f"Message file not found: {args.message_file}")
            return 1
        except IOError as e:
            io.tool_error(f"Error reading message file: {e}")
            return 1
    else:
        coder.run()
>>>>>>> REPLACE
```

These changes will add the `--message-file` flag to the argument parser and handle the case where a message file is provided. If the file is found and can be read, its content will be used as the message to send to GPT. If there is an error reading the file, an error message will be displayed, and the program will exit with a status code of 1.
2023-12-05 23:55:10 +01:00
Paul Gauthier
b107db98fa implement deployment id 2023-12-05 11:31:17 -08:00
Paul Gauthier
bf03f43b44 fixed benchmark 2023-12-05 11:21:11 -08:00
Paul Gauthier
fb07b784f6 move to gpt-3.5-turbo-1106 2023-12-05 10:28:27 -08:00
Paul Gauthier
6ebc142377 roughed in openai 1.x 2023-12-05 07:37:05 -08:00
Your Name
015ffa13e1 Fixes #374 - logging add_to_input_history if args.message is used.
Fixes https://github.com/paul-gauthier/aider/issues/374
2023-11-30 13:19:54 +01:00
Paul Gauthier
d868e96467 Abandon checking gitignore if can not read file 2023-11-03 08:33:32 -07:00
Paul Gauthier
c4f6ce6435 handle encoding error when checking .gitignore 2023-11-03 08:12:01 -07:00
Paul Gauthier
ac9160ae54 aider: Add --encoding argument and pass it to InputOutput.
# Aider chat conversation:

USER: add --encoding and pass it to `InputOutput`

ASSISTANT: To add the `--encoding` argument and pass it to `InputOutput`, we need to modify the `aider/main.py` file.

Here are the steps:

1. Add a new argument `--encoding` to the `argparse.ArgumentParser` in the `main` function.
2. Pass the `args.encoding` to the `InputOutput` class instantiation.

Here are the changes:

```python
aider/main.py
<<<<<<< HEAD
    ##########
    other_group = parser.add_argument_group("Other Settings")
    other_group.add_argument(
        "--version",
        action="version",
        version=f"%(prog)s {__version__}",
        help="Show the version number and exit",
    )
    other_group.add_argument(
        "--apply",
        metavar="FILE",
        help="Apply the changes from the given file instead of running the chat (debug)",
    )
    other_group.add_argument(
        "--yes",
        action="store_true",
        help="Always say yes to every confirmation",
        default=None,
    )
    other_group.add_argument(
        "-v",
        "--verbose",
        action="store_true",
        help="Enable verbose output",
        default=False,
    )
    other_group.add_argument(
        "--show-repo-map",
        action="store_true",
        help="Print the repo map and exit (debug)",
        default=False,
    )
    other_group.add_argument(
        "--message",
        "--msg",
        "-m",
        metavar="COMMAND",
        help="Specify a single message to send GPT, process reply then exit (disables chat mode)",
    )
    other_group.add_argument(
        "-c",
        "--config",
        is_config_file=True,
        metavar="CONFIG_FILE",
        help=(
            "Specify the config file (default: search for .aider.conf.yml in git root, cwd"
            " or home directory)"
        ),
    )

    args = parser.parse_args(argv)
=======
    ##########
    other_group = parser.add_argument_group("Other Settings")
    other_group.add_argument(
        "--version",
        action="version",
        version=f"%(prog)s {__version__}",
        help="Show the version number and exit",
    )
    other_group.add_argument(
        "--apply",
        metavar="FILE",
        help="Apply the changes from the given file instead of running the chat (debug)",
    )
    other_group.add_argument(
        "--yes",
        action="store_true",
        help="Always say yes to every confirmation",
        default=None,
    )
    other_group.add_argument(
        "-v",
        "--verbose",
        action="store_true",
        help="Enable verbose output",
        default=False,
    )
    other_group.add_argument(
        "--show-repo-map",
        action="store_true",
        help="Print the repo map and exit (debug)",
        default=False,
    )
    other_group.add_argument(
        "--message",
        "--msg",
        "-m",
        metavar="COMMAND",
        help="Specify a single message to send GPT, process reply then exit (disables chat mode)",
    )
    other_group.add_argument(
        "--encoding",
        default="utf-8",
        help="Specify the encoding for input and output (default: utf-8)",
    )
    other_group.add_argument(
        "-c",
        "--config",
        is_config_file=True,
        metavar="CONFIG_FILE",
        help=(
            "Specify the config file (default: search for .aider.conf.yml in git root, cwd"
            " or home directory)"
        ),
    )

    args = parser.parse_args(argv)
>>>>>>> updated
```

```python
aider/main.py
<<<<<<< HEAD
    io = InputOutput(
        args.pretty,
        args.yes,
        args.input_history_file,
        args.chat_history_file,
        input=input,
        output=output,
        user_input_color=args.user_input_color,
        tool_output_color=args.tool_output_color,
        tool_error_color=args.tool_error_color,
        dry_run=args.dry_run,
    )
=======
    io = InputOutput(
        args.pretty,
        args.yes,
        args.input_history_file,
        args.chat_history_file,
        input=input,
        output=output,
        user_input_color=args.user_input_color,
        tool_output_color=args.tool_output_color,
        tool_error_color=args.tool_error_color,
        dry_run=args.dry_run,
        encoding=args.encoding,
    )
>>>>>>> updated
```

Please note that the `InputOutput` class should be able to handle the `encoding` argument. If it's not the case, we need to modify the `InputOutput` class as well.
2023-10-19 20:18:02 -07:00
Paul Gauthier
8561bfde33 copy 2023-10-18 13:13:42 -07:00
Paul Gauthier
88e42a124b copy 2023-10-18 12:47:26 -07:00
Paul Gauthier
dffeaac4d9 Added --commit command #283 2023-10-18 12:45:51 -07:00
Paul Gauthier
3f2dfa24ee aider: Add a --commit arg that commits all pending changes with a suitable commit message.
# Aider chat conversation:

USER: Add a --commit arg that will commit all pending changes with a suitable commit message

ASSISTANT: To add a `--commit` argument, we need to modify the `aider/main.py` file. Specifically, we will add a new argument to the `git_group` argument group in the `main` function.

Here is the proposed change:

```python
aider/main.py
<<<<<<< HEAD
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
=======
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
    git_group.add_argument(
        "--commit",
        action="store_true",
        help="Commit all pending changes with a suitable commit message",
        default=False,
    )
>>>>>>> updated
```

This change adds a new `--commit` argument that, when used, will trigger the commit of all pending changes. The default value is `False`, meaning that if the argument is not provided, no commit will be made. The help text provides a brief explanation of what the argument does.

After adding this argument, you will need to implement the functionality to commit changes when this argument is used. This will likely involve modifying the `GitRepo` class in the `aider/repo.py` file, but since that file is read-only, I can't provide the specific changes here.
2023-10-18 12:44:11 -07:00
Paul Gauthier
9725b236a3 roughed in .aiderignore 2023-10-18 10:26:43 -07:00
Paul Gauthier
6f453e2ac1 aider: Add a switch for an aider ignore file, which defaults to .aiderignore in the root of the git repo.
# Aider chat conversation:

USER: add a switch for an aider ignore file, which should default to .aiderignore in the root of the git repo

ASSISTANT: To add a switch for an aider ignore file, we need to modify the `aider/main.py` file. We will add a new argument to the `argparse.ArgumentParser` instance to accept the path of the aider ignore file. The default value will be `.aiderignore` in the root of the git repo.

Here is the *edit block* for the change:

```python
aider/main.py
<<<<<<< HEAD
    ##########
    git_group = parser.add_argument_group("Git Settings")
    git_group.add_argument(
        "--git",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable looking for a git repo (default: True)",
    )
    git_group.add_argument(
        "--gitignore",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable adding .aider* to .gitignore (default: True)",
    )
    git_group.add_argument(
        "--auto-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable commits when repo is found dirty (default: True)",
    )
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
=======
    ##########
    git_group = parser.add_argument_group("Git Settings")
    git_group.add_argument(
        "--git",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable looking for a git repo (default: True)",
    )
    git_group.add_argument(
        "--gitignore",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable adding .aider* to .gitignore (default: True)",
    )
    git_group.add_argument(
        "--aiderignore",
        metavar="AIDERIGNORE",
        default=".aiderignore",
        help="Specify the aider ignore file (default: .aiderignore in git root)",
    )
    git_group.add_argument(
        "--auto-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable commits when repo is found dirty (default: True)",
    )
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
>>>>>>> updated
```

This change adds a new command-line argument `--aiderignore` that allows the user to specify the path of the aider ignore file. The default value is `.aiderignore`, which will be located in the root of the git repo.
2023-10-18 10:17:44 -07:00
Paul Gauthier
531c640705 Suggest updated git user locally, not globally 2023-10-18 09:27:12 -07:00
Paul Gauthier
5d7e44082e print warning if cur wd is different than git wd, per discussion in #188 2023-09-29 13:10:06 -07:00
Paul Gauthier
82d7f04865 handle the case of no git repo 2023-09-27 18:37:26 -07:00
Paul Gauthier
1d0d91d71e improved gitignore check logic 2023-09-27 18:32:18 -07:00
Paul Gauthier
19e4787502 aider: Refactored check_gitignore function to use gitpython library to check if the .aider pattern is already ignored by the repository before adding it to .gitignore.
# Aider chat conversation:

USER: in `check_gitignore` use gitpython to see if the repo is already ignoring `.aider`. if so, don't add anything to gitignore

ASSISTANT: To implement this change, we need to modify the `check_gitignore` function in the `aider/main.py` file. We will use the `gitpython` library to check if the `.aider` pattern is already ignored by the repository. If it is, we won't add anything to the `.gitignore` file.

Here are the steps we need to take:

1. Import the `git` module at the top of the file.
2. In the `check_gitignore` function, create a `git.Repo` object for the current repository.
3. Use the `Repo.ignored` method to check if the `.aider` pattern is already ignored.
4. Only add the `.aider` pattern to the `.gitignore` file if it's not already ignored.

Here is the *edit block* for this change:

```python
aider/main.py
<<<<<<< HEAD
def check_gitignore(git_root, io, ask=True):
    if not git_root:
        return

    pat = ".aider*"

    gitignore_file = Path(git_root) / ".gitignore"
    if gitignore_file.exists():
        content = io.read_text(gitignore_file)
        if pat in content.splitlines():
            return
    else:
        content = ""

    if ask and not io.confirm_ask(f"Add {pat} to .gitignore (recommended)?"):
        return

    if content and not content.endswith("\n"):
        content += "\n"
    content += pat + "\n"
    io.write_text(gitignore_file, content)

    io.tool_output(f"Added {pat} to .gitignore")
=======
import git

def check_gitignore(git_root, io, ask=True):
    if not git_root:
        return

    pat = ".aider*"

    gitignore_file = Path(git_root) / ".gitignore"
    if gitignore_file.exists():
        content = io.read_text(gitignore_file)
        if pat in content.splitlines():
            return
    else:
        content = ""

    repo = git.Repo(git_root)
    if repo.is_ignored(pat):
        return

    if ask and not io.confirm_ask(f"Add {pat} to .gitignore (recommended)?"):
        return

    if content and not content.endswith("\n"):
        content += "\n"
    content += pat + "\n"
    io.write_text(gitignore_file, content)

    io.tool_output(f"Added {pat} to .gitignore")
>>>>>>> updated
```
Please note that this change assumes that the `gitpython` library is already installed in your environment. If it's not, you will need to install it using pip (`pip install gitpython`).
2023-09-27 18:30:26 -07:00
Paul Gauthier
14eb12364d aider: Add --gitignore/--no-gitignore switches (like the others) default is true, only call check_gitignore if it's true.
# Aider chat conversation:

USER: add --gitignore/--no-gitignore switches (like the others) default is true. only call `check_gitignore` if it's true.

ASSISTANT: To add the `--gitignore/--no-gitignore` switches, we need to modify the `aider/main.py` file.

Here are the steps:

1. Add a new argument to the `git_group` in the `main` function to handle the `--gitignore/--no-gitignore` switches.
2. Modify the `if args.git:` block to only call `check_gitignore` if `args.gitignore` is `True`.

Here are the proposed changes:

```python
aider/main.py
<<<<<<< HEAD
    git_group = parser.add_argument_group("Git Settings")
    git_group.add_argument(
        "--git",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable looking for a git repo (default: True)",
    )
    git_group.add_argument(
        "--auto-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable commits when repo is found dirty (default: True)",
    )
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
=======
    git_group = parser.add_argument_group("Git Settings")
    git_group.add_argument(
        "--git",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable looking for a git repo (default: True)",
    )
    git_group.add_argument(
        "--gitignore",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable adding .aider* to .gitignore (default: True)",
    )
    git_group.add_argument(
        "--auto-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable commits when repo is found dirty (default: True)",
    )
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
>>>>>>> updated
```

```python
aider/main.py
<<<<<<< HEAD
    if args.git:
        git_root = setup_git(git_root, io)
        check_gitignore(git_root, io)
=======
    if args.git:
        git_root = setup_git(git_root, io)
        if args.gitignore:
            check_gitignore(git_root, io)
>>>>>>> updated
```
2023-09-27 16:24:43 -07:00
Thinh Nguyen
45298f8af6
Add option to skip model availability check 2023-09-08 14:04:02 -07:00
Joshua Vial
abbc93678b finishing openrouter integration 2023-08-23 21:26:27 +12:00
JV
041f3a4a38 initial code for working with openrouter 2023-08-23 14:39:12 +12:00
Paul Gauthier
45de64535a add missing import 2023-08-19 07:17:50 -07:00
Paul Gauthier
0e9e037c06 aider: Change all the --foo/--no-foo switches to use the parser.add_argument('--feature', action=argparse.BooleanOptionalAction) convention.
# Aider chat conversation:

USER: change all the --foo/--no-foo switches to use the `parser.add_argument('--feature', action=argparse.BooleanOptionalAction)` convention

ASSISTANT: To implement this change, we need to modify the `aider/main.py` file. We will replace all instances of `--foo` and `--no-foo` switches with the `parser.add_argument('--feature', action=argparse.BooleanOptionalAction)` convention.

Here are the changes:

```python
aider/main.py
<<<<<<< HEAD
    output_group.add_argument(
        "--pretty",
        action="store_true",
        default=True,
        help="Enable pretty, colorized output (default: True)",
    )
    output_group.add_argument(
        "--no-pretty",
        action="store_false",
        dest="pretty",
        help="Disable pretty, colorized output",
    )
    output_group.add_argument(
        "--no-stream",
        action="store_false",
        dest="stream",
        default=True,
        help="Disable streaming responses",
    )
    git_group.add_argument(
        "--no-git",
        action="store_false",
        dest="git",
        default=True,
        help="Do not look for a git repo",
    )
    git_group.add_argument(
        "--auto-commits",
        action="store_true",
        dest="auto_commits",
        default=True,
        help="Enable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--no-auto-commits",
        action="store_false",
        dest="auto_commits",
        help="Disable auto commit of GPT changes (implies --no-dirty-commits)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action="store_true",
        dest="dirty_commits",
        help="Enable commits when repo is found dirty",
        default=True,
    )
    git_group.add_argument(
        "--no-dirty-commits",
        action="store_false",
        dest="dirty_commits",
        help="Disable commits when repo is found dirty",
    )
    git_group.add_argument(
        "--dry-run",
        action="store_true",
        help="Perform a dry run without modifying files (default: False)",
        default=False,
    )
=======
    output_group.add_argument(
        "--pretty",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable pretty, colorized output (default: True)",
    )
    output_group.add_argument(
        "--stream",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable streaming responses (default: True)",
    )
    git_group.add_argument(
        "--git",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable looking for a git repo (default: True)",
    )
    git_group.add_argument(
        "--auto-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable commits when repo is found dirty (default: True)",
    )
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
>>>>>>> updated
```

Please note that the `argparse.BooleanOptionalAction` was introduced in Python 3.9. If you're using an older version of Python, you might need to upgrade or use a different approach.

USER: InvalidEditBlock: edit failed!

aider/main.py does not contain the *exact sequence* of HEAD lines you specified.
Try again.
DO NOT skip blank lines, comments, docstrings, etc!
The HEAD block needs to be EXACTLY the same as the lines in aider/main.py with nothing missing!

aider/main.py does not contain these 58 exact lines in a row:
```
    output_group.add_argument(
        "--pretty",
        action="store_true",
        default=True,
        help="Enable pretty, colorized output (default: True)",
    )
    output_group.add_argument(
        "--no-pretty",
        action="store_false",
        dest="pretty",
        help="Disable pretty, colorized output",
    )
    output_group.add_argument(
        "--no-stream",
        action="store_false",
        dest="stream",
        default=True,
        help="Disable streaming responses",
    )
    git_group.add_argument(
        "--no-git",
        action="store_false",
        dest="git",
        default=True,
        help="Do not look for a git repo",
    )
    git_group.add_argument(
        "--auto-commits",
        action="store_true",
        dest="auto_commits",
        default=True,
        help="Enable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--no-auto-commits",
        action="store_false",
        dest="auto_commits",
        help="Disable auto commit of GPT changes (implies --no-dirty-commits)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action="store_true",
        dest="dirty_commits",
        help="Enable commits when repo is found dirty",
        default=True,
    )
    git_group.add_argument(
        "--no-dirty-commits",
        action="store_false",
        dest="dirty_commits",
        help="Disable commits when repo is found dirty",
    )
    git_group.add_argument(
        "--dry-run",
        action="store_true",
        help="Perform a dry run without modifying files (default: False)",
        default=False,
    )
```

ASSISTANT: I apologize for the confusion. It seems I made a mistake in grouping the changes. The arguments are not all together in the file, they are spread out in different argument groups. I will correct this and provide the changes in separate edit blocks for each argument group.

Here are the corrected changes:

```python
aider/main.py
<<<<<<< HEAD
    output_group.add_argument(
        "--pretty",
        action="store_true",
        default=True,
        help="Enable pretty, colorized output (default: True)",
    )
    output_group.add_argument(
        "--no-pretty",
        action="store_false",
        dest="pretty",
        help="Disable pretty, colorized output",
    )
    output_group.add_argument(
        "--no-stream",
        action="store_false",
        dest="stream",
        default=True,
        help="Disable streaming responses",
    )
=======
    output_group.add_argument(
        "--pretty",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable pretty, colorized output (default: True)",
    )
    output_group.add_argument(
        "--stream",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable streaming responses (default: True)",
    )
>>>>>>> updated
```

```python
aider/main.py
<<<<<<< HEAD
    git_group.add_argument(
        "--no-git",
        action="store_false",
        dest="git",
        default=True,
        help="Do not look for a git repo",
    )
    git_group.add_argument(
        "--auto-commits",
        action="store_true",
        dest="auto_commits",
        default=True,
        help="Enable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--no-auto-commits",
        action="store_false",
        dest="auto_commits",
        help="Disable auto commit of GPT changes (implies --no-dirty-commits)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action="store_true",
        dest="dirty_commits",
        help="Enable commits when repo is found dirty",
        default=True,
    )
    git_group.add_argument(
        "--no-dirty-commits",
        action="store_false",
        dest="dirty_commits",
        help="Disable commits when repo is found dirty",
    )
    git_group.add_argument(
        "--dry-run",
        action="store_true",
        help="Perform a dry run without modifying files (default: False)",
        default=False,
    )
=======
    git_group.add_argument(
        "--git",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable looking for a git repo (default: True)",
    )
    git_group.add_argument(
        "--auto-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable auto commit of GPT changes (default: True)",
    )
    git_group.add_argument(
        "--dirty-commits",
        action=argparse.BooleanOptionalAction,
        default=True,
        help="Enable/disable commits when repo is found dirty (default: True)",
    )
    git_group.add_argument(
        "--dry-run",
        action=argparse.BooleanOptionalAction,
        default=False,
        help="Enable/disable performing a dry run without modifying files (default: False)",
    )
>>>>>>> updated
```

Please note that the `argparse.BooleanOptionalAction` was introduced in Python 3.9. If you're using an older version of Python, you might need to upgrade or use a different approach.
2023-08-19 07:16:37 -07:00
Paul Gauthier
0a653d34d3 cleanup 2023-08-17 10:40:56 -07:00
Paul Gauthier
d981de5f5f do the commit before applying edits 2023-08-17 10:40:01 -07:00
Paul Gauthier
f62e3e2c90 copy 2023-08-14 15:09:29 -03:00
Paul Gauthier
ef764fefc8 default to auto 2023-08-14 15:07:08 -03:00
Paul Gauthier
625b251530 Change help message for voice language option to include "use auto to detect". 2023-08-14 14:08:38 -03:00
Paul Gauthier
8749adf511 aider: Add --voice-language switch with default "en" and pass it into Coder.
# Aider chat conversation:

USER: add --voice-language switch with default "en" and pass it into `Coder`

ASSISTANT: To add the `--voice-language` switch, we need to modify the `aider/main.py` file. We will add the argument in the `core_group` section of the argument parser. Then, we will pass this argument to the `Coder` class.

Here are the changes:

```python
aider/main.py
<<<<<<< HEAD
    core_group.add_argument(
        "-3",
        action="store_const",
        dest="model",
        const=models.GPT35_16k.name,
        help=f"Use {models.GPT35_16k.name} model for the main chat (gpt-4 is better)",
    )
=======
    core_group.add_argument(
        "-3",
        action="store_const",
        dest="model",
        const=models.GPT35_16k.name,
        help=f"Use {models.GPT35_16k.name} model for the main chat (gpt-4 is better)",
    )
    core_group.add_argument(
        "--voice-language",
        metavar="VOICE_LANGUAGE",
        default="en",
        help="Specify the language for voice (default: en)",
    )
>>>>>>> updated
```

```python
aider/main.py
<<<<<<< HEAD
    try:
        coder = Coder.create(
            main_model,
            args.edit_format,
            io,
            ##
            fnames=fnames,
            git_dname=git_dname,
            pretty=args.pretty,
            show_diffs=args.show_diffs,
            auto_commits=args.auto_commits,
            dirty_commits=args.dirty_commits,
            dry_run=args.dry_run,
            map_tokens=args.map_tokens,
            verbose=args.verbose,
            assistant_output_color=args.assistant_output_color,
            code_theme=args.code_theme,
            stream=args.stream,
            use_git=args.git,
        )
    except ValueError as err:
        io.tool_error(str(err))
        return 1
=======
    try:
        coder = Coder.create(
            main_model,
            args.edit_format,
            io,
            ##
            fnames=fnames,
            git_dname=git_dname,
            pretty=args.pretty,
            show_diffs=args.show_diffs,
            auto_commits=args.auto_commits,
            dirty_commits=args.dirty_commits,
            dry_run=args.dry_run,
            map_tokens=args.map_tokens,
            verbose=args.verbose,
            assistant_output_color=args.assistant_output_color,
            code_theme=args.code_theme,
            stream=args.stream,
            use_git=args.git,
            voice_language=args.voice_language,
        )
    except ValueError as err:
        io.tool_error(str(err))
        return 1
>>>>>>> updated
```

Please note that the `Coder` class and its subclasses (`EditBlockCoder`, `EditBlockFunctionCoder`, `SingleWholeFileFunctionCoder`, `WholeFileCoder`, `WholeFileFunctionCoder`) need to be updated to accept and use the `voice_language` argument. These changes are not shown here as the `Coder` class and its subclasses are not provided in the *read-write* files.
2023-08-14 14:08:04 -03:00
Paul Gauthier
c7358c96b9 wip 2023-08-03 09:44:31 -03:00
Paul Gauthier
5bb3935f7e ssh 2023-07-25 09:19:01 -03:00
Paul Gauthier
c8f1c0609d tests and bugfix 2023-07-24 17:47:53 -03:00
Paul Gauthier
957f59c011 updated help 2023-07-24 17:35:47 -03:00
Paul Gauthier
64c50bab48 Accept either a git dname or a list of fnames 2023-07-24 17:31:00 -03:00