Commit graph

52 commits

Author SHA1 Message Date
Your Name (aider)
0ff1c36668 Add concise docstrings to each xxxCoder class describing their purpose. 2024-07-28 20:19:22 -03:00
Your Name (aider)
5fcf454968 Remove __init__ from all coders and set edit_format and gpt_prompts like ChatCoder 2024-07-28 18:43:14 -03:00
Paul Gauthier
d6467a8e30 keep markdown stream open across multi response content 2024-06-28 15:10:20 -07:00
Paul Gauthier
6fac50a3a1 aider: Fix undefined name 'Path' errors by importing the Path class from the pathlib module.
# Aider chat conversation:

USER: # Fix any errors below

## Running: flake8 --select=E9,F821,F823,F831,F406,F407,F701,F702,F704,F706 --show-source aider/coders/wholefile_coder.py

aider/coders/wholefile_coder.py:73:62: F821 undefined name 'Path'
                    if fname and fname not in chat_files and Path(fname).name in chat_files:
                                                             ^
aider/coders/wholefile_coder.py:74:33: F821 undefined name 'Path'
                        fname = Path(fname).name
                                ^
aider/coders/wholefile_coder.py:103:30: F821 undefined name 'Path'
                full_path = (Path(self.root) / fname).absolute()
                             ^
aider/coders/wholefile_coder.py:133:12: F821 undefined name 'Path'
        if Path(full_path).exists():
           ^

## See relevant lines below marked with █.

aider/coders/wholefile_coder.py:
...⋮...
  2│from aider import diffs
  3│
...⋮...
  9│class WholeFileCoder(Coder):
 10│    edit_format = "whole"
 11│
...⋮...
 30│    def get_edits(self, mode="update"):
 31│        content = self.partial_response_content
 32│
...⋮...
 44│        for i, line in enumerate(lines):
 45│            if line.startswith(self.fence[0]) or line.startswith(self.fence[1]):
 46│                if fname is not None:
 47│                    # ending an existing block
 48│                    saw_fname = None
 49│
 50│                    full_path = self.abs_root_path(fname)
 51│
 52│                    if mode == "diff":
 53│                        output += self.do_live_diff(full_path, new_lines, True)
 54│                    else:
 55│                        edits.append((fname, fname_source, new_lines))
 56│
...⋮...
 63│                if i > 0:
 64│                    fname_source = "block"
...⋮...
 70│                    # Did gpt prepend a bogus dir? It especially likes to
 71│                    # include the path/to prefix from the one-shot example in
 72│                    # the prompt.
 73█                    if fname and fname not in chat_files and Path(fname).name in chat_files:
 74█                        fname = Path(fname).name
 75│                if not fname:  # blank line? or ``` was on first line i==0
 76│                    if saw_fname:
 77│                        fname = saw_fname
...⋮...
100│        if mode == "diff":
101│            if fname is not None:
102│                # ending an existing block
103█                full_path = (Path(self.root) / fname).absolute()
104│                output += self.do_live_diff(full_path, new_lines, False)
105│            return "\n".join(output)
106│
...⋮...
130│            self.io.write_text(full_path, new_lines)
131│
132│    def do_live_diff(self, full_path, new_lines, final):
133█        if Path(full_path).exists():
134│            orig_lines = self.io.read_text(full_path).splitlines(keepends=True)
135│
136│            show_diff = diffs.diff_partial_update(
137│                orig_lines,
138│                new_lines,
139│                final=final,
140│            ).splitlines()
141│            output = show_diff
142│        else:
...⋮...

ASSISTANT: To fix the errors, we need to import the `Path` class from the `pathlib` module. Here are the necessary changes:

aider/coders/wholefile_coder.py
<source>python
<<<<<<< SEARCH
from aider import diffs
=======
from aider import diffs
from pathlib import Path
>>>>>>> REPLACE
</source>

aider/coders/wholefile_coder.py
<source>python
<<<<<<< SEARCH
                    if fname and fname not in chat_files and Path(fname).name in chat_files:
                        fname = Path(fname).name
=======
                    if fname and fname not in chat_files and Path(fname).name in chat_files:
                        fname = Path(fname).name
>>>>>>> REPLACE
</source>

aider/coders/wholefile_coder.py
<source>python
<<<<<<< SEARCH
                full_path = (Path(self.root) / fname).absolute()
=======
                full_path = (Path(self.root) / fname).absolute()
>>>>>>> REPLACE
</source>

aider/coders/wholefile_coder.py
<source>python
<<<<<<< SEARCH
        if Path(full_path).exists():
=======
        if Path(full_path).exists():
