From d3756d6477655884de8144784db0d9c4ad20c3fd Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Sun, 18 Jun 2023 21:29:36 -0700
Subject: moving gradient loader

---
 .../react-app/src/components/StepContainer.tsx     | 39 ++++++++++++++++++----
 1 file changed, 32 insertions(+), 7 deletions(-)

(limited to 'extension/react-app/src/components/StepContainer.tsx')

diff --git a/extension/react-app/src/components/StepContainer.tsx b/extension/react-app/src/components/StepContainer.tsx
index 1eb1d1fd..74a1c4e8 100644
--- a/extension/react-app/src/components/StepContainer.tsx
+++ b/extension/react-app/src/components/StepContainer.tsx
@@ -49,9 +49,13 @@ const StepContainerDiv = styled.div<{ open: boolean }>`
   /* padding: 8px; */
 `;
 
-const HeaderDiv = styled.div<{ error: boolean }>`
+const HeaderDiv = styled.div<{ error: boolean; loading: boolean }>`
   background-color: ${(props) =>
-    props.error ? "#522" : vscBackgroundTransparent};
+    props.error
+      ? "#522"
+      : props.loading
+      ? vscBackgroundTransparent
+      : vscBackground};
   display: grid;
   grid-template-columns: 1fr auto auto;
   grid-gap: 8px;
@@ -76,12 +80,22 @@ const StyledCode = styled.code`
   color: lightgray;
 `;
 
+const gradient = keyframes`
+  0% {
+    background-position: 0px 0;
+  }
+  100% {
+    background-position: 100em 0;
+  }
+`;
+
 const GradientBorder = styled.div<{
   borderWidth?: number;
   borderRadius?: string;
   borderColor?: string;
   isFirst: boolean;
   isLast: boolean;
+  loading: boolean;
 }>`
   border-radius: ${(props) => props.borderRadius || "0"};
   padding-top: ${(props) =>
@@ -91,13 +105,18 @@ const GradientBorder = styled.div<{
   background: ${(props) =>
     props.borderColor
       ? props.borderColor
-      : `linear-gradient(
+      : `repeating-linear-gradient(
     101.79deg,
     #12887a 0%,
-    #87245c 37.64%,
-    #e12637 65.98%,
-    #ffb215 110.45%
+    #87245c 16%,
+    #e12637 33%,
+    #ffb215 55%,
+    #e12637 67%,
+    #87245c 85%,
+    #12887a 99%
   )`};
