ReplanningFlowModule / ReplanningFlow.yaml
Tachi67's picture
Update ReplanningFlow.yaml
c33a68a
name: "ReplanningFlow"
description: "Re-plan given old plan and new information"
_target_: Tachi67.ReplanningFlowModule.ReplanningFlow.instantiate_from_default_config
input_interface:
- "goal" # info on the old plan
- "plan" # the old plan
- "plan_file_location"
output_interface:
- "plan"
- "status"
- "summary"
- "result"
### Subflows specification
subflows_config:
Controller:
_target_: Tachi67.PlanWriterFlowModule.PlanWriterCtrlFlow.instantiate_from_default_config
backend:
api_infos: ???
model_name:
openai: gpt-4
azure: azure/gpt-4
input_interface_initialized:
- "new_plan"
- "feedback"
system_message_prompt_template:
_target_: langchain.PromptTemplate
template: |2-
You are in charge of a department of rewriting plans to solve a certain goal. You work with a re-planner, who does all the re-planning job.
You are not given the old plan, the planner is aware of the old plan, you do not need to care about the details of it.
Your **ONLY** task is to take the user's information about the old plan for you, to decide whether to call the re-planner to write or refine the plan, or to finish the current task.
When you need to call the plan writer, call the `write_plan` command with the goal specified.
When the plan is written and the user is satisfied, call the `finish` command to terminate the current process with a summary of what was done in one sentence.
Whenever you are in doubt, or need to confirm something to the user, call `ask_user` with the question.
You **must not** write plans yourself. You only decide whether to call the planner with specified goals or to finish.
Your workflow:
0. Whenever the user demands to quit or terminate the current process, call `manual_finish` command.
1. Upon user request, call the `write_plan` with the information given.
2. The planner will write the plan. The user will examine the plan, and provide feedback.
3. Depending on the feedback of the user:
3.1. The user provides feedback on how to change the plan, **call the planner with user's specific requirements again, to ask the planner to refine the plan**. Go back to step 2.
3.2. The user does not provide details about refining the plan, for example, just stating the fact that the user has updated the plan, **this means the user is satisfied with the plan written, call the `finish` command.**
3.3. The user is satisfied with the plan, **call the `finish` command with a summary of what was done**
If you have completed all your tasks, make sure to use the "finish" command, with a summary of what was done.
Constraints:
1. Exclusively use the commands listed in double quotes e.g. "command name"
Your response **MUST** be in the following format:
Response Format:
{
"command": "call plan writer, or to finish",
"command_args": {
"arg name": "value"
}
}
Ensure your responses can be parsed by Python json.loads
Available Functions:
{{commands}}
input_variables: [ "commands" ]
template_format: jinja2
human_message_prompt_template:
_target_: aiflows.prompt_template.JinjaPrompt
template: |2-
Here is the new plan written by the planner, it might have been updated by the user, depending on the user's feedback:
{{new_plan}}
Here is the feedback from the user:
{{feedback}}
input_variables:
- "new_plan"
- "feedback"
template_format: jinja2
init_human_message_prompt_template:
_target_: aiflows.prompt_template.JinjaPrompt
template: |2-
Here is the information about the old plan:
{{goal}}
input_variables:
- "goal"
template_format: jinja2
Executor:
_target_: aiflows.base_flows.BranchingFlow.instantiate_from_default_config
subflows_config:
write_plan:
_target_: Tachi67.InteractivePlanGenFlowModule.InteractivePlanGenFlow.instantiate_from_default_config
output_interface:
- "new_plan"
- "feedback"
- "temp_plan_file_location"
subflows_config:
PlanGenerator:
_target_: Tachi67.ReplanningFlowModule.NewPlanGenFlow.instantiate_from_default_config
backend:
api_infos: ???
model_name:
openai: gpt-4
azure: azure/gpt-4
PlanFileEditor:
_target_: Tachi67.PlanFileEditFlowModule.PlanFileEditAtomicFlow.instantiate_from_default_config
input_interface:
- "new_plan"
- "plan_file_location"
ParseFeedback:
_target_: Tachi67.ParseFeedbackFlowModule.ParseFeedbackAtomicFlow.instantiate_from_default_config
input_interface:
- "temp_plan_file_location"
output_interface:
- "new_plan"
- "feedback"
topology:
- goal: "Generate plan to achieve the task."
input_interface:
_target_: aiflows.interfaces.KeyInterface
additional_transformations:
- _target_: aiflows.data_transformations.KeyMatchInput
flow: PlanGenerator
reset: false
- goal: "Write the plan generated to a temp file with instructions to the user"
input_interface:
_target_: aiflows.interfaces.KeyInterface
additional_transformations:
- _target_: aiflows.data_transformations.KeyMatchInput
flow: PlanFileEditor
reset: false
- goal: "Parse user feedback from the temp file"
input_interface:
_target_: aiflows.interfaces.KeyInterface
additional_transformations:
- _target_: aiflows.data_transformations.KeyMatchInput
flow: ParseFeedback
output_interface:
_target_: aiflows.interfaces.KeyInterface
keys_to_rename:
plan: new_plan
reset: false
ask_user:
_target_: Tachi67.ReplanningFlowModule.ReplanningAskUserFlow.instantiate_from_default_config
early_exit_key: "EARLY_EXIT"
topology:
- goal: "Select the next action and prepare the input for the executor."
input_interface:
_target_: aiflows.interfaces.KeyInterface
additional_transformations:
- _target_: aiflows.data_transformations.KeyMatchInput
flow: Controller
output_interface:
_target_: ReplanningFlow.detect_finish_or_continue
reset: false
- goal: "Execute the action specified by the Controller."
input_interface:
_target_: aiflows.interfaces.KeyInterface
keys_to_rename:
command: branch
command_args: branch_input_data
keys_to_select: ["branch", "branch_input_data"]
flow: Executor
output_interface:
_target_: aiflows.interfaces.KeyInterface
keys_to_rename:
branch_output_data.new_plan: new_plan
branch_output_data.feedback: feedback
branch_output_data.temp_plan_file_location: temp_plan_file_location
keys_to_delete: ["branch_output_data"]
reset: false