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)
|