+  animation: ${(props) => (props.loading ? gradient : "")} 6s linear infinite;
+  background-size: 200% 200%;
 `;
 
 function StepContainer(props: StepContainerProps) {
@@ -138,10 +157,15 @@ function StepContainer(props: StepContainerProps) {
     >
       <StepContainerDiv open={props.open}>
         <GradientBorder
+          loading={props.historyNode.active as boolean | false}
           isFirst={props.isFirst}
           isLast={props.isLast}
           borderColor={
-            props.historyNode.observation?.error ? "#f00" : undefined
+            props.historyNode.observation?.error
+              ? "#f00"
+              : props.historyNode.active
+              ? undefined
+              : "white"
           }
           className="overflow-hidden cursor-pointer"
           onClick={(e) => {
@@ -153,6 +177,7 @@ function StepContainer(props: StepContainerProps) {
           }}
         >
           <HeaderDiv
+            loading={props.historyNode.active as boolean | false}
             error={props.historyNode.observation?.error ? true : false}
           >
             <h4 className="m-2">
-- 
cgit v1.2.3-70-g09d2


From 4b394e96a57e0a018cb815e929bf28b445e17ae0 Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Sun, 25 Jun 2023 13:44:31 -0700
Subject: don't call python function, other

---
 continuedev/src/continuedev/libs/llm/openai.py              |  2 +-
 continuedev/src/continuedev/steps/chat.py                   | 13 +++++++++++--
 continuedev/src/continuedev/steps/core/core.py              |  3 ++-
 continuedev/src/continuedev/steps/main.py                   |  5 +++--
 extension/react-app/src/components/HeaderButtonWithText.tsx |  2 ++
 extension/react-app/src/components/StepContainer.tsx        |  1 +
 6 files changed, 20 insertions(+), 6 deletions(-)

(limited to 'extension/react-app/src/components/StepContainer.tsx')

diff --git a/continuedev/src/continuedev/libs/llm/openai.py b/continuedev/src/continuedev/libs/llm/openai.py
index aa12d70a..7621111f 100644
--- a/continuedev/src/continuedev/libs/llm/openai.py
+++ b/continuedev/src/continuedev/libs/llm/openai.py
@@ -70,7 +70,7 @@ class OpenAI(LLM):
                 messages=compile_chat_messages(
                     args["model"], with_history, prompt, with_functions=False),
                 **args,
-            )).choices[0].message
+            )).choices[0].message.content
         else:
             resp = (await openai.Completion.acreate(
                 prompt=prompt,
diff --git a/continuedev/src/continuedev/steps/chat.py b/continuedev/src/continuedev/steps/chat.py
index 76fead9d..a940c3ba 100644
--- a/continuedev/src/continuedev/steps/chat.py
+++ b/continuedev/src/continuedev/steps/chat.py
@@ -105,7 +105,7 @@ class ViewDirectoryTreeStep(Step):
 
 class EditFileStep(Step):
     name: str = "Edit File"
-    description: str = "Edit a file in the workspace."
+    description: str = "Edit a file in the workspace that is not currently open."
     filename: str
     instructions: str
     hide: bool = True
@@ -136,7 +136,7 @@ class ChatWithFunctions(Step):
 
         self.chat_context.append(ChatMessage(
             role="user",
-            content=self.user_input,
+            content=self.user_input + "\n**DO NOT EVER call the 'python' function.**",
             summary=self.user_input
         ))
 
@@ -182,6 +182,15 @@ class ChatWithFunctions(Step):
             else:
                 if func_name == "python" and "python" not in step_name_step_class_map:
                     # GPT must be fine-tuned to believe this exists, but it doesn't always
+                    self.chat_context.append(ChatMessage(
+                        role="assistant",
+                        content=None,
+                        function_call=FunctionCall(
+                            name=func_name,
+                            arguments=func_args
+                        ),
+                        summary=f"Ran function {func_name}"
+                    ))
                     self.chat_context.append(ChatMessage(
                         role="user",
                         content="The 'python' function does not exist. Don't call it.",
diff --git a/continuedev/src/continuedev/steps/core/core.py b/continuedev/src/continuedev/steps/core/core.py
index 7ccf82cb..f146c94a 100644
--- a/continuedev/src/continuedev/steps/core/core.py
+++ b/continuedev/src/continuedev/steps/core/core.py
@@ -213,7 +213,8 @@ class DefaultModelEditCodeStep(Step):
 
             if model_to_use.name == "gpt-4":
 
-                total_tokens = model_to_use.count_tokens(full_file_contents + self._prompt)
+                total_tokens = model_to_use.count_tokens(
+                    full_file_contents + self._prompt)
                 cur_start_line, cur_end_line = cut_context(
                     model_to_use, total_tokens, cur_start_line, cur_end_line)
 
diff --git a/continuedev/src/continuedev/steps/main.py b/continuedev/src/continuedev/steps/main.py
index bb48dce9..5caac180 100644
--- a/continuedev/src/continuedev/steps/main.py
+++ b/continuedev/src/continuedev/steps/main.py
@@ -1,7 +1,7 @@
 import os
 from typing import Coroutine, List, Union
 
-from pydantic import BaseModel
+from pydantic import BaseModel, Field
 
 from ..libs.llm import LLM
 from ..models.main import Traceback, Range
@@ -246,7 +246,8 @@ class StarCoderEditHighlightedCodeStep(Step):
 
 
 class EditHighlightedCodeStep(Step):
-    user_input: str
+    user_input: str = Field(
+        ..., title="User Input", description="The natural language request describing how to edit the code")
     hide = True
     description: str = "Change the contents of the currently highlighted code or open file"
 
diff --git a/extension/react-app/src/components/HeaderButtonWithText.tsx b/extension/react-app/src/components/HeaderButtonWithText.tsx
index acaca9ce..5901c5d8 100644
--- a/extension/react-app/src/components/HeaderButtonWithText.tsx
+++ b/extension/react-app/src/components/HeaderButtonWithText.tsx
@@ -6,12 +6,14 @@ interface HeaderButtonWithTextProps {
   text: string;
   onClick?: (e: any) => void;
   children: React.ReactNode;
+  disabled?: boolean;
 }
 
 const HeaderButtonWithText = (props: HeaderButtonWithTextProps) => {
   const [hover, setHover] = useState(false);
   return (
     <HeaderButton
+      disabled={props.disabled}
       style={{ padding: "1px", paddingLeft: hover ? "4px" : "1px" }}
       onMouseEnter={() => setHover(true)}
       onMouseLeave={() => {
diff --git a/extension/react-app/src/components/StepContainer.tsx b/extension/react-app/src/components/StepContainer.tsx
index 74a1c4e8..827d2d5f 100644
--- a/extension/react-app/src/components/StepContainer.tsx
+++ b/extension/react-app/src/components/StepContainer.tsx
@@ -200,6 +200,7 @@ function StepContainer(props: StepContainerProps) {
 
             <>
               <HeaderButtonWithText
+                disabled={props.historyNode.active as boolean}
                 onClick={(e) => {
                   e.stopPropagation();
                   props.onDelete();
-- 
cgit v1.2.3-70-g09d2

