summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-06-18 18:29:20 -0700
committerNate Sesti <sestinj@gmail.com>2023-06-18 18:29:20 -0700
commita39bec0dea93c83b5eef446543f991218ecc810c (patch)
treebaed3d4de461f6a35e961f6dde3342ed29d7073e
parent350873ccfac50ff84c2018e1d71eaf6089d4c5b7 (diff)
downloadsncontinue-a39bec0dea93c83b5eef446543f991218ecc810c.tar.gz
sncontinue-a39bec0dea93c83b5eef446543f991218ecc810c.tar.bz2
sncontinue-a39bec0dea93c83b5eef446543f991218ecc810c.zip
data sharing toggle
-rw-r--r--continuedev/src/continuedev/steps/core/core.py38
-rw-r--r--extension/react-app/package-lock.json21
-rw-r--r--extension/react-app/package.json1
-rw-r--r--extension/react-app/src/components/HeaderButtonWithText.tsx2
-rw-r--r--extension/react-app/src/tabs/gui.tsx68
-rw-r--r--extension/src/commands.ts4
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",
});