summaryrefslogtreecommitdiff
path: root/continuedev/src/continuedev/steps/react.py
diff options
context:
space:
mode:
Diffstat (limited to 'continuedev/src/continuedev/steps/react.py')
-rw-r--r--continuedev/src/continuedev/steps/react.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/continuedev/src/continuedev/steps/react.py b/continuedev/src/continuedev/steps/react.py
new file mode 100644
index 00000000..d825d424
--- /dev/null
+++ b/continuedev/src/continuedev/steps/react.py
@@ -0,0 +1,39 @@
+from textwrap import dedent
+from typing import List, Union, Tuple
+from ..core.main import Step
+from ..core.sdk import ContinueSDK
+from .core.core import MessageStep
+
+
+class NLDecisionStep(Step):
+ user_input: str
+ default_step: Union[Step, None] = None
+ steps: List[Tuple[Step, str]]
+
+ hide: bool = True
+
+ async def run(self, sdk: ContinueSDK):
+ step_descriptions = "\n".join([
+ f"- {step[0].name}: {step[1]}"
+ for step in self.steps
+ ])
+ prompt = dedent(f"""\
+ The following steps are available, in the format "- [step name]: [step description]":
+ {step_descriptions}
+
+ The user gave the following input:
+
+ {self.user_input}
+
+ Select the step which should be taken next to satisfy the user input. Say only the name of the selected step. You must choose one:""")
+
+ resp = sdk.models.gpt35.complete(prompt).lower()
+
+ step_to_run = None
+ for step in self.steps:
+ if step[0].name.lower() in resp:
+ step_to_run = step[0]
+
+ step_to_run = step_to_run or self.default_step or self.steps[0]
+
+ await sdk.run_step(step_to_run)