diff options
| author | Nate Sesti <sestinj@gmail.com> | 2023-09-06 23:02:59 -0700 | 
|---|---|---|
| committer | Nate Sesti <sestinj@gmail.com> | 2023-09-06 23:02:59 -0700 | 
| commit | ceafdf18c9d9f0f8769d4a9e45c8a407179161c5 (patch) | |
| tree | dfed3b9b14448fac251230777c2cbf869bccf386 /continuedev/src | |
| parent | 6e8885fc2f7feb06ef6ac87d2d7688f9f33d15de (diff) | |
| download | sncontinue-ceafdf18c9d9f0f8769d4a9e45c8a407179161c5.tar.gz sncontinue-ceafdf18c9d9f0f8769d4a9e45c8a407179161c5.tar.bz2 sncontinue-ceafdf18c9d9f0f8769d4a9e45c8a407179161c5.zip  | |
feat: :lipstick: handful of UI improvements
Diffstat (limited to 'continuedev/src')
| -rw-r--r-- | continuedev/src/continuedev/core/autopilot.py | 4 | ||||
| -rw-r--r-- | continuedev/src/continuedev/libs/util/edit_config.py | 19 | ||||
| -rw-r--r-- | continuedev/src/continuedev/plugins/steps/core/core.py | 49 | ||||
| -rw-r--r-- | continuedev/src/continuedev/plugins/steps/setup_model.py | 11 | ||||
| -rw-r--r-- | continuedev/src/continuedev/server/gui.py | 10 | 
5 files changed, 61 insertions, 32 deletions
diff --git a/continuedev/src/continuedev/core/autopilot.py b/continuedev/src/continuedev/core/autopilot.py index 5f17b4d2..cee7a2f9 100644 --- a/continuedev/src/continuedev/core/autopilot.py +++ b/continuedev/src/continuedev/core/autopilot.py @@ -464,7 +464,9 @@ class Autopilot(ContinueBaseModel):          # Update its description          async def update_description(): -            step.description = await step.describe(self.continue_sdk.models) +            description = await step.describe(self.continue_sdk.models) +            if description is not None: +                step.description = description              # Update subscribers with new description              await self.update_subscribers() diff --git a/continuedev/src/continuedev/libs/util/edit_config.py b/continuedev/src/continuedev/libs/util/edit_config.py index 7c8ee76f..f4285bc9 100644 --- a/continuedev/src/continuedev/libs/util/edit_config.py +++ b/continuedev/src/continuedev/libs/util/edit_config.py @@ -79,6 +79,8 @@ filtered_attrs = {      "llm",  } +filtered_attrs_when_new = {"timeout", "prompt_templates"} +  def escape_string(string: str) -> str:      return string.replace('"', '\\"').replace("'", "\\'") @@ -90,20 +92,27 @@ def display_val(v: Any):      return str(v) -def display_llm_class(llm): -    args = ", ".join( +def display_llm_class(llm, new: bool = False): +    sep = ",\n\t\t\t" +    args = sep.join(          [              f"{k}={display_val(v)}"              for k, v in llm.dict().items()              if k not in filtered_attrs and v is not None          ]      ) -    return f"{llm.__class__.__name__}({args})" +    return f"{llm.__class__.__name__}(\n\t\t\t{args}\n\t\t)" -def create_obj_node(class_name: str, args: Dict[str, str]) -> redbaron.RedBaron: +def create_obj_node( +    class_name: str, args: Dict[str, str], tabs: int = 1 +) -> redbaron.RedBaron:      args = [f"{key}={value}" for key, value in args.items()] -    return redbaron.RedBaron(f"{class_name}({', '.join(args)})")[0] +    t = "\t" * tabs +    new_line = "\n\t" + t +    sep = "," + new_line + +    return redbaron.RedBaron(f"{class_name}({new_line}{sep.join(args)}\n{t})")[0]  def create_string_node(string: str) -> redbaron.RedBaron: diff --git a/continuedev/src/continuedev/plugins/steps/core/core.py b/continuedev/src/continuedev/plugins/steps/core/core.py index 7766a887..97235e6f 100644 --- a/continuedev/src/continuedev/plugins/steps/core/core.py +++ b/continuedev/src/continuedev/plugins/steps/core/core.py @@ -183,33 +183,15 @@ class DefaultModelEditCodeStep(Step):      summary_prompt: str = "Please give brief a description of the changes made above using markdown bullet points. Be concise:"      async def describe(self, models: Models) -> Coroutine[str, None, None]: -        if self._previous_contents.strip() == self._new_contents.strip(): -            description = "No edits were made" -        else: -            changes = "\n".join( -                difflib.ndiff( -                    self._previous_contents.splitlines(), -                    self._new_contents.splitlines(), -                ) -            ) -            description = await models.medium.complete( -                dedent( -                    f"""\ -                Diff summary: "{self.user_input}" - -                ```diff -                {changes} -                ``` - -                {self.summary_prompt}""" -                ) -            )          name = await models.medium.complete(              f"Write a very short title to describe this requested change (no quotes): '{self.user_input}'. This is the title:"          )          self.name = remove_quotes_and_escapes(name) -        return f"{remove_quotes_and_escapes(description)}" +        if self._previous_contents.strip() == self._new_contents.strip(): +            return "No edits were made" +        else: +            return None      async def get_prompt_parts(          self, rif: RangeInFileWithContents, sdk: ContinueSDK, full_file_contents: str @@ -821,6 +803,29 @@ Please output the code to be inserted at the cursor in order to fulfill the user          self.name = "Generating summary" +        changes = "\n".join( +            difflib.ndiff( +                self._previous_contents.splitlines(), +                self._new_contents.splitlines(), +            ) +        ) + +        self.description = "" +        async for chunk in sdk.models.medium.stream_complete( +            dedent( +                f"""\ +        Diff summary: "{self.user_input}" + +        ```diff +        {changes} +        ``` + +        {self.summary_prompt}""" +            ) +        ): +            self.description += chunk +            await sdk.update_ui() +  class EditFileStep(Step):      filepath: str diff --git a/continuedev/src/continuedev/plugins/steps/setup_model.py b/continuedev/src/continuedev/plugins/steps/setup_model.py index 2e1fdc14..3dae39c2 100644 --- a/continuedev/src/continuedev/plugins/steps/setup_model.py +++ b/continuedev/src/continuedev/plugins/steps/setup_model.py @@ -1,6 +1,8 @@  from ...core.main import Step  from ...core.sdk import ContinueSDK  from ...libs.util.paths import getConfigFilePath +from ...models.filesystem import RangeInFile +from ...models.main import Range  MODEL_CLASS_TO_MESSAGE = {      "OpenAI": "Obtain your OpenAI API key from [here](https://platform.openai.com/account/api-keys) and paste it into the `api_key` field at config.models.default.api_key in `config.py`. Then reload the VS Code window for changes to take effect.", @@ -23,3 +25,12 @@ class SetupModelStep(Step):          self.description = MODEL_CLASS_TO_MESSAGE.get(              self.model_class, "Please finish setting up this model in `config.py`"          ) + +        config_contents = await sdk.ide.readFile(getConfigFilePath()) +        start = config_contents.find("default=") + len("default=") +        end = config_contents.find("unused=") - 1 +        range = Range.from_indices(config_contents, start, end) +        range.end.line -= 1 +        await sdk.ide.highlightCode( +            RangeInFile(filepath=getConfigFilePath(), range=range) +        ) diff --git a/continuedev/src/continuedev/server/gui.py b/continuedev/src/continuedev/server/gui.py index 49541b76..770065ac 100644 --- a/continuedev/src/continuedev/server/gui.py +++ b/continuedev/src/continuedev/server/gui.py @@ -221,6 +221,7 @@ class GUIProtocolServer:              ),              self.on_error,          ) +        posthog_logger.capture_event("set_system_message", {"system_message": message})      def set_temperature(self, temperature: float):          self.session.autopilot.continue_sdk.config.temperature = temperature @@ -230,6 +231,7 @@ class GUIProtocolServer:              ),              self.on_error,          ) +        posthog_logger.capture_event("set_temperature", {"temperature": temperature})      def set_model_for_role_from_index(self, role: str, index: int):          async def async_stuff(): @@ -242,7 +244,7 @@ class GUIProtocolServer:              await self.session.autopilot.continue_sdk.start_model(models.default)              # Set models in config.py -            JOINER = ", " +            JOINER = ",\n\t\t"              models_args = {                  "unused": f"[{JOINER.join([display_llm_class(llm) for llm in models.unused])}]",                  ("default" if role == "*" else role): display_llm_class(models.default), @@ -285,9 +287,9 @@ class GUIProtocolServer:                      if val is None:                          continue  # no pun intended -                    models_args[role] = display_llm_class(val) +                    models_args[role] = display_llm_class(val, True) -                JOINER = ", " +                JOINER = ",\n\t\t"                  models_args[                      "unused"                  ] = f"[{JOINER.join([display_llm_class(llm) for llm in unused_models])}]" @@ -346,7 +348,7 @@ async def websocket_endpoint(          while AppStatus.should_exit is False:              message = await websocket.receive_text()              logger.debug(f"Received GUI message {message}") -            if type(message) is str: +            if isinstance(message, str):                  message = json.loads(message)              if "messageType" not in message or "data" not in message:  | 
