abandon n-backticks, try some html fences

This commit is contained in:
Paul Gauthier 2023-06-25 20:23:36 -07:00
parent 9151cf03a1
commit 96fda2aa9f
4 changed files with 22 additions and 34 deletions

View file

@ -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 = [
("```", "```"),
("<source>", "</source>"),
("<code>", "</code>"),
("<pre>", "</pre>"),
]
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):

View file

@ -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:

View file

@ -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.

View file

@ -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