From efdb736f8af3372dfc0ef66f418eac323860d7b2 Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Mon, 19 Jun 2023 18:25:22 -0700 Subject: prompt processing --- continuedev/src/continuedev/steps/core/core.py | 93 +++++++++++++++----------- 1 file changed, 53 insertions(+), 40 deletions(-) (limited to 'continuedev/src') diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py index 80980c36..3642e65b 100644 --- a/continuedev/src/continuedev/steps/core/core.py +++ b/continuedev/src/continuedev/steps/core/core.py @@ -149,20 +149,6 @@ class DefaultModelEditCodeStep(Step): Main task: - - - {file_prefix} - - - {code} - - - {file_suffix} - - - {user_request} - - """) _prompt_and_completion: str = "" @@ -257,33 +243,52 @@ class DefaultModelEditCodeStep(Step): segs[1] = segs[1].strip() # Move any surrounding blank line in rif.contents to the prefix/suffix - first_line = rif.contents.splitlines(keepends=True)[0] - while first_line.strip() == "": - segs[0] += first_line - rif.contents = rif.contents[len(first_line):] + if len(rif.contents) > 0: first_line = rif.contents.splitlines(keepends=True)[0] + while first_line.strip() == "": + segs[0] += first_line + rif.contents = rif.contents[len(first_line):] + first_line = rif.contents.splitlines(keepends=True)[0] - last_line = rif.contents.splitlines(keepends=True)[-1] - while last_line.strip() == "": - segs[1] = last_line + segs[1] - rif.contents = rif.contents[:len( - rif.contents) - len(last_line)] last_line = rif.contents.splitlines(keepends=True)[-1] - - while rif.contents.startswith("\n"): - segs[0] += "\n" - rif.contents = rif.contents[1:] - while rif.contents.endswith("\n"): - segs[1] = "\n" + segs[1] - rif.contents = rif.contents[:-1] - - prompt = self._prompt.format( - code=rif.contents, user_request=self.user_input, file_prefix=segs[0], file_suffix=segs[1]) - - if segs[0].strip() == "": - prompt = prompt.replace("\n", "") - if segs[1].strip() == "": - prompt = prompt.replace("\n", "") + while last_line.strip() == "": + segs[1] = last_line + segs[1] + rif.contents = rif.contents[:len( + rif.contents) - len(last_line)] + last_line = rif.contents.splitlines(keepends=True)[-1] + + while rif.contents.startswith("\n"): + segs[0] += "\n" + rif.contents = rif.contents[1:] + while rif.contents.endswith("\n"): + segs[1] = "\n" + segs[1] + rif.contents = rif.contents[:-1] + + # .format(code=rif.contents, user_request=self.user_input, file_prefix=segs[0], file_suffix=segs[1]) + prompt = self._prompt + if segs[0].strip() != "": + prompt += dedent(f"""\ +\n + +{segs[0]} +""") + prompt += dedent(f"""\ +\n + +{rif.contents} +""") + if segs[1].strip() != "": + prompt += dedent(f"""\ +\n + +{segs[1]} +""") + prompt += dedent(f"""\ +\n + +{self.user_input} + +""") lines = [] unfinished_line = "" @@ -297,9 +302,11 @@ class DefaultModelEditCodeStep(Step): original_lines[0].strip(), "") + line if i < len(original_lines): + # Replace original line range = Range.from_shorthand( rif.range.start.line + i, rif.range.start.character if i == 0 else 0, rif.range.start.line + i + 1, 0) else: + # Insert a line range = Range.from_shorthand( rif.range.start.line + i, 0, rif.range.start.line + i, 0) @@ -309,6 +316,7 @@ class DefaultModelEditCodeStep(Step): replacement=line + "\n" )) + lines_of_prefix_copied = 0 async for chunk in model_to_use.stream_chat(prompt, with_history=await sdk.get_chat_context(), temperature=0): chunk_lines = chunk.split("\n") chunk_lines[0] = unfinished_line + chunk_lines[0] @@ -324,6 +332,10 @@ class DefaultModelEditCodeStep(Step): break elif "```" in line or "" in line or "" in line or "" in line or "" in line or "" in line or "" in line or "" in line or "" in line or "" in line: continue + elif (lines_of_prefix_copied > 0 or i == 0) and lines_of_prefix_copied < len(segs[0].splitlines()) and line == full_file_contents_lst[lines_of_prefix_copied]: + # This is a sketchy way of stopping it from repeating the file_prefix. Is a bug if output happens to have a matching line + lines_of_prefix_copied += 1 + continue elif i < len(original_lines) and line == original_lines[i]: i += 1 continue @@ -333,8 +345,9 @@ class DefaultModelEditCodeStep(Step): # Add the unfinished line if unfinished_line != "": - unfinished_line = unfinished_line.removesuffix( - "").removesuffix("").removesuffix("```").removesuffix("").removesuffix("", "").replace("", "").replace("```", "").replace("", "").replace("", "").replace("", "").replace("", "").replace("