Commit graph

1487 commits

Author SHA1 Message Date
Paul Gauthier
25a28e6f9c Improved support for gpt-3.5-turbo-16k 2023-06-13 12:19:56 -07:00
Paul Gauthier
1ce38d230b Added basic support for gpt-3.5-turbo-16k 2023-06-13 11:59:03 -07:00
Paul Gauthier
131245fa64 Fix bug when gpt35 can not make a dirty commit message 2023-06-10 14:23:04 -07:00
Paul Gauthier
193901ee43 Changed OpenAI API base endpoint to https://api.openai.com/v1. 2023-06-10 10:50:45 -07:00
Paul Gauthier
3e7f791112 aider: Added support for passing openai_api_base into the Coder class.
# Context:
USER: we need to pass `openai_api_base` into Coder
ASSISTANT: To pass `openai_api_base` into the Coder class, you need to modify the `aider/main.py` file and update the Coder class instantiation. Here's the change you need to make:

```python
aider/main.py
<<<<<<< ORIGINAL
    coder = Coder(
        io,
        main_model=args.model,
        fnames=args.files,
        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,
        openai_api_key=args.openai_api_key,
    )
=======
    coder = Coder(
        io,
        main_model=args.model,
        fnames=args.files,
        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,
        openai_api_key=args.openai_api_key,
        openai_api_base=args.openai_api_base,
    )
>>>>>>> UPDATED
```

Now, you also need to update the `__init__` method of the Coder class in the `aider/coder.py` file to accept the `openai_api_base` argument and use it:

```python
aider/coder.py
<<<<<<< ORIGINAL
    def __init__(
        self,
        io,
        main_model=models.GPT4.name,
        fnames=None,
        pretty=True,
        show_diffs=False,
        auto_commits=True,
        dirty_commits=True,
        dry_run=False,
        map_tokens=1024,
        verbose=False,
        openai_api_key=None,
    ):
        if not openai_api_key:
            raise MissingAPIKeyError("No OpenAI API key provided.")
        openai.api_key = openai_api_key
        openai.api_base = args.openai_api_base
=======
    def __init__(
        self,
        io,
        main_model=models.GPT4.name,
        fnames=None,
        pretty=True,
        show_diffs=False,
        auto_commits=True,
        dirty_commits=True,
        dry_run=False,
        map_tokens=1024,
        verbose=False,
        openai_api_key=None,
        openai_api_base=None,
    ):
        if not openai_api_key:
            raise MissingAPIKeyError("No OpenAI API key provided.")
        openai.api_key = openai_api_key
        openai.api_base = openai_api_base
>>>>>>> UPDATED
```

These changes will allow you to pass the `openai_api_base` value into the Coder class and use it.
2023-06-10 10:40:54 -07:00
Paul Gauthier
3bef60ecf0 aider: Added option to set OpenAI API base endpoint.
# Context:
USER: is it possible to add OPEN_AI_BASE or openai.api_base endpoint

default:
openai.api_base = "https://api.openai.com/v1/chat/completions"

ASSISTANT: Yes, you can add an option to set the OpenAI API base endpoint. Here's how to do it:

1. Add a new argument to the argument parser in `aider/main.py`.
2. Set the `openai.api_base` in the `Coder` class in `aider/coder.py`.

Here are the changes you need to make:

```python
aider/main.py
<<<<<<< ORIGINAL
    parser.add_argument(
        "--openai-api-key",
        metavar="OPENAI_API_KEY",
        help="Specify the OpenAI API key",
        env_var="OPENAI_API_KEY",
    )
=======
    parser.add_argument(
        "--openai-api-key",
        metavar="OPENAI_API_KEY",
        help="Specify the OpenAI API key",
        env_var="OPENAI_API_KEY",
    )
    parser.add_argument(
        "--openai-api-base",
        metavar="OPENAI_API_BASE",
        default="https://api.openai.com/v1/chat/completions",
        help="Specify the OpenAI API base endpoint (default: https://api.openai.com/v1/chat/completions)",
    )
>>>>>>> UPDATED
```

```python
aider/coder.py
<<<<<<< ORIGINAL
        if openai_api_key:
            openai.api_key = openai_api_key
        else:
            raise MissingAPIKeyError("No OpenAI API key provided.")
=======
        if not openai_api_key:
            raise MissingAPIKeyError("No OpenAI API key provided.")
        openai.api_key = openai_api_key
        openai.api_base = args.openai_api_base
>>>>>>> UPDATED
```