>>>>>>> REPLACE
</source>
2024-05-18 20:49:17 -07:00
Paul Gauthier
a50f01a004 Removed unnecessary import of Path from pathlib. 2024-05-18 20:49:10 -07:00
Paul Gauthier
8a2ce8ec0e aider: Import 'Path' from 'pathlib' to fix undefined name errors.
# Aider chat conversation:

USER: # Running: /Users/gauthier/Projects/aider/tmp.sh aider/coders/wholefile_coder.py

aider/coders/wholefile_coder.py
aider/coders/wholefile_coder.py:72:62: F821 undefined name 'Path'
                    if fname and fname not in chat_files and Path(fname).name in chat_files:
                                                             ^
aider/coders/wholefile_coder.py:73:33: F821 undefined name 'Path'
                        fname = Path(fname).name
                                ^
aider/coders/wholefile_coder.py:102:30: F821 undefined name 'Path'
                full_path = (Path(self.root) / fname).absolute()
                             ^
aider/coders/wholefile_coder.py:132:12: F821 undefined name 'Path'
        if Path(full_path).exists():
           ^

ASSISTANT: To fix the `undefined name 'Path'` errors, we need to import `Path` from the `pathlib` module at the beginning of the file. Here are the necessary changes:

aider/coders/wholefile_coder.py
<source>python
<<<<<<< SEARCH
from aider import diffs
=======
from pathlib import Path
from aider import diffs
>>>>>>> REPLACE
</source>
2024-05-18 19:18:43 -07:00
Paul Gauthier
5805007885 Removed unused import statement from wholefile_coder.py. 2024-05-18 19:18:38 -07:00
Paul Gauthier
4bbeb9de6f aider: Import 'Path' from 'pathlib' to fix undefined name errors.
# Aider chat conversation:

USER: # Running: /Users/gauthier/Projects/aider/tmp.sh aider/coders/wholefile_coder.py

aider/coders/wholefile_coder.py
aider/coders/wholefile_coder.py:72:62: F821 undefined name 'Path'
                    if fname and fname not in chat_files and Path(fname).name in chat_files:
                                                             ^
aider/coders/wholefile_coder.py:73:33: F821 undefined name 'Path'
                        fname = Path(fname).name
                                ^
aider/coders/wholefile_coder.py:102:30: F821 undefined name 'Path'
                full_path = (Path(self.root) / fname).absolute()
                             ^
aider/coders/wholefile_coder.py:132:12: F821 undefined name 'Path'
        if Path(full_path).exists():
           ^

ASSISTANT: To fix the `undefined name 'Path'` errors, we need to import `Path` from the `pathlib` module at the beginning of the file. Here are the necessary changes:

