diff --git a/rdagent/app/qlib_rd_loop/factor.py b/rdagent/app/qlib_rd_loop/factor.py index 4330702e..664d3ca0 100644 --- a/rdagent/app/qlib_rd_loop/factor.py +++ b/rdagent/app/qlib_rd_loop/factor.py @@ -36,11 +36,22 @@ qlib_factor_summarizer: HypothesisExperiment2Feedback = import_class(PROP_SETTIN trace = Trace(scen=scen) for _ in range(PROP_SETTING.evolving_n): try: - hypothesis = hypothesis_gen.gen(trace) - exp = hypothesis2experiment.convert(hypothesis, trace) - exp = qlib_factor_coder.develop(exp) - exp = qlib_factor_runner.develop(exp) - feedback = qlib_factor_summarizer.generateFeedback(exp, hypothesis, trace) + with logger.tag("r"): # research + hypothesis = hypothesis_gen.gen(trace) + logger.log_object(hypothesis, tag="hypothesis generation") + + exp = hypothesis2experiment.convert(hypothesis, trace) + logger.log_object(exp.sub_tasks, tag="experiment generation") + + with logger.tag("d"): + exp = qlib_factor_coder.develop(exp) + logger.log_object(exp.sub_workspace_list) + + with logger.tag("ef"): + exp = qlib_factor_runner.develop(exp) + logger.log_object(exp, tag="factor runner result") + feedback = qlib_factor_summarizer.generateFeedback(exp, hypothesis, trace) + logger.log_object(feedback, tag="feedback") trace.hist.append((hypothesis, exp, feedback)) except FactorEmptyException as e: diff --git a/rdagent/app/qlib_rd_loop/model.py b/rdagent/app/qlib_rd_loop/model.py index 6a397a0c..3147bbc6 100644 --- a/rdagent/app/qlib_rd_loop/model.py +++ b/rdagent/app/qlib_rd_loop/model.py @@ -33,14 +33,20 @@ trace = Trace(scen=scen) with logger.tag("model.loop"): for _ in range(PROP_SETTING.evolving_n): try: - with logger.tag("r"): # research + with logger.tag("r"): # research hypothesis = hypothesis_gen.gen(trace) + logger.log_object(hypothesis, tag="hypothesis generation") + exp = hypothesis2experiment.convert(hypothesis, trace) - with logger.tag("d"): # develop + logger.log_object(exp.sub_tasks, tag="experiment generation") + with logger.tag("d"): # develop exp = qlib_model_coder.develop(exp) - with logger.tag("ef"): # evaluate and feedback + logger.log_object(exp.sub_workspace_list, tag="model coder result") + with logger.tag("ef"): # evaluate and feedback exp = qlib_model_runner.develop(exp) + logger.log_object(exp, tag="model runner result") feedback = qlib_model_summarizer.generateFeedback(exp, hypothesis, trace) + logger.log_object(feedback, tag="feedback") trace.hist.append((hypothesis, exp, feedback)) except ModelEmptyException as e: logger.warning(e) diff --git a/rdagent/components/coder/factor_coder/factor.py b/rdagent/components/coder/factor_coder/factor.py index 5c9b7390..6d244d25 100644 --- a/rdagent/components/coder/factor_coder/factor.py +++ b/rdagent/components/coder/factor_coder/factor.py @@ -108,8 +108,7 @@ class FactorFBWorkspace(FBWorkspace): if self.raise_exception: raise CodeFormatException(self.FB_CODE_NOT_SET) else: - # TODO: to make the interface compatible with previous code. I kept the original behavior. - raise ValueError(self.FB_CODE_NOT_SET) + return self.FB_CODE_NOT_SET, None with FileLock(self.workspace_path / "execution.lock"): if FACTOR_IMPLEMENT_SETTINGS.enable_execution_cache: # NOTE: cache the result for the same code and same data type diff --git a/rdagent/core/evolving_agent.py b/rdagent/core/evolving_agent.py index f030df64..c9e76b2d 100644 --- a/rdagent/core/evolving_agent.py +++ b/rdagent/core/evolving_agent.py @@ -5,6 +5,7 @@ from tqdm import tqdm from rdagent.core.evaluation import Evaluator from rdagent.core.evolving_framework import EvolvableSubjects, EvoStep, Feedback +from rdagent.log import rdagent_logger as logger class EvoAgent(ABC): @@ -13,12 +14,14 @@ class EvoAgent(ABC): self.evolving_strategy = evolving_strategy @abstractmethod - def multistep_evolve(self, evo: EvolvableSubjects, eva: Evaluator | Feedback, **kwargs: Any) -> EvolvableSubjects: - ... + def multistep_evolve( + self, evo: EvolvableSubjects, eva: Evaluator | Feedback, **kwargs: Any + ) -> EvolvableSubjects: ... @abstractmethod - def filter_evolvable_subjects_by_feedback(self, evo: EvolvableSubjects, feedback: Feedback) -> EvolvableSubjects: - ... + def filter_evolvable_subjects_by_feedback( + self, evo: EvolvableSubjects, feedback: Feedback + ) -> EvolvableSubjects: ... class RAGEvoAgent(EvoAgent): @@ -53,6 +56,7 @@ class RAGEvoAgent(EvoAgent): evolving_trace=self.evolving_trace, queried_knowledge=queried_knowledge, ) + logger.log_object(evo.sub_workspace_list, tag=f"evolving code") # 4. Pack evolve results es = EvoStep(evo, queried_knowledge) @@ -62,6 +66,7 @@ class RAGEvoAgent(EvoAgent): es.feedback = ( eva if isinstance(eva, Feedback) else eva.evaluate(evo, queried_knowledge=queried_knowledge) ) + logger.log_object(es.feedback, tag=f"evolving feedback") # 6. update trace self.evolving_trace.append(es)