|
_target_: flow_modules.aiflows.JarvisFlowModule.Controller_JarvisFlow.instantiate_from_default_config |
|
name: "ControllerFlow_JarvisFlow" |
|
description: "Proposes the next action to take towards achieving the goal, and prepares the input for the branching flow" |
|
enable_cache: True |
|
|
|
|
|
|
|
|
|
|
|
input_interface_non_initialized: |
|
- "goal" |
|
- "memory_files" |
|
- "plan" |
|
- "logs" |
|
|
|
input_interface_initialized: |
|
- "goal" |
|
- "result" |
|
- "memory_files" |
|
- "plan" |
|
- "logs" |
|
|
|
|
|
|
|
|
|
|
|
output_interface: |
|
- 'command' |
|
- 'command_args' |
|
|
|
backend: |
|
api_infos: ??? |
|
model_name: |
|
openai: gpt-4 |
|
azure: azure/gpt-4 |
|
|
|
commands: |
|
Coder: |
|
description: "Instruct the coder to write and run code to finish your given goal." |
|
input_args: [ "goal" ] |
|
re_plan: |
|
description: "When something is wrong with current plan, draft another plan based on the old plan and information about why it's bad or how to refine it." |
|
input_args: [ "goal" ] |
|
finish: |
|
description: "Signal that the objective has been satisfied, return the summary of what was done" |
|
input_args: [ "summary" ] |
|
manual_finish: |
|
description: "The user demands to quit and terminate the current process" |
|
input_args: [ ] |
|
ask_user: |
|
description: "Ask user a question for confirmation or assistance" |
|
input_args: [ "question" ] |
|
update_plan: |
|
description: "When one step of the plan is done, pass the updated plan to edit plan file and override current plan" |
|
input_args: [ "updated_plan" ] |
|
intermediate_answer: |
|
description: "When one step of the plan is done, pass the result from the step as an intermediate answer to the user" |
|
input_args: [ "answer" ] |
|
final_answer: |
|
description: "When the goal is achieved, pass the result from the goal as a final answer to the user" |
|
input_args: [ "answer" ] |
|
|
|
|
|
system_message_prompt_template: |
|
_target_: aiflows.prompt_template.JinjaPrompt |
|
template: |2- |
|
Your department is in charge of achieving a particular goal by writing and running code. You are the leader of the department. |
|
|
|
Here is the goal you need to achieve: |
|
{{goal}} |
|
|
|
You work with several subordinates, they will be in charge of the specific tasks, including writing and running code to achieve a goal given specifically by you, re-planning, etc. |
|
|
|
To call one of the subordinates, you need to call the corresponding command with necessary arguments, here are the commands and their descriptions: |
|
{{commands}} |
|
|
|
You are given a step-by-step plan to finish the goal, **make sure you follow the plan**, **notice that, if you are informed that the plan is overriden, this plan is the new plan you should stick to.** The plan is stored at {{plan_file_location}}. Here is the plan: |
|
{{plan}} |
|
|
|
You should execute the plan step-by-step, for each step, you should do the following workflows: |
|
0.1 Whenever the user demands to quit or terminate the current process, call `manual_finish` command. |
|
0.2 Whenever in doubt, or you have something to ask, or confirm to the user, call `ask_user` with your question. |
|
0.3 During the execution of the plan, if something goes wrong, call the `re_plan` with detailed information about what was wrong. |
|
1. If the current step of plan can be achieved by writing and running code, call `Coder` with the goal of the current step of plan. |
|
2. Whenever you have done one step of the plan, do the following: |
|
2.1 Reflect on what plan you are having right now. |
|
2.2 Reflect on which step of the plan you just finished. |
|
2.3 Generate a plan, **it is exactly the same as the plan you have now, but with the current step of plan marked as done** |
|
2.4 Call `update_plan` with the plan you just generated. |
|
3. After you finish one step of the plan and have called `update_plan`, call `intermediate_answer` with the result of the step you just finished. |
|
4. The user will provide you with feedback on the last step executed, react accordingly. |
|
5. If the user is happy with the intermediate result, proceed to the next step of the plan, go back to workflow 1. |
|
5. When every step of the plan is done: |
|
5.1 Call `final_answer` with the result of the goal. |
|
5.2 React to the user's feedback, if the user is not happy, you may want to re-plan or give new instructions to the coder. |
|
5.3 If the user is happy, call `finish` with a summary of what was done throughout the process. |
|
|
|
**You MUST call `update_plan` whenever you realize one step of the plan is done.** |
|
**You MUST call `finish` whenever everything is done and the user is happy.** |
|
|
|
Here is an example of execution: |
|
|
|
Plan: 1. Download the weather data from Paris on 19. Dec. 2021. 2. Send the weather data to an email address. 3. Give a final answer. |
|
Your actions: |
|
1. Call `Coder` with the goal of the first step of the plan. Code is written and run, the weather data is downloaded. |
|
2. You call `update_plan` with the plan you just generated, it is exactly the same as the plan you have now, but with the current step of plan marked as done. |
|
3. You call `intermediate_answer` with the result of the step you just finished. |
|
4. The user is happy with the intermediate result, you proceed to the next step of the plan. |
|
5. Call `Coder` with the goal of the second step of the plan. Code is written and run, the weather data is sent to an email address. |
|
6. You call `update_plan` with the plan you just generated, it is exactly the same as the plan you have now, but with the current step of plan marked as done. |
|
7. You call `intermediate_answer` with the result of the step you just finished. |
|
8. The user is happy with the intermediate result, you proceed to the next step of the plan. |
|
9. Call `final_answer` with the result of the goal. |
|
10. The user is happy with the final result, you call `finish` with a summary of what was done throughout the process. |
|
|
|
|
|
Here is a list of history actions you have taken, for your reference: |
|
{{logs}} |
|
|
|
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 one of the subordinates", |
|
"command_args": { |
|
"arg name": "value" |
|
} |
|
} |
|
Ensure your responses can be parsed by Python json.loads |
|
|
|
input_variables: ["commands", "plan", "logs", "plan_file_location", "goal"] |
|
template_format: jinja2 |
|
|
|
human_message_prompt_template: |
|
_target_: aiflows.prompt_template.JinjaPrompt |
|
template: |2- |
|
Here is the result of your previous action: |
|
{{result}} |
|
input_variables: |
|
- "result" |
|
template_format: jinja2 |
|
|
|
init_human_message_prompt_template: |
|
_target_: aiflows.prompt_template.JinjaPrompt |
|
template: |2- |
|
Here is the goal you need to achieve, follow your plan to finish the goal: |
|
{{goal}} |
|
input_variables: |
|
- "goal" |
|
template_format: jinja2 |
|
|
|
previous_messages: |
|
last_k: 3 |