summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--continuedev/src/continuedev/libs/llm/ollama.py5
-rw-r--r--continuedev/src/continuedev/libs/llm/proxy_server.py11
-rw-r--r--continuedev/src/continuedev/plugins/steps/core/core.py4
-rw-r--r--continuedev/src/continuedev/plugins/steps/on_traceback.py2
-rw-r--r--continuedev/src/continuedev/server/ide.py12
-rw-r--r--continuedev/src/continuedev/server/ide_protocol.py4
-rw-r--r--extension/src/continueIdeClient.ts14
7 files changed, 38 insertions, 14 deletions
diff --git a/continuedev/src/continuedev/libs/llm/ollama.py b/continuedev/src/continuedev/libs/llm/ollama.py
index ef3cdc66..0eb738dc 100644
--- a/continuedev/src/continuedev/libs/llm/ollama.py
+++ b/continuedev/src/continuedev/libs/llm/ollama.py
@@ -1,4 +1,5 @@
import json
+from textwrap import dedent
from typing import Any, Coroutine, Dict, Generator, List, Union
import aiohttp
@@ -46,12 +47,14 @@ class Ollama(LLM):
prompt = ""
has_system = msgs[0]["role"] == "system"
if has_system:
- system_message = f"""\
+ system_message = dedent(
+ f"""\
<<SYS>>
{self.system_message}
<</SYS>>
"""
+ )
if len(msgs) > 1:
prompt += f"[INST] {system_message}{msgs[1]['content']} [/INST]"
else:
diff --git a/continuedev/src/continuedev/libs/llm/proxy_server.py b/continuedev/src/continuedev/libs/llm/proxy_server.py
index acc6653d..fa77a22a 100644
--- a/continuedev/src/continuedev/libs/llm/proxy_server.py
+++ b/continuedev/src/continuedev/libs/llm/proxy_server.py
@@ -1,16 +1,7 @@
import json
import ssl
import traceback
-from typing import (
- Any,
- Callable,
- Coroutine,
- Dict,
- Generator,
- List,
- Optional,
- Union,
-)
+from typing import Any, Callable, Coroutine, Dict, Generator, List, Optional, Union
import aiohttp
import certifi
diff --git a/continuedev/src/continuedev/plugins/steps/core/core.py b/continuedev/src/continuedev/plugins/steps/core/core.py
index 3ff1730e..4f144f32 100644
--- a/continuedev/src/continuedev/plugins/steps/core/core.py
+++ b/continuedev/src/continuedev/plugins/steps/core/core.py
@@ -1,6 +1,5 @@
# These steps are depended upon by ContinueSDK
import difflib
-import os
import traceback
from textwrap import dedent
from typing import Any, Coroutine, List, Union
@@ -822,7 +821,8 @@ Please output the code to be inserted at the cursor in order to fulfill the user
for rif in rif_with_contents:
# If the file doesn't exist, ask them to save it first
- if not os.path.exists(rif.filepath):
+ exists = await sdk.ide.fileExists(rif.filepath)
+ if not exists:
message = (
f"The file {rif.filepath} does not exist. Please save it first."
)
diff --git a/continuedev/src/continuedev/plugins/steps/on_traceback.py b/continuedev/src/continuedev/plugins/steps/on_traceback.py
index 9c663a66..63bae805 100644
--- a/continuedev/src/continuedev/plugins/steps/on_traceback.py
+++ b/continuedev/src/continuedev/plugins/steps/on_traceback.py
@@ -22,7 +22,7 @@ class DefaultOnTracebackStep(Step):
for seg in segs:
if (
seg.startswith(os.path.sep)
- and os.path.exists(seg)
+ and os.path.exists(seg) # TODO: Use sdk.ide.fileExists
and os.path.commonprefix([seg, sdk.ide.workspace_directory])
== sdk.ide.workspace_directory
):
diff --git a/continuedev/src/continuedev/server/ide.py b/continuedev/src/continuedev/server/ide.py
index 871724db..8a62c39e 100644
--- a/continuedev/src/continuedev/server/ide.py
+++ b/continuedev/src/continuedev/server/ide.py
@@ -124,6 +124,10 @@ class ListDirectoryContentsResponse(BaseModel):
contents: List[str]
+class FileExistsResponse(BaseModel):
+ exists: bool
+
+
T = TypeVar("T", bound=BaseModel)
@@ -246,6 +250,7 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
"runCommand",
"getTerminalContents",
"listDirectoryContents",
+ "fileExists",
]:
self.sub_queue.post(message_type, data)
elif message_type == "workspaceDirectory":
@@ -455,6 +460,13 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
)
return resp.contents
+ async def fileExists(self, filepath: str) -> str:
+ """Check whether file exists"""
+ resp = await self._send_and_receive_json(
+ {"filepath": filepath}, FileExistsResponse, "fileExists"
+ )
+ return resp.exists
+
async def getUserSecret(self, key: str) -> str:
"""Get a user secret"""
try:
diff --git a/continuedev/src/continuedev/server/ide_protocol.py b/continuedev/src/continuedev/server/ide_protocol.py
index f37c1737..f4a39c26 100644
--- a/continuedev/src/continuedev/server/ide_protocol.py
+++ b/continuedev/src/continuedev/server/ide_protocol.py
@@ -151,5 +151,9 @@ class AbstractIdeProtocolServer(ABC):
async def listDirectoryContents(self, directory: str) -> List[str]:
"""List directory contents"""
+ @abstractmethod
+ async def fileExists(self, filepath: str) -> str:
+ """Check if a file exists"""
+
workspace_directory: str
unique_id: str
diff --git a/extension/src/continueIdeClient.ts b/extension/src/continueIdeClient.ts
index 19575b13..4e099fdb 100644
--- a/extension/src/continueIdeClient.ts
+++ b/extension/src/continueIdeClient.ts
@@ -236,6 +236,11 @@ class IdeProtocolClient {
uniqueId: this.getUniqueId(),
});
break;
+ case "fileExists":
+ messenger.send("fileExists", {
+ exists: await this.fileExists(data.filepath),
+ });
+ break;
case "getUserSecret":
messenger.send("getUserSecret", {
value: await this.getUserSecret(data.key),
@@ -432,6 +437,15 @@ class IdeProtocolClient {
openEditorAndRevealRange(filepath, undefined, vscode.ViewColumn.One);
}
+ async fileExists(filepath: string): Promise<boolean> {
+ try {
+ await vscode.workspace.fs.stat(vscode.Uri.file(filepath));
+ return true;
+ } catch {
+ return false;
+ }
+ }
+
showVirtualFile(name: string, contents: string) {
vscode.workspace
.openTextDocument(