diff options
Diffstat (limited to 'server/continuedev/plugins/steps/input/nl_multiselect.py')
-rw-r--r-- | server/continuedev/plugins/steps/input/nl_multiselect.py | 32 |
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] |