summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-07-23 20:12:44 -0700
committerNate Sesti <sestinj@gmail.com>2023-07-23 20:12:44 -0700
commitdac960348a938552de4a6fcfaff32e517e6ebcb1 (patch)
treed2ef20d3bf73876eeb34cdf94630a40147db9aa0
parent8c8f3f546ebfb10b23312e7cb980f16730ccc61f (diff)
downloadsncontinue-dac960348a938552de4a6fcfaff32e517e6ebcb1.tar.gz
sncontinue-dac960348a938552de4a6fcfaff32e517e6ebcb1.tar.bz2
sncontinue-dac960348a938552de4a6fcfaff32e517e6ebcb1.zip
file context provider
-rw-r--r--continuedev/src/continuedev/core/autopilot.py6
-rw-r--r--continuedev/src/continuedev/libs/context_providers/file_context_provider.py54
-rw-r--r--continuedev/src/continuedev/libs/llm/proxy_server.py3
3 files changed, 59 insertions, 4 deletions
diff --git a/continuedev/src/continuedev/core/autopilot.py b/continuedev/src/continuedev/core/autopilot.py
index c0f95414..4dff2c6d 100644
--- a/continuedev/src/continuedev/core/autopilot.py
+++ b/continuedev/src/continuedev/core/autopilot.py
@@ -9,7 +9,8 @@ from pydantic import root_validator
from ..models.filesystem import RangeInFileWithContents
from ..models.filesystem_edit import FileEditWithFullContents
from .observation import Observation, InternalErrorObservation
-from .context import ContextItem, ContextItemDescription, ContextItemId, ContextManager
+from .context import ContextManager
+from ..libs.context_providers.file_context_provider import FileContextProvider
from ..libs.context_providers.highlighted_code_context_provider import HighlightedCodeContextProvider
from ..server.ide_protocol import AbstractIdeProtocolServer
from ..libs.util.queue import AsyncSubscriptionQueue
@@ -69,7 +70,8 @@ class Autopilot(ContinueBaseModel):
# Load documents into the search index
autopilot.context_manager = ContextManager(
autopilot.continue_sdk.config.context_providers + [
- HighlightedCodeContextProvider(ide=ide)
+ HighlightedCodeContextProvider(ide=ide),
+ FileContextProvider(workspace_dir=ide.workspace_directory)
])
await autopilot.context_manager.load_index()
diff --git a/continuedev/src/continuedev/libs/context_providers/file_context_provider.py b/continuedev/src/continuedev/libs/context_providers/file_context_provider.py
new file mode 100644
index 00000000..c3ec351f
--- /dev/null
+++ b/continuedev/src/continuedev/libs/context_providers/file_context_provider.py
@@ -0,0 +1,54 @@
+import os
+from typing import List
+from ...core.main import ContextItem, ContextItemDescription, ContextItemId
+from ...core.context import ContextProvider
+from fnmatch import fnmatch
+
+
+def get_file_contents(filepath: str) -> str:
+ with open(filepath, "r") as f:
+ return f.read()
+
+
+class FileContextProvider(ContextProvider):
+ """
+ The FileContextProvider is a ContextProvider that allows you to search files in the open workspace.
+ """
+
+ title = "file"
+ workspace_dir: str
+ ignore_patterns: List[str] = list(map(lambda folder: f"**/{folder}", [
+ ".git",
+ ".vscode",
+ ".idea",
+ ".vs",
+ ".venv",
+ "env",
+ ".env",
+ "node_modules",
+ "dist",
+ "build",
+ "target",
+ "out",
+ "bin",
+ ]))
+
+ async def provide_context_items(self) -> List[ContextItem]:
+ filepaths = []
+ for root, dir_names, file_names in os.walk(self.workspace_dir):
+ dir_names[:] = [d for d in dir_names if not any(
+ fnmatch(d, pattern) for pattern in self.ignore_patterns)]
+ for file_name in file_names:
+ filepaths.append(os.path.join(root, file_name))
+
+ return [ContextItem(
+ content=get_file_contents(file),
+ description=ContextItemDescription(
+ name=f"File {os.path.basename(file)}",
+ description=file,
+ id=ContextItemId(
+ provider_title=self.title,
+ item_id=file
+ )
+ )
+ ) for file in filepaths]
diff --git a/continuedev/src/continuedev/libs/llm/proxy_server.py b/continuedev/src/continuedev/libs/llm/proxy_server.py
index bd50fe02..46ab19ee 100644
--- a/continuedev/src/continuedev/libs/llm/proxy_server.py
+++ b/continuedev/src/continuedev/libs/llm/proxy_server.py
@@ -1,5 +1,4 @@
-from functools import cached_property
import json
import traceback
from typing import Any, Callable, Coroutine, Dict, Generator, List, Literal, Union
@@ -7,7 +6,7 @@ import aiohttp
from ..util.telemetry import capture_event
from ...core.main import ChatMessage
from ..llm import LLM
-from ..util.count_tokens import DEFAULT_ARGS, DEFAULT_MAX_TOKENS, compile_chat_messages, CHAT_MODELS, count_tokens, format_chat_messages
+from ..util.count_tokens import DEFAULT_ARGS, compile_chat_messages, count_tokens, format_chat_messages
import certifi
import ssl