name: "CodeCollab_Flow"
description: "ToDO: add description"

reset_generator_every_round: False
reset_critic_every_round: True
max_rounds: 2 # ToDO: To increase to 4
early_exit_key: "end_of_interaction"

input_data_transformations: []
input_keys:
  - "problem_description"
  - "input_description"
  - "output_description"
  - "io_examples_and_explanation"

output_data_transformations:
  - _target_: flows.data_transformations.KeyRename
    old_key2new_key:
      raw_response.code: "code"
output_keys:
  - "code"

subflows_config:
  - _target_: martinjosifoski.CC_flows.CF_Code.instantiate_from_default_config
    overrides:
      name: "CodeGenerator"
      model_name: "gpt-4"
      human_message_prompt_template:
        _target_: langchain.PromptTemplate
        template: |2-
          # Feedback on the last proposed solution
          {{code_feedback}}


          Consider the original problem statement, the last proposed solution and the provided feedback. Does the solution need to be updated? If so, provide the corrected version of the code in the following format:
          ```python
          {{code_placeholder}}
          ```
          otherwise, reply:
          "Final answer."
        input_variables:
          - code_feedback
        partial_variables:
          code_placeholder: "{{python_code}}"
        template_format: jinja2
      default_human_input_keys:
        - "code_feedback"
      output_data_transformations:
        - _target_: flows.data_transformations.RegexFirstOccurrenceExtractor
          regex: '(?<=```python)([\s\S]*?)(?=```)'
          regex_fallback: '(?<=```)([\s\S]*?)(?=```)'
          input_key: "raw_response"
          output_key: "code"
          strip: True
          assert_unique: True

        - _target_: flows.data_transformations.EndOfInteraction
          end_of_interaction_string: "Final answer"
          output_key: "end_of_interaction"

      output_keys:
        - "code"
        - "end_of_interaction"
  - _target_: martinjosifoski.CC_flows.CF_CodeCritic.instantiate_from_default_config
    overrides:
      name: CodeCritic
      output_data_transformations:
        - _target_: flows.data_transformations.KeyRename
          old_key2new_key:
            raw_response: "code_feedback"