|
| 1 | +""" |
| 2 | +The most naive way to design experiments |
| 3 | +""" |
| 4 | + |
| 5 | +from rdagent.app.data_science.conf import DS_RD_SETTING |
| 6 | +from rdagent.components.coder.data_science.pipeline.exp import PipelineTask |
| 7 | +from rdagent.core.proposal import ExpGen |
| 8 | +from rdagent.scenarios.data_science.experiment.experiment import DSExperiment |
| 9 | +from rdagent.scenarios.data_science.proposal.exp_gen.base import DSHypothesis, DSTrace |
| 10 | +from rdagent.utils.agent.tpl import T |
| 11 | +from rdagent.utils.agent.workflow import build_cls_from_json_with_retry |
| 12 | + |
| 13 | + |
| 14 | +class NaiveExpGen(ExpGen): |
| 15 | + def gen(self, trace: DSTrace) -> DSExperiment: |
| 16 | + sota_exp = trace.sota_experiment() |
| 17 | + scenario_desc = trace.scen.get_scenario_all_desc() |
| 18 | + competition_desc = trace.scen.get_competition_full_desc() |
| 19 | + sota_exp_desc = T("scenarios.data_science.share:describe.exp").r( |
| 20 | + exp=sota_exp, heading="Best of previous exploration of the scenario" |
| 21 | + ) |
| 22 | + |
| 23 | + sota_exp_feedback_list = trace.experiment_and_feedback_list_after_init(return_type="sota") |
| 24 | + failed_exp_feedback_list = trace.experiment_and_feedback_list_after_init(return_type="failed")[ |
| 25 | + -DS_RD_SETTING.max_trace_hist : |
| 26 | + ] |
| 27 | + |
| 28 | + sota_exp_and_feedback_list_desc = T("scenarios.data_science.share:describe.trace").r( |
| 29 | + exp_and_feedback_list=sota_exp_feedback_list, |
| 30 | + success=True, |
| 31 | + ) |
| 32 | + failed_exp_and_feedback_list_desc = T("scenarios.data_science.share:describe.trace").r( |
| 33 | + exp_and_feedback_list=failed_exp_feedback_list, |
| 34 | + success=False, |
| 35 | + ) |
| 36 | + |
| 37 | + sys_prompt = T(".naive:naive_gen.system").r() |
| 38 | + |
| 39 | + user_prompt = T(".naive:naive_gen.user").r( |
| 40 | + competition_desc=competition_desc, |
| 41 | + sota_exp_desc=sota_exp_desc, |
| 42 | + scenario_desc=scenario_desc, |
| 43 | + sota_exp_and_feedback_list_desc=sota_exp_and_feedback_list_desc, |
| 44 | + failed_exp_and_feedback_list_desc=failed_exp_and_feedback_list_desc, |
| 45 | + ) |
| 46 | + |
| 47 | + task = build_cls_from_json_with_retry( |
| 48 | + cls=PipelineTask, |
| 49 | + system_prompt=sys_prompt, |
| 50 | + user_prompt=user_prompt, |
| 51 | + retry_n=5, |
| 52 | + ) |
| 53 | + |
| 54 | + exp = DSExperiment( |
| 55 | + pending_tasks_list=[[task]], |
| 56 | + hypothesis=DSHypothesis( |
| 57 | + component="Pipeline", |
| 58 | + hypothesis=task.description, |
| 59 | + ), |
| 60 | + ) |
| 61 | + |
| 62 | + if sota_exp is not None: |
| 63 | + exp.experiment_workspace.inject_code_from_file_dict(sota_exp.experiment_workspace) |
| 64 | + return exp |
0 commit comments