From 96fda2aa9f37c4ce44f6bfb065d7a50e23ebf7a0 Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Sun, 25 Jun 2023 20:23:36 -0700 Subject: [PATCH] abandon n-backticks, try some html fences --- aider/coders/base_coder.py | 31 +++++++++---------------------- aider/coders/wholefile_coder.py | 4 ++-- aider/coders/wholefile_prompts.py | 14 +++++++------- aider/utils.py | 7 ++++--- 4 files changed, 22 insertions(+), 34 deletions(-) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index d90b4a821..b766857b0 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -246,7 +246,7 @@ class Coder: prompt = "" for fname in fnames: relative_fname = self.get_rel_fname(fname) - prompt += utils.quoted_file(fname, relative_fname, fence_ticks=self.get_fence_ticks()) + prompt += utils.quoted_file(fname, relative_fname, fence=self.fence) return prompt def get_files_messages(self): @@ -355,31 +355,18 @@ class Coder: return self.send_new_user_message(inp) - num_ticks = 4 + fences = [ + ("```", "```"), + ("", ""), + ("", ""), + ("
", "
"), + ] - def get_fence_ticks(self): - return "`" * self.num_ticks + fence = fences[3] def fmt_system_reminder(self): prompt = self.gpt_prompts.system_reminder - num_ticks = self.num_ticks - - explain = f""" -You *MUST* use {num_ticks} backticks, because some files contain {num_ticks-1} backticks already!""" - - number_mapping = { - 3: "triple", - # 4: "quadruple", - # 5: "quintuple", - } - num_ticks_name = number_mapping.get(num_ticks, str(num_ticks)) - - prompt = prompt.format( - num_ticks=num_ticks_name, - fence=self.get_fence_ticks(), - num_ticks_explanation=explain, - ) - + prompt = prompt.format(fence=self.fence) return prompt def send_new_user_message(self, inp): diff --git a/aider/coders/wholefile_coder.py b/aider/coders/wholefile_coder.py index 68e207778..cc7cb3980 100644 --- a/aider/coders/wholefile_coder.py +++ b/aider/coders/wholefile_coder.py @@ -36,7 +36,7 @@ class WholeFileCoder(Coder): fname = None new_lines = [] for i, line in enumerate(lines): - if line.startswith(self.get_fence_ticks()): + if line.startswith(self.fence[0]) or line.startswith(self.fence[1]): if fname is not None: # ending an existing block saw_fname = None @@ -79,7 +79,7 @@ class WholeFileCoder(Coder): else: # TODO: sense which file it is by diff size raise ValueError( - f"No filename provided before {self.get_fence_ticks()} in file listing" + f"No filename provided before {self.fence[0]} in file listing" ) elif fname is not None: diff --git a/aider/coders/wholefile_prompts.py b/aider/coders/wholefile_prompts.py index eaea54336..3e381c6af 100644 --- a/aider/coders/wholefile_prompts.py +++ b/aider/coders/wholefile_prompts.py @@ -18,16 +18,16 @@ Once you understand the request you MUST: You MUST use this *file listing* format: path/to/filename.js -{fence}javascript -// entire file content goes in the -// {num_ticks} backtick fenced block -{fence} +{fence[0]} +// entire file content ... +// ... goes in between +{fence[1]} Every *file listing* MUST use this format: - First line: the filename with any originally provided path -- Second line: opening {num_ticks} backtick fence with the correct code language. -- Final line: closing {num_ticks} backtick fence. -{num_ticks_explanation} +- Second line: opening {fence[0]} +- ... entire content of the file ... +- Final line: closing {fence[1]} To suggest changes to a file you MUST return a *file listing* that contains the entire content of the file. Create a new file you MUST return a *file listing* which includes an appropriate filename, including any appropriate path. diff --git a/aider/utils.py b/aider/utils.py index 459ac194e..61e535bc6 100644 --- a/aider/utils.py +++ b/aider/utils.py @@ -3,10 +3,11 @@ from pathlib import Path from .dump import dump # noqa: F401 -def quoted_file(fname, display_fname, fence_ticks="```", number=False): +def quoted_file(fname, display_fname, fence=("```", "```"), number=False): prompt = "\n" prompt += display_fname - prompt += f"\n{fence_ticks}\n" + prompt += f"\n{fence[0]}\n" + file_content = Path(fname).read_text() lines = file_content.splitlines() for i, line in enumerate(lines, start=1): @@ -14,7 +15,7 @@ def quoted_file(fname, display_fname, fence_ticks="```", number=False): prompt += f"{i:4d} " prompt += line + "\n" - prompt += f"{fence_ticks}\n" + prompt += f"{fence[1]}\n" return prompt