diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-06-12 12:21:26 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-06-12 12:21:26 -0700 |
commit | af350f5e70f20d14c361684e361b1e64e5e0b2c3 (patch) | |
tree | b840dd621f88974f4d4ea047737f16324cbad990 /continuedev | |
parent | 57a6d8fc0a808ca160b5f691882a7893ed438c97 (diff) | |
download | sncontinue-af350f5e70f20d14c361684e361b1e64e5e0b2c3.tar.gz sncontinue-af350f5e70f20d14c361684e361b1e64e5e0b2c3.tar.bz2 sncontinue-af350f5e70f20d14c361684e361b1e64e5e0b2c3.zip |
cleaner highlighting (from server side)
Diffstat (limited to 'continuedev')
-rw-r--r-- | continuedev/src/continuedev/server/session_manager.py | 1 | ||||
-rw-r--r-- | continuedev/src/continuedev/steps/core/core.py | 45 | ||||
-rw-r--r-- | continuedev/src/continuedev/steps/main.py | 28 |
3 files changed, 63 insertions, 11 deletions
diff --git a/continuedev/src/continuedev/server/session_manager.py b/continuedev/src/continuedev/server/session_manager.py index 0dbfaf38..ebea08a5 100644 --- a/continuedev/src/continuedev/server/session_manager.py +++ b/continuedev/src/continuedev/server/session_manager.py @@ -28,6 +28,7 @@ class DemoAutopilot(Autopilot): cumulative_edit_string = "" def handle_manual_edits(self, edits: List[FileEditWithFullContents]): + return for edit in edits: self.cumulative_edit_string += edit.fileEdit.replacement self._manual_edits_buffer.append(edit) diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py index 57689f19..4288ffd2 100644 --- a/continuedev/src/continuedev/steps/core/core.py +++ b/continuedev/src/continuedev/steps/core/core.py @@ -3,8 +3,10 @@ import os import subprocess from textwrap import dedent from typing import Coroutine, List, Union -from ...libs.llm.prompt_utils import MarkdownStyleEncoderDecoder +from ...models.main import Range +from ...libs.util.calculate_diff import calculate_diff2, apply_edit_to_str +from ...libs.llm.prompt_utils import MarkdownStyleEncoderDecoder from ...models.filesystem_edit import EditDiff, FileEdit, FileEditWithFullContents, FileSystemEdit from ...models.filesystem import FileSystem, RangeInFile, RangeInFileWithContents from ...core.observation import Observation, TextObservation, TracebackObservation, UserInputObservation @@ -149,7 +151,11 @@ class Gpt35EditCodeStep(Step): _prompt_and_completion: str = "" async def describe(self, models: Models) -> Coroutine[str, None, None]: - return models.gpt35.complete(f"{self._prompt_and_completion}\n\nPlease give brief a description of the changes made above using markdown bullet points:") + description = models.gpt35.complete( + f"{self._prompt_and_completion}\n\nPlease give brief a description of the changes made above using markdown bullet points. Be concise and only mention changes made to the commit before, not prefix or suffix:") + self.name = models.gpt35.complete( + f"Write a short title for this description: {description}") + return description async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]: rif_with_contents = [] @@ -174,11 +180,40 @@ class Gpt35EditCodeStep(Step): self._prompt_and_completion += prompt + completion - await sdk.ide.applyFileSystemEdit( - FileEdit(filepath=rif.filepath, range=rif.range, replacement=completion)) - await sdk.ide.saveFile(rif.filepath) + # Calculate diff, open file, apply edits, and highlight changed lines + edits = calculate_diff2( + rif.filepath, rif.contents, completion.removesuffix("\n")) + await sdk.ide.setFileOpen(rif.filepath) + lines_to_highlight = set() + for edit in edits: + edit.range.start.line += rif.range.start.line + edit.range.start.character += rif.range.start.character + edit.range.end.line += rif.range.start.line + edit.range.end.character += rif.range.start.character if edit.range.end.line == 0 else 0 + + for line in range(edit.range.start.line, edit.range.end.line + 1): + lines_to_highlight.add(line) + + await sdk.ide.applyFileSystemEdit(edit) + + current_start = None + last_line = None + for line in sorted(list(lines_to_highlight)): + if current_start is None: + current_start = line + elif line != last_line + 1: + await sdk.ide.highlightCode(RangeInFile(filepath=edit.filepath, range=Range.from_shorthand(current_start, 0, last_line, 0))) + current_start = line + + last_line = line + + if current_start is not None: + await sdk.ide.highlightCode(RangeInFile(filepath=edit.filepath, range=Range.from_shorthand(current_start, 0, last_line, 0))) + + await sdk.ide.saveFile(rif.filepath) + class EditFileStep(Step): filepath: str diff --git a/continuedev/src/continuedev/steps/main.py b/continuedev/src/continuedev/steps/main.py index 24335b4f..9634c726 100644 --- a/continuedev/src/continuedev/steps/main.py +++ b/continuedev/src/continuedev/steps/main.py @@ -16,6 +16,7 @@ from ..core.sdk import ContinueSDK, Models from ..core.observation import Observation import subprocess from .core.core import Gpt35EditCodeStep +from ..libs.util.calculate_diff import calculate_diff2 class SetupContinueWorkspaceStep(Step): @@ -216,7 +217,8 @@ class StarCoderEditHighlightedCodeStep(Step): async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]: range_in_files = await sdk.ide.getHighlightedCode() - if len(range_in_files) == 0: + found_highlighted_code = len(range_in_files) > 0 + if not found_highlighted_code: # Get the full contents of all open files files = await sdk.ide.getOpenFiles() contents = {} @@ -239,15 +241,29 @@ class StarCoderEditHighlightedCodeStep(Step): for rif in rif_with_contents: prompt = self._prompt.format( code=rif.contents, user_request=self.user_input) - completion = str(sdk.models.starcoder.complete(prompt)) + + if found_highlighted_code: + full_file_contents = await sdk.ide.readFile(rif.filepath) + segs = full_file_contents.split(rif.contents) + prompt = f"<file_prefix>{segs[0]}<file_suffix>{segs[1]}" + prompt + + completion = str((await sdk.models.starcoder()).complete(prompt)) eot_token = "<|endoftext|>" - if completion.endswith(eot_token): - completion = completion[:completion.rindex(eot_token)] + completion = completion.removesuffix(eot_token) + + if found_highlighted_code: + rif.contents = segs[0] + rif.contents + segs[1] + completion = segs[0] + completion + segs[1] self._prompt_and_completion += prompt + completion - await sdk.ide.applyFileSystemEdit( - FileEdit(filepath=rif.filepath, range=rif.range, replacement=completion)) + edits = calculate_diff2( + rif.filepath, rif.contents, completion.removesuffix("\n")) + for edit in edits: + await sdk.ide.applyFileSystemEdit(edit) + + # await sdk.ide.applyFileSystemEdit( + # FileEdit(filepath=rif.filepath, range=rif.range, replacement=completion)) await sdk.ide.saveFile(rif.filepath) await sdk.ide.setFileOpen(rif.filepath) |