# Table of Contents * [Structure of CodeWriterFlow](#structure-of-codewriterflow) * [run\_codewriter](#run_codewriter) * [CodeWriterCtrlFlow](#CodeWriterCtrlFlow) * [CodeWriterCtrlFlow](#CodeWriterCtrlFlow.CodeWriterCtrlFlow) * [CodeWriterAskUserFlow](#CodeWriterAskUserFlow) * [CodeWriterAskUserFlow](#CodeWriterAskUserFlow.CodeWriterAskUserFlow) * [run](#CodeWriterAskUserFlow.CodeWriterAskUserFlow.run) * [CodeWriterFlow](#CodeWriterFlow) * [CodeWriterFlow](#CodeWriterFlow.CodeWriterFlow) * [detect\_finish\_or\_continue](#CodeWriterFlow.CodeWriterFlow.detect_finish_or_continue) * [run](#CodeWriterFlow.CodeWriterFlow.run) * [\_\_init\_\_](#__init__) # Structure of CodeWriterFlow ``` 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_code ask_user test ``` About the branches: - [ask_user](https://huggingface.co/aiflows/CodeWriterFlowModule/blob/main/CodeWriterAskUserFlow.py): Ask user for info / confirmation, etc. - [write_code](https://huggingface.co/aiflows/InteractiveCodeGenFlowModule): Generates code (user edit is allowed) and fetches user feedback. - [test](https://huggingface.co/aiflows/TestCodeFlowModule): Test the code, user can provide test suites, if nothing is provided, syntax of the code is checked. How it works: Controller calls write_code until user is satisfied in the feedback, then controller calls test to test the code, if test passes, finish. # run\_codewriter # CodeWriterCtrlFlow ## CodeWriterCtrlFlow Objects ```python class CodeWriterCtrlFlow(ChatAtomicFlow) ``` refer to https://huggingface.co/aiflows/JarvisFlowModule/blob/main/Controller_JarvisFlow.py This class controls the execution of the CodeWriterFlow. *Input Interface Non Initialized*: - `goal` *Input Interface Initialized*: - `goal` - `code` - `feedback` *Output Interface*: - `command` - `command_args` *Config Parameters*: - `backend`: the backend used to call the LLM. - `commands`: a list of commands that the controller can use. - `system_message_prompt_template`: the template of the system message prompt. - `init_human_message_prompt_template`: the template of the init human (user) message prompt. - `human_message_prompt_template`: the template of the human (user) message prompt. - `previous_messages`: the sliding window of previous messages. # CodeWriterAskUserFlow ## CodeWriterAskUserFlow Objects ```python class CodeWriterAskUserFlow(HumanStandardInputFlow) ``` This class is used to ask for user feedback whenever the controller is unsure of something, or need confirmation, etc. *Expected Input*: - `question`: The question asked by the controller *Expected Behaviour*: - The question is displayed, and the user gives feedback by inputing string. *Expected Ouput*: - `feedback`: The input of the user. - `code`: No code was written. #### run ```python def run(input_data: Dict[str, Any]) -> Dict[str, Any] ``` Run the flow. **Arguments**: - `input_data`: The input data. **Returns**: The output data. # CodeWriterFlow ## CodeWriterFlow Objects ```python class CodeWriterFlow(ContentWriterFlow) ``` This flow inherits from ContentWriterFlow, it is used to write code in an interactive way. In the subflow of the executor, we specify an InteractiveCodeGenFlow (https://huggingface.co/aiflows/InteractiveCodeGenFlowModule) *Input Interface*: - `goal` *Output Interface*: - `code` - `result` - `summary` - `status` *Configuration Parameters*: - `name`: Name of the flow - `description`: Description of the flow - `_target_`: The instantiation target of the flow - `input_interface`: The input to the flow. Inherited from ContentWriterFlow, in this case, it is `goal`. - `output_interface`: The output of the flow. - `subflows_config`: Configurations of subflows - `early_exit_keys`: The keys that will trigger an early exit of the flow - `topology`: Configures the topology of the subflows, please have a special look at the I/O interfaces of the subflows. #### detect\_finish\_or\_continue ```python @CircularFlow.output_msg_payload_processor def detect_finish_or_continue(output_payload: Dict[str, Any], src_flow) -> Dict[str, Any] ``` This function is used to detect whether the code generation process is finished or not. It is configured in the topology of the subflows, see CodeWriterFlow.yaml for more details. **Arguments**: - `output_payload`: The output payload of the subflow - `src_flow`: The subflow that generated the output payload **Returns**: The output payload of the subflow #### run ```python def run(input_data: Dict[str, Any]) -> Dict[str, Any] ``` The run function of the flow. **Arguments**: - `input_data`: The input data of the flow **Returns**: The output data of the flow # \_\_init\_\_