Allow GPT to omit the filename from edit blocks, if an earlier block provided it

This commit is contained in:
Paul Gauthier 2023-05-30 11:45:21 -07:00
parent ef22abd8be
commit ca74eee2f9
2 changed files with 17 additions and 5 deletions

View file

@ -215,6 +215,9 @@ def find_original_update_blocks(content):
pieces.reverse()
processed = []
# Keep using the same filename in cases where GPT produces an edit block
# without a filename.
current_filename = None
try:
while pieces:
cur = pieces.pop()
@ -234,12 +237,20 @@ def find_original_update_blocks(content):
if not len(filename) or "`" in filename:
filename = processed[-2].splitlines()[-2].strip()
if not len(filename) or "`" in filename:
if current_filename:
filename = current_filename
else:
raise ValueError(
f"Bad/missing filename. It should go right above {ORIGINAL}"
)
except IndexError:
if current_filename:
filename = current_filename
else:
raise ValueError(f"Bad/missing filename. It should go right above {ORIGINAL}")
current_filename = filename
original_text = pieces.pop()
processed.append(original_text)

View file

@ -195,9 +195,10 @@ tests/test_repomap.py
These changes replace the `subprocess.run` patches with `subprocess.check_output` patches in both `test_check_for_ctags_failure` and `test_check_for_ctags_success` tests.
"""
with self.assertRaises(ValueError) as cm:
list(utils.find_original_update_blocks(edit))
self.assertIn("missing filename", str(cm.exception))
edit_blocks = list(utils.find_original_update_blocks(edit))
self.assertEqual(len(edit_blocks), 2) # 2 edits
self.assertEqual(edit_blocks[0][0], "tests/test_repomap.py")
self.assertEqual(edit_blocks[1][0], "tests/test_repomap.py")
if __name__ == "__main__":