File size: 2,183 Bytes
5374a2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import evoagentx.workflow.operators as operator
import examples.aflow.scicode.optimized.round_6.prompt as prompt_custom
from evoagentx.models.model_configs import LLMConfig
from evoagentx.benchmark.benchmark import Benchmark
from evoagentx.models.model_utils import create_llm_instance

class Workflow:
    
    def __init__(
        self,
        name: str,
        llm_config: LLMConfig,
        benchmark: Benchmark
    ):
        self.name = name
        self.llm = create_llm_instance(llm_config)
        self.benchmark = benchmark 
        self.custom = operator.Custom(self.llm)
        self.custom_code_generate = operator.CustomCodeGenerate(self.llm)
        self.test = operator.Test(self.llm)  # Added Test operator for solution validation
        self.sc_ensemble = operator.ScEnsemble(self.llm)  # Added ScEnsemble operator for solution selection

    async def __call__(self, problem: str, entry_point: str):
        """
        Implementation of the workflow
        Custom operator to generate anything you want.
        Generate code and validate it using the Test operator, then refine using the ScEnsemble operator for the final selection.
        """
        solution = await self.custom_code_generate(problem=problem, entry_point=entry_point, instruction=prompt_custom.GENERATE_PYTHON_CODE_PROMPT) 
        validation = await self.test(problem=problem, solution=solution['response'], entry_point=entry_point, benchmark=self.benchmark)
        
        if not validation['result']:  # If the initial solution fails
            refined_solution = await self.custom(input=problem, instruction=prompt_custom.GENERATE_PYTHON_CODE_PROMPT)  # Regenerate solution
            validation = await self.test(problem=problem, solution=refined_solution['response'], entry_point=entry_point, benchmark=self.benchmark)
        
        # If the validation passes, we can proceed to ensemble solutions
        if validation['result']:
            return self.sc_ensemble(solutions=[solution['response'], refined_solution['response']], problem=problem)['response']  # Select the best solution
        return validation['solution']  # Return the current solution if still failing