mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-28 07:57:44 +00:00
fix: remove refine decision & bug fix (#1031)
* remove refine decision & bug fix * code simpler * fix CI --------- Co-authored-by: Xu Yang <xuyang1@microsoft.com>
This commit is contained in:
@@ -57,12 +57,10 @@ class ExperimentFeedback(Feedback):
|
||||
*,
|
||||
code_change_summary: str | None = None,
|
||||
decision: bool,
|
||||
refine_decision: bool = False,
|
||||
eda_improvement: str | None = None,
|
||||
exception: Exception | None = None,
|
||||
) -> None:
|
||||
self.decision = decision
|
||||
self.refine_decision = refine_decision
|
||||
self.eda_improvement = eda_improvement
|
||||
self.reason = reason
|
||||
# Exception is not None means failing to generate runnable experiments due to exception.
|
||||
@@ -100,13 +98,11 @@ class HypothesisFeedback(ExperimentFeedback):
|
||||
*,
|
||||
code_change_summary: str | None = None,
|
||||
decision: bool,
|
||||
refine_decision: bool = False,
|
||||
eda_improvement: str | None = None,
|
||||
) -> None:
|
||||
super().__init__(
|
||||
reason,
|
||||
decision=decision,
|
||||
refine_decision=refine_decision,
|
||||
code_change_summary=code_change_summary,
|
||||
eda_improvement=eda_improvement,
|
||||
)
|
||||
|
||||
@@ -102,7 +102,6 @@ class DSExperiment2Feedback(Experiment2Feedback):
|
||||
if evaluation_not_aligned
|
||||
else convert2bool(dict_get_with_warning(resp_dict, "Replace Best Result", "no"))
|
||||
),
|
||||
refine_decision=convert2bool(dict_get_with_warning(resp_dict, "Refine Decision", "no")),
|
||||
eda_improvement=dict_get_with_warning(resp_dict, "EDA Improvement", "no"), # EDA improvement suggestion
|
||||
)
|
||||
|
||||
|
||||
@@ -226,7 +226,7 @@ class DSTrace(Trace[DataScienceScen, KnowledgeBase]):
|
||||
# the sota exp should be accepted decision and all required components are completed.
|
||||
if ef.decision:
|
||||
return exp, ef
|
||||
return None, None
|
||||
return None
|
||||
|
||||
def sota_experiment(
|
||||
self,
|
||||
|
||||
@@ -21,7 +21,6 @@ from rdagent.scenarios.data_science.experiment.experiment import DSExperiment
|
||||
from rdagent.scenarios.data_science.proposal.exp_gen.base import DSHypothesis, DSTrace
|
||||
from rdagent.scenarios.data_science.proposal.exp_gen.draft import DSDraftExpGen
|
||||
from rdagent.scenarios.data_science.proposal.exp_gen.idea_pool import DSIdea
|
||||
from rdagent.scenarios.data_science.proposal.exp_gen.refine import DSRefineExpGen
|
||||
from rdagent.utils.agent.tpl import T
|
||||
from rdagent.utils.repo.diff import generate_diff_from_dict
|
||||
from rdagent.utils.workflow import wait_retry
|
||||
@@ -721,7 +720,7 @@ class DSProposalV2ExpGen(ExpGen):
|
||||
hypotheses: list[DSHypothesis],
|
||||
pipeline: bool,
|
||||
failed_exp_feedback_list_desc: str,
|
||||
sota_exp_fb: ExperimentFeedback | None = None,
|
||||
fb_to_sota_exp: ExperimentFeedback | None = None,
|
||||
) -> DSExperiment:
|
||||
if pipeline:
|
||||
component_info = get_component("Pipeline")
|
||||
@@ -740,7 +739,7 @@ class DSProposalV2ExpGen(ExpGen):
|
||||
sota_exp_desc=sota_exp_desc,
|
||||
hypotheses=hypotheses,
|
||||
failed_exp_and_feedback_list_desc=failed_exp_feedback_list_desc,
|
||||
eda_improvement=sota_exp_fb.eda_improvement if sota_exp_fb else None,
|
||||
eda_improvement=fb_to_sota_exp.eda_improvement if fb_to_sota_exp else None,
|
||||
)
|
||||
response = APIBackend().build_messages_and_create_chat_completion(
|
||||
user_prompt=user_prompt,
|
||||
@@ -824,7 +823,11 @@ class DSProposalV2ExpGen(ExpGen):
|
||||
]
|
||||
)
|
||||
|
||||
sota_exp, sota_exp_fb = trace.sota_experiment_fb()
|
||||
if sota_exp_fb := trace.sota_experiment_fb() is None:
|
||||
sota_exp, fb_to_sota_exp = None, None
|
||||
else:
|
||||
sota_exp, fb_to_sota_exp = sota_exp_fb
|
||||
|
||||
if not isinstance(sota_exp, DSExperiment):
|
||||
eda_output = None
|
||||
else:
|
||||
@@ -922,5 +925,5 @@ class DSProposalV2ExpGen(ExpGen):
|
||||
),
|
||||
pipeline=pipeline,
|
||||
failed_exp_feedback_list_desc=failed_exp_feedback_list_desc,
|
||||
sota_exp_fb=sota_exp_fb,
|
||||
fb_to_sota_exp=fb_to_sota_exp,
|
||||
)
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
import json
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
from rdagent.app.data_science.conf import DS_RD_SETTING
|
||||
from rdagent.core.proposal import ExpGen
|
||||
from rdagent.log import rdagent_logger as logger
|
||||
from rdagent.oai.llm_utils import APIBackend
|
||||
from rdagent.scenarios.data_science.experiment.experiment import DSExperiment
|
||||
from rdagent.scenarios.data_science.proposal.exp_gen.base import DSHypothesis, DSTrace
|
||||
from rdagent.scenarios.data_science.proposal.exp_gen.utils import (
|
||||
CodingSketch,
|
||||
get_component,
|
||||
)
|
||||
from rdagent.utils.agent.tpl import T
|
||||
|
||||
|
||||
class DSRefineExpGen(ExpGen):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.support_function_calling = APIBackend().support_function_calling()
|
||||
|
||||
def task_gen(
|
||||
self,
|
||||
component_desc: str,
|
||||
scenario_desc: str,
|
||||
sota_exp_desc: str,
|
||||
sota_exp: DSExperiment,
|
||||
hypothesis: DSHypothesis,
|
||||
exp_and_feedback_list_desc: str,
|
||||
) -> DSExperiment:
|
||||
component_info = get_component("Pipeline")
|
||||
data_folder_info = self.scen.processed_data_folder_description
|
||||
sys_prompt = T(".prompts_refine:task_gen.system").r(
|
||||
task_output_format=component_info["task_output_format"] if not self.support_function_calling else None,
|
||||
component_desc=component_desc,
|
||||
)
|
||||
user_prompt = T(".prompts_refine:task_gen.user").r(
|
||||
scenario_desc=scenario_desc,
|
||||
data_folder_info=data_folder_info,
|
||||
sota_exp_desc=sota_exp_desc,
|
||||
hypothesis=hypothesis,
|
||||
exp_and_feedback_list_desc=exp_and_feedback_list_desc,
|
||||
)
|
||||
response = APIBackend().build_messages_and_create_chat_completion(
|
||||
user_prompt=user_prompt,
|
||||
system_prompt=sys_prompt,
|
||||
response_format=CodingSketch if self.support_function_calling else {"type": "json_object"},
|
||||
json_target_type=Dict[str, str | Dict[str, str]] if not self.support_function_calling else None,
|
||||
)
|
||||
task_dict = json.loads(response)
|
||||
task_design = (
|
||||
task_dict.get("task_design", {}) if not self.support_function_calling else task_dict.get("sketch", {})
|
||||
)
|
||||
logger.info(f"Task design:\n{task_design}")
|
||||
task_name = hypothesis.component
|
||||
description = (
|
||||
task_design
|
||||
if isinstance(task_design, str)
|
||||
else task_design.get("description", f"{component_info['target_name']} description not provided")
|
||||
)
|
||||
task_class = component_info["task_class"]
|
||||
task = task_class(
|
||||
name=task_name,
|
||||
description=description,
|
||||
)
|
||||
exp = DSExperiment(pending_tasks_list=[[task]], hypothesis=hypothesis)
|
||||
if sota_exp is not None:
|
||||
exp.experiment_workspace.inject_code_from_file_dict(sota_exp.experiment_workspace)
|
||||
return exp
|
||||
|
||||
def gen(self, trace: DSTrace) -> DSExperiment:
|
||||
# Step 0: Prepare
|
||||
pipeline = DS_RD_SETTING.coder_on_whole_pipeline
|
||||
component_desc = T("scenarios.data_science.share:component_description_in_pipeline").r()
|
||||
sota_exp, sota_fb = trace.sota_experiment_fb()
|
||||
if not isinstance(sota_exp, DSExperiment):
|
||||
eda_output = None
|
||||
else:
|
||||
eda_output = sota_exp.experiment_workspace.file_dict.get("EDA.md", None)
|
||||
scenario_desc = self.scen.get_scenario_all_desc(trace=trace, eda_output=eda_output)
|
||||
sota_exp_desc = T("scenarios.data_science.share:describe.exp").r(
|
||||
exp=sota_exp, heading="Best of previous exploration of the scenario"
|
||||
)
|
||||
exp_feedback_list_desc = T("scenarios.data_science.share:describe.trace").r(
|
||||
exp_and_feedback_list=trace.experiment_and_feedback_list_after_init(return_type="all"),
|
||||
type="all",
|
||||
pipeline=pipeline,
|
||||
)
|
||||
|
||||
# Step 1: Generate a Pseudo Hypothesis for Refinement
|
||||
hypothesis = DSHypothesis(
|
||||
component="Model",
|
||||
hypothesis="The current pipeline is note effective in terms of efficiency or hyperparameters. Refinement or Adjustment should be made.",
|
||||
reason=sota_fb.reason,
|
||||
)
|
||||
|
||||
# Step 2: Design Task to Refine SOTA
|
||||
return self.task_gen(
|
||||
component_desc=component_desc,
|
||||
scenario_desc=scenario_desc,
|
||||
sota_exp_desc=sota_exp_desc,
|
||||
sota_exp=sota_exp,
|
||||
hypothesis=hypothesis,
|
||||
exp_and_feedback_list_desc=exp_feedback_list_desc,
|
||||
)
|
||||
Reference in New Issue
Block a user