From 4974277f1cb2a27c9b2d99ef6122a025ae228648 Mon Sep 17 00:00:00 2001 From: you-n-g Date: Thu, 29 May 2025 20:32:06 +0800 Subject: [PATCH] feat: add last_exp_fb to DSTrace and update feedback retrieval usage (#910) * feat: add last_exp_fb to DSTrace and update feedback retrieval usage * fix: use trace.last_exp_fb for previous trial feedback description --- rdagent/scenarios/data_science/dev/feedback.py | 4 +--- .../data_science/proposal/exp_gen/base.py | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/rdagent/scenarios/data_science/dev/feedback.py b/rdagent/scenarios/data_science/dev/feedback.py index 533075ae..0e33e710 100644 --- a/rdagent/scenarios/data_science/dev/feedback.py +++ b/rdagent/scenarios/data_science/dev/feedback.py @@ -31,11 +31,9 @@ class DSExperiment2Feedback(Experiment2Feedback): exp=sota_exp, heading="SOTA of previous exploration of the scenario" ) - last_exp = trace.last_exp() - # Get feedback description using shared template feedback_desc = T("scenarios.data_science.share:describe.feedback").r( - exp_and_feedback=trace.hist[-1] if trace.hist else None, heading="Previous Trial Feedback" + exp_and_feedback=trace.last_exp_fb(), heading="Previous Trial Feedback" ) # TODO: diff --git a/rdagent/scenarios/data_science/proposal/exp_gen/base.py b/rdagent/scenarios/data_science/proposal/exp_gen/base.py index 5a5d1c08..708a33c8 100644 --- a/rdagent/scenarios/data_science/proposal/exp_gen/base.py +++ b/rdagent/scenarios/data_science/proposal/exp_gen/base.py @@ -304,10 +304,20 @@ class DSTrace(Trace[DataScienceScen, KnowledgeBase]): """ Access the last experiment """ - search_list = self.retrieve_search_list(search_type) + if (last_exp_fb := self.last_exp_fb(search_type=search_type)) is not None: + return last_exp_fb[0] + return None + def last_exp_fb( + self, + search_type: Literal["all", "ancestors"] = "ancestors", + ) -> tuple[DSExperiment, ExperimentFeedback] | None: + """ + Access the last experiment and feedback + """ + search_list = self.retrieve_search_list(search_type) for exp, ef in search_list[::-1]: - return exp + return exp, ef return None def last_runnable_exp_fb(