Now you can use the `--openai-api-base` option to set the OpenAI API base endpoint when running the script.
2023-06-10 06:40:15 -07:00
Paul Gauthier
806805c0b1 Ensure leading_whitespace is actually space 2023-06-10 06:16:22 -07:00
Paul Gauthier
8d408e1fc4 Try replace_part_with_missing_leading_whitespace first, so that single line edits get the benefit 2023-06-09 15:05:34 -07:00
Paul Gauthier
5612c8e13d Don't indent blank lines 2023-06-09 14:51:37 -07:00
Paul Gauthier
5a3fd35c16 If all lines in the part start with whitespace, then honor it. 2023-06-09 14:50:21 -07:00
Paul Gauthier
329baf3717 Fix the actual replace step 2023-06-09 14:46:43 -07:00
Paul Gauthier
1daf175c83 aider: Implemented replace_part_with_missing_leading_whitespace function to find and replace the portion of whole that matches part with the same leading whitespace and replace it with replace containing the same leading whitespace.
# Context:
USER: in `replace_part_with_missing_leading_whitespace`, we want to find the string part in whole and replace it with the string `replace`. but `part` may not exactly occur in whole. instead, every line of part appears in whole with a fixed amount of extra whitespace in front of it. so every line in part might appear in whole with 4 spaces prepended. or every line might have 2 tabs. always the exact same whitespaces. finish implementing this function so that it finds the portion of whole which matches part in this manner (if any) and replace it with `replace` where replace is updated to contain that repeated/omitted whitespace.
ASSISTANT: To implement the `replace_part_with_missing_leading_whitespace` function, follow these steps:

1. Split `whole` and `part` into lines.
2. Iterate through the lines of `whole` and find the first line that matches the first line of `part` with any leading whitespace.
3. Check if the following lines in `whole` also match the remaining lines in `part` with the same leading whitespace.
4. If all lines match, replace the matched lines in `whole` with the lines in `replace` with the same leading whitespace.
5. Return the modified `whole` or `None` if no match is found.

Here's the updated function:

```python
aider/utils.py
<<<<<<< ORIGINAL
def replace_part_with_missing_leading_whitespace(whole, part, replace):
    pass
=======
def replace_part_with_missing_leading_whitespace(whole, part, replace):
    whole_lines = whole.splitlines()
    part_lines = part.splitlines()
    replace_lines = replace.splitlines()

    for i in range(len(whole_lines) - len(part_lines) + 1):
        leading_whitespace = ""
        for j, c in enumerate(whole_lines[i]):
            if c == part_lines[0][0]:
                leading_whitespace = whole_lines[i][:j]
                break

        if not leading_whitespace:
            continue

        matched = all(
            whole_lines[i + k].startswith(leading_whitespace + part_lines[k])
            for k in range(len(part_lines))
        )

        if matched:
            for k in range(len(part_lines)):
                whole_lines[i + k] = leading_whitespace + replace_lines[k]
            return "\n".join(whole_lines)

    return None
>>>>>>> UPDATED
```

This implementation should find the portion of `whole` that matches `part` with the same leading whitespace and replace it with `replace` containing the same leading whitespace.
2023-06-09 14:37:08 -07:00
Paul Gauthier
490796de78 wip 2023-06-09 14:32:45 -07:00
Paul Gauthier
e4d9e71f5b simplified append/create 2023-06-09 14:27:17 -07:00
Paul Gauthier
07c5c7f477 Update debugging main in repomap 2023-06-07 14:57:57 -07:00
Paul Gauthier
587261ef12 added adier/models.py 2023-06-07 13:14:55 -07:00
Paul Gauthier
9ac8a60f5f Finish support for gpt-4-32k 2023-06-07 12:42:43 -07:00
Paul Gauthier
571896f0bd Added gpt-4-32k 2023-06-07 12:39:56 -07:00
Paul Gauthier
b70f8ea7bc Use models...max_context_tokens 2023-06-07 12:37:10 -07:00
Paul Gauthier
a874d617d3 rename 2023-06-07 12:29:51 -07:00
Paul Gauthier
9cef379abd refac 2023-06-07 12:28:45 -07:00
Paul Gauthier
c8216d9687 No need to force show_diffs=True for 3.5 2023-06-06 18:17:39 -07:00
Paul Gauthier
99c86ccddf aider: Updated diff_partial_update function to include 5 lines of context in unified_diff function call.
# Context:
USER: expand the context diff to 5 lines of context
ASSISTANT: To expand the context diff to 5 lines of context, you need to modify the `diff_partial_update` function in the `aider/diffs.py` file. Update the `unified_diff` function call to include the `n` parameter with a value of 5.

