From ed086dcec46cd508ef0d82c88cf7ed7dfb5f6c03 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 8 Jul 2025 10:00:52 +0800 Subject: [PATCH] feat: merge code summary and support more traces (#1025) * merge with code_change_summary * fix: prevent max_sota_retrieved_num_per_trace from becoming zero * select sota from more than 2 traces --- .../scenarios/data_science/proposal/exp_gen/merge.yaml | 1 + .../scenarios/data_science/proposal/exp_gen/parallel.py | 6 ++++-- .../data_science/proposal/exp_gen/sota_exp_select.py | 8 +++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/rdagent/scenarios/data_science/proposal/exp_gen/merge.yaml b/rdagent/scenarios/data_science/proposal/exp_gen/merge.yaml index 3d342885..1144244b 100644 --- a/rdagent/scenarios/data_science/proposal/exp_gen/merge.yaml +++ b/rdagent/scenarios/data_science/proposal/exp_gen/merge.yaml @@ -38,6 +38,7 @@ trace: |- {% else %} Experiment Score: {{ exp_and_feedback[0].result.loc["ensemble"].iloc[0] }} Experiment Feedback: {{ exp_and_feedback[1].reason }} + {% if exp_and_feedback[1].code_change_summary %}Code Change Summary: {{ exp_and_feedback[1].code_change_summary }}{% endif %} {% endif %} {% endfor %} {% endif %} diff --git a/rdagent/scenarios/data_science/proposal/exp_gen/parallel.py b/rdagent/scenarios/data_science/proposal/exp_gen/parallel.py index e4168409..6fb947ca 100644 --- a/rdagent/scenarios/data_science/proposal/exp_gen/parallel.py +++ b/rdagent/scenarios/data_science/proposal/exp_gen/parallel.py @@ -104,8 +104,10 @@ class ParallelMultiTraceExpGen(ExpGen): else: selection = (leaves[0],) if trace.sota_exp_to_submit is not None: - if trace.is_parent(trace.exp2idx(trace.sota_exp_to_submit), leaves[1]): - selection = (leaves[1],) + for i in range(1, len(leaves)): + if trace.is_parent(trace.exp2idx(trace.sota_exp_to_submit), leaves[i]): + selection = (leaves[i],) + break trace.set_current_selection(selection) return self.merge_exp_gen.gen(trace) diff --git a/rdagent/scenarios/data_science/proposal/exp_gen/sota_exp_select.py b/rdagent/scenarios/data_science/proposal/exp_gen/sota_exp_select.py index 2b0c5574..e8875f17 100644 --- a/rdagent/scenarios/data_science/proposal/exp_gen/sota_exp_select.py +++ b/rdagent/scenarios/data_science/proposal/exp_gen/sota_exp_select.py @@ -70,11 +70,13 @@ class AutoSOTAexpSelector(SOTAexpSelector): if len(leaves) >= 2: - logger.info(f"Auto SOTA selector: Multiple traces found, collecting SOTA experiments from each trace") + logger.info( + f"Auto SOTA selector: {len(leaves)} traces found, collecting SOTA experiments from each trace" + ) # multiple trace case, collect the latest SOTA experiments from each trace new_sota_exp_fb_list: list[tuple[DSExperiment, ExperimentFeedback]] = [] - # calculate the number of SOTA experiments to retrieve from each trace - max_sota_retrieved_num_per_trace = DS_RD_SETTING.max_sota_retrieved_num // len(leaves) + # calculate the number of SOTA experiments to retrieve from each trace, prevent it from becoming zero + max_sota_retrieved_num_per_trace = max(DS_RD_SETTING.max_sota_retrieved_num // len(leaves), 2) # recall, due to the integer division, the final number of SOTA experiments to retrieve may be different for leaf in leaves: sota_exp_fb_list_per_trace = trace.experiment_and_feedback_list_after_init(