iLOVE2D's picture
Upload 2846 files
5374a2d verified
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