Here's the change:

```python
aider/diffs.py
<<<<<<< ORIGINAL
    diff = difflib.unified_diff(lines_orig, lines_updated)
=======
    diff = difflib.unified_diff(lines_orig, lines_updated, n=5)
>>>>>>> UPDATED
```
2023-06-06 18:13:36 -07:00
Paul Gauthier
1faef90841 copy 2023-06-06 07:29:47 -07:00
Paul Gauthier
de0df5e7b1 fixed bug in check_model_availability 2023-06-06 07:28:12 -07:00
Paul Gauthier
8f70f1b251 renamed 2023-06-05 22:34:44 -07:00
Paul Gauthier
05c08b36a7 move cur_messages->done_messages, even with --no-auto-commit 2023-06-05 22:30:52 -07:00
Paul Gauthier
8abff61aff better handle malformed file block 2023-06-05 22:23:06 -07:00
Paul Gauthier
2f5f8561b5 prompt 2023-06-05 22:19:51 -07:00
Paul Gauthier
c44cc12b42 The --no-auto-commits flag implies --no-dirty-commits 2023-06-05 22:13:20 -07:00
Paul Gauthier
4727e5c616 rename 2023-06-05 22:12:27 -07:00
Paul Gauthier
ab5a6e2c19 better approach to redacting historical edits 2023-06-05 22:10:27 -07:00
Paul Gauthier
1676a0ec54 Merge branch 'main' into diffs 2023-06-05 22:07:25 -07:00
Paul Gauthier
cf3bf998dd fixed commands to deal with optional repo map 2023-06-05 22:07:19 -07:00
Paul Gauthier
8afae8b38f prettier 2023-06-05 21:57:22 -07:00
Paul Gauthier
6081baa32b better 2023-06-05 21:37:56 -07:00
Paul Gauthier
2336af2886 better 2023-06-05 19:41:14 -07:00
Paul Gauthier
2f0d9279d2 works 2023-06-05 19:36:12 -07:00
Paul Gauthier
0be54922da Merge branch 'main' into diffs 2023-06-05 17:17:48 -07:00
Paul Gauthier
c8beac9a2d cleaned up 35/4 logic 2023-06-05 17:14:44 -07:00
Paul Gauthier
169e450b1a Merge branch 'main' into diffs 2023-06-05 17:06:41 -07:00
Paul Gauthier
fcd8a6df73 Use the Models enum instead of .value 2023-06-05 17:06:34 -07:00
Paul Gauthier
78782e2d90 better 2023-06-05 16:59:11 -07:00
Paul Gauthier
67121a9834 aider: Added function to print unified diff and find last non-deleted line.
# Context:
USER: do the todo
2023-06-05 16:47:52 -07:00
Paul Gauthier
2f684bf99e cleanup 2023-06-05 16:46:38 -07:00
Paul Gauthier
33d1a43845 initial 2023-06-05 16:42:36 -07:00
Paul Gauthier
efb903303f aider: Added diff_files.py script that reads two file names from the command line, reads the contents of the files, and then uses the difflib module to print their differences.
# Context:
USER: read 2 files named on the cmd line, use difflib to print their differences
ASSISTANT: To achieve this, we'll create a new Python script that reads two file names from the command line, reads the contents of the files, and then uses the `difflib` module to print their differences.

1. Create a new Python script called `diff_files.py` in the `aider` directory.
2. Import the necessary modules: `sys` and `difflib`.
3. Read the file names from the command line arguments.
4. Read the contents of the files.
5. Use `difflib.unified_diff()` to generate the differences.
6. Print the differences.

Here's the code for the new `diff_files.py` script:

```python
aider/diff_files
^C KeyboardInterrupt
USER: put it in `aider/diffs.py`
2023-06-05 14:33:38 -07:00
Paul Gauthier
130f73c864 Added /tokens cmd 2023-06-05 12:30:20 -07:00
Paul Gauthier
b6f682151d Fix issue with quoting /commands 2023-06-05 11:49:27 -07:00
Paul Gauthier
579fc39d61 rename 2023-06-05 11:32:26 -07:00