# Customizing Examples There are two types of examples: (1) planning examples and (2) code interpreter examples. Planning examples are used to demonstrate how to use TaskWeaver to plan for a specific task. Code generation examples are used to demonstrate how to generate code or orchestrate plugins to perform a specific task. ## Planning Examples A planning example tells LLMs how to plan for a specific query from the user; talk to the code interpreter; receive the execution result from the code interpreter; and summarize the execution result. Before constructing the planning example, we strongly encourage you to go through the [planner prompt](https://github.com/microsoft/TaskWeaver/blob/main/taskweaver/planner/planner_prompt.yaml). The following is an example of a planning example which contains 4 posts. Each post contains a message, a sender, a receiver, and a list of attachments. 1. The first post is sent from the user to the planner. The message is "count the rows of /home/data.csv", which is the same as the user query. 2. The second post is sent from the planner to the code interpreter. The message is "Please load the data file /home/data.csv and count the rows of the loaded data". The attachment list contains 3 attachments: 1. The first attachment is the initial plan, which is a markdown string. 2. The second attachment is the plan, which is a markdown string. 3. The third attachment is the current plan step, which is a markdown string. 3. The third post is sent from the code interpreter to the planner. The message is "Load the data file /home/data.csv successfully and there are 100 rows in the data file". 4. The fourth post is sent from the planner to the user. The message is "The data file /home/data.csv is loaded and there are 100 rows in the data file". The attachment list contains 3 attachments: 1. The first attachment is the initial plan, which is the same as the second attachment of the second post. 2. The second attachment is the plan, which is the same as the third attachment of the second post. 3. The third attachment is the current plan step, which is a markdown string. ```yaml enabled: True rounds: - user_query: count the rows of /home/data.csv state: created post_list: - message: count the rows of /home/data.csv send_from: User send_to: Planner attachment_list: - message: Please load the data file /home/data.csv and count the rows of the loaded data send_from: Planner send_to: CodeInterpreter attachment_list: - type: init_plan content: |- 1. load the data file 2. count the rows of the loaded data 3. report the result to the user - type: plan content: |- 1. instruct CodeInterpreter to load the data file and count the rows of the loaded data 2. report the result to the user - type: current_plan_step content: 1. instruct CodeInterpreter to load the data file and count the rows of the loaded data - message: Load the data file /home/data.csv successfully and there are 100 rows in the data file send_from: CodeInterpreter send_to: Planner attachment_list: - message: The data file /home/data.csv is loaded and there are 100 rows in the data file send_from: Planner send_to: User attachment_list: - type: init_plan content: |- 1. load the data file 2. count the rows of the loaded data 3. report the result to the user - type: plan content: |- 1. instruct CodeInterpreter to load the data file and count the rows of the loaded data 2. report the result to the user - type: current_plan_step content: 2. report the result to the user ``` ## Code Interpreter Examples A code interpreter example tells LLMs how to generate code or orchestrate plugins to perform a specific task. The task is from the planner. Before constructing the code interpreter example, we strongly encourage you to read the [code generator prompt](https://github.com/microsoft/TaskWeaver/blob/main/taskweaver/code_interpreter/code_generator/code_generator_prompt.yaml). The following is an example of a code interpreter example which contains 2 posts. Each post contains a message, a sender, a receiver, and a list of attachments. 1. The first post is sent from the planner to the code interpreter. The message is "Please read file /abc/def.txt". 2. The second post is sent from the code interpreter to the planner. The message is "read file /abc/def.txt". The attachment list contains 6 attachments: 1. The first attachment is the thought of the code interpreter, which is a markdown string. 2. The second attachment is the generated code, which is in python. 3. The third attachment is the verification status, which is CORRECT, INCORRECT, or NONE. 4. The fourth attachment is the verification error message, which is a markdown string. 5. The fifth attachment is the execution status, which is SUCCESS, FAILURE, or NONE. 6. The sixth attachment is the execution result, which is a markdown string. ```yaml enabled: True rounds: - user_query: read file /abc/def.txt state: finished post_list: - message: read file /abc/def.txt send_from: Planner send_to: CodeInterpreter attachment_list: [] - message: I'm sorry, I cannot find the file /abc/def.txt. An FileNotFoundException has been raised. send_from: CodeInterpreter send_to: Planner attachment_list: - type: thought content: "{ROLE_NAME} will generate a code snippet to read the file /abc/def.txt and present the content to the user." - type: python content: |- file_path = "/abc/def.txt" with open(file_path, "r") as file: file_contents = file.read() print(file_contents) - type: verification content: CORRECT - type: code_error content: No code error. - type: execution_status content: FAILURE - type: execution_result content: FileNotFoundException, the file /abc/def.txt does not exist. ``` In this example, `verification` is about whether the generated code is correct or not. We implemented a module to verify the generated code. If the code is syntactically incorrect, or the code violates the constraints, the verification status will be `INCORRECT` and some error messages will be returned. A verification of NONE means that the code has not been verified, which means verification has been turned off. In this example, `execution_status` is about whether the generated code can be executed successfully or not. If the execution is successful, the execution status will be `SUCCESS` and the execution result will be returned. Otherwise, the execution status will be `FAILURE` and some error messages will be returned. A execution_status of `NONE` means that the code has not been executed.