|
name: "Planner/Jarvis" |
|
description: "Generates plan with interactions with the user, used for the coder class" |
|
|
|
_target_: Tachi67.JarvisFlowModule.Planner_JarvisFlow.instantiate_from_default_config |
|
|
|
input_interface: |
|
- "goal" |
|
- "memory_files" |
|
|
|
output_interface: |
|
- "plan" |
|
- "status" |
|
- "summary" |
|
|
|
|
|
subflows_config: |
|
Controller: |
|
_target_: Tachi67.PlanWriterFlowModule.PlanWriterCtrlFlow.instantiate_from_default_config |
|
backend: |
|
api_infos: ??? |
|
model_name: |
|
openai: gpt-4 |
|
azure: azure/gpt-4 |
|
|
|
Executor: |
|
_target_: flows.base_flows.BranchingFlow.instantiate_from_default_config |
|
subflows_config: |
|
write_plan: |
|
subflows_config: |
|
PlanGenerator: |
|
backend: |
|
api_infos: ??? |
|
model_name: |
|
openai: gpt-4 |
|
azure: azure/gpt-4 |
|
system_message_prompt_template: |
|
_target_: flows.prompt_template.JinjaPrompt |
|
template: |2- |
|
You are the planner for Jarvis, an intelligent agent able to achieve goals by writing and running code, you write step-by-step plans for Jarvis to follow and execute. |
|
|
|
Jarvis is capable of: |
|
1. Generating and running code, given a goal. |
|
2. Giving a final answer to the user when the goal is achieved, it is also possible that Jarvis is able to give a final answer without writing and running code. |
|
|
|
**Your task is: given a goal to achieve, decompose the goal into step-by-step plans for Jarvis, each step of your plan should ONLY involve one of the following: |
|
1. Write and run code with a given goal generated by you, the goal should be a sub-goal of the current goal, it should be nicely separated from other-subgoals. |
|
2. Give a final answer.** |
|
|
|
Here are some criteria you should consider in order to write a good plan: |
|
1. The plan should be nicely separated into steps, each step should involve either writing & running code, or giving a final answer. |
|
2. Decompose the goal into sub-goals, each sub-goal should be nicely separated from other sub-goals, all the sub-goals should be logically linked in order to process each sub-goal to achieve the final goal. |
|
|
|
Performance Evaluation: |
|
1. Your plan must be as explicit, well-indented, and human-readable as possible. |
|
2. Your plan must be step-by-step with number indexes, each step involves either writing & running code or giving a final answer. |
|
3. You should make plans with as few steps as possible. |
|
|
|
|
|
**Here is an example of a good plan:** |
|
Goal: Send an email with the data of the weather in Paris of 19. Dec. 2021 to my friend. |
|
Plan: |
|
1. Write and run code to get the data of the weather in Paris of 19. Dec. 2021. |
|
2. Write and run code to send an email with the data of the weather in Paris of 19. Dec. 2021 to my friend. |
|
3. Give a final answer to the user. |
|
|
|
**It's important that you should only respond in JSON format as described below:** |
|
Response Format: |
|
{ |
|
"plan": "A well indented string, containing a step-by-step plan to finish the given goal", |
|
} |
|
Ensure your responses can be parsed by Python json.loads |
|
**Make sure that the plan you generate is a well-indented human readable string, with numbered indexes for each step.** |
|
|
|
PlanFileEditor: |
|
_target_: Tachi67.PlanFileEditFlowModule.PlanFileEditAtomicFlow.instantiate_from_default_config |
|
|
|
ParseFeedback: |
|
_target_: Tachi67.ParseFeedbackFlowModule.ParseFeedbackAtomicFlow.instantiate_from_default_config |
|
input_interface: |
|
- "temp_plan_file_location" |
|
output_interface: |
|
- "plan" |
|
- "feedback" |
|
|
|
ask_user: |
|
_target_: Tachi67.PlanWriterFlowModule.PlanWriterAskUserFlow.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_: flows.interfaces.KeyInterface |
|
additional_transformations: |
|
- _target_: flows.data_transformations.KeyMatchInput |
|
flow: Controller |
|
output_interface: |
|
_target_: Planner_JarvisFlow.detect_finish_or_continue |
|
reset: false |
|
|
|
- goal: "Execute the action specified by the Controller." |
|
input_interface: |
|
_target_: flows.interfaces.KeyInterface |
|
keys_to_rename: |
|
command: branch |
|
command_args: branch_input_data |
|
keys_to_select: ["branch", "branch_input_data"] |
|
flow: Executor |
|
output_interface: |
|
_target_: flows.interfaces.KeyInterface |
|
keys_to_rename: |
|
branch_output_data: observation |
|
keys_to_unpack: ["observation"] |
|
reset: false |