Skip to content

Commit 534686c

Browse files
feat: add max time config to costeer in data science (microsoft#645)
* add max time config to costeer * fix a small bug --------- Co-authored-by: Xu Yang <xuyang1@microsoft.com>
1 parent 906993e commit 534686c

File tree

9 files changed

+39
-22
lines changed

9 files changed

+39
-22
lines changed

rdagent/components/coder/CoSTEER/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pickle
2+
from datetime import datetime
23
from pathlib import Path
34

45
from rdagent.components.coder.CoSTEER.config import CoSTEERSettings
@@ -35,6 +36,7 @@ def __init__(
3536
) -> None:
3637
super().__init__(*args, **kwargs)
3738
self.max_loop = settings.max_loop if max_loop is None else max_loop
39+
self.max_seconds = settings.max_seconds
3840
self.knowledge_base_path = (
3941
Path(settings.knowledge_base_path) if settings.knowledge_base_path is not None else None
4042
)
@@ -96,11 +98,14 @@ def develop(self, exp: Experiment) -> Experiment:
9698
knowledge_self_gen=self.knowledge_self_gen,
9799
)
98100

101+
start_datetime = datetime.now()
99102
for evo_exp in self.evolve_agent.multistep_evolve(evo_exp, self.evaluator):
100103
assert isinstance(evo_exp, Experiment) # multiple inheritance
101104
logger.log_object(evo_exp.sub_workspace_list, tag="evolving code")
102105
for sw in evo_exp.sub_workspace_list:
103106
logger.info(f"evolving code workspace: {sw}")
107+
if (datetime.now() - start_datetime).seconds > self.max_seconds:
108+
break
104109

105110
if self.with_feedback and self.filter_final_evo:
106111
evo_exp = self._exp_postprocess_by_feedback(evo_exp, self.evolve_agent.evolving_trace[-1].feedback)

rdagent/components/coder/CoSTEER/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,7 @@ class Config:
3535

3636
select_threshold: int = 10
3737

38+
max_seconds: int = 10**6
39+
3840

3941
CoSTEER_SETTINGS = CoSTEERSettings()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from rdagent.components.coder.CoSTEER.config import CoSTEERSettings
2+
3+
4+
class DSCoderCoSTEERSettings(CoSTEERSettings):
5+
"""Data Science CoSTEER settings"""
6+
7+
class Config:
8+
env_prefix = "DS_Coder_CoSTEER_"
9+
10+
max_seconds: int = 2400

rdagent/components/coder/data_science/ensemble/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import json
1515

