File size: 2,795 Bytes
3c7fd6a
 
 
 
 
91b62cb
3c7fd6a
 
 
 
 
 
 
 
 
 
 
 
 
 
cf2aa3f
3c7fd6a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
name: "CodeCollab_Flow"
description: |2-
  Given a problem description, alternate between a step in which code is generated, and a step in which the produced code is evaluated and useful feedback is provided.

max_rounds: 4
early_exit_key: "end_of_interaction"

input_interface:
  - "problem_description"
  - "input_description"
  - "output_description"
  - "io_examples_and_explanation"
output_interface:
  - "code"

subflows_config:
  CodeGenerator:
    _target_: .CF_Code.instantiate_from_default_config
    name: "CodeGenerator"
    human_message_prompt_template:
      _target_: flows.prompt_template.JinjaPrompt
      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}}"
    input_interface_initialized:
      - "code_feedback"
  CodeCritic:
    _target_: .CF_CodeCritic.instantiate_from_default_config

topology:
  # ~~~ Code Generator ~~~
  - goal: "Generate/refine a solution."

    ### Input Interface
    input_interface:
      _target_: flows.interfaces.KeyInterface
      additional_transformations:
        - _target_: flows.data_transformations.KeyMatchInput

    ### Flow Specification
    flow: CodeGenerator

    ### Output Interface
    output_interface:
      _target_: flows.interfaces.KeyInterface
      additional_transformations:
        - _target_: flows.data_transformations.RegexFirstOccurrenceExtractor
          regex: '(?<=```python)([\s\S]*?)(?=```)'
          regex_fallback: '(?<=```)([\s\S]*?)(?=```)'
          input_key: "api_output"
          output_key: "code"
          strip: True
          assert_unique: True
        - _target_: flows.data_transformations.EndOfInteraction
          end_of_interaction_string: "Final answer"
          input_key: "api_output"
          output_key: "end_of_interaction"
        - _target_: flows.data_transformations.PrintPreviousMessages
    reset: false

  # ~~~ Code Critic ~~~
  - goal: "Provide feedback for the candidate solution."

    ### Input Interface
    input_interface:
      _target_: flows.interfaces.KeyInterface
      additional_transformations:
        - _target_: flows.data_transformations.KeyMatchInput

    ### Flow Specification
    flow: CodeCritic

    ### Output Interface
    output_interface:
      _target_: flows.interfaces.KeyInterface
      keys_to_rename:
        api_output: "code_feedback"

    reset: true