mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-28 16:07:46 +00:00
d5a6a08210
* ignore result csv file * fix app scripts * rename taskgenerator to developer and generate to develop * fix a config bug in coder * fix a small bug in factor coder evaluators * remove a single logger in factor coder evaluators * fix a small bug in model coder main.py * rename Implementation to Workspace * move the prepare the inject_code into FBWorkspace to align all the behavior * fix a small bug in model feedback * remove debug lines for multi processing and simplify evaluators multi proc * add a copy function to workspace to freeze the workspace && add config prefix to speed up debugging * make hypothesisgen a abc class * use Qlib***Experiment * fix a small bug * rename Imp to Ws * rename sub_implementations to sub_workspace_list * fix a bug in feedback not presented as content in prompts * move proposal pys to proposal folder * reformat the folder * align factor and model qlib workspace and use template to handle the workspace * add a filter to evoagent to filter out false evo * align multi_proc_n into RDAGENT seeting * handle when runner gets empty experiment * fix logger merge remaining problems * fix black and isort automatically
93 lines
3.6 KiB
Python
93 lines
3.6 KiB
Python
import pickle
|
|
from pathlib import Path
|
|
|
|
from rdagent.components.coder.model_coder.conf import MODEL_IMPL_SETTINGS
|
|
from rdagent.components.coder.model_coder.CoSTEER.evaluators import (
|
|
ModelCoderMultiEvaluator,
|
|
)
|
|
from rdagent.components.coder.model_coder.CoSTEER.evolvable_subjects import (
|
|
ModelEvolvingItem,
|
|
)
|
|
from rdagent.components.coder.model_coder.CoSTEER.evolving_agent import ModelRAGEvoAgent
|
|
from rdagent.components.coder.model_coder.CoSTEER.evolving_strategy import (
|
|
ModelCoderEvolvingStrategy,
|
|
)
|
|
from rdagent.components.coder.model_coder.CoSTEER.knowledge_management import (
|
|
ModelKnowledgeBase,
|
|
ModelRAGStrategy,
|
|
)
|
|
from rdagent.components.coder.model_coder.model import ModelExperiment
|
|
from rdagent.core.developer import Developer
|
|
from rdagent.core.evolving_agent import RAGEvoAgent
|
|
|
|
|
|
class ModelCoSTEER(Developer[ModelExperiment]):
|
|
def __init__(
|
|
self,
|
|
*args,
|
|
with_knowledge: bool = True,
|
|
with_feedback: bool = True,
|
|
knowledge_self_gen: bool = True,
|
|
filter_final_evo: bool = True,
|
|
**kwargs,
|
|
) -> None:
|
|
super().__init__(*args, **kwargs)
|
|
self.max_loop = MODEL_IMPL_SETTINGS.max_loop
|
|
self.knowledge_base_path = (
|
|
Path(MODEL_IMPL_SETTINGS.knowledge_base_path)
|
|
if MODEL_IMPL_SETTINGS.knowledge_base_path is not None
|
|
else None
|
|
)
|
|
self.new_knowledge_base_path = (
|
|
Path(MODEL_IMPL_SETTINGS.new_knowledge_base_path)
|
|
if MODEL_IMPL_SETTINGS.new_knowledge_base_path is not None
|
|
else None
|
|
)
|
|
self.with_knowledge = with_knowledge
|
|
self.with_feedback = with_feedback
|
|
self.knowledge_self_gen = knowledge_self_gen
|
|
self.filter_final_evo = filter_final_evo
|
|
self.evolving_strategy = ModelCoderEvolvingStrategy(scen=self.scen)
|
|
self.model_evaluator = ModelCoderMultiEvaluator(scen=self.scen)
|
|
|
|
def load_or_init_knowledge_base(self, former_knowledge_base_path: Path = None, component_init_list: list = []):
|
|
if former_knowledge_base_path is not None and former_knowledge_base_path.exists():
|
|
model_knowledge_base = pickle.load(open(former_knowledge_base_path, "rb"))
|
|
if not isinstance(model_knowledge_base, ModelKnowledgeBase):
|
|
raise ValueError("The former knowledge base is not compatible with the current version")
|
|
else:
|
|
model_knowledge_base = ModelKnowledgeBase()
|
|
|
|
return model_knowledge_base
|
|
|
|
def develop(self, exp: ModelExperiment) -> ModelExperiment:
|
|
# init knowledge base
|
|
model_knowledge_base = self.load_or_init_knowledge_base(
|
|
former_knowledge_base_path=self.knowledge_base_path,
|
|
component_init_list=[],
|
|
)
|
|
# init rag method
|
|
self.rag = ModelRAGStrategy(model_knowledge_base)
|
|
|
|
# init intermediate items
|
|
model_experiment = ModelEvolvingItem(sub_tasks=exp.sub_tasks)
|
|
|
|
self.evolve_agent = ModelRAGEvoAgent(
|
|
max_loop=self.max_loop, evolving_strategy=self.evolving_strategy, rag=self.rag
|
|
)
|
|
|
|
model_experiment = self.evolve_agent.multistep_evolve(
|
|
model_experiment,
|
|
self.model_evaluator,
|
|
with_knowledge=self.with_knowledge,
|
|
with_feedback=self.with_feedback,
|
|
knowledge_self_gen=self.knowledge_self_gen,
|
|
filter_final_evo=self.filter_final_evo,
|
|
)
|
|
|
|
# save new knowledge base
|
|
if self.new_knowledge_base_path is not None:
|
|
pickle.dump(model_knowledge_base, open(self.new_knowledge_base_path, "wb"))
|
|
exp.sub_workspace_list = model_experiment.sub_workspace_list
|
|
return exp
|