1616
from rdagent.components.coder.CoSTEER import CoSTEER
17-
from rdagent.components.coder.CoSTEER.config import CoSTEER_SETTINGS
1817
from rdagent.components.coder.CoSTEER.evaluators import (
1918
CoSTEERMultiEvaluator,
2019
CoSTEERSingleFeedback,
@@ -25,6 +24,7 @@
2524
from rdagent.components.coder.CoSTEER.knowledge_management import (
2625
CoSTEERQueriedKnowledge,
2726
)
27+
from rdagent.components.coder.data_science.conf import DSCoderCoSTEERSettings
2828
from rdagent.components.coder.data_science.ensemble.eval import EnsembleCoSTEEREvaluator
2929
from rdagent.components.coder.data_science.ensemble.exp import EnsembleTask
3030
from rdagent.core.exception import CoderError
@@ -122,7 +122,8 @@ def __init__(
122122
*args,
123123
**kwargs,
124124
) -> None:
125+
settings = DSCoderCoSTEERSettings()
125126
eva = CoSTEERMultiEvaluator(EnsembleCoSTEEREvaluator(scen=scen), scen=scen)
126-
es = EnsembleMultiProcessEvolvingStrategy(scen=scen, settings=CoSTEER_SETTINGS)
127+
es = EnsembleMultiProcessEvolvingStrategy(scen=scen, settings=settings)
127128

128-
super().__init__(*args, settings=CoSTEER_SETTINGS, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)
129+
super().__init__(*args, settings=settings, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)

rdagent/components/coder/data_science/feature/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import json
22

33
from rdagent.components.coder.CoSTEER import CoSTEER
4-
from rdagent.components.coder.CoSTEER.config import CoSTEER_SETTINGS
54
from rdagent.components.coder.CoSTEER.evaluators import (
65
CoSTEERMultiEvaluator,
76
CoSTEERSingleFeedback,
@@ -12,6 +11,7 @@
1211
from rdagent.components.coder.CoSTEER.knowledge_management import (
1312
CoSTEERQueriedKnowledge,
1413
)
14+
from rdagent.components.coder.data_science.conf import DSCoderCoSTEERSettings
1515
from rdagent.components.coder.data_science.feature.eval import FeatureCoSTEEREvaluator
1616
from rdagent.components.coder.data_science.feature.exp import FeatureTask
1717
from rdagent.core.exception import CoderError
@@ -107,9 +107,10 @@ def __init__(
107107
*args,
108108
**kwargs,
109109
) -> None:
110+
settings = DSCoderCoSTEERSettings()
110111
eva = CoSTEERMultiEvaluator(
111112
FeatureCoSTEEREvaluator(scen=scen), scen=scen
112113
) # Please specify whether you agree running your eva in parallel or not
113-
es = FeatureMultiProcessEvolvingStrategy(scen=scen, settings=CoSTEER_SETTINGS)
114+
es = FeatureMultiProcessEvolvingStrategy(scen=scen, settings=settings)
114115

115-
super().__init__(*args, settings=CoSTEER_SETTINGS, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)
116+
super().__init__(*args, settings=settings, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)

rdagent/components/coder/data_science/model/__init__.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import json
2-
from pathlib import Path
3-
4-
from jinja2 import Environment, StrictUndefined
5-
61
from rdagent.components.coder.CoSTEER import CoSTEER
7-
from rdagent.components.coder.CoSTEER.config import CoSTEER_SETTINGS
82
from rdagent.components.coder.CoSTEER.evaluators import (
93
CoSTEERMultiEvaluator,
104
CoSTEERSingleFeedback,
@@ -15,6 +9,7 @@
159
from rdagent.components.coder.CoSTEER.knowledge_management import (
1610
CoSTEERQueriedKnowledge,
1711
)
12+
from rdagent.components.coder.data_science.conf import DSCoderCoSTEERSettings
1813
from rdagent.components.coder.data_science.model.eval import (
1914
ModelGeneralCaseSpecEvaluator,
2015
)
@@ -133,10 +128,11 @@ def __init__(
133128
*args,
134129
**kwargs,
135130
) -> None:
131+
settings = DSCoderCoSTEERSettings()
136132
eva = CoSTEERMultiEvaluator(
137133
ModelGeneralCaseSpecEvaluator(scen=scen), scen=scen
138134
) # Please specify whether you agree running your eva in parallel or not
139135
# eva = ModelGeneralCaseSpecEvaluator(scen=scen)
140-
es = ModelMultiProcessEvolvingStrategy(scen=scen, settings=CoSTEER_SETTINGS)
136+
es = ModelMultiProcessEvolvingStrategy(scen=scen, settings=settings)
141137

142-
super().__init__(*args, settings=CoSTEER_SETTINGS, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)
138+
super().__init__(*args, settings=settings, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)

rdagent/components/coder/data_science/raw_data_loader/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import json
2626

2727
from rdagent.components.coder.CoSTEER import CoSTEER
28-
from rdagent.components.coder.CoSTEER.config import CoSTEER_SETTINGS
2928
from rdagent.components.coder.CoSTEER.evaluators import (
3029
CoSTEERMultiEvaluator,
3130
CoSTEERSingleFeedback,
@@ -35,8 +34,8 @@
3534
)
3635
from rdagent.components.coder.CoSTEER.knowledge_management import (
3736
CoSTEERQueriedKnowledge,
38-
CoSTEERQueriedKnowledgeV2,
3937
)
38+
from rdagent.components.coder.data_science.conf import DSCoderCoSTEERSettings
4039
from rdagent.components.coder.data_science.raw_data_loader.eval import (
4140
DataLoaderCoSTEEREvaluator,
4241
)
@@ -187,9 +186,10 @@ def __init__(
187186
*args,
188187
**kwargs,
189188
) -> None:
189+
settings = DSCoderCoSTEERSettings()
190190
eva = CoSTEERMultiEvaluator(
191191
DataLoaderCoSTEEREvaluator(scen=scen), scen=scen
192192
) # Please specify whether you agree running your eva in parallel or not
193-
es = DataLoaderMultiProcessEvolvingStrategy(scen=scen, settings=CoSTEER_SETTINGS)
193+
es = DataLoaderMultiProcessEvolvingStrategy(scen=scen, settings=settings)
194194

195-
super().__init__(*args, settings=CoSTEER_SETTINGS, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)
195+
super().__init__(*args, settings=settings, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)

rdagent/components/coder/data_science/workflow/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import json
22

33
from rdagent.components.coder.CoSTEER import CoSTEER
4-
from rdagent.components.coder.CoSTEER.config import CoSTEER_SETTINGS
54
from rdagent.components.coder.CoSTEER.evaluators import (
65
CoSTEERMultiEvaluator,
76
CoSTEERSingleFeedback,
@@ -12,6 +11,7 @@
1211
from rdagent.components.coder.CoSTEER.knowledge_management import (
1312
CoSTEERQueriedKnowledge,
1413
)
14+
from rdagent.components.coder.data_science.conf import DSCoderCoSTEERSettings
1515
from rdagent.components.coder.data_science.workflow.eval import (
1616
WorkflowGeneralCaseSpecEvaluator,
1717
)
@@ -110,8 +110,9 @@ def __init__(
110110
*args,
111111
**kwargs,
112112
) -> None:
113+
settings = DSCoderCoSTEERSettings()
113114
eva = CoSTEERMultiEvaluator(
114115
WorkflowGeneralCaseSpecEvaluator(scen=scen), scen=scen
115116
) # Please specify whether you agree running your eva in parallel or not
116-
es = WorkflowMultiProcessEvolvingStrategy(scen=scen, settings=CoSTEER_SETTINGS)
117-
super().__init__(*args, settings=CoSTEER_SETTINGS, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)
117+
es = WorkflowMultiProcessEvolvingStrategy(scen=scen, settings=settings)
118+
super().__init__(*args, settings=settings, eva=eva, es=es, evolving_version=2, scen=scen, **kwargs)

rdagent/core/evolving_agent.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ def multistep_evolve(
8585
evolving_trace=self.evolving_trace,
8686
queried_knowledge=queried_knowledge,
8787
)
88-
yield evo # yield the control to caller for process control and logging.
8988

9089
# 4. Pack evolve results
9190
es = EvoStep(evo, queried_knowledge)
@@ -100,6 +99,8 @@ def multistep_evolve(
10099
# 6. update trace
101100
self.evolving_trace.append(es)
102101

102+
yield evo # yield the control to caller for process control and logging.
103+
103104
# 7. check if all tasks are completed
104105
if self.with_feedback and es.feedback:
105106
logger.info("All tasks in evolving subject have been completed.")

0 commit comments

Comments
 (0)