summaryrefslogtreecommitdiff
path: root/server/continuedev/plugins/steps/react.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/continuedev/plugins/steps/react.py')
-rw-r--r--server/continuedev/plugins/steps/react.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/server/continuedev/plugins/steps/react.py b/server/continuedev/plugins/steps/react.py
new file mode 100644
index 00000000..1b9bc265
--- /dev/null
+++ b/server/continuedev/plugins/steps/react.py
@@ -0,0 +1,44 @@
+from textwrap import dedent
+from typing import List, Tuple, Union
+
+from ...core.main import Step
+from ...core.sdk import ContinueSDK
+
+
+class NLDecisionStep(Step):
+ user_input: str
+ default_step: Union[Step, None] = None
+ steps: List[Tuple[Step, str]]
+
+ hide: bool = False
+ name: str = "Deciding what to do next"
+
+ 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 = (await sdk.models.summarize.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]
+
+ self.hide = True
+ await sdk.update_ui()
+
+ await sdk.run_step(step_to_run)