summaryrefslogtreecommitdiff
path: root/continuedev
diff options
context:
space:
mode:
Diffstat (limited to 'continuedev')
-rw-r--r--continuedev/src/continuedev/core/autopilot.py4
-rw-r--r--continuedev/src/continuedev/libs/util/edit_config.py19
-rw-r--r--continuedev/src/continuedev/plugins/steps/core/core.py49
-rw-r--r--continuedev/src/continuedev/plugins/steps/setup_model.py11
-rw-r--r--continuedev/src/continuedev/server/gui.py10
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: