From 8df0499041de9e1bb94f5b0d4bc89f33ad9256a7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Tue, 13 Jan 2026 21:05:42 +0100 Subject: [PATCH] feat(quickadapter): add model_path parameter for CatBoost train_dir Pass dk.data_path to fit_regressor to enable CatBoost train_dir configuration. For Optuna trials, creates isolated hp_trial_{N} subdirectories to avoid conflicts between parallel trial logs. Follows FreqTrade's mkdir pattern (parents=True, exist_ok=True). --- .../freqaimodels/QuickAdapterRegressorV3.py | 4 ++++ quickadapter/user_data/strategies/Utils.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py index e297399..afd50a6 100644 --- a/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py +++ b/quickadapter/user_data/freqaimodels/QuickAdapterRegressorV3.py @@ -1448,6 +1448,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): model_training_parameters, self._optuna_config.get("space_reduction"), self._optuna_config.get("space_fraction"), + dk.data_path, ), direction=optuna.study.StudyDirection.MINIMIZE, ) @@ -1479,6 +1480,7 @@ class QuickAdapterRegressorV3(BaseRegressionModel): eval_weights=eval_weights, model_training_parameters=model_training_parameters, init_model=self.get_init_model(dk.pair), + model_path=dk.data_path, ) time_spent = time.time() - start_time self.dd.update_metric_tracker("fit_time", time_spent, dk.pair) @@ -3270,6 +3272,7 @@ def hp_objective( model_training_parameters: dict[str, Any], space_reduction: bool, space_fraction: float, + model_path: Optional[Path] = None, ) -> float: study_model_parameters = get_optuna_study_model_parameters( trial, @@ -3293,6 +3296,7 @@ def hp_objective( eval_set=eval_set, eval_weights=eval_weights, model_training_parameters=model_training_parameters, + model_path=model_path, trial=trial, ) y_pred = model.predict(X_test) diff --git a/quickadapter/user_data/strategies/Utils.py b/quickadapter/user_data/strategies/Utils.py index 0399324..414a608 100644 --- a/quickadapter/user_data/strategies/Utils.py +++ b/quickadapter/user_data/strategies/Utils.py @@ -5,6 +5,7 @@ import math from enum import IntEnum from functools import lru_cache from logging import Logger +from pathlib import Path from typing import ( TYPE_CHECKING, Any, @@ -1677,6 +1678,7 @@ def fit_regressor( model_training_parameters: dict[str, Any], init_model: Any = None, callbacks: Optional[list[RegressorCallback]] = None, + model_path: Optional[Path] = None, trial: Optional[optuna.trial.Trial] = None, ) -> Any: """Fit a regressor model.""" @@ -1894,6 +1896,18 @@ def fit_regressor( model_training_parameters.setdefault("random_seed", 1) model_training_parameters.setdefault("loss_function", "RMSE") + if model_path is not None and "train_dir" not in model_training_parameters: + if trial is not None: + trial_path = model_path / f"hp_trial_{trial.number}" + trial_path.mkdir(parents=True, exist_ok=True) + model_training_parameters["train_dir"] = str( + trial_path / "catboost_info" + ) + else: + model_training_parameters["train_dir"] = str( + model_path / "catboost_info" + ) + task_type = model_training_parameters.get("task_type", "CPU") loss_function = model_training_parameters.get("loss_function", "RMSE") if task_type == "GPU": -- 2.43.0