From a39bec0dea93c83b5eef446543f991218ecc810c Mon Sep 17 00:00:00 2001 From: Nate Sesti Date: Sun, 18 Jun 2023 18:29:20 -0700 Subject: data sharing toggle --- continuedev/src/continuedev/steps/core/core.py | 38 +++++++----- extension/react-app/package-lock.json | 21 +++++++ extension/react-app/package.json | 1 + .../src/components/HeaderButtonWithText.tsx | 2 +- extension/react-app/src/tabs/gui.tsx | 68 +++++++++++++++++++--- extension/src/commands.ts | 4 +- 6 files changed, 106 insertions(+), 28 deletions(-) diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py index 417398b7..6d6246fd 100644 --- a/continuedev/src/continuedev/steps/core/core.py +++ b/continuedev/src/continuedev/steps/core/core.py @@ -154,10 +154,11 @@ class DefaultModelEditCodeStep(Step): async def describe(self, models: Models) -> Coroutine[str, None, None]: description = await models.gpt35.complete( f"{self._prompt_and_completion}\n\nPlease give brief a description of the changes made above using markdown bullet points. Be concise and only mention changes made to the commit before, not prefix or suffix:") - return description + self.name = await models.gpt35.complete(f"Write a very short title to describe this requested change: '{self.user_input}'. This is the title:") + return f"`{self.user_input}`\n\n" + description async def run(self, sdk: ContinueSDK) -> Coroutine[Observation, None, None]: - self.name = self.user_input + self.description = f"`{self.user_input}`" await sdk.update_ui() rif_with_contents = [] @@ -174,7 +175,7 @@ class DefaultModelEditCodeStep(Step): await sdk.ide.setFileOpen(rif.filepath) model_to_use = sdk.models.default - + full_file_contents = await sdk.ide.readFile(rif.filepath) full_file_contents_lst = full_file_contents.split("\n") @@ -185,42 +186,49 @@ class DefaultModelEditCodeStep(Step): cur_end_line = len(full_file_contents_lst) - 1 def cut_context(model_to_use, total_tokens, cur_start_line, cur_end_line): - + if total_tokens > MAX_TOKENS_FOR_MODEL[model_to_use.name]: while cur_end_line > min_end_line: - total_tokens -= model_to_use.count_tokens(full_file_contents_lst[cur_end_line]) + total_tokens -= model_to_use.count_tokens( + full_file_contents_lst[cur_end_line]) cur_end_line -= 1 if total_tokens < MAX_TOKENS_FOR_MODEL[model_to_use.name]: return cur_start_line, cur_end_line - + if total_tokens > MAX_TOKENS_FOR_MODEL[model_to_use.name]: while cur_start_line < max_start_line: cur_start_line += 1 - total_tokens -= model_to_use.count_tokens(full_file_contents_lst[cur_end_line]) + total_tokens -= model_to_use.count_tokens( + full_file_contents_lst[cur_end_line]) if total_tokens < MAX_TOKENS_FOR_MODEL[model_to_use.name]: return cur_start_line, cur_end_line - + return cur_start_line, cur_end_line if model_to_use.name == "gpt-4": total_tokens = model_to_use.count_tokens(full_file_contents) - cur_start_line, cur_end_line = cut_context(model_to_use, total_tokens, cur_start_line, cur_end_line) + cur_start_line, cur_end_line = cut_context( + model_to_use, total_tokens, cur_start_line, cur_end_line) - elif model_to_use.name == "gpt-3.5-turbo" or model_to_use.name == "gpt-3.5-turbo-16k": + elif model_to_use.name == "gpt-3.5-turbo" or model_to_use.name == "gpt-3.5-turbo-16k": if sdk.models.gpt35.count_tokens(full_file_contents) > MAX_TOKENS_FOR_MODEL["gpt-3.5-turbo"]: model_to_use = sdk.models.gpt3516k - total_tokens = model_to_use.count_tokens(full_file_contents) - cur_start_line, cur_end_line = cut_context(model_to_use, total_tokens, cur_start_line, cur_end_line) + total_tokens = model_to_use.count_tokens( + full_file_contents) + cur_start_line, cur_end_line = cut_context( + model_to_use, total_tokens, cur_start_line, cur_end_line) else: raise Exception("Unknown default model") - - code_before = "".join(full_file_contents_lst[cur_start_line:max_start_line]) - code_after = "".join(full_file_contents_lst[min_end_line:cur_end_line]) + + code_before = "".join( + full_file_contents_lst[cur_start_line:max_start_line]) + code_after = "".join( + full_file_contents_lst[min_end_line:cur_end_line]) segs = [code_before, code_after] diff --git a/extension/react-app/package-lock.json b/extension/react-app/package-lock.json index 64440da6..db15fd2b 100644 --- a/extension/react-app/package-lock.json +++ b/extension/react-app/package-lock.json @@ -16,6 +16,7 @@ "react-dom": "^18.2.0", "react-markdown": "^8.0.5", "react-redux": "^8.0.5", + "react-switch": "^7.0.0", "styled-components": "^5.3.6", "vscode-webview": "^1.0.1-beta.1" }, @@ -2721,6 +2722,18 @@ } } }, + "node_modules/react-switch": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz", + "integrity": "sha512-KkDeW+cozZXI6knDPyUt3KBN1rmhoVYgAdCJqAh7st7tk8YE6N0iR89zjCWO8T8dUTeJGTR0KU+5CHCRMRffiA==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4983,6 +4996,14 @@ "use-sync-external-store": "^1.0.0" } }, + "react-switch": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/react-switch/-/react-switch-7.0.0.tgz", + "integrity": "sha512-KkDeW+cozZXI6knDPyUt3KBN1rmhoVYgAdCJqAh7st7tk8YE6N0iR89zjCWO8T8dUTeJGTR0KU+5CHCRMRffiA==", + "requires": { + "prop-types": "^15.7.2" + } + }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", diff --git a/extension/react-app/package.json b/extension/react-app/package.json index a53fbec8..230bd5b9 100644 --- a/extension/react-app/package.json +++ b/extension/react-app/package.json @@ -17,6 +17,7 @@ "react-dom": "^18.2.0", "react-markdown": "^8.0.5", "react-redux": "^8.0.5", + "react-switch": "^7.0.0", "styled-components": "^5.3.6", "vscode-webview": "^1.0.1-beta.1" }, diff --git a/extension/react-app/src/components/HeaderButtonWithText.tsx b/extension/react-app/src/components/HeaderButtonWithText.tsx index f9483f0f..acaca9ce 100644 --- a/extension/react-app/src/components/HeaderButtonWithText.tsx +++ b/extension/react-app/src/components/HeaderButtonWithText.tsx @@ -12,7 +12,7 @@ const HeaderButtonWithText = (props: HeaderButtonWithTextProps) => { const [hover, setHover] = useState(false); return ( setHover(true)} onMouseLeave={() => { setHover(false); diff --git a/extension/react-app/src/tabs/gui.tsx b/extension/react-app/src/tabs/gui.tsx index 624d22d5..52318dca 100644 --- a/extension/react-app/src/tabs/gui.tsx +++ b/extension/react-app/src/tabs/gui.tsx @@ -1,11 +1,5 @@ import styled from "styled-components"; -import { - defaultBorderRadius, - vscBackground, - Loader, - MainTextInput, - HeaderButton, -} from "../components"; +import { defaultBorderRadius, Loader } from "../components"; import ContinueButton from "../components/ContinueButton"; import { useCallback, useEffect, useRef, useState } from "react"; import { History } from "../../../schema/History"; @@ -20,6 +14,7 @@ import { import ComboBox from "../components/ComboBox"; import TextDialog from "../components/TextDialog"; import HeaderButtonWithText from "../components/HeaderButtonWithText"; +import ReactSwitch from "react-switch"; const TopGUIDiv = styled.div` overflow: hidden; @@ -33,7 +28,7 @@ const UserInputQueueItem = styled.div` text-align: center; `; -const Footer = styled.footer` +const Footer = styled.footer<{ dataSwitchChecked: boolean }>` display: flex; flex-direction: row; gap: 8px; @@ -42,6 +37,8 @@ const Footer = styled.footer` align-items: center; margin-top: 8px; border-top: 0.1px solid gray; + background-color: ${(props) => + props.dataSwitchChecked ? "#12887a33" : "transparent"}; `; interface GUIProps { @@ -54,6 +51,8 @@ function GUI(props: GUIProps) { const [availableSlashCommands, setAvailableSlashCommands] = useState< { name: string; description: string }[] >([]); + const [dataSwitchChecked, setDataSwitchChecked] = useState(false); + const [showDataSharingInfo, setShowDataSharingInfo] = useState(false); const [stepsOpen, setStepsOpen] = useState([]); const [history, setHistory] = useState(); // { @@ -390,7 +389,58 @@ function GUI(props: GUIProps) { /> -