summaryrefslogtreecommitdiff
path: root/server/continuedev/plugins/steps/input/nl_multiselect.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/continuedev/plugins/steps/input/nl_multiselect.py')
-rw-r--r--server/continuedev/plugins/steps/input/nl_multiselect.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/server/continuedev/plugins/steps/input/nl_multiselect.py b/server/continuedev/plugins/steps/input/nl_multiselect.py
new file mode 100644
index 00000000..f4b5e7a6
--- /dev/null
+++ b/server/continuedev/plugins/steps/input/nl_multiselect.py
@@ -0,0 +1,32 @@
+from typing import List, Union
+
+from ....core.main import Step
+from ....core.sdk import ContinueSDK
+from ....core.steps import WaitForUserInputStep
+
+
+class NLMultiselectStep(Step):
+ hide: bool = True
+
+ prompt: str
+ options: List[str]
+
+ async def run(self, sdk: ContinueSDK):
+ user_response = (
+ await sdk.run_step(WaitForUserInputStep(prompt=self.prompt))
+ ).text
+
+ def extract_option(text: str) -> Union[str, None]:
+ for option in self.options:
+ if option in text:
+ return option
+ return None
+
+ first_try = extract_option(user_response.lower())
+ if first_try is not None:
+ return first_try
+
+ gpt_parsed = await sdk.models.default.complete(
+ f"These are the available options are: [{', '.join(self.options)}]. The user requested {user_response}. This is the exact string from the options array that they selected:"
+ )
+ return extract_option(gpt_parsed) or self.options[0]