diff options
19 files changed, 120 insertions, 107 deletions
diff --git a/continuedev/src/continuedev/models/reference/test.py b/continuedev/src/continuedev/models/reference/test.py index 58cfc3fe..1c7608ec 100644 --- a/continuedev/src/continuedev/models/reference/test.py +++ b/continuedev/src/continuedev/models/reference/test.py @@ -44,7 +44,7 @@ def import_context_provider_module(module_name, module_title): return obj -def docs_from_schema(schema, filename, ignore_properties=[], inherited=[]): +def docs_from_schema(schema, filepath, ignore_properties=[], inherited=[]): # Generate markdown docs properties = "" inherited_properties = "" @@ -78,7 +78,7 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; {dedent(schema.get("description", ""))} -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/{filename}.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/{filepath}) ## Properties @@ -91,30 +91,36 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; llm_module = importlib.import_module("continuedev.src.continuedev.libs.llm") -llm_obj = getattr(llm_module, "LLM") -schema = llm_obj.schema() -llm_properties = schema["properties"].keys() +ctx_obj = getattr(llm_module, "LLM") +schema = ctx_obj.schema() +ctx_properties = schema["properties"].keys() for module_name, module_title in LLM_MODULES: obj = import_llm_module(module_name, module_title) schema = obj.schema() - markdown_docs = docs_from_schema(schema, module_name, inherited=llm_properties) + markdown_docs = docs_from_schema( + schema, f"libs/llm/{module_name}.py", inherited=ctx_properties + ) with open(f"docs/docs/reference/Models/{module_name}.md", "w") as f: f.write(markdown_docs) config_module = importlib.import_module("continuedev.src.continuedev.core.config") config_obj = getattr(config_module, "ContinueConfig") schema = config_obj.schema() -markdown_docs = docs_from_schema(schema, "config") +markdown_docs = docs_from_schema(schema, "core/config.py") with open("docs/docs/reference/config.md", "w") as f: f.write(markdown_docs) +ctx_module = importlib.import_module("continuedev.src.continuedev.core.context") +ctx_obj = getattr(ctx_module, "ContextProvider") +schema = ctx_obj.schema() +ctx_properties = schema["properties"].keys() for module_name, module_title in CONTEXT_PROVIDER_MODULES: obj = import_context_provider_module(module_name, module_title) schema = obj.schema() markdown_docs = docs_from_schema( schema, - module_name, + f"plugins/context_providers/{module_name}.py", ignore_properties=[ "sdk", "updated_documents", @@ -122,6 +128,7 @@ for module_name, module_title in CONTEXT_PROVIDER_MODULES: "selected_items", "ignore_patterns", ], + inherited=ctx_properties, ) with open(f"docs/docs/reference/Context Providers/{module_name}.md", "w") as f: f.write(markdown_docs) diff --git a/continuedev/src/continuedev/plugins/context_providers/diff.py b/continuedev/src/continuedev/plugins/context_providers/diff.py index 4c16cabf..157cbc33 100644 --- a/continuedev/src/continuedev/plugins/context_providers/diff.py +++ b/continuedev/src/continuedev/plugins/context_providers/diff.py @@ -1,19 +1,27 @@ import subprocess from typing import List +from pydantic import Field + from ...core.context import ContextProvider from ...core.main import ContextItem, ContextItemDescription, ContextItemId class DiffContextProvider(ContextProvider): + """ + Type '@diff' to reference all of the changes you've made to your current branch. This is useful if you want to summarize what you've done or ask for a general review of your work before committing. + """ + title = "diff" display_title = "Diff" description = "Output of 'git diff' in current repo" dynamic = True - DIFF_CONTEXT_ITEM_ID = "diff" + _DIFF_CONTEXT_ITEM_ID = "diff" - workspace_dir: str = None + workspace_dir: str = Field( + None, description="The workspace directory in which to run `git diff`" + ) @property def BASE_CONTEXT_ITEM(self): @@ -23,7 +31,7 @@ class DiffContextProvider(ContextProvider): name="Diff", description="Reference the output of 'git diff' for the current workspace", id=ContextItemId( - provider_title=self.title, item_id=self.DIFF_CONTEXT_ITEM_ID + provider_title=self.title, item_id=self._DIFF_CONTEXT_ITEM_ID ), ), ) diff --git a/continuedev/src/continuedev/plugins/context_providers/filetree.py b/continuedev/src/continuedev/plugins/context_providers/filetree.py index 968b761d..5b3d3a50 100644 --- a/continuedev/src/continuedev/plugins/context_providers/filetree.py +++ b/continuedev/src/continuedev/plugins/context_providers/filetree.py @@ -1,6 +1,6 @@ from typing import List -from pydantic import BaseModel +from pydantic import BaseModel, Field from ...core.context import ContextProvider from ...core.main import ContextItem, ContextItemDescription, ContextItemId @@ -34,12 +34,14 @@ def split_path(path: str, with_root=None) -> List[str]: class FileTreeContextProvider(ContextProvider): + """Type '@tree' to reference the contents of your current workspace. The LLM will be able to see the nested directory structure of your project.""" + title = "tree" display_title = "File Tree" description = "Add a formatted file tree of this directory to the context" dynamic = True - workspace_dir: str = None + workspace_dir: str = Field(None, description="The workspace directory to display") async def _get_file_tree(self, directory: str) -> str: contents = await self.sdk.ide.listDirectoryContents(directory, recursive=True) diff --git a/continuedev/src/continuedev/plugins/context_providers/github.py b/continuedev/src/continuedev/plugins/context_providers/github.py index 7a16d3c9..c031f310 100644 --- a/continuedev/src/continuedev/plugins/context_providers/github.py +++ b/continuedev/src/continuedev/plugins/context_providers/github.py @@ -1,6 +1,7 @@ from typing import List from github import Auth, Github +from pydantic import Field from ...core.context import ( ContextItem, @@ -12,13 +13,17 @@ from ...core.context import ( class GitHubIssuesContextProvider(ContextProvider): """ - The GitHubIssuesContextProvider is a ContextProvider - that allows you to search GitHub issues in a repo. + The GitHubIssuesContextProvider is a ContextProvider that allows you to search GitHub issues in a repo. Type '@issue' to reference the title and contents of an issue. """ title = "issues" - repo_name: str - auth_token: str + repo_name: str = Field( + ..., description="The name of the GitHub repo from which to pull issues" + ) + auth_token: str = Field( + ..., + description="The GitHub auth token to use to authenticate with the GitHub API", + ) display_title = "GitHub Issues" description = "Reference GitHub issues" diff --git a/continuedev/src/continuedev/plugins/context_providers/google.py b/continuedev/src/continuedev/plugins/context_providers/google.py index 493806cc..852f4e9a 100644 --- a/continuedev/src/continuedev/plugins/context_providers/google.py +++ b/continuedev/src/continuedev/plugins/context_providers/google.py @@ -2,6 +2,7 @@ import json from typing import List import aiohttp +from pydantic import Field from ...core.context import ContextProvider from ...core.main import ContextItem, ContextItemDescription, ContextItemId @@ -9,15 +10,20 @@ from .util import remove_meilisearch_disallowed_chars class GoogleContextProvider(ContextProvider): + """Type '@google' to reference the results of a Google search. For example, type "@google python tutorial" if you want to search and discuss ways of learning Python.""" + title = "google" display_title = "Google" description = "Search Google" dynamic = True requires_query = True - serper_api_key: str + serper_api_key: str = Field( + ..., + description="Your SerpAPI key, used to programmatically make Google searches. You can get a key at https://serper.dev.", + ) - GOOGLE_CONTEXT_ITEM_ID = "google_search" + _GOOGLE_CONTEXT_ITEM_ID = "google_search" @property def BASE_CONTEXT_ITEM(self): @@ -27,7 +33,7 @@ class GoogleContextProvider(ContextProvider): name="Google Search", description="Enter a query to search google", id=ContextItemId( - provider_title=self.title, item_id=self.GOOGLE_CONTEXT_ITEM_ID + provider_title=self.title, item_id=self._GOOGLE_CONTEXT_ITEM_ID ), ), ) diff --git a/continuedev/src/continuedev/plugins/context_providers/search.py b/continuedev/src/continuedev/plugins/context_providers/search.py index 4d9af580..4e2e33da 100644 --- a/continuedev/src/continuedev/plugins/context_providers/search.py +++ b/continuedev/src/continuedev/plugins/context_providers/search.py @@ -1,6 +1,7 @@ import os from typing import List +from pydantic import Field from ripgrepy import Ripgrepy from ...core.context import ContextProvider @@ -10,15 +11,17 @@ from .util import remove_meilisearch_disallowed_chars class SearchContextProvider(ContextProvider): + """Type '@search' to reference the results of codebase search, just like the results you would get from VS Code search.""" + title = "search" display_title = "Search" description = "Search the workspace for all matches of an exact string (e.g. '@search console.log')" dynamic = True requires_query = True - SEARCH_CONTEXT_ITEM_ID = "search" + _SEARCH_CONTEXT_ITEM_ID = "search" - workspace_dir: str = None + workspace_dir: str = Field(None, description="The workspace directory to search") @property def BASE_CONTEXT_ITEM(self): @@ -28,7 +31,7 @@ class SearchContextProvider(ContextProvider): name="Search", description="Search the workspace for all matches of an exact string (e.g. '@search console.log')", id=ContextItemId( - provider_title=self.title, item_id=self.SEARCH_CONTEXT_ITEM_ID + provider_title=self.title, item_id=self._SEARCH_CONTEXT_ITEM_ID ), ), ) diff --git a/continuedev/src/continuedev/plugins/context_providers/terminal.py b/continuedev/src/continuedev/plugins/context_providers/terminal.py index f63ed676..c63239e4 100644 --- a/continuedev/src/continuedev/plugins/context_providers/terminal.py +++ b/continuedev/src/continuedev/plugins/context_providers/terminal.py @@ -1,17 +1,22 @@ from typing import Any, Coroutine, List +from pydantic import Field + from ...core.context import ContextProvider from ...core.main import ChatMessage, ContextItem, ContextItemDescription, ContextItemId class TerminalContextProvider(ContextProvider): + """Type '@terminal' to reference the contents of your IDE's terminal.""" + title = "terminal" display_title = "Terminal" description = "Reference the contents of the terminal" dynamic = True - workspace_dir: str = None - get_last_n_commands: int = 3 + get_last_n_commands: int = Field( + 3, description="The number of previous commands to reference" + ) def _terminal_context_item(self, content: str = ""): return ContextItem( @@ -30,7 +35,6 @@ class TerminalContextProvider(ContextProvider): return msgs async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: - self.workspace_dir = workspace_dir return [self._terminal_context_item()] async def get_item(self, id: ContextItemId, query: str) -> ContextItem: diff --git a/continuedev/src/continuedev/plugins/context_providers/url.py b/continuedev/src/continuedev/plugins/context_providers/url.py index c2c19cfb..2a293dc7 100644 --- a/continuedev/src/continuedev/plugins/context_providers/url.py +++ b/continuedev/src/continuedev/plugins/context_providers/url.py @@ -2,6 +2,7 @@ from typing import List import requests from bs4 import BeautifulSoup +from pydantic import Field from ...core.context import ContextProvider from ...core.main import ContextItem, ContextItemDescription, ContextItemId @@ -9,6 +10,8 @@ from .util import remove_meilisearch_disallowed_chars class URLContextProvider(ContextProvider): + """Type '@url' to reference the contents of a URL. You can either reference preset URLs, or reference one dynamically by typing '@url https://example.com'. The text contents of the page will be fetched and used as context.""" + title = "url" display_title = "URL" description = "Reference the contents of a webpage" @@ -16,13 +19,16 @@ class URLContextProvider(ContextProvider): requires_query = True # Allows users to provide a list of preset urls - preset_urls: List[str] = [] + preset_urls: List[str] = Field( + [], + description="A list of preset URLs that you will be able to quickly reference by typing '@url'", + ) # Static items loaded from preset_urls - static_url_context_items: List[ContextItem] = [] + _static_url_context_items: List[ContextItem] = [] # There is only a single dynamic url context item, so it has a static id - DYNAMIC_URL_CONTEXT_ITEM_ID = "url" + _DYNAMIC_URL_CONTEXT_ITEM_ID = "url" # This is a template dynamic item that will generate context item on demand # when get item is called @@ -34,7 +40,7 @@ class URLContextProvider(ContextProvider): name="Dynamic URL", description="Reference the contents of a webpage (e.g. '@url https://www.w3schools.com/python/python_ref_functions.asp')", id=ContextItemId( - provider_title=self.title, item_id=self.DYNAMIC_URL_CONTEXT_ITEM_ID + provider_title=self.title, item_id=self._DYNAMIC_URL_CONTEXT_ITEM_ID ), ), ) @@ -62,18 +68,18 @@ class URLContextProvider(ContextProvider): return soup.get_text(), title async def provide_context_items(self, workspace_dir: str) -> List[ContextItem]: - self.static_url_context_items = [ + self._static_url_context_items = [ self.static_url_context_item_from_url(url) for url in self.preset_urls ] - return [self.DYNAMIC_CONTEXT_ITEM] + self.static_url_context_items + return [self.DYNAMIC_CONTEXT_ITEM] + self._static_url_context_items async def get_item(self, id: ContextItemId, query: str) -> ContextItem: # Check if the item is a static item matching_static_item = next( ( item - for item in self.static_url_context_items + for item in self._static_url_context_items if item.description.id.item_id == id.item_id ), None, diff --git a/docs/docs/customization/models.md b/docs/docs/customization/models.md index 93ea2a57..d9d1aa2b 100644 --- a/docs/docs/customization/models.md +++ b/docs/docs/customization/models.md @@ -4,22 +4,22 @@ Continue makes it easy to swap out different LLM providers. Once you've added an Commercial Models -- [MaybeProxyOpenAI](#adding-an-openai-api-key) (default) - Use gpt-4 or gpt-3.5-turbo free with our API key, or with your API key. gpt-4 is probably the most capable model of all options. -- [OpenAI](#azure-openai-service) - Use any OpenAI model with your own key. Can also change the base URL if you have a server that uses the OpenAI API format, including using the Azure OpenAI service, LocalAI, etc. -- [AnthropicLLM](#claude-2) - Use claude-2 with your Anthropic API key. Claude 2 is also highly capable, and has a 100,000 token context window. +- [MaybeProxyOpenAI](../reference/Models/maybe_proxy_openai.md) (default) - Use gpt-4 or gpt-3.5-turbo free with our API key, or with your API key. gpt-4 is probably the most capable model of all options. +- [OpenAI](../reference/Models/openai.md) - Use any OpenAI model with your own key. Can also change the base URL if you have a server that uses the OpenAI API format, including using the Azure OpenAI service, LocalAI, etc. +- [AnthropicLLM](../reference/Models/anthropic.md) - Use claude-2 with your Anthropic API key. Claude 2 is also highly capable, and has a 100,000 token context window. Local Models -- [Ollama](#run-llama-2-locally-with-ollama) - If you have a Mac, Ollama is the simplest way to run open-source models like Code Llama. -- [OpenAI](#local-models-with-openai-compatible-server) - If you have access to an OpenAI-compatible server (e.g. llama-cpp-python, LocalAI, FastChat, TextGenWebUI, etc.), you can use the `OpenAI` class and just change the base URL. -- [GGML](#local-models-with-ggml) - An alternative way to connect to OpenAI-compatible servers. Will use `aiohttp` directly instead of the `openai` Python package. -- [LlamaCpp](#llamacpp) - Build llama.cpp from source and use its built-in API server. +- [Ollama](../reference/Models/ollama.md) - If you have a Mac, Ollama is the simplest way to run open-source models like Code Llama. +- [OpenAI](../reference/Models/openai.md) - If you have access to an OpenAI-compatible server (e.g. llama-cpp-python, LocalAI, FastChat, TextGenWebUI, etc.), you can use the `OpenAI` class and just change the base URL. +- [GGML](../reference/Models/ggml.md) - An alternative way to connect to OpenAI-compatible servers. Will use `aiohttp` directly instead of the `openai` Python package. +- [LlamaCpp](../reference/Models/llamacpp.md) - Build llama.cpp from source and use its built-in API server. Open-Source Models (not local) -- [TogetherLLM](#together) - Use any model from the [Together Models list](https://docs.together.ai/docs/models-inference) with your Together API key. -- [ReplicateLLM](#replicate) - Use any open-source model from the [Replicate Streaming List](https://replicate.com/collections/streaming-language-models) with your Replicate API key. -- [HuggingFaceInferenceAPI](#huggingface) - Use any open-source model from the [Hugging Face Inference API](https://huggingface.co/inference-api) with your Hugging Face token. +- [TogetherLLM](../reference/Models/together.md) - Use any model from the [Together Models list](https://docs.together.ai/docs/models-inference) with your Together API key. +- [ReplicateLLM](../reference/Models/replicate.md) - Use any open-source model from the [Replicate Streaming List](https://replicate.com/collections/streaming-language-models) with your Replicate API key. +- [HuggingFaceInferenceAPI](../reference/Models/hf_inference_api.md) - Use any open-source model from the [Hugging Face Inference API](https://huggingface.co/inference-api) with your Hugging Face token. ## Change the default LLM @@ -41,29 +41,11 @@ The `default` and `medium` properties are different _model roles_. This allows d Below, we describe the `LLM` classes available in the Continue core library, and how they can be used. -## Adding an OpenAI API key - -## claude-2 - -## Run Llama-2 locally with Ollama - -## Local models with OpenAI-compatible server - -## Local models with ggml - -## Llama.cpp - -## Together - -## Replicate - -## Hugging Face - ## Self-hosting an open-source model -If you want to self-host on Colab, RunPod, HuggingFace, Haven, or another hosting provider you will need to wire up a new LLM class. It only needs to implement 3 primary methods: `stream_complete`, `complete`, and `stream_chat`, and you can see examples in `continuedev/src/continuedev/libs/llm`. +If you want to self-host on Colab, RunPod, HuggingFace, Haven, or another hosting provider, you will need to wire up a new LLM class. It only needs to implement 3 primary methods: `stream_complete`, `complete`, and `stream_chat`, and you can see examples in `continuedev/src/continuedev/libs/llm`. -If by chance the provider has the exact same API interface as OpenAI, the `GGML` class will work for you out of the box, after changing the endpoint at the top of the file. +If by chance the provider has the exact same API interface as OpenAI, the `OpenAI` class will work for you out of the box, after changing only the `api_base` parameter. ## Azure OpenAI Service diff --git a/docs/docs/reference/Context Providers/diff.md b/docs/docs/reference/Context Providers/diff.md index a0aaedcf..2b809b91 100644 --- a/docs/docs/reference/Context Providers/diff.md +++ b/docs/docs/reference/Context Providers/diff.md @@ -2,16 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # DiffContextProvider -The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. -When you type '@', the context provider will be asked to populate a list of options. -These options will be updated on each keystroke. -When you hit enter on an option, the context provider will add that item to the autopilot's list of context (which is all stored in the ContextManager object). +Type '@diff' to reference all of the changes you've made to your current branch. This is useful if you want to summarize what you've done or ask for a general review of your work before committing. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/diff.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/diff.py) ## Properties -<ClassPropertyRef name='title' details='{"title": "Title", "default": "diff", "type": "string"}' required={false} default="diff"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Diff", "type": "string"}' required={false} default="Diff"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Output of 'git diff' in current repo", "type": "string"}' required={false} default="Output of 'git diff' in current repo"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "type": "string"}' required={false} default=""/><ClassPropertyRef name='DIFF_CONTEXT_ITEM_ID' details='{"title": "Diff Context Item Id", "default": "diff", "type": "string"}' required={false} default="diff"/> +<ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "description": "The workspace directory in which to run `git diff`", "type": "string"}' required={false} default=""/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "diff", "type": "string"}' required={false} default="diff"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Diff", "type": "string"}' required={false} default="Diff"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Output of 'git diff' in current repo", "type": "string"}' required={false} default="Output of 'git diff' in current repo"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/file.md b/docs/docs/reference/Context Providers/file.md index d1ef0761..d29625a9 100644 --- a/docs/docs/reference/Context Providers/file.md +++ b/docs/docs/reference/Context Providers/file.md @@ -4,11 +4,12 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; The FileContextProvider is a ContextProvider that allows you to search files in the open workspace. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/file.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/file.py) ## Properties -<ClassPropertyRef name='title' details='{"title": "Title", "default": "file", "type": "string"}' required={false} default="file"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Files", "type": "string"}' required={false} default="Files"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference files in the current workspace", "type": "string"}' required={false} default="Reference files in the current workspace"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/> + ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "file", "type": "string"}' required={false} default="file"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Files", "type": "string"}' required={false} default="Files"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference files in the current workspace", "type": "string"}' required={false} default="Reference files in the current workspace"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/filetree.md b/docs/docs/reference/Context Providers/filetree.md index 07c39630..8af3ba03 100644 --- a/docs/docs/reference/Context Providers/filetree.md +++ b/docs/docs/reference/Context Providers/filetree.md @@ -2,16 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # FileTreeContextProvider -The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. -When you type '@', the context provider will be asked to populate a list of options. -These options will be updated on each keystroke. -When you hit enter on an option, the context provider will add that item to the autopilot's list of context (which is all stored in the ContextManager object). +Type '@tree' to reference the contents of your current workspace. The LLM will be able to see the nested directory structure of your project. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/filetree.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/filetree.py) ## Properties -<ClassPropertyRef name='title' details='{"title": "Title", "default": "tree", "type": "string"}' required={false} default="tree"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "File Tree", "type": "string"}' required={false} default="File Tree"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Add a formatted file tree of this directory to the context", "type": "string"}' required={false} default="Add a formatted file tree of this directory to the context"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "type": "string"}' required={false} default=""/> +<ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "description": "The workspace directory to display", "type": "string"}' required={false} default=""/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "tree", "type": "string"}' required={false} default="tree"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "File Tree", "type": "string"}' required={false} default="File Tree"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Add a formatted file tree of this directory to the context", "type": "string"}' required={false} default="Add a formatted file tree of this directory to the context"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/github.md b/docs/docs/reference/Context Providers/github.md index 45482957..bd1f7cc3 100644 --- a/docs/docs/reference/Context Providers/github.md +++ b/docs/docs/reference/Context Providers/github.md @@ -2,14 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # GitHubIssuesContextProvider -The GitHubIssuesContextProvider is a ContextProvider -that allows you to search GitHub issues in a repo. +The GitHubIssuesContextProvider is a ContextProvider that allows you to search GitHub issues in a repo. Type '@issue' to reference the title and contents of an issue. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/github.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/github.py) ## Properties -<ClassPropertyRef name='repo_name' details='{"title": "Repo Name", "type": "string"}' required={true} default=""/><ClassPropertyRef name='auth_token' details='{"title": "Auth Token", "type": "string"}' required={true} default=""/><ClassPropertyRef name='title' details='{"title": "Title", "default": "issues", "type": "string"}' required={false} default="issues"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "GitHub Issues", "type": "string"}' required={false} default="GitHub Issues"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference GitHub issues", "type": "string"}' required={false} default="Reference GitHub issues"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/> +<ClassPropertyRef name='repo_name' details='{"title": "Repo Name", "description": "The name of the GitHub repo from which to pull issues", "type": "string"}' required={true} default=""/><ClassPropertyRef name='auth_token' details='{"title": "Auth Token", "description": "The GitHub auth token to use to authenticate with the GitHub API", "type": "string"}' required={true} default=""/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "issues", "type": "string"}' required={false} default="issues"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "GitHub Issues", "type": "string"}' required={false} default="GitHub Issues"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference GitHub issues", "type": "string"}' required={false} default="Reference GitHub issues"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/google.md b/docs/docs/reference/Context Providers/google.md index 6538802e..e5586982 100644 --- a/docs/docs/reference/Context Providers/google.md +++ b/docs/docs/reference/Context Providers/google.md @@ -2,16 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # GoogleContextProvider -The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. -When you type '@', the context provider will be asked to populate a list of options. -These options will be updated on each keystroke. -When you hit enter on an option, the context provider will add that item to the autopilot's list of context (which is all stored in the ContextManager object). +Type '@google' to reference the results of a Google search. For example, type "@google python tutorial" if you want to search and discuss ways of learning Python. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/google.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/google.py) ## Properties -<ClassPropertyRef name='serper_api_key' details='{"title": "Serper Api Key", "type": "string"}' required={true} default=""/><ClassPropertyRef name='title' details='{"title": "Title", "default": "google", "type": "string"}' required={false} default="google"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Google", "type": "string"}' required={false} default="Google"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Search Google", "type": "string"}' required={false} default="Search Google"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='GOOGLE_CONTEXT_ITEM_ID' details='{"title": "Google Context Item Id", "default": "google_search", "type": "string"}' required={false} default="google_search"/> +<ClassPropertyRef name='serper_api_key' details='{"title": "Serper Api Key", "description": "Your SerpAPI key, used to programmatically make Google searches. You can get a key at https://serper.dev.", "type": "string"}' required={true} default=""/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "google", "type": "string"}' required={false} default="google"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Google", "type": "string"}' required={false} default="Google"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Search Google", "type": "string"}' required={false} default="Search Google"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "default": true, "type": "boolean"}' required={false} default="True"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/search.md b/docs/docs/reference/Context Providers/search.md index 5276daa2..efc82131 100644 --- a/docs/docs/reference/Context Providers/search.md +++ b/docs/docs/reference/Context Providers/search.md @@ -2,16 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # SearchContextProvider -The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. -When you type '@', the context provider will be asked to populate a list of options. -These options will be updated on each keystroke. -When you hit enter on an option, the context provider will add that item to the autopilot's list of context (which is all stored in the ContextManager object). +Type '@search' to reference the results of codebase search, just like the results you would get from VS Code search. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/search.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/search.py) ## Properties -<ClassPropertyRef name='title' details='{"title": "Title", "default": "search", "type": "string"}' required={false} default="search"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Search", "type": "string"}' required={false} default="Search"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Search the workspace for all matches of an exact string (e.g. '@search console.log')", "type": "string"}' required={false} default="Search the workspace for all matches of an exact string (e.g. '@search console.log')"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "type": "string"}' required={false} default=""/><ClassPropertyRef name='SEARCH_CONTEXT_ITEM_ID' details='{"title": "Search Context Item Id", "default": "search", "type": "string"}' required={false} default="search"/> +<ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "description": "The workspace directory to search", "type": "string"}' required={false} default=""/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "search", "type": "string"}' required={false} default="search"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Search", "type": "string"}' required={false} default="Search"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Search the workspace for all matches of an exact string (e.g. '@search console.log')", "type": "string"}' required={false} default="Search the workspace for all matches of an exact string (e.g. '@search console.log')"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "default": true, "type": "boolean"}' required={false} default="True"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/terminal.md b/docs/docs/reference/Context Providers/terminal.md index 37c70ab4..f97d2bf8 100644 --- a/docs/docs/reference/Context Providers/terminal.md +++ b/docs/docs/reference/Context Providers/terminal.md @@ -2,16 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # TerminalContextProvider -The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. -When you type '@', the context provider will be asked to populate a list of options. -These options will be updated on each keystroke. -When you hit enter on an option, the context provider will add that item to the autopilot's list of context (which is all stored in the ContextManager object). +Type '@terminal' to reference the contents of your IDE's terminal. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/terminal.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/terminal.py) ## Properties -<ClassPropertyRef name='title' details='{"title": "Title", "default": "terminal", "type": "string"}' required={false} default="terminal"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Terminal", "type": "string"}' required={false} default="Terminal"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference the contents of the terminal", "type": "string"}' required={false} default="Reference the contents of the terminal"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/><ClassPropertyRef name='workspace_dir' details='{"title": "Workspace Dir", "type": "string"}' required={false} default=""/><ClassPropertyRef name='get_last_n_commands' details='{"title": "Get Last N Commands", "default": 3, "type": "integer"}' required={false} default="3"/> +<ClassPropertyRef name='get_last_n_commands' details='{"title": "Get Last N Commands", "description": "The number of previous commands to reference", "default": 3, "type": "integer"}' required={false} default="3"/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "terminal", "type": "string"}' required={false} default="terminal"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "Terminal", "type": "string"}' required={false} default="Terminal"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference the contents of the terminal", "type": "string"}' required={false} default="Reference the contents of the terminal"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "description": "Indicates whether the ContextProvider requires a query. For example, the SearchContextProvider requires you to type '@search <STRING_TO_SEARCH>'. This will change the behavior of the UI so that it can indicate the expectation for a query.", "default": false, "type": "boolean"}' required={false} default="False"/>
\ No newline at end of file diff --git a/docs/docs/reference/Context Providers/url.md b/docs/docs/reference/Context Providers/url.md index b0cfac07..e147e626 100644 --- a/docs/docs/reference/Context Providers/url.md +++ b/docs/docs/reference/Context Providers/url.md @@ -2,16 +2,14 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; # URLContextProvider -The ContextProvider class is a plugin that lets you provide new information to the LLM by typing '@'. -When you type '@', the context provider will be asked to populate a list of options. -These options will be updated on each keystroke. -When you hit enter on an option, the context provider will add that item to the autopilot's list of context (which is all stored in the ContextManager object). +Type '@url' to reference the contents of a URL. You can either reference preset URLs, or reference one dynamically by typing '@url https://example.com'. The text contents of the page will be fetched and used as context. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/url.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/plugins/context_providers/url.py) ## Properties -<ClassPropertyRef name='title' details='{"title": "Title", "default": "url", "type": "string"}' required={false} default="url"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "URL", "type": "string"}' required={false} default="URL"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference the contents of a webpage", "type": "string"}' required={false} default="Reference the contents of a webpage"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='preset_urls' details='{"title": "Preset Urls", "default": [], "type": "array", "items": {"type": "string"}}' required={false} default="[]"/><ClassPropertyRef name='static_url_context_items' details='{"title": "Static Url Context Items", "default": [], "type": "array", "items": {"$ref": "#/definitions/ContextItem"}}' required={false} default="[]"/><ClassPropertyRef name='DYNAMIC_URL_CONTEXT_ITEM_ID' details='{"title": "Dynamic Url Context Item Id", "default": "url", "type": "string"}' required={false} default="url"/> +<ClassPropertyRef name='preset_urls' details='{"title": "Preset Urls", "description": "A list of preset URLs that you will be able to quickly reference by typing '@url'", "default": [], "type": "array", "items": {"type": "string"}}' required={false} default="[]"/> ### Inherited Properties +<ClassPropertyRef name='title' details='{"title": "Title", "default": "url", "type": "string"}' required={false} default="url"/><ClassPropertyRef name='display_title' details='{"title": "Display Title", "default": "URL", "type": "string"}' required={false} default="URL"/><ClassPropertyRef name='description' details='{"title": "Description", "default": "Reference the contents of a webpage", "type": "string"}' required={false} default="Reference the contents of a webpage"/><ClassPropertyRef name='dynamic' details='{"title": "Dynamic", "default": true, "type": "boolean"}' required={false} default="True"/><ClassPropertyRef name='requires_query' details='{"title": "Requires Query", "default": true, "type": "boolean"}' required={false} default="True"/>
\ No newline at end of file diff --git a/docs/docs/reference/Models/openai.md b/docs/docs/reference/Models/openai.md index 0ade1a8f..4eb4906f 100644 --- a/docs/docs/reference/Models/openai.md +++ b/docs/docs/reference/Models/openai.md @@ -23,6 +23,7 @@ config = ContinueConfig( Options for serving models locally with an OpenAI-compatible server include: +- [LM Studio](https://lmstudio.ai/) - [text-gen-webui](https://github.com/oobabooga/text-generation-webui/tree/main/extensions/openai#setup--installation) - [FastChat](https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md) - [LocalAI](https://localai.io/basics/getting_started/) @@ -36,4 +37,4 @@ Options for serving models locally with an OpenAI-compatible server include: ### Inherited Properties -<ClassPropertyRef name='model' details='{"title": "Model", "description": "The name of the model to be used (e.g. gpt-4, codellama)", "type": "string"}' required={true} default=""/><ClassPropertyRef name='api_key' details='{"title": "Api Key", "description": "OpenAI API key", "type": "string"}' required={true} default=""/><ClassPropertyRef name='title' details='{"title": "Title", "description": "A title that will identify this model in the model selection dropdown", "type": "string"}' required={false} default=""/><ClassPropertyRef name='system_message' details='{"title": "System Message", "description": "A system message that will always be followed by the LLM", "type": "string"}' required={false} default=""/><ClassPropertyRef name='context_length' details='{"title": "Context Length", "description": "The maximum context length of the LLM in tokens, as counted by count_tokens.", "default": 2048, "type": "integer"}' required={false} default="2048"/><ClassPropertyRef name='unique_id' details='{"title": "Unique Id", "description": "The unique ID of the user.", "type": "string"}' required={false} default=""/><ClassPropertyRef name='timeout' details='{"title": "Timeout", "description": "Set the timeout for each request to the LLM. If you are running a local LLM that takes a while to respond, you might want to set this to avoid timeouts.", "default": 300, "type": "integer"}' required={false} default="300"/><ClassPropertyRef name='prompt_templates' details='{"title": "Prompt Templates", "description": "A dictionary of prompt templates that can be used to customize the behavior of the LLM in certain situations. For example, set the \"edit\" key in order to change the prompt that is used for the /edit slash command. Each value in the dictionary is a string templated in mustache syntax, and filled in at runtime with the variables specific to the situation. See the documentation for more information.", "default": {}, "type": "object"}' required={false} default="{}"/>
\ No newline at end of file +<ClassPropertyRef name='model' details='{"title": "Model", "description": "The name of the model to be used (e.g. gpt-4, codellama)", "type": "string"}' required={true} default=""/><ClassPropertyRef name='api_key' details='{"title": "Api Key", "description": "OpenAI API key", "type": "string"}' required={true} default=""/><ClassPropertyRef name='title' details='{"title": "Title", "description": "A title that will identify this model in the model selection dropdown", "type": "string"}' required={false} default=""/><ClassPropertyRef name='system_message' details='{"title": "System Message", "description": "A system message that will always be followed by the LLM", "type": "string"}' required={false} default=""/><ClassPropertyRef name='context_length' details='{"title": "Context Length", "description": "The maximum context length of the LLM in tokens, as counted by count_tokens.", "default": 2048, "type": "integer"}' required={false} default="2048"/><ClassPropertyRef name='unique_id' details='{"title": "Unique Id", "description": "The unique ID of the user.", "type": "string"}' required={false} default=""/><ClassPropertyRef name='timeout' details='{"title": "Timeout", "description": "Set the timeout for each request to the LLM. If you are running a local LLM that takes a while to respond, you might want to set this to avoid timeouts.", "default": 300, "type": "integer"}' required={false} default="300"/><ClassPropertyRef name='prompt_templates' details='{"title": "Prompt Templates", "description": "A dictionary of prompt templates that can be used to customize the behavior of the LLM in certain situations. For example, set the \"edit\" key in order to change the prompt that is used for the /edit slash command. Each value in the dictionary is a string templated in mustache syntax, and filled in at runtime with the variables specific to the situation. See the documentation for more information.", "default": {}, "type": "object"}' required={false} default="{}"/> diff --git a/docs/docs/reference/config.md b/docs/docs/reference/config.md index dbcfc4c6..27612924 100644 --- a/docs/docs/reference/config.md +++ b/docs/docs/reference/config.md @@ -4,7 +4,7 @@ import ClassPropertyRef from '@site/src/components/ClassPropertyRef.tsx'; Continue can be deeply customized by editing the `ContinueConfig` object in `~/.continue/config.py` (`%userprofile%\.continue\config.py` for Windows) on your machine. This class is instantiated from the config file for every new session. -[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/libs/llm/config.py) +[View the source](https://github.com/continuedev/continue/tree/main/continuedev/src/continuedev/core/config.py) ## Properties |