mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-27 15:37:44 +00:00
fix(security): replace remaining assert statements with proper error handling
Replaced 53 assert statements across 22 files with proper if/raise patterns (TypeError, ValueError, AssertionError) to resolve Bandit B101 alerts.
This commit is contained in:
@@ -201,6 +201,5 @@ class DataScienceBasePropSetting(KaggleBasePropSetting):
|
||||
DS_RD_SETTING = DataScienceBasePropSetting()
|
||||
|
||||
# enable_cross_trace_diversity and llm_select_hypothesis should not be true at the same time
|
||||
assert not (
|
||||
DS_RD_SETTING.enable_cross_trace_diversity and DS_RD_SETTING.llm_select_hypothesis
|
||||
), "enable_cross_trace_diversity and llm_select_hypothesis cannot be true at the same time"
|
||||
if DS_RD_SETTING.enable_cross_trace_diversity and DS_RD_SETTING.llm_select_hypothesis:
|
||||
raise ValueError("enable_cross_trace_diversity and llm_select_hypothesis cannot be true at the same time")
|
||||
|
||||
@@ -58,18 +58,18 @@ def main(
|
||||
|
||||
if user_target_scenario:
|
||||
FT_RD_SETTING.user_target_scenario = user_target_scenario
|
||||
assert (
|
||||
FT_RD_SETTING.user_target_scenario is None
|
||||
), "user_target_scenario is not yet supported, please specify via benchmark and benchmark_description"
|
||||
if FT_RD_SETTING.user_target_scenario is not None:
|
||||
raise ValueError("user_target_scenario is not yet supported, please specify via benchmark and benchmark_description")
|
||||
if upper_data_size_limit:
|
||||
FT_RD_SETTING.upper_data_size_limit = upper_data_size_limit
|
||||
logger.info(f"Set upper_data_size_limit to {FT_RD_SETTING.upper_data_size_limit}")
|
||||
if benchmark and benchmark_description:
|
||||
FT_RD_SETTING.target_benchmark = benchmark
|
||||
FT_RD_SETTING.benchmark_description = benchmark_description
|
||||
assert FT_RD_SETTING.user_target_scenario or (
|
||||
FT_RD_SETTING.target_benchmark and FT_RD_SETTING.benchmark_description
|
||||
), "Either user_target_scenario or target_benchmark must be specified for LLM fine-tuning."
|
||||
if not (
|
||||
FT_RD_SETTING.user_target_scenario or (FT_RD_SETTING.target_benchmark and FT_RD_SETTING.benchmark_description)
|
||||
):
|
||||
raise ValueError("Either user_target_scenario or target_benchmark must be specified for LLM fine-tuning.")
|
||||
|
||||
# Update configuration with provided parameters
|
||||
if dataset:
|
||||
@@ -82,9 +82,8 @@ def main(
|
||||
model_target = FT_RD_SETTING.base_model if FT_RD_SETTING.base_model else "auto selected model"
|
||||
|
||||
# Temporary assertion until auto-selection is implemented
|
||||
assert (
|
||||
FT_RD_SETTING.base_model is not None
|
||||
), "Base model auto selection not yet supported, please specify via --base-model"
|
||||
if FT_RD_SETTING.base_model is None:
|
||||
raise ValueError("Base model auto selection not yet supported, please specify via --base-model")
|
||||
|
||||
logger.info(f"Starting LLM fine-tuning on dataset='{data_set_target}' with model='{model_target}'")
|
||||
|
||||
|
||||
@@ -78,7 +78,8 @@ class QuantRDLoop(RDLoop):
|
||||
while True:
|
||||
if self.get_unfinished_loop_cnt(self.loop_idx) < RD_AGENT_SETTINGS.get_max_parallel():
|
||||
hypo = self._propose()
|
||||
assert hypo.action in ["factor", "model"]
|
||||
if hypo.action not in ["factor", "model"]:
|
||||
raise ValueError(f"hypo.action must be 'factor' or 'model', got {hypo.action!r}")
|
||||
if hypo.action == "factor":
|
||||
exp = self.factor_hypothesis2experiment.convert(hypo, self.trace)
|
||||
else:
|
||||
|
||||
@@ -75,8 +75,10 @@ class CoSTEER(Developer[Experiment]):
|
||||
|
||||
def _get_last_fb(self) -> CoSTEERMultiFeedback:
|
||||
fb = self.evolve_agent.evolving_trace[-1].feedback
|
||||
assert fb is not None, "feedback is None"
|
||||
assert isinstance(fb, CoSTEERMultiFeedback), "feedback must be of type CoSTEERMultiFeedback"
|
||||
if fb is None:
|
||||
raise AssertionError("feedback is None")
|
||||
if not isinstance(fb, CoSTEERMultiFeedback):
|
||||
raise TypeError("feedback must be of type CoSTEERMultiFeedback")
|
||||
return fb
|
||||
|
||||
def should_use_new_evo(self, base_fb: CoSTEERMultiFeedback | None, new_fb: CoSTEERMultiFeedback) -> bool:
|
||||
@@ -121,7 +123,8 @@ class CoSTEER(Developer[Experiment]):
|
||||
|
||||
for evo_exp in self.evolve_agent.multistep_evolve(evo_exp, self.evaluator):
|
||||
iteration_count += 1
|
||||
assert isinstance(evo_exp, Experiment) # multiple inheritance
|
||||
if not isinstance(evo_exp, Experiment):
|
||||
raise TypeError("evo_exp must be an instance of Experiment")
|
||||
evo_fb = self._get_last_fb()
|
||||
update_fallback = self.should_use_new_evo(
|
||||
base_fb=fallback_evo_fb,
|
||||
@@ -154,7 +157,8 @@ class CoSTEER(Developer[Experiment]):
|
||||
evo_exp = fallback_evo_exp
|
||||
evo_exp.recover_ws_ckp()
|
||||
evo_fb = fallback_evo_fb
|
||||
assert evo_fb is not None # multistep_evolve should run at least once
|
||||
if evo_fb is None:
|
||||
raise AssertionError("multistep_evolve should run at least once")
|
||||
evo_exp = self._exp_postprocess_by_feedback(evo_exp, evo_fb)
|
||||
except CoderError as e:
|
||||
e.caused_by_timeout = reached_max_seconds
|
||||
@@ -264,9 +268,12 @@ class CoSTEER(Developer[Experiment]):
|
||||
- Raise Error if it failed to handle the develop task
|
||||
-
|
||||
"""
|
||||
assert isinstance(evo, Experiment)
|
||||
assert isinstance(feedback, CoSTEERMultiFeedback)
|
||||
assert len(evo.sub_workspace_list) == len(feedback)
|
||||
if not isinstance(evo, Experiment):
|
||||
raise TypeError("evo must be an instance of Experiment")
|
||||
if not isinstance(feedback, CoSTEERMultiFeedback):
|
||||
raise TypeError("feedback must be an instance of CoSTEERMultiFeedback")
|
||||
if len(evo.sub_workspace_list) != len(feedback):
|
||||
raise ValueError("Length of sub_workspace_list must match length of feedback")
|
||||
|
||||
# FIXME: when whould the feedback be None?
|
||||
failed_feedbacks = [
|
||||
|
||||
@@ -122,7 +122,8 @@ class MultiProcessEvolvingStrategy(EvolvingStrategy):
|
||||
last_feedback = None
|
||||
if len(evolving_trace) > 0:
|
||||
last_feedback = evolving_trace[-1].feedback
|
||||
assert isinstance(last_feedback, CoSTEERMultiFeedback)
|
||||
if not isinstance(last_feedback, CoSTEERMultiFeedback):
|
||||
raise TypeError("last_feedback must be of type CoSTEERMultiFeedback")
|
||||
|
||||
# 1.找出需要evolve的task
|
||||
to_be_finished_task_index: list[int] = []
|
||||
|
||||
@@ -1028,7 +1028,8 @@ class CoSTEERKnowledgeBaseV2(EvolvingKnowledgeBase):
|
||||
|
||||
"""
|
||||
node_count = len(nodes)
|
||||
assert node_count >= 2, "nodes length must >=2"
|
||||
if node_count < 2:
|
||||
raise ValueError("nodes length must >=2")
|
||||
intersection_node_list = []
|
||||
if output_intersection_origin:
|
||||
origin_list = []
|
||||
|
||||
@@ -58,10 +58,12 @@ class ModelCodeEvaluator(CoSTEEREvaluator):
|
||||
model_execution_feedback: str = "",
|
||||
model_value_feedback: str = "",
|
||||
):
|
||||
assert isinstance(target_task, ModelTask)
|
||||
assert isinstance(implementation, ModelFBWorkspace)
|
||||
if gt_implementation is not None:
|
||||
assert isinstance(gt_implementation, ModelFBWorkspace)
|
||||
if not isinstance(target_task, ModelTask):
|
||||
raise TypeError("target_task must be of type ModelTask")
|
||||
if not isinstance(implementation, ModelFBWorkspace):
|
||||
raise TypeError("implementation must be of type ModelFBWorkspace")
|
||||
if gt_implementation is not None and not isinstance(gt_implementation, ModelFBWorkspace):
|
||||
raise TypeError("gt_implementation must be of type ModelFBWorkspace")
|
||||
|
||||
model_task_information = target_task.get_task_information()
|
||||
code = implementation.all_codes
|
||||
@@ -113,10 +115,12 @@ class ModelFinalEvaluator(CoSTEEREvaluator):
|
||||
model_value_feedback: str,
|
||||
model_code_feedback: str,
|
||||
):
|
||||
assert isinstance(target_task, ModelTask)
|
||||
assert isinstance(implementation, ModelFBWorkspace)
|
||||
if gt_implementation is not None:
|
||||
assert isinstance(gt_implementation, ModelFBWorkspace)
|
||||
if not isinstance(target_task, ModelTask):
|
||||
raise TypeError("target_task must be of type ModelTask")
|
||||
if not isinstance(implementation, ModelFBWorkspace):
|
||||
raise TypeError("implementation must be of type ModelFBWorkspace")
|
||||
if gt_implementation is not None and not isinstance(gt_implementation, ModelFBWorkspace):
|
||||
raise TypeError("gt_implementation must be of type ModelFBWorkspace")
|
||||
|
||||
system_prompt = T(".prompts:evaluator_final_feedback.system").r(
|
||||
scenario=(
|
||||
|
||||
@@ -85,13 +85,16 @@ def load_and_process_one_pdf_by_azure_document_intelligence(
|
||||
|
||||
|
||||
def load_and_process_pdfs_by_azure_document_intelligence(path: Path) -> dict[str, str]:
|
||||
assert RD_AGENT_SETTINGS.azure_document_intelligence_key is not None
|
||||
assert RD_AGENT_SETTINGS.azure_document_intelligence_endpoint is not None
|
||||
if RD_AGENT_SETTINGS.azure_document_intelligence_key is None:
|
||||
raise AssertionError("azure_document_intelligence_key must be set")
|
||||
if RD_AGENT_SETTINGS.azure_document_intelligence_endpoint is None:
|
||||
raise AssertionError("azure_document_intelligence_endpoint must be set")
|
||||
|
||||
content_dict = {}
|
||||
ab_path = path.resolve()
|
||||
if ab_path.is_file():
|
||||
assert ".pdf" in ab_path.suffixes, "The file must be a PDF file."
|
||||
if ".pdf" not in ab_path.suffixes:
|
||||
raise ValueError("The file must be a PDF file.")
|
||||
proc = load_and_process_one_pdf_by_azure_document_intelligence
|
||||
content_dict[str(ab_path)] = proc(
|
||||
ab_path,
|
||||
|
||||
@@ -87,7 +87,8 @@ class ModelWsLoader(WsLoader[ModelTask, ModelFBWorkspace]):
|
||||
self.path = Path(path)
|
||||
|
||||
def load(self, task: ModelTask) -> ModelFBWorkspace:
|
||||
assert task.name is not None
|
||||
if task.name is None:
|
||||
raise AssertionError("task.name should not be None")
|
||||
mti = ModelFBWorkspace(task)
|
||||
mti.prepare()
|
||||
with open(self.path / f"{task.name}.py", "r") as f:
|
||||
|
||||
@@ -541,7 +541,8 @@ class APIBackend(ABC):
|
||||
**kwargs,
|
||||
) -> str | list[list[float]]:
|
||||
"""This function to share operation between embedding and chat completion"""
|
||||
assert not (chat_completion and embedding), "chat_completion and embedding cannot be True at the same time"
|
||||
if chat_completion and embedding:
|
||||
raise ValueError("chat_completion and embedding cannot be True at the same time")
|
||||
max_retry = LLM_SETTINGS.max_retry if LLM_SETTINGS.max_retry is not None else max_retry
|
||||
timeout_count = 0
|
||||
violation_count = 0
|
||||
|
||||
@@ -268,7 +268,8 @@ class JsonReducer(DataReducer):
|
||||
parent[key] = sampled # type: ignore # parent 是 list,key 是 index, list.__setitem__(key, sampled)
|
||||
self.sampled_files.extend([self.extract_filename(i) for i in sampled])
|
||||
break
|
||||
assert len(self.sampled_files) > 0
|
||||
if len(self.sampled_files) <= 0:
|
||||
raise AssertionError("sampled_files must contain at least one file")
|
||||
return data
|
||||
|
||||
def _find_all_lists(
|
||||
|
||||
+14
-11
@@ -56,14 +56,17 @@ sparse.save_npz(public / "test" / "X.npz", X_test)
|
||||
sparse.save_npz(public / "train" / "X.npz", X_train)
|
||||
df_train.to_csv(public / "train" / "ARF_12h.csv", index=False)
|
||||
|
||||
assert (
|
||||
X_train.shape[0] == df_train.shape[0]
|
||||
), f"Mismatch: X_train rows ({X_train.shape[0]}) != df_train rows ({df_train.shape[0]})"
|
||||
assert (
|
||||
X_test.shape[0] == df_test.shape[0]
|
||||
), f"Mismatch: X_test rows ({X_test.shape[0]}) != df_test rows ({df_test.shape[0]})"
|
||||
assert df_test.shape[1] == 2, "Public test set should have 2 columns"
|
||||
assert df_train.shape[1] == 3, "Public train set should have 3 columns"
|
||||
assert len(df_train) + len(df_test) == len(
|
||||
df_label
|
||||
), "Length of new_train and new_test should equal length of old_train"
|
||||
if X_train.shape[0] != df_train.shape[0]:
|
||||
raise ValueError(
|
||||
f"Mismatch: X_train rows ({X_train.shape[0]}) != df_train rows ({df_train.shape[0]})"
|
||||
)
|
||||
if X_test.shape[0] != df_test.shape[0]:
|
||||
raise ValueError(
|
||||
f"Mismatch: X_test rows ({X_test.shape[0]}) != df_test rows ({df_test.shape[0]})"
|
||||
)
|
||||
if df_test.shape[1] != 2:
|
||||
raise ValueError("Public test set should have 2 columns")
|
||||
if df_train.shape[1] != 3:
|
||||
raise ValueError("Public train set should have 3 columns")
|
||||
if len(df_train) + len(df_test) != len(df_label):
|
||||
raise ValueError("Length of new_train and new_test should equal length of old_train")
|
||||
|
||||
@@ -320,7 +320,8 @@ class DataScienceRDLoop(RDLoop):
|
||||
# only clean current workspace without affecting other loops.
|
||||
for k in "direct_exp_gen", "coding", "running":
|
||||
if k in prev_out and prev_out[k] is not None:
|
||||
assert isinstance(prev_out[k], DSExperiment)
|
||||
if not isinstance(prev_out[k], DSExperiment):
|
||||
raise TypeError(f"prev_out[{k!r}] must be an instance of DSExperiment")
|
||||
clean_workspace(prev_out[k].experiment_workspace.workspace_path)
|
||||
|
||||
# Backup the workspace (only necessary files are included)
|
||||
|
||||
@@ -213,7 +213,8 @@ class DSTrace(Trace[DataScienceScen, KnowledgeBase]):
|
||||
self, component: COMPONENT, search_list: list[tuple[DSExperiment, ExperimentFeedback]] = []
|
||||
) -> bool:
|
||||
for exp, fb in search_list:
|
||||
assert isinstance(exp.hypothesis, DSHypothesis), "Hypothesis should be DSHypothesis (and not None)"
|
||||
if not isinstance(exp.hypothesis, DSHypothesis):
|
||||
raise TypeError("Hypothesis should be DSHypothesis (and not None)")
|
||||
if exp.hypothesis.component == component and fb:
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -377,7 +377,8 @@ class ExpGen2TraceAndMergeV2(ExpGen):
|
||||
if DS_RD_SETTING.enable_multi_version_exp_gen:
|
||||
exp_gen_version_list = DS_RD_SETTING.exp_gen_version_list.split(",")
|
||||
for version in exp_gen_version_list:
|
||||
assert version in ["v3", "v2", "v1"]
|
||||
if version not in ["v3", "v2", "v1"]:
|
||||
raise ValueError(f"version must be 'v1', 'v2', or 'v3', got {version!r}")
|
||||
|
||||
if len(trace.hist) == 0:
|
||||
# set the proposal version for the first sub-trace
|
||||
|
||||
@@ -339,7 +339,8 @@ class DSProposalV1ExpGen(ExpGen):
|
||||
eda_output = sota_exp.experiment_workspace.file_dict.get("EDA.md", None)
|
||||
scenario_desc = trace.scen.get_scenario_all_desc(eda_output=eda_output)
|
||||
|
||||
assert sota_exp is not None, "SOTA experiment is not provided."
|
||||
if sota_exp is None:
|
||||
raise ValueError("SOTA experiment is not provided.")
|
||||
last_exp = trace.last_exp()
|
||||
# exp_and_feedback = trace.hist[-1]
|
||||
# last_exp = exp_and_feedback[0]
|
||||
@@ -445,8 +446,10 @@ class DSProposalV1ExpGen(ExpGen):
|
||||
json_target_type=dict[str, dict[str, str | dict] | str],
|
||||
)
|
||||
)
|
||||
assert "hypothesis_proposal" in resp_dict, "Hypothesis proposal not provided."
|
||||
assert "task_design" in resp_dict, "Task design not provided."
|
||||
if "hypothesis_proposal" not in resp_dict:
|
||||
raise ValueError("Hypothesis proposal not provided.")
|
||||
if "task_design" not in resp_dict:
|
||||
raise ValueError("Task design not provided.")
|
||||
task_class = component_info["task_class"]
|
||||
hypothesis_proposal = resp_dict.get("hypothesis_proposal", {})
|
||||
hypothesis = DSHypothesis(
|
||||
@@ -1149,8 +1152,10 @@ You help users retrieve relevant knowledge from community discussions and public
|
||||
)
|
||||
|
||||
response_dict = json.loads(response)
|
||||
assert response_dict.get("component") in HypothesisComponent.__members__, f"Invalid component"
|
||||
assert response_dict.get("hypothesis") is not None, f"Invalid hypothesis"
|
||||
if response_dict.get("component") not in HypothesisComponent.__members__:
|
||||
raise ValueError(f"Invalid component: {response_dict.get('component')}")
|
||||
if response_dict.get("hypothesis") is None:
|
||||
raise ValueError("Invalid hypothesis")
|
||||
return response_dict
|
||||
|
||||
# END: for support llm-based hypothesis selection -----
|
||||
@@ -1253,7 +1258,8 @@ You help users retrieve relevant knowledge from community discussions and public
|
||||
description=task_desc,
|
||||
)
|
||||
|
||||
assert isinstance(task, PipelineTask), f"Task {task_name} is not a PipelineTask, got {type(task)}"
|
||||
if not isinstance(task, PipelineTask):
|
||||
raise TypeError(f"Task {task_name} is not a PipelineTask, got {type(task)}")
|
||||
# only for llm with response schema.(TODO: support for non-schema llm?)
|
||||
# If the LLM provides a "packages" field (list[str]), compute runtime environment now and cache it for subsequent prompts in later loops.
|
||||
if isinstance(task_dict, dict) and "packages" in task_dict and isinstance(task_dict["packages"], list):
|
||||
|
||||
@@ -165,7 +165,8 @@ class KGScenario(Scenario):
|
||||
return data_info
|
||||
|
||||
def output_format(self, tag=None) -> str:
|
||||
assert tag in [None, "feature", "model"]
|
||||
if tag not in [None, "feature", "model"]:
|
||||
raise ValueError(f"tag must be None, 'feature', or 'model', got {tag!r}")
|
||||
feature_output_format = f"""The feature code should output following the format:
|
||||
{T(".prompts:kg_feature_output_format").r()}"""
|
||||
model_output_format = f"""The model code should output following the format:\n""" + T(
|
||||
@@ -180,7 +181,8 @@ class KGScenario(Scenario):
|
||||
return model_output_format
|
||||
|
||||
def interface(self, tag=None) -> str:
|
||||
assert tag in [None, "feature", "XGBoost", "RandomForest", "LightGBM", "NN"]
|
||||
if tag not in [None, "feature", "XGBoost", "RandomForest", "LightGBM", "NN"]:
|
||||
raise ValueError(f"tag must be None, 'feature', 'XGBoost', 'RandomForest', 'LightGBM', or 'NN', got {tag!r}")
|
||||
feature_interface = f"""The feature code should follow the interface:
|
||||
{T(".prompts:kg_feature_interface").r()}"""
|
||||
if tag == "feature":
|
||||
@@ -195,7 +197,8 @@ class KGScenario(Scenario):
|
||||
return model_interface
|
||||
|
||||
def simulator(self, tag=None) -> str:
|
||||
assert tag in [None, "feature", "model"]
|
||||
if tag not in [None, "feature", "model"]:
|
||||
raise ValueError(f"tag must be None, 'feature', or 'model', got {tag!r}")
|
||||
|
||||
kg_feature_simulator = (
|
||||
"The feature code will be sent to the simulator:\n" + T(".prompts:kg_feature_simulator").r()
|
||||
|
||||
@@ -87,7 +87,12 @@ def crawl_descriptions(
|
||||
content = e.get_attribute("innerHTML")
|
||||
contents.append(content)
|
||||
|
||||
assert len(subtitles) == len(contents) + 1 and subtitles[-1] == "Citation"
|
||||
if not (len(subtitles) == len(contents) + 1 and subtitles[-1] == "Citation"):
|
||||
raise AssertionError(
|
||||
f"Expected len(contents)+1 == len(subtitles) and last subtitle == 'Citation', "
|
||||
f"got len(subtitles)={len(subtitles)}, len(contents)={len(contents)}, "
|
||||
f"last subtitle={subtitles[-1]!r}"
|
||||
)
|
||||
for i in range(len(subtitles) - 1):
|
||||
descriptions[subtitles[i]] = contents[i]
|
||||
|
||||
|
||||
@@ -307,7 +307,8 @@ class KGHypothesisGen(FactorAndModelHypothesisGen):
|
||||
class KGHypothesis2Experiment(FactorAndModelHypothesis2Experiment):
|
||||
def prepare_context(self, hypothesis: Hypothesis, trace: Trace) -> Tuple[dict, bool]:
|
||||
scenario = trace.scen.get_scenario_all_desc(filtered_tag="hypothesis_and_experiment")
|
||||
assert isinstance(hypothesis, KGHypothesis)
|
||||
if not isinstance(hypothesis, KGHypothesis):
|
||||
raise TypeError("hypothesis must be an instance of KGHypothesis")
|
||||
experiment_output_format = (
|
||||
T("scenarios.kaggle.prompts:feature_experiment_output_format").r()
|
||||
if hypothesis.action in [KG_ACTION_FEATURE_ENGINEERING, KG_ACTION_FEATURE_PROCESSING]
|
||||
|
||||
@@ -56,7 +56,8 @@ class QlibQuantScenario(Scenario):
|
||||
)
|
||||
|
||||
def background(self, tag=None) -> str:
|
||||
assert tag in [None, "factor", "model"]
|
||||
if tag not in [None, "factor", "model"]:
|
||||
raise ValueError(f"tag must be None, 'factor', or 'model', got {tag!r}")
|
||||
quant_background = "The background of the scenario is as follows:\n" + T(".prompts:qlib_quant_background").r(
|
||||
runtime_environment=self.get_runtime_environment(),
|
||||
)
|
||||
@@ -83,7 +84,8 @@ class QlibQuantScenario(Scenario):
|
||||
return self._source_data
|
||||
|
||||
def output_format(self, tag=None) -> str:
|
||||
assert tag in [None, "factor", "model"]
|
||||
if tag not in [None, "factor", "model"]:
|
||||
raise ValueError(f"tag must be None, 'factor', or 'model', got {tag!r}")
|
||||
factor_output_format = (
|
||||
"The factor code should output the following format:\n" + T(".prompts:qlib_factor_output_format").r()
|
||||
)
|
||||
@@ -99,7 +101,8 @@ class QlibQuantScenario(Scenario):
|
||||
return model_output_format
|
||||
|
||||
def interface(self, tag=None) -> str:
|
||||
assert tag in [None, "factor", "model"]
|
||||
if tag not in [None, "factor", "model"]:
|
||||
raise ValueError(f"tag must be None, 'factor', or 'model', got {tag!r}")
|
||||
factor_interface = (
|
||||
"The factor code should be written in the following interface:\n" + T(".prompts:qlib_factor_interface").r()
|
||||
)
|
||||
@@ -115,7 +118,8 @@ class QlibQuantScenario(Scenario):
|
||||
return model_interface
|
||||
|
||||
def simulator(self, tag=None) -> str:
|
||||
assert tag in [None, "factor", "model"]
|
||||
if tag not in [None, "factor", "model"]:
|
||||
raise ValueError(f"tag must be None, 'factor', or 'model', got {tag!r}")
|
||||
factor_simulator = "The factor code will be sent to the simulator:\n" + T(".prompts:qlib_factor_simulator").r()
|
||||
model_simulator = "The model code will be sent to the simulator:\n" + T(".prompts:qlib_model_simulator").r()
|
||||
|
||||
@@ -185,7 +189,8 @@ class QlibQuantScenario(Scenario):
|
||||
return common_description(action) + interface(action) + output(action) + simulator(action)
|
||||
|
||||
def get_runtime_environment(self, tag: str = None) -> str:
|
||||
assert tag in [None, "factor", "model"]
|
||||
if tag not in [None, "factor", "model"]:
|
||||
raise ValueError(f"tag must be None, 'factor', or 'model', got {tag!r}")
|
||||
|
||||
if tag is None or tag == "factor":
|
||||
# Use factor env to get the runtime environment
|
||||
|
||||
@@ -620,7 +620,8 @@ class LocalEnv(Env[ASpecificLocalConf]):
|
||||
for lp, rp in running_extra_volume.items():
|
||||
volumes[lp] = rp
|
||||
|
||||
assert local_path is not None, "local_path should not be None"
|
||||
if local_path is None:
|
||||
raise ValueError("local_path should not be None")
|
||||
volumes = normalize_volumes(volumes, local_path)
|
||||
|
||||
@contextlib.contextmanager
|
||||
@@ -1472,7 +1473,8 @@ class DockerEnv(Env[DockerConf]):
|
||||
cpu_count=self.conf.cpu_count, # Set CPU limit
|
||||
**self._gpu_kwargs(client),
|
||||
)
|
||||
assert container is not None # Ensure container was created successfully
|
||||
if container is None:
|
||||
raise AssertionError("Docker container was not created successfully")
|
||||
logs = container.logs(stream=True)
|
||||
print(Rule("[bold green]Docker Logs Begin[/bold green]", style="dark_orange"))
|
||||
table = Table(title="Run Info", show_header=False)
|
||||
|
||||
@@ -84,7 +84,8 @@ class WorkflowTracker:
|
||||
# Log timer status if timer is started
|
||||
if self.loop_base.timer.started:
|
||||
remain_time = self.loop_base.timer.remain_time()
|
||||
assert remain_time is not None
|
||||
if remain_time is None:
|
||||
raise AssertionError("remain_time should not be None")
|
||||
mlflow.log_metric("remain_time", remain_time.total_seconds())
|
||||
mlflow.log_metric(
|
||||
"remain_percent",
|
||||
|
||||
Reference in New Issue
Block a user