diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-06-18 18:29:20 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-06-18 18:29:20 -0700 |
commit | a39bec0dea93c83b5eef446543f991218ecc810c (patch) | |
tree | baed3d4de461f6a35e961f6dde3342ed29d7073e | |
parent | 350873ccfac50ff84c2018e1d71eaf6089d4c5b7 (diff) | |
download | sncontinue-a39bec0dea93c83b5eef446543f991218ecc810c.tar.gz sncontinue-a39bec0dea93c83b5eef446543f991218ecc810c.tar.bz2 sncontinue-a39bec0dea93c83b5eef446543f991218ecc810c.zip |
data sharing toggle
-rw-r--r-- | continuedev/src/continuedev/steps/core/core.py | 38 | ||||
-rw-r--r-- | extension/react-app/package-lock.json | 21 | ||||
-rw-r--r-- | extension/react-app/package.json | 1 | ||||
-rw-r--r-- | extension/react-app/src/components/HeaderButtonWithText.tsx | 2 | ||||
-rw-r--r-- | extension/react-app/src/tabs/gui.tsx | 68 | ||||
-rw-r--r-- | 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 ( <HeaderButton - style={{ padding: "3px" }} + style={{ padding: "1px", paddingLeft: hover ? "4px" : "1px" }} onMouseEnter={() => 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<boolean[]>([]); const [history, setHistory] = useState<History | undefined>(); // { @@ -390,7 +389,58 @@ function GUI(props: GUIProps) { /> <ContinueButton onClick={onMainTextInput} /> </TopGUIDiv> - <Footer> + <div + style={{ + position: "fixed", + bottom: "50px", + backgroundColor: "white", + color: "black", + borderRadius: defaultBorderRadius, + padding: "16px", + margin: "16px", + }} + hidden={!showDataSharingInfo} + > + By turning on the switch, you will anonymously contribute your Continue + history to an open-source dataset used to train LLMs to use tools just + like a developer in their IDE. + <br /> + <br /> + <b> + {dataSwitchChecked + ? "You are currently contributing data." + : "Your data is not being shared."} + </b> + </div> + <Footer dataSwitchChecked={dataSwitchChecked}> + <div + style={{ + display: "flex", + gap: "4px", + marginRight: "auto", + alignItems: "center", + }} + onMouseEnter={() => { + setShowDataSharingInfo(true); + }} + onMouseLeave={() => { + setShowDataSharingInfo(false); + }} + > + <ReactSwitch + height={20} + handleDiameter={20} + width={40} + onChange={() => { + setDataSwitchChecked((prev) => !prev); + }} + onColor="#12887a" + checked={dataSwitchChecked} + /> + <span style={{ cursor: "help", fontSize: "16px" }}> + Contribute Data + </span> + </div> <HeaderButtonWithText onClick={() => { client?.sendClear(); diff --git a/extension/src/commands.ts b/extension/src/commands.ts index 5392a7a3..22e15c43 100644 --- a/extension/src/commands.ts +++ b/extension/src/commands.ts @@ -62,9 +62,7 @@ const commandsMap: { [command: string]: (...args: any) => any } = { "continue.acceptSuggestion": acceptSuggestionCommand, "continue.rejectSuggestion": rejectSuggestionCommand, "continue.focusContinueInput": async () => { - if (!debugPanelWebview) { - vscode.commands.executeCommand("continue.continueGUIView.focus"); - } + vscode.commands.executeCommand("continue.continueGUIView.focus"); debugPanelWebview?.postMessage({ type: "focusContinueInput", }); |