From 5c049f2f3d797babb91c62ec752bf6a2c4c2f16a Mon Sep 17 00:00:00 2001 From: Ty Dunn Date: Mon, 29 May 2023 15:29:28 +0200 Subject: initial structure --- docs/sidebars.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'docs/sidebars.js') diff --git a/docs/sidebars.js b/docs/sidebars.js index db9ae662..befe4feb 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -16,7 +16,19 @@ const sidebars = { docsSidebar: [ 'intro', - 'create-a-recipe', + 'getting-started', + 'install', + 'how-continue-works', + { + type: 'category', + label: 'Walkthroughs', + items: [ + 'walkthroughs/use-the-gui', + 'walkthroughs/use-a-recipe', + 'walkthroughs/create-a-recipe', + 'walkthroughs/share-a-recipe', + ], + }, { type: 'category', label: 'Concepts', @@ -28,11 +40,13 @@ const sidebars = { 'concepts/ide', 'concepts/llm', 'concepts/policy', - 'concepts/recipes', + 'concepts/recipe', 'concepts/sdk', 'concepts/step', ], }, + 'sdk', + 'telemetry', ], }; -- cgit v1.2.3-70-g09d2 From 4c47610c33b065bd738299a0a34eb3d8a3ed45b0 Mon Sep 17 00:00:00 2001 From: Ty Dunn Date: Tue, 30 May 2023 13:19:48 +0200 Subject: initial docs styling --- docs/docs/concepts/agent.md | 9 -- docs/docs/concepts/autopilot.md | 11 ++ docs/docs/concepts/core.md | 2 + docs/docs/concepts/history.md | 2 + docs/docs/concepts/ide.md | 4 + docs/docs/concepts/llm.md | 2 + docs/docs/concepts/policy.md | 2 + docs/docs/concepts/recipe.md | 2 + docs/docs/concepts/sdk.md | 4 + docs/docs/concepts/state.md | 9 -- docs/docs/concepts/step.md | 2 + docs/docs/getting-started.md | 16 ++- docs/docs/how-continue-works.md | 12 +- docs/docs/install.md | 18 ++- docs/docs/intro.md | 22 ++- docs/docs/sdk.md | 1 - docs/docs/telemetry.md | 18 ++- docs/docs/walkthroughs/create-a-recipe.md | 8 +- docs/docs/walkthroughs/share-a-recipe.md | 4 +- docs/docs/walkthroughs/use-a-recipe.md | 4 +- docs/docs/walkthroughs/use-the-gui.md | 4 +- docs/docusaurus.config.js | 4 +- docs/sidebars.js | 3 +- docs/src/components/HomepageFeatures/index.js | 14 +- docs/src/pages/index.js | 6 +- docs/static/img/continue-cover-logo.png | Bin 0 -> 3556107 bytes docs/static/img/favicon.ico | Bin 3626 -> 4286 bytes docs/static/img/logo.svg | 12 +- docs/static/img/undraw_docusaurus_mountain.svg | 180 ++----------------------- docs/static/img/undraw_docusaurus_react.svg | 179 ++---------------------- docs/static/img/undraw_docusaurus_tree.svg | 49 ++----- 31 files changed, 173 insertions(+), 430 deletions(-) delete mode 100644 docs/docs/concepts/agent.md create mode 100644 docs/docs/concepts/autopilot.md delete mode 100644 docs/docs/concepts/state.md delete mode 100644 docs/docs/sdk.md create mode 100644 docs/static/img/continue-cover-logo.png (limited to 'docs/sidebars.js') diff --git a/docs/docs/concepts/agent.md b/docs/docs/concepts/agent.md deleted file mode 100644 index 0528b305..00000000 --- a/docs/docs/concepts/agent.md +++ /dev/null @@ -1,9 +0,0 @@ -# Agent - -`Agent` contains the -- History -- LLM -- Policy -- IDE - -**Q: should we really call this abstraction agent?** \ No newline at end of file diff --git a/docs/docs/concepts/autopilot.md b/docs/docs/concepts/autopilot.md new file mode 100644 index 00000000..5fc2a220 --- /dev/null +++ b/docs/docs/concepts/autopilot.md @@ -0,0 +1,11 @@ +# Autopilot + +*TODO: Explain in detail what this is and what its purpose is* + +`Autopilot` contains the +- History +- LLM +- Policy +- IDE + +**We should rename agent to autopilot in the code** \ No newline at end of file diff --git a/docs/docs/concepts/core.md b/docs/docs/concepts/core.md index ee58cbb2..cd5f6d00 100644 --- a/docs/docs/concepts/core.md +++ b/docs/docs/concepts/core.md @@ -1,5 +1,7 @@ # Core +*TODO: Explain in detail what this is and what its purpose is* + The `Core` connects the SDK and GUI with the IDE (i.e. in VS Code, a web browser, etc), enabling the steps to make changes to your code and accelerate your software development workflows. The `Core` includes diff --git a/docs/docs/concepts/history.md b/docs/docs/concepts/history.md index e6c2a5ea..5c52e158 100644 --- a/docs/docs/concepts/history.md +++ b/docs/docs/concepts/history.md @@ -1,5 +1,7 @@ # History +*TODO: Explain in detail what this is and what its purpose is* + `History` is the ordered record of all past steps. **Q: What step data and metadata is stored in the history?** \ No newline at end of file diff --git a/docs/docs/concepts/ide.md b/docs/docs/concepts/ide.md index 980b589d..4f30995f 100644 --- a/docs/docs/concepts/ide.md +++ b/docs/docs/concepts/ide.md @@ -1,11 +1,15 @@ # IDE +*TODO: Explain in detail what this is and what its purpose is* + ## Supported IDEs ### VS Code The VS Code extension implementation can be found at `/continue/extension/src` +### GitHub Codespaces + ## IDE Protocol methods ### handle_json diff --git a/docs/docs/concepts/llm.md b/docs/docs/concepts/llm.md index 11bbacc7..226a49eb 100644 --- a/docs/docs/concepts/llm.md +++ b/docs/docs/concepts/llm.md @@ -1,5 +1,7 @@ # LLM +*TODO: Explain in detail what this is and what its purpose is* + `LLM` is the large language model that can be used in steps to automate that require some judgement based on context (e.g. generating code based on docs, explaining an error given a stack trace, etc) **Q: should we call this LLM? Perhaps just model?** diff --git a/docs/docs/concepts/policy.md b/docs/docs/concepts/policy.md index 6fbbc8d7..58de2606 100644 --- a/docs/docs/concepts/policy.md +++ b/docs/docs/concepts/policy.md @@ -1,5 +1,7 @@ # Policy +*TODO: Explain in detail what this is and what its purpose is* + The policy determines what step to run next **Q: what else do folks need to understand about policies?** diff --git a/docs/docs/concepts/recipe.md b/docs/docs/concepts/recipe.md index bc171b1d..3f051a4d 100644 --- a/docs/docs/concepts/recipe.md +++ b/docs/docs/concepts/recipe.md @@ -1,5 +1,7 @@ # Recipe +*TODO: Explain in detail what this is and what its purpose is* + An ordered sequence of steps that are intended to accomplish some complete task Actually just a step that is composed of only other steps / recipes. diff --git a/docs/docs/concepts/sdk.md b/docs/docs/concepts/sdk.md index e5ca2f99..3316d2d0 100644 --- a/docs/docs/concepts/sdk.md +++ b/docs/docs/concepts/sdk.md @@ -1,5 +1,9 @@ # SDK +*TODO: Explain in detail what this is and what its purpose is* + +*TODO: Detail all the SDK methods and how to use them* + The `SDK` gives you access to tools (e.g. open a directory, edit a file, call an LLM, etc), which you can use when defining how a step should work and composing them with other steps. ## SDK methods diff --git a/docs/docs/concepts/state.md b/docs/docs/concepts/state.md deleted file mode 100644 index d48dbe88..00000000 --- a/docs/docs/concepts/state.md +++ /dev/null @@ -1,9 +0,0 @@ -# State - -*Note: this is only a proposed concept at this point* - -Steps can add, edit, and remove observations / memories stored in state. - -Allows you to pass context of previous steps, other files, etc. - -Alternative names: memory, observation store \ No newline at end of file diff --git a/docs/docs/concepts/step.md b/docs/docs/concepts/step.md index d381f06e..1f33a955 100644 --- a/docs/docs/concepts/step.md +++ b/docs/docs/concepts/step.md @@ -1,5 +1,7 @@ # Step +*TODO: Explain in detail what this is and what its purpose is* + A step is ## Step methods diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md index 8b3a7945..0324f89e 100644 --- a/docs/docs/getting-started.md +++ b/docs/docs/getting-started.md @@ -1 +1,15 @@ -# Getting Started \ No newline at end of file +# Getting started + +## GitHub Codespaces Demo + +*TODO: Describe step-by-step how to try the GitHub Codespaces Demo* + +## Next Steps + +If you would prefer to use Continue locally, we reccommend installing `Continue` packaged as a VS Code extension as described [here](./install.md). + +Otherwise, if you would like to continue to use GitHub Codespaces, then you should now go through the walkthroughs: +- How to [use the GUI](./walkthroughs/use-the-gui.md) +- How to [use a recipe](./walkthroughs/use-a-recipe.md) +- How to [create a recipe](./walkthroughs/create-a-recipe.md) +- How to [share a recipe](./walkthroughs/share-a-recipe.md) \ No newline at end of file diff --git a/docs/docs/how-continue-works.md b/docs/docs/how-continue-works.md index e29faef8..a41986d0 100644 --- a/docs/docs/how-continue-works.md +++ b/docs/docs/how-continue-works.md @@ -1,9 +1,11 @@ -# How Continue works +# How `Continue` works -The Continue library consists of a `SDK`, a `GUI`, and a `Core` that brings everything together. +*TODO: Describe in more detail how `Continue` works* -The `SDK` gives you access to tools (e.g. open a directory, edit a file, call a model, etc), which you can use when defining how a step should work and composing them with other steps. +The `Continue` library consists of a [SDK](./concepts/sdk.md), a [GUI](./concepts/gui.md), and a [Core](./concepts/core.md) that brings everything together. -The `GUI` enables you to guide steps and makes everything transparent, so you can review all steps that were automated, giving you the opportunity to undo and rerun any that ran incorrectly. +The [SDK](./concepts/sdk.md) gives you access to tools (e.g. open a directory, edit a file, call a model, etc), which you can use when defining how a step should work and composing them with other steps. -The `Core` connects the SDK and GUI with the IDE (i.e. in VS Code, a web browser, etc), enabling the steps to make changes to your code and accelerate your software development workflows. \ No newline at end of file +The [GUI](./concepts/gui.md) enables you to guide steps and makes everything transparent, so you can review all steps that were automated, giving you the opportunity to undo and rerun any that ran incorrectly. + +The [Core](./concepts/core.md) connects the SDK and GUI with the IDE (i.e. in VS Code, a web browser, etc), enabling the steps to make changes to your code and accelerate your software development workflows. \ No newline at end of file diff --git a/docs/docs/install.md b/docs/docs/install.md index f34d65bd..923e7bd1 100644 --- a/docs/docs/install.md +++ b/docs/docs/install.md @@ -1 +1,17 @@ -# Installation \ No newline at end of file +# Installation + +If you want to try out `Continue` without having to install it, check out the [GitHub Codespaces Demo](./getting-started.md) + +## Install `Continue` packaged as a VS Code extension + +Steps for installing `Continue` packaged as a VS Code extension... + +*TODO: Describe step-by-step how to install `Continue` packaged as a VS Code extension* + +## Next steps + +Now that you have installed the VS Code extension, you should go through the walkthroughs: +- How to [use the GUI](./walkthroughs/use-the-gui.md) +- How to [use a recipe](./walkthroughs/use-a-recipe.md) +- How to [create a recipe](./walkthroughs/create-a-recipe.md) +- How to [share a recipe](./walkthroughs/share-a-recipe.md) \ No newline at end of file diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 04a50b86..2d92d777 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -1,8 +1,20 @@ # Introduction -## An open-source library to accelerate your use of models like GPT-4 while coding +![continue-cover-logo](/img/continue-cover-logo.png) -Automate more steps of your software development workflows using LLMs: -1. Leverage steps created by others in your workflows as you code -2. Customize steps and compose them together to fit your workflows -3. Review, reverse, and rerun steps to use models with confidence \ No newline at end of file +## What is `Continue`? + +**`Continue` is the open-source library for accelerating your use of LLMs while coding.** + +You define the scenarios where Large Language Models ([LLMs](./concepts/llm.md)) like GPT-4 and StarCoder should act as an autopilot that helps you complete software development tasks. You use [recipes](./concepts/recipe.md) created by others to automate more steps in your development workflows. If a [recipe](./concepts/recipe.md) does not exist or work exactly like you want, you can use the [Continue SDK](./concepts/sdk.md) to create custom [steps](./concepts/step.md) and compose them into personalized [recipes](./concepts/recipe.md). Whether you are using a [recipe](./concepts/recipe.md) created by yourself or someone else, you can also review, reverse, and rerun [steps](./concepts/step.md) with the [Continue GUI](./concepts/gui.md), which helps guide the work done by LLMs and learn when to use and trust them. + +## Why do developers use `Continue`? + +Many developers have begun to use models like [GPT-4](https://openai.com/research/gpt-4) through [ChatGPT](https://openai.com/blog/chatgpt) while coding; however, this is quite a painful experience because of how much manual copy, paste, and editing is required to construct context for LLMs and then incorporate the generations from LLMs. Many other developers prefer to use open source models or work at organizations where they are unable to use ChatGPT, so they are using [StarCoder](https://huggingface.co/blog/starcoder) [Chat](https://huggingface.co/chat/) and running into the same issues. + +`Continue` eliminates the manual copy, paste, and editing required when using LLMs while coding. This accelerates how developers build, ship, and maintain software, while giving them the control to define when LLMs should take actions and the confidence to trust LLMs. In short, it enables developers to do what they have always done: work together to create better and better abstractions that make it easier and easier to automate the repetitive work that people want computers to do. + +## Getting started + +1. Try out `Continue` in the [GitHub Codespaces Demo](./getting-started.md) +2. Install `Continue` packaged as a [VS Code extension](./install.md) \ No newline at end of file diff --git a/docs/docs/sdk.md b/docs/docs/sdk.md deleted file mode 100644 index c7e10e85..00000000 --- a/docs/docs/sdk.md +++ /dev/null @@ -1 +0,0 @@ -# SDK \ No newline at end of file diff --git a/docs/docs/telemetry.md b/docs/docs/telemetry.md index cf53d631..be0c7666 100644 --- a/docs/docs/telemetry.md +++ b/docs/docs/telemetry.md @@ -1 +1,17 @@ -# Telemetry \ No newline at end of file +# Telemetry + +## Overview + +`Continue` collects and reports **anonymous** usage information. This data is essential to understanding how we should improve the library. You can opt out of it at any time. + +## What we track + +We track the following... + +*TODO: Detail exactly what we track* + +## How to opt out + +Here are the instructions for turning off telemetry... + +*TODO: Describe step-by-step how to opt out of telemetry* \ No newline at end of file diff --git a/docs/docs/walkthroughs/create-a-recipe.md b/docs/docs/walkthroughs/create-a-recipe.md index 21d937b5..74800531 100644 --- a/docs/docs/walkthroughs/create-a-recipe.md +++ b/docs/docs/walkthroughs/create-a-recipe.md @@ -1,4 +1,6 @@ -# Create a Recipe +# Create a recipe + +*TODO: Describe step-by-step how to create a recipe* ## 1. Create a step @@ -48,7 +50,9 @@ class SetUpVenvStep(Step): await sdk.run("python3 -m venv env && source env/bin/activate") # MacOS and Linux ``` -## 2. Compose steps together +## 2. Compose steps together into a complete recipe + +R By convention, the name of every recipe ends with `Recipe`. diff --git a/docs/docs/walkthroughs/share-a-recipe.md b/docs/docs/walkthroughs/share-a-recipe.md index 4082d207..1d5e2f60 100644 --- a/docs/docs/walkthroughs/share-a-recipe.md +++ b/docs/docs/walkthroughs/share-a-recipe.md @@ -1 +1,3 @@ -# Share a recipe \ No newline at end of file +# Share a recipe + +*TODO: Describe step-by-step how to share a recipe* \ No newline at end of file diff --git a/docs/docs/walkthroughs/use-a-recipe.md b/docs/docs/walkthroughs/use-a-recipe.md index 40dc9da1..fc653eea 100644 --- a/docs/docs/walkthroughs/use-a-recipe.md +++ b/docs/docs/walkthroughs/use-a-recipe.md @@ -1 +1,3 @@ -# Use a Recipe \ No newline at end of file +# Use a recipe + +*TODO: Describe step-by-step how to use a recipe* \ No newline at end of file diff --git a/docs/docs/walkthroughs/use-the-gui.md b/docs/docs/walkthroughs/use-the-gui.md index cfd5f214..a7263159 100644 --- a/docs/docs/walkthroughs/use-the-gui.md +++ b/docs/docs/walkthroughs/use-the-gui.md @@ -1 +1,3 @@ -# Use the GUI \ No newline at end of file +# Use the GUI + +*TODO: Describe step-by-step how to use the `Continue GUI`* \ No newline at end of file diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index e3f633dc..7ca00f8d 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -7,7 +7,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ const config = { title: 'Continue', - tagline: 'an open-source library to accelerate your use of models like GPT-4 while coding', + tagline: 'the open-source library for accelerating your use of LLMs while coding', favicon: 'img/favicon.ico', // Set the production url of your site here @@ -105,7 +105,7 @@ const config = { ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} Continue, Inc.`, + copyright: `Copyright © ${new Date().getFullYear()} Continue Dev, Inc.`, }, prism: { theme: lightCodeTheme, diff --git a/docs/sidebars.js b/docs/sidebars.js index befe4feb..a8138432 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -33,7 +33,7 @@ const sidebars = { type: 'category', label: 'Concepts', items: [ - 'concepts/agent', + 'concepts/autopilot', 'concepts/core', 'concepts/gui', 'concepts/history', @@ -45,7 +45,6 @@ const sidebars = { 'concepts/step', ], }, - 'sdk', 'telemetry', ], }; diff --git a/docs/src/components/HomepageFeatures/index.js b/docs/src/components/HomepageFeatures/index.js index d6d381fb..764ca891 100644 --- a/docs/src/components/HomepageFeatures/index.js +++ b/docs/src/components/HomepageFeatures/index.js @@ -8,8 +8,8 @@ const FeatureList = [ Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, description: ( <> - Enable LLMs to be an autopilot for parts of your software development tasks by - leveraging steps and recipes created by others in your workflows as you code + Enable LLMs to be an autopilot for parts of your software development tasks + by leveraging recipes created by others in the workflows you use when coding ), }, @@ -18,18 +18,18 @@ const FeatureList = [ Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, description: ( <> - Use the Continue SDK to create your own custom steps and compose them together - into personalized recipes, so that using LLMs actually fits into your workflows + Use the Continue SDK to create your own custom steps and compose them into + personalized recipes, so that using LLMs seamlessly fits into your workflows ), }, { - title: 'Guide the work done by LLMs to learn when to use and trust them', + title: 'Guide the steps taken by LLMs to learn when to use and trust them', Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, description: ( <> - Use the Continue GUI to review, reverse, and rerun some steps or even entire recipes, - incorporating LLMs with confidence into the workflows you use to create software + Use the Continue GUI to review, reverse, and rerun steps or even entire recipes, + incorporating LLMs with confidence into your software development workflows ), }, diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 1167a97a..a17ffc4d 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -17,8 +17,8 @@ function HomepageHeader() {
- Test drive it in Codespaces + to="/docs/getting-started"> + GitHub Codespaces Demo
@@ -30,7 +30,7 @@ export default function Home() { const {siteConfig} = useDocusaurusContext(); return (
diff --git a/docs/static/img/continue-cover-logo.png b/docs/static/img/continue-cover-logo.png new file mode 100644 index 00000000..de52f6f5 Binary files /dev/null and b/docs/static/img/continue-cover-logo.png differ diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico index c01d54bc..0c361979 100644 Binary files a/docs/static/img/favicon.ico and b/docs/static/img/favicon.ico differ diff --git a/docs/static/img/logo.svg b/docs/static/img/logo.svg index 9db6d0d0..cf6cfeba 100644 --- a/docs/static/img/logo.svg +++ b/docs/static/img/logo.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_mountain.svg b/docs/static/img/undraw_docusaurus_mountain.svg index af961c49..77cd4b54 100644 --- a/docs/static/img/undraw_docusaurus_mountain.svg +++ b/docs/static/img/undraw_docusaurus_mountain.svg @@ -1,171 +1,11 @@ - - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_react.svg b/docs/static/img/undraw_docusaurus_react.svg index 94b5cf08..ba158585 100644 --- a/docs/static/img/undraw_docusaurus_react.svg +++ b/docs/static/img/undraw_docusaurus_react.svg @@ -1,170 +1,11 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + diff --git a/docs/static/img/undraw_docusaurus_tree.svg b/docs/static/img/undraw_docusaurus_tree.svg index d9161d33..7e45e3ef 100644 --- a/docs/static/img/undraw_docusaurus_tree.svg +++ b/docs/static/img/undraw_docusaurus_tree.svg @@ -1,40 +1,11 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + -- cgit v1.2.3-70-g09d2 From 9171567ebf2c0ddf7c430a160a50d0d47c0c991b Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Tue, 30 May 2023 08:41:56 -0400 Subject: rename agent to autopilot --- continuedev/src/continuedev/core/agent.py | 180 +++++++++++++++++++++ continuedev/src/continuedev/libs/core.py | 22 +-- .../src/continuedev/libs/util/copy_codebase.py | 16 +- continuedev/src/continuedev/server/ide.py | 16 +- continuedev/src/continuedev/server/notebook.py | 40 ++--- docs/docs/concepts/agent.md | 7 +- docs/docs/concepts/core.md | 5 +- docs/docs/concepts/llm.md | 2 +- docs/sidebars.js | 51 +++--- 9 files changed, 260 insertions(+), 79 deletions(-) create mode 100644 continuedev/src/continuedev/core/agent.py (limited to 'docs/sidebars.js') diff --git a/continuedev/src/continuedev/core/agent.py b/continuedev/src/continuedev/core/agent.py new file mode 100644 index 00000000..1996abb1 --- /dev/null +++ b/continuedev/src/continuedev/core/agent.py @@ -0,0 +1,180 @@ +import traceback +import time +from typing import Callable, Coroutine, List +from ..models.filesystem_edit import FileEditWithFullContents +from ..libs.llm import LLM +from .observation import Observation +from ..server.ide_protocol import AbstractIdeProtocolServer +from ..libs.util.queue import AsyncSubscriptionQueue +from ..models.main import ContinueBaseModel +from .main import Policy, History, FullState, Step, HistoryNode +from ..libs.steps.core.core import ReversibleStep, ManualEditStep, UserInputStep +from .sdk import ContinueSDK + + +class Autopilot(ContinueBaseModel): + llm: LLM + policy: Policy + ide: AbstractIdeProtocolServer + history: History = History.from_empty() + _on_update_callbacks: List[Callable[[FullState], None]] = [] + + _active: bool = False + _should_halt: bool = False + _main_user_input_queue: List[str] = [] + + _user_input_queue = AsyncSubscriptionQueue() + + class Config: + arbitrary_types_allowed = True + + def get_full_state(self) -> FullState: + return FullState(history=self.history, active=self._active, user_input_queue=self._main_user_input_queue) + + def on_update(self, callback: Callable[["FullState"], None]): + """Subscribe to changes to state""" + self._on_update_callbacks.append(callback) + + def update_subscribers(self): + full_state = self.get_full_state() + for callback in self._on_update_callbacks: + callback(full_state) + + def __get_step_params(self, step: "Step"): + return ContinueSDK(autopilot=self, llm=self.llm.with_system_message(step.system_message)) + + def give_user_input(self, input: str, index: int): + self._user_input_queue.post(index, input) + + async def wait_for_user_input(self) -> str: + self._active = False + self.update_subscribers() + user_input = await self._user_input_queue.get(self.history.current_index) + self._active = True + self.update_subscribers() + return user_input + + _manual_edits_buffer: List[FileEditWithFullContents] = [] + + async def reverse_to_index(self, index: int): + try: + while self.history.get_current_index() >= index: + current_step = self.history.get_current().step + self.history.step_back() + if issubclass(current_step.__class__, ReversibleStep): + await current_step.reverse(self.__get_step_params(current_step)) + + self.update_subscribers() + except Exception as e: + print(e) + + def handle_manual_edits(self, edits: List[FileEditWithFullContents]): + for edit in edits: + self._manual_edits_buffer.append(edit) + # TODO: You're storing a lot of unecessary data here. Can compress into EditDiffs on the spot, and merge. + # self._manual_edits_buffer = merge_file_edit(self._manual_edits_buffer, edit) + + def handle_traceback(self, traceback: str): + raise NotImplementedError + + _step_depth: int = 0 + + async def _run_singular_step(self, step: "Step", is_future_step: bool = False) -> Coroutine[Observation, None, None]: + if not is_future_step: + # Check manual edits buffer, clear out if needed by creating a ManualEditStep + if len(self._manual_edits_buffer) > 0: + manualEditsStep = ManualEditStep.from_sequence( + self._manual_edits_buffer) + self._manual_edits_buffer = [] + await self._run_singular_step(manualEditsStep) + + # Update history - do this first so we get top-first tree ordering + self.history.add_node(HistoryNode( + step=step, observation=None, depth=self._step_depth)) + + # Run step + self._step_depth += 1 + observation = await step(self.__get_step_params(step)) + self._step_depth -= 1 + + # Add observation to history + self.history.get_current().observation = observation + + # Update its description + step._set_description(await step.describe(self.llm)) + + # Call all subscribed callbacks + self.update_subscribers() + + return observation + + async def run_from_step(self, step: "Step"): + # if self._active: + # raise RuntimeError("Autopilot is already running") + self._active = True + + next_step = step + is_future_step = False + while not (next_step is None or self._should_halt): + try: + if is_future_step: + # If future step, then we are replaying and need to delete the step from history so it can be replaced + self.history.remove_current_and_substeps() + + observation = await self._run_singular_step(next_step, is_future_step) + if next_step := self.policy.next(self.history): + is_future_step = False + elif next_step := self.history.take_next_step(): + is_future_step = True + else: + next_step = None + + except Exception as e: + print( + f"Error while running step: \n{''.join(traceback.format_tb(e.__traceback__))}\n{e}") + next_step = None + + self._active = False + + # Doing this so active can make it to the frontend after steps are done. But want better state syncing tools + for callback in self._on_update_callbacks: + callback(None) + + async def run_from_observation(self, observation: Observation): + next_step = self.policy.next(self.history) + await self.run_from_step(next_step) + + async def run_policy(self): + first_step = self.policy.next(self.history) + await self.run_from_step(first_step) + + async def _request_halt(self): + if self._active: + self._should_halt = True + while self._active: + time.sleep(0.1) + self._should_halt = False + return None + + async def accept_user_input(self, user_input: str): + self._main_user_input_queue.append(user_input) + self.update_subscribers() + + if len(self._main_user_input_queue) > 1: + return + + # await self._request_halt() + # Just run the step that takes user input, and + # then up to the policy to decide how to deal with it. + self._main_user_input_queue.pop(0) + self.update_subscribers() + await self.run_from_step(UserInputStep(user_input=user_input)) + + while len(self._main_user_input_queue) > 0: + await self.run_from_step(UserInputStep( + user_input=self._main_user_input_queue.pop(0))) + + async def accept_refinement_input(self, user_input: str, index: int): + await self._request_halt() + await self.reverse_to_index(index) + await self.run_from_step(UserInputStep(user_input=user_input)) diff --git a/continuedev/src/continuedev/libs/core.py b/continuedev/src/continuedev/libs/core.py index 6a8a83ba..36d94ad1 100644 --- a/continuedev/src/continuedev/libs/core.py +++ b/continuedev/src/continuedev/libs/core.py @@ -89,31 +89,31 @@ class ContinueSDK: """The SDK provided as parameters to a step""" llm: LLM ide: AbstractIdeProtocolServer - __agent: "Agent" + __autopilot: "Autopilot" - def __init__(self, agent: "Agent", llm: Union[LLM, None] = None): + def __init__(self, autopilot: "Autopilot", llm: Union[LLM, None] = None): if llm is None: - self.llm = agent.llm + self.llm = autopilot.llm else: self.llm = llm - self.ide = agent.ide - self.__agent = agent + self.ide = autopilot.ide + self.__autopilot = autopilot @property def history(self) -> History: - return self.__agent.history + return self.__autopilot.history async def run_step(self, step: "Step") -> Coroutine[Observation, None, None]: - return await self.__agent._run_singular_step(step) + return await self.__autopilot._run_singular_step(step) async def apply_filesystem_edit(self, edit: FileSystemEdit): await self.run_step(FileSystemEditStep(edit=edit)) async def wait_for_user_input(self) -> str: - return await self.__agent.wait_for_user_input() + return await self.__autopilot.wait_for_user_input() -class Agent(ContinueBaseModel): +class Autopilot(ContinueBaseModel): llm: LLM policy: Policy ide: AbstractIdeProtocolServer @@ -142,7 +142,7 @@ class Agent(ContinueBaseModel): callback(full_state) def __get_step_params(self, step: "Step"): - return ContinueSDK(agent=self, llm=self.llm.with_system_message(step.system_message)) + return ContinueSDK(autopilot=self, llm=self.llm.with_system_message(step.system_message)) def give_user_input(self, input: str, index: int): self._user_input_queue.post(index, input) @@ -210,7 +210,7 @@ class Agent(ContinueBaseModel): async def run_from_step(self, step: "Step"): # if self._active: - # raise RuntimeError("Agent is already running") + # raise RuntimeError("Autopilot is already running") self._active = True next_step = step diff --git a/continuedev/src/continuedev/libs/util/copy_codebase.py b/continuedev/src/continuedev/libs/util/copy_codebase.py index ef1db72b..af957a34 100644 --- a/continuedev/src/continuedev/libs/util/copy_codebase.py +++ b/continuedev/src/continuedev/libs/util/copy_codebase.py @@ -5,7 +5,7 @@ from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler from ..models.main import FileEdit, DeleteDirectory, DeleteFile, AddDirectory, AddFile, FileSystemEdit, Position, Range, RenameFile, RenameDirectory, SequentialFileSystemEdit from ..models.filesystem import FileSystem -from ..libs.main import Agent +from ..libs.main import Autopilot from ..libs.map_path import map_path from ..libs.steps.main import ManualEditAction import shutil @@ -65,15 +65,15 @@ def calculate_diff(filepath: str, original: str, updated: str) -> List[FileEdit] # The whole usage of watchdog here should only be specific to RealFileSystem, you want to have a different "Observer" class for VirtualFileSystem, which would depend on being sent notifications class CopyCodebaseEventHandler(PatternMatchingEventHandler): - def __init__(self, ignore_directories: List[str], ignore_patterns: List[str], agent: Agent, orig_root: str, copy_root: str, filesystem: FileSystem): + def __init__(self, ignore_directories: List[str], ignore_patterns: List[str], autopilot: Autopilot, orig_root: str, copy_root: str, filesystem: FileSystem): super().__init__(ignore_directories=ignore_directories, ignore_patterns=ignore_patterns) - self.agent = agent + self.autopilot = autopilot self.orig_root = orig_root self.copy_root = copy_root self.filesystem = filesystem - # For now, we'll just make the update immediately, but eventually need to sync with agent. - # It should be the agent that makes the update right? It's just another action, everything comes from a single stream. + # For now, we'll just make the update immediately, but eventually need to sync with autopilot. + # It should be the autopilot that makes the update right? It's just another action, everything comes from a single stream. def _event_to_edit(self, event) -> Union[FileSystemEdit, None]: # NOTE: You'll need to map paths to create both an action within the copy filesystem (the one you take) and one in the original fileystem (the one you'll record and allow the user to accept). Basically just need a converter built in to the FileSystemEdit class @@ -110,13 +110,13 @@ class CopyCodebaseEventHandler(PatternMatchingEventHandler): return edit = edit.with_mapped_paths(self.orig_root, self.copy_root) action = ManualEditAction(edit) - self.agent.act(action) + self.autopilot.act(action) -def maintain_copy_workspace(agent: Agent, filesystem: FileSystem, orig_root: str, copy_root: str): +def maintain_copy_workspace(autopilot: Autopilot, filesystem: FileSystem, orig_root: str, copy_root: str): observer = Observer() event_handler = CopyCodebaseEventHandler( - [".git"], [], agent, orig_root, copy_root, filesystem) + [".git"], [], autopilot, orig_root, copy_root, filesystem) observer.schedule(event_handler, orig_root, recursive=True) observer.start() try: diff --git a/continuedev/src/continuedev/server/ide.py b/continuedev/src/continuedev/server/ide.py index dd1dc463..167d9483 100644 --- a/continuedev/src/continuedev/server/ide.py +++ b/continuedev/src/continuedev/server/ide.py @@ -122,7 +122,7 @@ class IdeProtocolServer(AbstractIdeProtocolServer): pass async def setFileOpen(self, filepath: str, open: bool = True): - # Agent needs access to this. + # Autopilot needs access to this. await self.websocket.send_json({ "messageType": "setFileOpen", "filepath": filepath, @@ -147,12 +147,12 @@ class IdeProtocolServer(AbstractIdeProtocolServer): responses = await asyncio.gather(*[ self._receive_json(ShowSuggestionResponse) for i in range(len(suggestions)) - ]) # WORKING ON THIS FLOW HERE. Fine now to just await for response, instead of doing something fancy with a "waiting" state on the agent. + ]) # WORKING ON THIS FLOW HERE. Fine now to just await for response, instead of doing something fancy with a "waiting" state on the autopilot. # Just need connect the suggestionId to the IDE (and the notebook) return any([r.accepted for r in responses]) # ------------------------------- # - # Here needs to pass message onto the Agent OR Agent just subscribes. + # Here needs to pass message onto the Autopilot OR Autopilot just subscribes. # This is where you might have triggers: plugins can subscribe to certian events # like file changes, tracebacks, etc... @@ -160,12 +160,12 @@ class IdeProtocolServer(AbstractIdeProtocolServer): pass def onTraceback(self, traceback: Traceback): - # Same as below, maybe not every agent? + # Same as below, maybe not every autopilot? for _, session in self.session_manager.sessions.items(): - session.agent.handle_traceback(traceback) + session.autopilot.handle_traceback(traceback) def onFileSystemUpdate(self, update: FileSystemEdit): - # Access to Agent (so SessionManager) + # Access to Autopilot (so SessionManager) pass def onCloseNotebook(self, session_id: str): @@ -176,10 +176,10 @@ class IdeProtocolServer(AbstractIdeProtocolServer): pass def onFileEdits(self, edits: List[FileEditWithFullContents]): - # Send the file edits to ALL agents. + # Send the file edits to ALL autopilots. # Maybe not ideal behavior for _, session in self.session_manager.sessions.items(): - session.agent.handle_manual_edits(edits) + session.autopilot.handle_manual_edits(edits) # Request information. Session doesn't matter. async def getOpenFiles(self) -> List[str]: diff --git a/continuedev/src/continuedev/server/notebook.py b/continuedev/src/continuedev/server/notebook.py index c9d4edc5..c26920f5 100644 --- a/continuedev/src/continuedev/server/notebook.py +++ b/continuedev/src/continuedev/server/notebook.py @@ -6,7 +6,7 @@ from uvicorn.main import Server from ..models.filesystem_edit import FileEditWithFullContents from ..libs.policy import DemoPolicy -from ..libs.core import Agent, FullState, History, Step +from ..libs.core import Autopilot, FullState, History, Step from ..libs.steps.nate import ImplementAbstractMethodStep from ..libs.observation import Observation from dotenv import load_dotenv @@ -41,16 +41,16 @@ Server.handle_exit = AppStatus.handle_exit class Session: session_id: str - agent: Agent + autopilot: Autopilot ws: Union[WebSocket, None] - def __init__(self, session_id: str, agent: Agent): + def __init__(self, session_id: str, autopilot: Autopilot): self.session_id = session_id - self.agent = agent + self.autopilot = autopilot self.ws = None -class DemoAgent(Agent): +class DemoAutopilot(Autopilot): first_seen: bool = False cumulative_edit_string = "" @@ -78,20 +78,20 @@ class SessionManager: def new_session(self, ide: AbstractIdeProtocolServer) -> str: cmd = "python3 /Users/natesesti/Desktop/continue/extension/examples/python/main.py" - agent = DemoAgent(llm=OpenAI(api_key=openai_api_key), - policy=DemoPolicy(cmd=cmd), ide=ide) + autopilot = DemoAutopilot(llm=OpenAI(api_key=openai_api_key), + policy=DemoPolicy(cmd=cmd), ide=ide) session_id = str(uuid4()) - session = Session(session_id=session_id, agent=agent) + session = Session(session_id=session_id, autopilot=autopilot) self.sessions[session_id] = session def on_update(state: FullState): session_manager.send_ws_data(session_id, { "messageType": "state", - "state": agent.get_full_state().dict() + "state": autopilot.get_full_state().dict() }) - agent.on_update(on_update) - asyncio.create_task(agent.run_policy()) + autopilot.on_update(on_update) + asyncio.create_task(autopilot.run_policy()) return session_id def remove_session(self, session_id: str): @@ -147,7 +147,7 @@ async def websocket_endpoint(websocket: WebSocket, session: Session = Depends(we # Update any history that may have happened before connection await websocket.send_json({ "messageType": "state", - "state": session_manager.get_session(session.session_id).agent.get_full_state().dict() + "state": session_manager.get_session(session.session_id).autopilot.get_full_state().dict() }) print("Session started", data) while AppStatus.should_exit is False: @@ -162,17 +162,17 @@ async def websocket_endpoint(websocket: WebSocket, session: Session = Depends(we if messageType == "main_input": # Do something with user input asyncio.create_task( - session.agent.accept_user_input(data["value"])) + session.autopilot.accept_user_input(data["value"])) elif messageType == "step_user_input": asyncio.create_task( - session.agent.give_user_input(data["value"], data["index"])) + session.autopilot.give_user_input(data["value"], data["index"])) elif messageType == "refinement_input": asyncio.create_task( - session.agent.accept_refinement_input(data["value"], data["index"])) + session.autopilot.accept_refinement_input(data["value"], data["index"])) elif messageType == "reverse": # Reverse the history to the given index asyncio.create_task( - session.agent.reverse_to_index(data["index"])) + session.autopilot.reverse_to_index(data["index"])) except Exception as e: print(e) @@ -182,17 +182,17 @@ async def websocket_endpoint(websocket: WebSocket, session: Session = Depends(we @router.post("/run") def request_run(step: Step, session=Depends(session)): - """Tell an agent to take a specific action.""" - asyncio.create_task(session.agent.run_from_step(step)) + """Tell an autopilot to take a specific action.""" + asyncio.create_task(session.autopilot.run_from_step(step)) return "Success" @router.get("/history") def get_history(session=Depends(session)) -> History: - return session.agent.history + return session.autopilot.history @router.post("/observation") def post_observation(observation: Observation, session=Depends(session)): - asyncio.create_task(session.agent.run_from_observation(observation)) + asyncio.create_task(session.autopilot.run_from_observation(observation)) return "Success" diff --git a/docs/docs/concepts/agent.md b/docs/docs/concepts/agent.md index 0528b305..e2fa6832 100644 --- a/docs/docs/concepts/agent.md +++ b/docs/docs/concepts/agent.md @@ -1,9 +1,10 @@ -# Agent +# Autopilot + +`Autopilot` contains the -`Agent` contains the - History - LLM - Policy - IDE -**Q: should we really call this abstraction agent?** \ No newline at end of file +**Q: should we really call this abstraction autopilot?** diff --git a/docs/docs/concepts/core.md b/docs/docs/concepts/core.md index ee58cbb2..d60f46ac 100644 --- a/docs/docs/concepts/core.md +++ b/docs/docs/concepts/core.md @@ -3,11 +3,12 @@ The `Core` connects the SDK and GUI with the IDE (i.e. in VS Code, a web browser, etc), enabling the steps to make changes to your code and accelerate your software development workflows. The `Core` includes + - IDE protocol - GUI protocol - SDK -- Agent +- Autopilot There is a two-way sync between an IDE and the GUI that happens through Core. -**Q: does this make sense as a concept?** \ No newline at end of file +**Q: does this make sense as a concept?** diff --git a/docs/docs/concepts/llm.md b/docs/docs/concepts/llm.md index 11bbacc7..8c2dbcba 100644 --- a/docs/docs/concepts/llm.md +++ b/docs/docs/concepts/llm.md @@ -4,4 +4,4 @@ **Q: should we call this LLM? Perhaps just model?** -**Q: should this abstraction be connected to agent?** \ No newline at end of file +**Q: should this abstraction be connected to autopilot?** diff --git a/docs/sidebars.js b/docs/sidebars.js index befe4feb..d2c91388 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -13,41 +13,40 @@ /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { - docsSidebar: [ - 'intro', - 'getting-started', - 'install', - 'how-continue-works', + "intro", + "getting-started", + "install", + "how-continue-works", { - type: 'category', - label: 'Walkthroughs', + type: "category", + label: "Walkthroughs", items: [ - 'walkthroughs/use-the-gui', - 'walkthroughs/use-a-recipe', - 'walkthroughs/create-a-recipe', - 'walkthroughs/share-a-recipe', + "walkthroughs/use-the-gui", + "walkthroughs/use-a-recipe", + "walkthroughs/create-a-recipe", + "walkthroughs/share-a-recipe", ], }, { - type: 'category', - label: 'Concepts', + type: "category", + label: "Concepts", items: [ - 'concepts/agent', - 'concepts/core', - 'concepts/gui', - 'concepts/history', - 'concepts/ide', - 'concepts/llm', - 'concepts/policy', - 'concepts/recipe', - 'concepts/sdk', - 'concepts/step', + "concepts/autopilot", + "concepts/core", + "concepts/gui", + "concepts/history", + "concepts/ide", + "concepts/llm", + "concepts/policy", + "concepts/recipe", + "concepts/sdk", + "concepts/step", ], }, - 'sdk', - 'telemetry', + "sdk", + "telemetry", ], }; -module.exports = sidebars; \ No newline at end of file +module.exports = sidebars; -- cgit v1.2.3-70-g09d2 From 6b909caa8dcbd4bf3d1078ded1c12146944ab349 Mon Sep 17 00:00:00 2001 From: Ty Dunn Date: Fri, 2 Jun 2023 17:58:53 +0200 Subject: changing core to server & other stuff --- docs/docs/concepts/core.md | 18 ------------------ docs/docs/concepts/server.md | 18 ++++++++++++++++++ docs/docs/concepts/step.md | 2 +- docs/docs/getting-started.md | 12 ++++-------- docs/docs/how-continue-works.md | 4 ++-- docs/docs/install.md | 9 +++------ docs/docs/intro.md | 2 +- docs/sidebars.js | 2 +- 8 files changed, 30 insertions(+), 37 deletions(-) delete mode 100644 docs/docs/concepts/core.md create mode 100644 docs/docs/concepts/server.md (limited to 'docs/sidebars.js') diff --git a/docs/docs/concepts/core.md b/docs/docs/concepts/core.md deleted file mode 100644 index e9757b36..00000000 --- a/docs/docs/concepts/core.md +++ /dev/null @@ -1,18 +0,0 @@ -# Core - -**TODO: Better explain in one sentence what this is and what its purpose is** - -:::info -The **Continue Core** holds the main event loop, responsible for connecting [IDE](./ide.md) (i.e. in VS Code, GitHub Codespaces, a web browser text editor, etc), [SDK](./sdk.md), and [GUI](./gui.md), and deciding which steps to take next. -::: - -## Details - -I tried a rewrite of the info box above. The core doesn't really mean that much except for maybe the Autopilot class and the small set of classes in core.py, including History, Step, Policy mostly. Maybe best referred to as a set of abstractions. Autopilot runs the main event loop, basically queueing user input and asking the policy what to do next, and injecting the SDK, and recording history. I suppose you could also say it includes the protocols, in which case you might say "connects IDE and GUI through the SDK", though lots of 3-letter acronyms going on here. Notes below are correct. - -- The `Core` includes - - IDE protocol - - GUI protocol - - SDK - - Autopilot -- There is a two-way sync between an IDE and the GUI that happens through Core diff --git a/docs/docs/concepts/server.md b/docs/docs/concepts/server.md new file mode 100644 index 00000000..3eebdb5f --- /dev/null +++ b/docs/docs/concepts/server.md @@ -0,0 +1,18 @@ +# Server + +**TODO: Better explain in one sentence what this is and what its purpose is** + +:::info +The **Continue Server** holds the main event loop, responsible for connecting [IDE](./ide.md) (i.e. in VS Code, GitHub Codespaces, a web browser text editor, etc), [SDK](./sdk.md), and [GUI](./gui.md), and deciding which steps to take next. +::: + +## Details + +I tried a rewrite of the info box above. The core doesn't really mean that much except for maybe the Autopilot class and the small set of classes in core.py, including History, Step, Policy mostly. Maybe best referred to as a set of abstractions. Autopilot runs the main event loop, basically queueing user input and asking the policy what to do next, and injecting the SDK, and recording history. I suppose you could also say it includes the protocols, in which case you might say "connects IDE and GUI through the SDK", though lots of 3-letter acronyms going on here. Notes below are correct. + +- The `server` includes + - IDE protocol + - GUI protocol + - SDK + - Autopilot +- There is a two-way sync between an IDE and the GUI that happens through the server diff --git a/docs/docs/concepts/step.md b/docs/docs/concepts/step.md index b92e6faf..1758fdd8 100644 --- a/docs/docs/concepts/step.md +++ b/docs/docs/concepts/step.md @@ -66,4 +66,4 @@ Write unit tests for this file. #### Parameters -- for_filepath (required): the path of the file that unit tests should be created for +- for_filepath (required): the path of the file that unit tests should be created for \ No newline at end of file diff --git a/docs/docs/getting-started.md b/docs/docs/getting-started.md index 39becd1a..90d6f8dc 100644 --- a/docs/docs/getting-started.md +++ b/docs/docs/getting-started.md @@ -14,18 +14,14 @@ We don't want to waste your time with install and env setup before you try Conti **TODO: Insert an image of Continue when it has opened** -3. Try playing with Continue as you build a Python script to do Pandas stuff +3. Try playing with Continue as you write some Python code to understand a dataset with Pandas **TODO: Design and set up Pandas stuff scenario in codespaces** 4. There are a few recipes you should also try - a. In the first directory, try out X recipe - b. In the second directory, try out Y recipe - c. In the third directory, try out Z recipe - -- database migrations -- something super simple (libaries) -- unit testing + a. In the first directory, try out Pytest recipe + b. In the second directory, try out Write comments for the highlighted code recipe + c. In the third directory, try out dlt CreatePipeline recipe **TODO: Design and add these recipes in codespaces** diff --git a/docs/docs/how-continue-works.md b/docs/docs/how-continue-works.md index 32bf6347..2d5f09a8 100644 --- a/docs/docs/how-continue-works.md +++ b/docs/docs/how-continue-works.md @@ -4,13 +4,13 @@ ## Overview -The `Continue` library consists of an [SDK](./concepts/sdk.md), a [GUI](./concepts/gui.md), and a [Core](./concepts/core.md) that brings everything together. +The `Continue` library consists of an [SDK](./concepts/sdk.md), a [GUI](./concepts/gui.md), and a [Server](./concepts/server.md) that brings everything together. The [SDK](./concepts/sdk.md) gives you access to the tools (e.g. open a directory, edit a file, call a model, etc.) needed to define steps that integrate LLMs into your IDE. The [GUI](./concepts/gui.md) lets you transparently review every automated step, providing the opportunity to undo and rerun any that ran incorrectly. -The [Core](./concepts/core.md) holds the main event loop, responsible for connecting IDE, SDK, and GUI and deciding which steps to take next. +The [Server](./concepts/server.md) holds the main event loop, responsible for connecting IDE, SDK, and GUI and deciding which steps to take next. ## Details diff --git a/docs/docs/install.md b/docs/docs/install.md index 6dce5da4..7e36ffd5 100644 --- a/docs/docs/install.md +++ b/docs/docs/install.md @@ -4,7 +4,7 @@ If you want to try `Continue` before installing, check out the [GitHub Codespaces Demo](./getting-started.md) ::: -## Install `Continue` packaged as a VS Code extension +## Install `Continue` locally in VS Code 1. Click `Install` on the `Continue` extension in the Visual Studio Marketplace [here](https://marketplace.visualstudio.com/items?itemName=Continue.continue) @@ -20,11 +20,8 @@ Please follow the [README instructions in the repo](https://github.com/continued ## Next steps -Now that you have installed the VS Code extension, you can learn more with our walkthroughs: - -How to... - +Now that you have installed locally in VS Code, you can learn more with our walkthroughs: - [Use the GUI](./walkthroughs/use-the-gui.md) -- [Invoke a recipe](./walkthroughs/use-a-recipe.md) +- [Use a recipe](./walkthroughs/use-a-recipe.md) - [Create a recipe](./walkthroughs/create-a-recipe.md) - [Share a recipe](./walkthroughs/share-a-recipe.md) diff --git a/docs/docs/intro.md b/docs/docs/intro.md index 5d73a256..b1ce4c72 100644 --- a/docs/docs/intro.md +++ b/docs/docs/intro.md @@ -15,6 +15,6 @@ You define the scenarios where Large Language Models ([LLMs](./concepts/llm.md)) ## Why do developers use `Continue`? -Many developers have begun to use models like [GPT-4](https://openai.com/research/gpt-4) through [ChatGPT](https://openai.com/blog/chatgpt) while coding; however, the experience is painful because of how much manual copying, pasting, and editing is required to supply them with context and transfer the generated solutions to your codebase. `Continue` eliminates this pain by deeply integrating LLMs into your IDE. +Many developers have begun to use models like [GPT-4](https://openai.com/research/gpt-4) through [ChatGPT](https://openai.com/blog/chatgpt) while coding; however, the experience is painful because of how much manual copying, pasting, and editing is required to supply them with context and transfer the generated solutions to your codebase. `Continue` eliminates this pain by deeply integrating LLMs into your IDE amd workflows. `Continue` accelerates how developers build, ship, and maintain software, while giving them the control to define when LLMs should take actions and the confidence to trust LLMs. In short, it enables developers to do what they have always done: work together to create better and better abstractions that make it easier and easier to automate the repetitive work that people want computers to do. diff --git a/docs/sidebars.js b/docs/sidebars.js index e232ceeb..b3ebec57 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -33,7 +33,7 @@ const sidebars = { label: "Concepts", items: [ "concepts/autopilot", - "concepts/core", + "concepts/server", "concepts/gui", "concepts/history", "concepts/ide", -- cgit v1.2.3-70-g09d2