mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-08-01 17:37:43 +00:00
d6ce70b551
* fix model input shape bug and costeer_model bug * fix a bug * fix a bug in docker result extraction * a system-level optimization * add a filter of stdout * update * add stdout to model * model training_hyperparameters update * quant scenario * update some quant settings * llm choose action * Thompson Sampling Bandit for action choosing * refine both scens * add trace messages for quant scen * fix some bugs * fix some bugs * update * update * update * fix * fix * fix * update for merge * fix ci * fix some bugs * fix ci * fix ci * fix ci * fix ci * refactor * default qlib4rdagent local env downloading * fix ci * fix ci * fix a bug * fix ci * fix: align all prompts on template (#908) * use template to render all prompts * fix CI --------- Co-authored-by: Xu Yang <xuyang1@microsoft.com> * add fin_quant in cli * fix a bug * fix ci * fix some bugs * refactor * remove the columns in hypothesis if no value generated in this column * fix a bug * fix ci * fix conda env * add qlib gitignore * remove existed qlib folder & install torch in qlib conda * fix workspace ui in feedback * align model config in coder and runner in docker or conda * fix CI * fix CI --------- Co-authored-by: Xu Yang <peteryang@vip.qq.com> Co-authored-by: Xu Yang <xuyang1@microsoft.com>
123 lines
4.8 KiB
Python
123 lines
4.8 KiB
Python
import json
|
|
from typing import List, Tuple
|
|
|
|
from rdagent.components.coder.model_coder.model import ModelExperiment, ModelTask
|
|
from rdagent.components.proposal import (
|
|
Hypothesis,
|
|
ModelHypothesis2Experiment,
|
|
ModelHypothesisGen,
|
|
)
|
|
from rdagent.core.proposal import Hypothesis, Scenario, Trace
|
|
from rdagent.scenarios.data_mining.experiment.model_experiment import DMModelExperiment
|
|
from rdagent.utils.agent.tpl import T
|
|
|
|
DMModelHypothesis = Hypothesis
|
|
|
|
|
|
class DMModelHypothesisGen(ModelHypothesisGen):
|
|
"""
|
|
# NOTE: we can share this class across different data mining scenarios
|
|
# It may better to move the class into components folder like `rdagent/components/proposal/model_proposal.py`
|
|
# Here is the use case:
|
|
|
|
.. code-block:: python
|
|
|
|
class XXXDMModelHypothesisGen(DMModelHypothesisGen):
|
|
prompts: Prompts = a_specifc_prompt_dict
|
|
"""
|
|
|
|
def __init__(self, scen: Scenario) -> Tuple[dict, bool]:
|
|
super().__init__(scen)
|
|
|
|
def prepare_context(self, trace: Trace) -> Tuple[dict, bool]:
|
|
hypothesis_and_feedback = (
|
|
T("scenarios.qlib.prompts:hypothesis_and_feedback").r(
|
|
trace=trace,
|
|
)
|
|
if len(trace.hist) > 0
|
|
else "No previous hypothesis and feedback available since it's the first round."
|
|
)
|
|
|
|
last_hypothesis_and_feedback = (
|
|
T("scenarios.qlib.prompts:last_hypothesis_and_feedback").r(
|
|
experiment=trace.hist[-1][0], feedback=trace.hist[-1][1]
|
|
)
|
|
if len(trace.hist) > 0
|
|
else "No previous hypothesis and feedback available since it's the first round."
|
|
)
|
|
|
|
context_dict = {
|
|
"hypothesis_and_feedback": hypothesis_and_feedback,
|
|
"last_hypothesis_and_feedback": last_hypothesis_and_feedback,
|
|
"RAG": None,
|
|
"hypothesis_output_format": T("scenarios.qlib.prompts:hypothesis_output_format").r(),
|
|
"hypothesis_specification": T("scenarios.qlib.prompts:model_hypothesis_specification").r(),
|
|
}
|
|
return context_dict, True
|
|
|
|
def convert_response(self, response: str) -> Hypothesis:
|
|
response_dict = json.loads(response)
|
|
hypothesis = DMModelHypothesis(
|
|
hypothesis=response_dict["hypothesis"],
|
|
reason=response_dict["reason"],
|
|
concise_reason=response_dict["concise_reason"],
|
|
concise_observation=response_dict["concise_observation"],
|
|
concise_justification=response_dict["concise_justification"],
|
|
concise_knowledge=response_dict["concise_knowledge"],
|
|
)
|
|
return hypothesis
|
|
|
|
|
|
class DMModelHypothesis2Experiment(ModelHypothesis2Experiment):
|
|
def prepare_context(self, hypothesis: Hypothesis, trace: Trace) -> Tuple[dict, bool]:
|
|
scenario = trace.scen.get_scenario_all_desc()
|
|
experiment_output_format = T("scenarios.qlib.prompts:model_experiment_output_format").r()
|
|
|
|
hypothesis_and_feedback = (
|
|
T("scenarios.qlib.prompts:hypothesis_and_feedback").r(
|
|
trace=trace,
|
|
)
|
|
if len(trace.hist) > 0
|
|
else "No previous hypothesis and feedback available since it's the first round."
|
|
)
|
|
|
|
experiment_list: List[ModelExperiment] = [t[0] for t in trace.hist]
|
|
|
|
model_list = []
|
|
for experiment in experiment_list:
|
|
model_list.extend(experiment.sub_tasks)
|
|
|
|
return {
|
|
"target_hypothesis": str(hypothesis),
|
|
"scenario": scenario,
|
|
"hypothesis_and_feedback": hypothesis_and_feedback,
|
|
"experiment_output_format": experiment_output_format,
|
|
"target_list": model_list,
|
|
"RAG": None,
|
|
}, True
|
|
|
|
def convert_response(self, response: str, hypothesis: Hypothesis, trace: Trace) -> ModelExperiment:
|
|
response_dict = json.loads(response)
|
|
tasks = []
|
|
for model_name in response_dict:
|
|
description = response_dict[model_name]["description"]
|
|
formulation = response_dict[model_name]["formulation"]
|
|
architecture = response_dict[model_name]["architecture"]
|
|
variables = response_dict[model_name]["variables"]
|
|
hyperparameters = response_dict[model_name]["hyperparameters"]
|
|
model_type = response_dict[model_name]["model_type"]
|
|
tasks.append(
|
|
ModelTask(
|
|
name=model_name,
|
|
description=description,
|
|
formulation=formulation,
|
|
architecture=architecture,
|
|
variables=variables,
|
|
hyperparameters=hyperparameters,
|
|
model_type=model_type,
|
|
)
|
|
)
|
|
exp = DMModelExperiment(tasks, hypothesis=hypothesis)
|
|
exp.based_experiments = [t[0] for t in trace.hist if t[1]]
|
|
return exp
|