aider/coders/wholefile_coder.py
<source>python
<<<<<<< SEARCH
from aider import diffs
=======
from pathlib import Path
from aider import diffs
>>>>>>> REPLACE
</source>
2024-05-18 19:16:25 -07:00
Paul Gauthier
1d519cdf1e Removed unused import from wholefile_coder.py. 2024-05-18 19:16:24 -07:00
Paul Gauthier
cd838901d1 Added improved editing support for command-r-plus 2024-04-20 16:53:27 -07:00
Paul Gauthier
360846320f announce the edit format 2023-12-17 12:58:48 -08:00
Paul Gauthier
e608a351f0 standardize on abs_root_path(), simplify get/apply_edit 2023-08-18 07:20:15 -07:00
Paul Gauthier
2455676a44 refactor to enumerate files to be edited, then make the edits 2023-08-17 10:07:22 -07:00
Paul Gauthier
1858f0504b Strip asterisks from filenames suggested by GPT-3.5 #157 #168 2023-08-02 06:58:59 -03:00
Paul Gauthier
23beb7cb5d wip 2023-07-21 11:49:19 -03:00
Paul Gauthier
6cb8f4e762 stop passing content to update_cur_messages 2023-07-20 09:41:38 -03:00
Paul Gauthier
1f83a89192 Merge branch 'main' into issue-73 2023-07-11 09:36:34 -07:00
Paul Gauthier
aacbcd32d4 bugfix live diffs in wholefile coder 2023-07-11 07:27:49 -07:00
Paul Gauthier
6fc276d336 prioritize how to allocate code blocks to filenames 2023-07-10 17:42:23 -07:00
Paul Gauthier
fd8a6c4e2f refactor 2023-07-10 17:03:31 -07:00
Paul Gauthier
cffeb275a6 cleanup 2023-07-07 12:27:13 -07:00
Paul Gauthier
552bdc4f71 handle diff output for new file 2023-07-07 11:58:27 -07:00
Paul Gauthier
61e9003ce0 handle valerr in render_incremental_response 2023-07-07 08:29:53 -07:00
Paul Gauthier
85c3bb8f12 rely on io.dry_run 2023-07-05 21:21:37 -07:00
Paul Gauthier
b46dffbb20 refactor to use io.write_text 2023-07-05 21:18:19 -07:00
Paul Gauthier
413ddb84df refactor to use io.read_text 2023-07-05 20:33:46 -07:00
Paul Gauthier
079682b29e Omit the "No changes are needed" redaction from commit messages with wholefile coders 2023-06-26 10:21:27 -07:00
Paul Gauthier
96fda2aa9f abandon n-backticks, try some html fences 2023-06-25 20:23:36 -07:00
Paul Gauthier
a6d80e815e wip 2023-06-25 19:54:15 -07:00
Paul Gauthier
f00a1e827a Merge branch 'main' into triple-backticks 2023-06-25 19:45:03 -07:00
Paul Gauthier
52343b5340 More generic handling of GPT mangling of filenames 2023-06-25 19:40:12 -07:00
Paul Gauthier
2b8717bdb6 Merge branch 'main' into triple-backticks 2023-06-25 19:34:20 -07:00
Paul Gauthier
3393f560fb make sure diffs display with newlines 2023-06-25 17:33:33 -07:00
Paul Gauthier
f625d52bec added self.fence_ticks 2023-06-25 17:03:20 -07:00
Paul Gauthier
fe1d7aa887 path/to not /path/to 2023-06-24 20:10:17 -07:00
Paul Gauthier
b1cdb9d488 handle /path/to 2023-06-24 20:05:35 -07:00
Paul Gauthier
1acc5e04d0 fix 2023-06-24 16:34:10 -07:00
Paul Gauthier
a1f4ae6a07 Stronger prompt 2023-06-24 15:49:26 -07:00
Paul Gauthier
ac560c2877 Handle missing filenames by scanning for mentions in the text 2023-06-24 15:32:35 -07:00
Paul Gauthier
f2a03e917d Handle missing filename when only 1 in session 2023-06-24 15:13:39 -07:00
Paul Gauthier
d8294cab44 simpler 2023-06-24 14:57:40 -07:00
Paul Gauthier
1754e574fd cleanup 2023-06-24 14:53:19 -07:00
Paul Gauthier
82e19fcf1d save the file even if tick fence wasn't closed properly 2023-06-24 14:47:29 -07:00
Paul Gauthier
eaf02da46b stronger wholefile prompt about file listings; adopt allowed_to_edit in wholefile; tests 2023-06-24 14:45:43 -07:00
Paul Gauthier
b4a92e312a aider: Added a test function to test the WholeFileCoder's update_files method.
# Context:
USER: make a test for `WholeFileCoder`.updated_files
ASSISTANT: To create a test for the `WholeFileCoder`'s `update_files` method, we will add a new test function in the `tests/test_wholefile.py` file. Here's the test function:

```python
tests/test_wholefile.py
<<<<<<< ORIGINAL

=======
import os
from pathlib import Path
import tempfile
import unittest

from aider.coders.wholefile_coder import WholeFileCoder
from aider.io import InputOutput

class TestWholeFileCoder(unittest.TestCase):
    def test_update_files(self):
        with tempfile.TemporaryDirectory() as temp_dir:
            # Create a sample file in the temporary directory
            sample_file = os.path.join(temp_dir, "sample.txt")
            with open(sample_file, "w") as f:
                f.write("Original content\n")

            # Initialize WholeFileCoder with the temporary directory
            io = InputOutput()
            coder = WholeFileCoder(root=temp_dir, io=io)

            # Set the partial response content with the updated content
            coder.partial_response_content = f"{sample_file}\n```\nUpdated content\n```"

            # Call update_files method
            edited_files = coder.update_files()

            # Check if the sample file was updated
            self.assertIn("sample.txt", edited_files)

            # Check if the content of the sample file was updated
            with open(sample_file, "r") as f:
                updated_content = f.read()
            self.assertEqual(updated_content, "Updated content\n")

if __name__ == "__main__":
    unittest.main()
>>>>>>> UPDATED
```

This test function creates a temporary directory with a sample file, initializes a `WholeFileCoder` instance with the temporary directory, sets the partial response content with the updated content, calls the `update_files` method, and checks if the sample file was updated correctly.
2023-06-24 14:33:20 -07:00
Paul Gauthier
99194e4051 Better stats for retry outcomes 2023-06-23 20:54:02 -07:00
Paul Gauthier
82813d4159 rename modify_incremental_response -> render_incremental_response 2023-06-22 17:29:47 -07:00
Paul Gauthier
4b69e2b85c fixed test 2023-06-21 21:33:51 -07:00
Paul Gauthier
eb062cc504 refac and func update_files 2023-06-21 21:17:12 -07:00
Paul Gauthier
8c1e1c7267 handle not live case 2023-06-21 21:08:22 -07:00