summaryrefslogtreecommitdiff
path: root/server/continuedev/plugins/steps/react.py
blob: 1b9bc265a98313903512f5351e6b988a6e12f504 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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)