Tachi67's picture
Update README.md
9785d29 verified

Table of Contents

Structure of PlanWriterFlow

               goal
                |
                v
        +---------------+
        |  Controller   | --------<<<<-----------+
        +---------------+                        |
                |                                |
                | (command, command args)        |
                |                                |
                v                                |
        +------------------+                     |
        |   Executor       |  Each branch is an  |
        | (Tree Structure) |  executor           |
        +------------------+                     |
                |                                ^
                | (summary)                      |
                |                                |
                v                                |             
                |                                |
                +-> goes back to the Controller>-+

Structure of the Executors:

         +-------------------+
         |   Branching       |
         |    Executor       |
         +-------------------+
        /                    \
       /                      \
      /                        \
     /                          \
write_plan                    ask_user

About the branches:

  • ask_user: Ask user for info / confirmation, etc.
  • write_plan: Generates plan (user edit is allowed) and fetches user feedback.

How it works: Controller calls write_plan until user is satisfied in the feedback, finish.

run_planwriter

PlanWriterAskUserFlow

PlanWriterAskUserFlow Objects

class PlanWriterAskUserFlow(HumanStandardInputFlow)

Refer to: https://huggingface.co/aiflows/ExtendLibraryFlowModule/blob/main/ExtLibAskUserFlow.py This flow is used to ask the user a question and get a response.

Input Interface:

  • question

Output Interface:

  • feedback
  • plan

Configuration Parameters:

  • query_message_prompt_template: The message template to prompt the user for input.
  • request_multi_line_input_flag: Whether to request multi-line input from the user.
  • end_of_input_string: The string to enter to indicate the end of input.

run

def run(input_data: Dict[str, Any]) -> Dict[str, Any]

Run the flow module.

Arguments:

  • input_data (Dict[str, Any]): The input data to the flow module.

Returns:

Dict[str, Any]: The output data from the flow module.

PlanWriterFlow

PlanWriterFlow Objects

class PlanWriterFlow(ContentWriterFlow)

This flow inherits from ContentWriterFlow. In the subflow of the executor, we specify the InteractivePlanGenFlow (https://huggingface.co/aiflows/InteractivePlanGenFlowModule)

Input Interface:

  • goal

Output Interface:

  • plan
  • result
  • summary
  • status

Configuration Parameters:

  • Also refer to superclass ContentWriterFlow (https://huggingface.co/aiflows/ContentWriterFlowModule)
  • input_interface: the input interface of the flow
  • output_interface: the output interface of the flow
  • subflows_config: the configuration of the subflows
  • early_exit_key: the key in the flow state that indicates the early exit condition
  • topology: the topology of the flow

detect_finish_or_continue

@CircularFlow.output_msg_payload_processor
def detect_finish_or_continue(output_payload: Dict[str, Any],
                              src_flow) -> Dict[str, Any]

This function is called when the subflow finishes running.

configured in the topology of the subflow config.

Arguments:

  • output_payload (Dict[str, Any]): the output payload of the subflow
  • src_flow (Flow): the subflow that generates the output payload

Returns:

Dict[str, Any]: the processed output payload

run

def run(input_data: Dict[str, Any]) -> Dict[str, Any]

This function runs the flow.

Arguments:

  • input_data (Dict[str, Any]): the input data of the flow

Returns:

Dict[str, Any]: the output data of the flow

__init__

PlanWriterCtrlFlow

PlanWriterCtrlFlow Objects

class PlanWriterCtrlFlow(ChatAtomicFlow)

Refer to: https://huggingface.co/aiflows/JarvisFlowModule/blob/main/Controller_JarvisFlow.py This flow is a controller flow that controls the PlanWriterFlow.

Input Interface Non Initialized:

  • goal: str

Input Interface Initialized:

  • feedback: str
  • goal: str
  • plan: str

Output Interface:

  • command: str
  • command_args: Dict[str, Any]

Configuration Parameters:

  • input_interface_non_initialized: List[str] = ["goal"]
  • input_interface_initialized: List[str] = ["feedback", "goal", "plan"]
  • output_interface: List[str] = ["command", "command_args"]
  • backend: Dict[str, Any] : backend of the LLM
  • commands: List[Dict[str, Any]] : commands that the LLM can execute
  • system_message_prompt_template: str : the template of the system message prompt
  • init_human_message_prompt_template: str : the template of the initial human message prompt
  • human_message_prompt_template: str : the template of the human message prompt
  • previous_messages: Dict[str, Any] : the previous messages of the conversation (sliding window)

__init__

def __init__(commands: List[Command], **kwargs)

This function initializes the flow.

Arguments:

  • commands (List[Command]): List[Command] : commands that the LLM can execute
  • kwargs (Dict[str, Any]): other parameters

instantiate_from_config

@classmethod
def instantiate_from_config(cls, config)

This function instantiates the flow from the config.

Arguments:

  • config (Dict[str, Any]): the config of the flow

Returns:

ChatAtomicFlow: the instantiated flow

run

def run(input_data: Dict[str, Any]) -> Dict[str, Any]

This function runs the flow.

Arguments:

  • input_data (Dict[str, Any]): the input data

Returns:

Dict[str, Any]: the output of the flow