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