mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-27 23:47:46 +00:00
e0a24fb46f
* 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
101 lines
3.4 KiB
Python
101 lines
3.4 KiB
Python
from abc import abstractmethod
|
|
from pathlib import Path
|
|
from typing import Tuple
|
|
|
|
from jinja2 import Environment, StrictUndefined
|
|
|
|
from rdagent.components.coder.factor_coder.factor import FactorExperiment
|
|
from rdagent.core.prompts import Prompts
|
|
from rdagent.core.proposal import (
|
|
Hypothesis,
|
|
Hypothesis2Experiment,
|
|
HypothesisGen,
|
|
Scenario,
|
|
Trace,
|
|
)
|
|
from rdagent.oai.llm_utils import APIBackend
|
|
|
|
prompt_dict = Prompts(file_path=Path(__file__).parent / "prompts.yaml")
|
|
|
|
|
|
FactorHypothesis = Hypothesis
|
|
|
|
|
|
class FactorHypothesisGen(HypothesisGen):
|
|
def __init__(self, scen: Scenario):
|
|
super().__init__(scen)
|
|
|
|
# The following methods are scenario related so they should be implemented in the subclass
|
|
@abstractmethod
|
|
def prepare_context(self, trace: Trace) -> Tuple[dict, bool]:
|
|
...
|
|
|
|
@abstractmethod
|
|
def convert_response(self, response: str) -> FactorHypothesis:
|
|
...
|
|
|
|
def gen(self, trace: Trace) -> FactorHypothesis:
|
|
context_dict, json_flag = self.prepare_context(trace)
|
|
|
|
system_prompt = (
|
|
Environment(undefined=StrictUndefined)
|
|
.from_string(prompt_dict["hypothesis_gen"]["system_prompt"])
|
|
.render(
|
|
targets="factors",
|
|
scenario=self.scen.get_scenario_all_desc(),
|
|
hypothesis_output_format=context_dict["hypothesis_output_format"],
|
|
)
|
|
)
|
|
user_prompt = (
|
|
Environment(undefined=StrictUndefined)
|
|
.from_string(prompt_dict["hypothesis_gen"]["user_prompt"])
|
|
.render(
|
|
targets="factors",
|
|
hypothesis_and_feedback=context_dict["hypothesis_and_feedback"],
|
|
RAG=context_dict["RAG"],
|
|
)
|
|
)
|
|
|
|
resp = APIBackend().build_messages_and_create_chat_completion(user_prompt, system_prompt, json_mode=json_flag)
|
|
|
|
hypothesis = self.convert_response(resp)
|
|
|
|
return hypothesis
|
|
|
|
|
|
class FactorHypothesis2Experiment(Hypothesis2Experiment[FactorExperiment]):
|
|
@abstractmethod
|
|
def prepare_context(self, hypothesis: Hypothesis, trace: Trace) -> Tuple[dict, bool]:
|
|
...
|
|
|
|
@abstractmethod
|
|
def convert_response(self, response: str, trace: Trace) -> FactorExperiment:
|
|
...
|
|
|
|
def convert(self, hypothesis: Hypothesis, trace: Trace) -> FactorExperiment:
|
|
context, json_flag = self.prepare_context(hypothesis, trace)
|
|
system_prompt = (
|
|
Environment(undefined=StrictUndefined)
|
|
.from_string(prompt_dict["hypothesis2experiment"]["system_prompt"])
|
|
.render(
|
|
targets="factors",
|
|
scenario=trace.scen.get_scenario_all_desc(),
|
|
experiment_output_format=context["experiment_output_format"],
|
|
)
|
|
)
|
|
user_prompt = (
|
|
Environment(undefined=StrictUndefined)
|
|
.from_string(prompt_dict["hypothesis2experiment"]["user_prompt"])
|
|
.render(
|
|
targets="factors",
|
|
target_hypothesis=context["target_hypothesis"],
|
|
hypothesis_and_feedback=context["hypothesis_and_feedback"],
|
|
target_list=context["target_list"],
|
|
RAG=context["RAG"],
|
|
)
|
|
)
|
|
|
|
resp = APIBackend().build_messages_and_create_chat_completion(user_prompt, system_prompt, json_mode=json_flag)
|
|
|
|
return self.convert_response(resp, trace)
|