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