| # 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. |
| |
| |
| |
| |
| <a id="run_codewriter"></a> |
| |
| # run\_codewriter |
|
|
| <a id="CodeWriterCtrlFlow"></a> |
|
|
| # CodeWriterCtrlFlow |
|
|
| <a id="CodeWriterCtrlFlow.CodeWriterCtrlFlow"></a> |
|
|
| ## 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` |
|
|
| *Configuration 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. |
|
|
| <a id="CodeWriterAskUserFlow"></a> |
|
|
| # CodeWriterAskUserFlow |
|
|
| <a id="CodeWriterAskUserFlow.CodeWriterAskUserFlow"></a> |
|
|
| ## 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. |
| |
| *Input Interface*: |
| - `question`: The question asked by the controller |
| |
| |
| *Expected Behaviour*: |
| - The question is displayed, and the user gives feedback by inputing string. |
|
|
| |
| *Output Interface*: |
| - `feedback`: The input of the user. |
| - `code`: No code was written. |
|
|
| *Configuration Parameters*: |
| - `query_message_prompt_template`: The template of the message that is displayed to the user. |
| - `request_multi_line_input`: Whether the user should be able to input multiple lines. Default: False. |
| - `end_of_input_string`: The string that the user can input to indicate that he/she is done with the input. Default: EOI |
|
|
| <a id="CodeWriterAskUserFlow.CodeWriterAskUserFlow.run"></a> |
|
|
| #### 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. |
|
|
| <a id="CodeWriterFlow"></a> |
|
|
| # CodeWriterFlow |
|
|
| <a id="CodeWriterFlow.CodeWriterFlow"></a> |
|
|
| ## 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. |
|
|
| <a id="CodeWriterFlow.CodeWriterFlow.detect_finish_or_continue"></a> |
|
|
| #### 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 |
|
|
| <a id="CodeWriterFlow.CodeWriterFlow.run"></a> |
|
|
| #### 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 |
|
|
| <a id="__init__"></a> |
|
|
| # \_\_init\_\_ |
|
|
|
|