summaryrefslogtreecommitdiff
path: root/continuedev/src
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-06-19 18:25:22 -0700
committerNate Sesti <sestinj@gmail.com>2023-06-19 18:25:22 -0700
commitefdb736f8af3372dfc0ef66f418eac323860d7b2 (patch)
tree12793afd688f6a1a777f03f631bd5e7326632f43 /continuedev/src
parenta397abef8e5124edc0079c61dfcf546998cac5c9 (diff)
downloadsncontinue-efdb736f8af3372dfc0ef66f418eac323860d7b2.tar.gz
sncontinue-efdb736f8af3372dfc0ef66f418eac323860d7b2.tar.bz2
sncontinue-efdb736f8af3372dfc0ef66f418eac323860d7b2.zip
prompt processing
Diffstat (limited to 'continuedev/src')
-rw-r--r--continuedev/src/continuedev/steps/core/core.py93
1 files changed, 53 insertions, 40 deletions
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):
</modified_code_to_edit>
Main task:
-
- <file_prefix>
- {file_prefix}
- </file_prefix>
- <code_to_edit>
- {code}
- </code_to_edit>
- <file_suffix>
- {file_suffix}
- </file_suffix>
- <user_request>
- {user_request}
- </user_request>
- <modified_code_to_edit>
""")
_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("<file_prefix>\n", "")
- if segs[1].strip() == "":
- prompt = prompt.replace("\n<file_suffix>", "")
+ 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
+<file_prefix>
+{segs[0]}
+</file_prefix>""")
+ prompt += dedent(f"""\
+\n
+<code_to_edit>
+{rif.contents}
+</code_to_edit>""")
+ if segs[1].strip() != "":
+ prompt += dedent(f"""\
+\n
+<file_suffix>
+{segs[1]}
+</file_suffix>""")
+ prompt += dedent(f"""\
+\n
+<user_request>
+{self.user_input}
+</user_request>
+<modified_code_to_edit>""")
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 "<modified_code_to_edit>" in line or "<file_prefix>" in line or "</file_prefix>" in line or "<file_suffix>" in line or "</file_suffix>" in line or "<user_request>" in line or "</user_request>" in line or "<code_to_edit>" in line or "</code_to_edit>" 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(
- "</modified_code_to_edit>").removesuffix("</code_to_edit>").removesuffix("```").removesuffix("</file_suffix>").removesuffix("</file_prefix")
+ unfinished_line = unfinished_line.replace(
+ "</modified_code_to_edit>", "").replace("</code_to_edit>", "").replace("```", "").replace("</file_suffix>", "").replace("</file_prefix", "").replace(
+ "<modified_code_to_edit>", "").replace("<code_to_edit>", "").replace("<file_suffix>", "").replace("<file_prefix", "")
if not i < len(original_lines) or not unfinished_line == original_lines[i]:
await add_line(i, unfinished_line)
lines.append(unfinished_line)