mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-27 23:47:46 +00:00
chore: fit more competition (#723)
1. Remove potential <code> tags from the generated code. 2. Use return codes in data_loader, feature, and model. 3. Configure the debug timeout.
This commit is contained in:
@@ -24,7 +24,11 @@ class DSCoderCoSTEERSettings(CoSTEERSettings):
|
||||
# TODO: extract a function for env and conf.
|
||||
|
||||
|
||||
def get_ds_env(conf_type: Literal["kaggle", "mlebench"] = "kaggle") -> Env:
|
||||
def get_ds_env(
|
||||
conf_type: Literal["kaggle", "mlebench"] = "kaggle",
|
||||
extra_volumes: dict = {},
|
||||
running_timeout_period: int = DS_RD_SETTING.debug_timeout,
|
||||
) -> Env:
|
||||
"""
|
||||
Retrieve the appropriate environment configuration based on the env_type setting.
|
||||
|
||||
@@ -48,6 +52,8 @@ def get_ds_env(conf_type: Literal["kaggle", "mlebench"] = "kaggle") -> Env:
|
||||
)
|
||||
else:
|
||||
raise ValueError(f"Unknown env type: {conf.env_type}")
|
||||
env.conf.extra_volumes = extra_volumes
|
||||
env.conf.running_timeout_period = running_timeout_period
|
||||
return env
|
||||
|
||||
|
||||
|
||||
@@ -46,8 +46,9 @@ class EnsembleCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
final_decision=False,
|
||||
)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
)
|
||||
|
||||
fname = "test/ensemble_test.txt"
|
||||
test_code = (DIRNAME / "eval_tests" / "ensemble_test.txt").read_text()
|
||||
|
||||
@@ -20,7 +20,6 @@ FeatureEvalFeedback = CoSTEERSingleFeedback
|
||||
|
||||
|
||||
class FeatureCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
|
||||
def evaluate(
|
||||
self,
|
||||
target_task: Task,
|
||||
@@ -29,7 +28,6 @@ class FeatureCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
queried_knowledge: QueriedKnowledge = None,
|
||||
**kwargs,
|
||||
) -> FeatureEvalFeedback:
|
||||
|
||||
target_task_information = target_task.get_task_information()
|
||||
if (
|
||||
queried_knowledge is not None
|
||||
@@ -44,8 +42,9 @@ class FeatureCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
final_decision=False,
|
||||
)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
)
|
||||
|
||||
# TODO: do we need to clean the generated temporary content?
|
||||
fname = "test/feature_test.py"
|
||||
@@ -72,9 +71,12 @@ class FeatureCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
workflow_stdout=workflow_stdout,
|
||||
)
|
||||
|
||||
return build_cls_from_json_with_retry(
|
||||
fb = build_cls_from_json_with_retry(
|
||||
FeatureEvalFeedback,
|
||||
system_prompt=system_prompt,
|
||||
user_prompt=user_prompt,
|
||||
init_kwargs_update_func=FeatureEvalFeedback.val_and_update_init_dict,
|
||||
)
|
||||
fb.final_decision = fb.final_decision and ret_code == 0
|
||||
|
||||
return fb
|
||||
|
||||
@@ -56,8 +56,9 @@ class ModelGeneralCaseSpecEvaluator(CoSTEEREvaluator):
|
||||
final_decision=False,
|
||||
)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
)
|
||||
|
||||
if_model_removed = False
|
||||
|
||||
@@ -107,9 +108,12 @@ class ModelGeneralCaseSpecEvaluator(CoSTEEREvaluator):
|
||||
workflow_stdout=workflow_stdout,
|
||||
)
|
||||
|
||||
return build_cls_from_json_with_retry(
|
||||
fb = build_cls_from_json_with_retry(
|
||||
ModelSingleFeedback,
|
||||
system_prompt=system_prompt,
|
||||
user_prompt=user_prompt,
|
||||
init_kwargs_update_func=ModelSingleFeedback.val_and_update_init_dict,
|
||||
)
|
||||
fb.final_decision = fb.final_decision and ret_code == 0
|
||||
|
||||
return fb
|
||||
|
||||
@@ -51,8 +51,9 @@ class PipelineCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
final_decision=False,
|
||||
)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
)
|
||||
|
||||
# Clean the scores.csv & submission.csv.
|
||||
implementation.execute(env=env, entry=get_clear_ws_cmd())
|
||||
|
||||
@@ -225,8 +225,10 @@ class DataLoaderCoSTEER(CoSTEER):
|
||||
def develop(self, exp):
|
||||
new_exp = super().develop(exp)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/{self.scen.competition}": "/kaggle/input"},
|
||||
running_timeout_period=DS_RD_SETTING.full_timeout,
|
||||
)
|
||||
|
||||
stdout = new_exp.experiment_workspace.execute(env=env, entry=f"python test/data_loader_test.py")
|
||||
match = re.search(r"(.*?)=== Start of EDA part ===(.*)=== End of EDA part ===", stdout, re.DOTALL)
|
||||
|
||||
@@ -23,7 +23,6 @@ DataLoaderEvalFeedback = CoSTEERSingleFeedback
|
||||
|
||||
|
||||
class DataLoaderCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
|
||||
def evaluate(
|
||||
self,
|
||||
target_task: Task,
|
||||
@@ -32,7 +31,6 @@ class DataLoaderCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
queried_knowledge: CoSTEERQueriedKnowledgeV2 = None,
|
||||
**kwargs,
|
||||
) -> DataLoaderEvalFeedback:
|
||||
|
||||
target_task_information = target_task.get_task_information()
|
||||
if (
|
||||
queried_knowledge is not None
|
||||
@@ -47,8 +45,9 @@ class DataLoaderCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
final_decision=False,
|
||||
)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
)
|
||||
|
||||
# TODO: do we need to clean the generated temporary content?
|
||||
fname = "test/data_loader_test.py"
|
||||
@@ -80,9 +79,12 @@ class DataLoaderCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
workflow_stdout=workflow_stdout,
|
||||
)
|
||||
|
||||
return build_cls_from_json_with_retry(
|
||||
fb = build_cls_from_json_with_retry(
|
||||
DataLoaderEvalFeedback,
|
||||
system_prompt=system_prompt,
|
||||
user_prompt=user_prompt,
|
||||
init_kwargs_update_func=DataLoaderEvalFeedback.val_and_update_init_dict,
|
||||
)
|
||||
fb.final_decision = fb.final_decision and ret_code == 0
|
||||
|
||||
return fb
|
||||
|
||||
@@ -54,8 +54,9 @@ class WorkflowGeneralCaseSpecEvaluator(CoSTEEREvaluator):
|
||||
final_decision=False,
|
||||
)
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/sample/{self.scen.competition}": "/kaggle/input"}
|
||||
)
|
||||
|
||||
# # DockerEnv for MLEBench submission validation
|
||||
# mle_de_conf = MLEBDockerConf()
|
||||
|
||||
@@ -16,8 +16,7 @@ from rdagent.scenarios.data_science.experiment.experiment import DSExperiment
|
||||
from rdagent.scenarios.kaggle.kaggle_crawler import score_rank
|
||||
from rdagent.utils.env import DockerEnv, MLEBDockerConf
|
||||
|
||||
de = get_ds_env("mlebench")
|
||||
de.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/zip_files": "/mle/data"}
|
||||
de = get_ds_env(conf_type="mlebench", extra_volumes={f"{DS_RD_SETTING.local_data_path}/zip_files": "/mle/data"})
|
||||
de.prepare()
|
||||
|
||||
|
||||
|
||||
@@ -33,9 +33,10 @@ class DSCoSTEERCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
**kwargs,
|
||||
) -> DSCoSTEEREvalFeedback:
|
||||
|
||||
env = get_ds_env()
|
||||
env.conf.extra_volumes = {f"{DS_RD_SETTING.local_data_path}/{self.scen.competition}": "/kaggle/input"}
|
||||
env.conf.running_timeout_period = DS_RD_SETTING.full_timeout
|
||||
env = get_ds_env(
|
||||
extra_volumes={f"{DS_RD_SETTING.local_data_path}/{self.scen.competition}": "/kaggle/input"},
|
||||
running_timeout_period=DS_RD_SETTING.full_timeout,
|
||||
)
|
||||
|
||||
stdout = implementation.execute(
|
||||
env=env, entry=get_clear_ws_cmd()
|
||||
@@ -94,10 +95,12 @@ class DSCoSTEERCoSTEEREvaluator(CoSTEEREvaluator):
|
||||
submission_check_out = ""
|
||||
|
||||
if DS_RD_SETTING.if_using_mle_data:
|
||||
mde = get_ds_env("mlebench")
|
||||
mde.conf.extra_volumes = {
|
||||
f"{DS_RD_SETTING.local_data_path}/zip_files": "/mle/data",
|
||||
}
|
||||
mde = get_ds_env(
|
||||
conf_type="mlebench",
|
||||
extra_volumes={
|
||||
f"{DS_RD_SETTING.local_data_path}/zip_files": "/mle/data",
|
||||
},
|
||||
)
|
||||
mde.prepare()
|
||||
# MLEBench Check
|
||||
mle_check_code = (
|
||||
|
||||
@@ -34,6 +34,7 @@ class PythonAgentOut(AgentOut):
|
||||
match = re.search(r".*```[Pp]ython\n(.*)\n```.*", resp, re.DOTALL)
|
||||
if match:
|
||||
code = match.group(1)
|
||||
code = re.sub(r"</?code>", "", code, flags=re.IGNORECASE)
|
||||
return code
|
||||
return resp
|
||||
|
||||
@@ -51,7 +52,6 @@ class BatchEditOut(AgentOut):
|
||||
|
||||
|
||||
class PythonBatchEditOut(AgentOut):
|
||||
|
||||
@classmethod
|
||||
def get_spec(cls, with_del=True):
|
||||
return T(".tpl:PythonBatchEditOut").r(with_del=with_del)
|
||||
|
||||
Reference in New Issue
Block a user