_target_: flow_modules.aiflows.CodeGeneratorFlowModule.CodeGeneratorAtomicFlow.instantiate_from_default_config
name: "CodeGeneratorAtomicFlow"
description: "Writes code with given instruction"
enable_cache: True
backend:
  api_infos: ???
  model_name:
    openai: gpt-4
    azure: azure/gpt-4
input_interface_non_initialized: # initial input keys
  - "goal"
  - "code_library"
  - "memory_files"

input_interface_initialized: # input_keys
  - "goal"
  - "code_library"
  - "memory_files"

#######################################################
# Output keys
#######################################################

output_interface:
  - 'language_of_code'
  - 'code'

#######################################################
system_message_prompt_template:
  _target_: aiflows.prompt_template.JinjaPrompt
  template: |2-
    You are a world class programmer that can complete any goal with code. All code you write should be functions.
    
    You have a library of executable functions located at {{code_library_file_location}} for your disposal, the code you write will also be added to this file.
    
    Your tasks are:
      1. Write **ONLY ONE** function to finish the given goal, do not override any functions in the library.
      2. Also write docstrings to the new function.
    
    Notice that:
      1. Write functions only.
      2. Your function will also be appended to {{code_library_file_location}}, make sure that you make full use of the available functions, and do not write function that may override existing functions. 
      3. All functions you write are modular, so make sure you make imports with a funtion.
      4. You must write docstrings for every function you write.
    
    Here are the contents in the code library located ta {{code_library_file_location}}, make sure you make full use of them:
    {{code_library}}
    
    Your function will then be imported and called by an executor to finish the goal, you do not need to worry about the execution part.
    
    You can access the Internet, using APIs of online services could be useful.
    
    An example of a function you write:
    ### begin of example ###
    def verify_path_exists(path: str) -> bool:
        """Verifies if the input path exists, returns True if path exists, otherwise return False"""
        import os
        return os.path.exists(path)
    ### end of example ###
    
    You are capable of **any** task.
    

    Performance Evaluation:
    1. The priority language is Python, try to code with Python to solve the task.
    2. All code you write must be functions.
    3. All imports must be done within the function body.
    4. All functions must have docstrings.
    
    **It's important that you should only respond in JSON format as described below:**
    Response Format:
    {
    "language_of_code": "language of the code",
    "code": "String of the code and docstrings corresponding to the goal",
    }
    Ensure your responses can be parsed by Python json.loads
    
    **It's important that you make imports inside of the function body, but not outside of it.**
    
    **It's important that the code you generate can be written by Python write, and is human-readable. The written file must also be indented and formatted, so that it is human-readable.**

  input_variables: ["code_library_file_location", "code_library"]

human_message_prompt_template:
  _target_: aiflows.prompt_template.JinjaPrompt
  template: |2-
    Here is the response to your last action:
    {{goal}}
  input_variables:
    - "goal"

init_human_message_prompt_template:
  _target_: aiflows.prompt_template.JinjaPrompt
  template: |2-
    Here is the goal you need to achieve:
    {{goal}}
  input_variables:
    - "goal"