snowflake-ml-python 1.6.1__py3-none-any.whl → 1.6.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- snowflake/cortex/__init__.py +4 -0
- snowflake/cortex/_classify_text.py +2 -2
- snowflake/cortex/_embed_text_1024.py +37 -0
- snowflake/cortex/_embed_text_768.py +37 -0
- snowflake/cortex/_extract_answer.py +2 -2
- snowflake/cortex/_sentiment.py +2 -2
- snowflake/cortex/_summarize.py +2 -2
- snowflake/cortex/_translate.py +2 -2
- snowflake/cortex/_util.py +4 -4
- snowflake/ml/_internal/env_utils.py +5 -5
- snowflake/ml/_internal/exceptions/error_codes.py +2 -0
- snowflake/ml/_internal/telemetry.py +142 -20
- snowflake/ml/_internal/utils/db_utils.py +50 -0
- snowflake/ml/_internal/utils/identifier.py +48 -11
- snowflake/ml/_internal/utils/service_logger.py +63 -0
- snowflake/ml/_internal/utils/snowflake_env.py +23 -13
- snowflake/ml/_internal/utils/sql_identifier.py +26 -2
- snowflake/ml/_internal/utils/table_manager.py +19 -1
- snowflake/ml/data/_internal/arrow_ingestor.py +1 -11
- snowflake/ml/data/data_connector.py +33 -7
- snowflake/ml/data/ingestor_utils.py +20 -10
- snowflake/ml/data/torch_utils.py +68 -0
- snowflake/ml/dataset/dataset.py +1 -3
- snowflake/ml/feature_store/access_manager.py +3 -3
- snowflake/ml/feature_store/feature_store.py +60 -19
- snowflake/ml/feature_store/feature_view.py +84 -30
- snowflake/ml/fileset/embedded_stage_fs.py +1 -1
- snowflake/ml/fileset/fileset.py +1 -1
- snowflake/ml/fileset/sfcfs.py +9 -3
- snowflake/ml/fileset/stage_fs.py +2 -1
- snowflake/ml/lineage/lineage_node.py +7 -2
- snowflake/ml/model/__init__.py +1 -2
- snowflake/ml/model/_client/model/model_version_impl.py +96 -12
- snowflake/ml/model/_client/ops/model_ops.py +124 -6
- snowflake/ml/model/_client/ops/service_ops.py +309 -9
- snowflake/ml/model/_client/service/model_deployment_spec.py +8 -5
- snowflake/ml/model/_client/service/model_deployment_spec_schema.py +2 -2
- snowflake/ml/model/_client/sql/_base.py +5 -0
- snowflake/ml/model/_client/sql/model.py +1 -0
- snowflake/ml/model/_client/sql/model_version.py +9 -5
- snowflake/ml/model/_client/sql/service.py +121 -20
- snowflake/ml/model/_model_composer/model_composer.py +11 -39
- snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +31 -11
- snowflake/ml/model/_packager/model_env/model_env.py +4 -38
- snowflake/ml/model/_packager/model_handlers/_utils.py +134 -28
- snowflake/ml/model/_packager/model_handlers/catboost.py +31 -30
- snowflake/ml/model/_packager/model_handlers/huggingface_pipeline.py +26 -18
- snowflake/ml/model/_packager/model_handlers/lightgbm.py +31 -58
- snowflake/ml/model/_packager/model_handlers/mlflow.py +3 -5
- snowflake/ml/model/_packager/model_handlers/model_objective_utils.py +169 -0
- snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +15 -8
- snowflake/ml/model/_packager/model_handlers/sklearn.py +56 -60
- snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +141 -9
- snowflake/ml/model/_packager/model_handlers/torchscript.py +2 -2
- snowflake/ml/model/_packager/model_handlers/xgboost.py +63 -48
- snowflake/ml/model/_packager/model_meta/model_meta.py +16 -42
- snowflake/ml/model/_packager/model_meta/model_meta_schema.py +1 -14
- snowflake/ml/model/_packager/model_packager.py +14 -8
- snowflake/ml/model/_packager/model_runtime/model_runtime.py +11 -0
- snowflake/ml/model/_signatures/pytorch_handler.py +1 -1
- snowflake/ml/model/_signatures/snowpark_handler.py +3 -2
- snowflake/ml/model/_signatures/utils.py +9 -0
- snowflake/ml/model/type_hints.py +12 -145
- snowflake/ml/modeling/_internal/constants.py +1 -0
- snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +5 -5
- snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +9 -6
- snowflake/ml/modeling/_internal/model_specifications.py +2 -0
- snowflake/ml/modeling/_internal/model_trainer.py +1 -0
- snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +2 -4
- snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +5 -5
- snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +130 -166
- snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -1
- snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +61 -21
- snowflake/ml/modeling/cluster/affinity_propagation.py +61 -21
- snowflake/ml/modeling/cluster/agglomerative_clustering.py +61 -21
- snowflake/ml/modeling/cluster/birch.py +61 -21
- snowflake/ml/modeling/cluster/bisecting_k_means.py +61 -21
- snowflake/ml/modeling/cluster/dbscan.py +61 -21
- snowflake/ml/modeling/cluster/feature_agglomeration.py +61 -21
- snowflake/ml/modeling/cluster/k_means.py +61 -21
- snowflake/ml/modeling/cluster/mean_shift.py +61 -21
- snowflake/ml/modeling/cluster/mini_batch_k_means.py +61 -21
- snowflake/ml/modeling/cluster/optics.py +61 -21
- snowflake/ml/modeling/cluster/spectral_biclustering.py +61 -21
- snowflake/ml/modeling/cluster/spectral_clustering.py +61 -21
- snowflake/ml/modeling/cluster/spectral_coclustering.py +61 -21
- snowflake/ml/modeling/compose/column_transformer.py +61 -21
- snowflake/ml/modeling/compose/transformed_target_regressor.py +61 -21
- snowflake/ml/modeling/covariance/elliptic_envelope.py +61 -21
- snowflake/ml/modeling/covariance/empirical_covariance.py +61 -21
- snowflake/ml/modeling/covariance/graphical_lasso.py +61 -21
- snowflake/ml/modeling/covariance/graphical_lasso_cv.py +61 -21
- snowflake/ml/modeling/covariance/ledoit_wolf.py +61 -21
- snowflake/ml/modeling/covariance/min_cov_det.py +61 -21
- snowflake/ml/modeling/covariance/oas.py +61 -21
- snowflake/ml/modeling/covariance/shrunk_covariance.py +61 -21
- snowflake/ml/modeling/decomposition/dictionary_learning.py +61 -21
- snowflake/ml/modeling/decomposition/factor_analysis.py +61 -21
- snowflake/ml/modeling/decomposition/fast_ica.py +61 -21
- snowflake/ml/modeling/decomposition/incremental_pca.py +61 -21
- snowflake/ml/modeling/decomposition/kernel_pca.py +61 -21
- snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +61 -21
- snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +61 -21
- snowflake/ml/modeling/decomposition/pca.py +61 -21
- snowflake/ml/modeling/decomposition/sparse_pca.py +61 -21
- snowflake/ml/modeling/decomposition/truncated_svd.py +61 -21
- snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +61 -21
- snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +61 -21
- snowflake/ml/modeling/ensemble/ada_boost_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/ada_boost_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/bagging_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/bagging_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/extra_trees_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/extra_trees_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/isolation_forest.py +61 -21
- snowflake/ml/modeling/ensemble/random_forest_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/random_forest_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/stacking_regressor.py +61 -21
- snowflake/ml/modeling/ensemble/voting_classifier.py +61 -21
- snowflake/ml/modeling/ensemble/voting_regressor.py +61 -21
- snowflake/ml/modeling/feature_selection/generic_univariate_select.py +61 -21
- snowflake/ml/modeling/feature_selection/select_fdr.py +61 -21
- snowflake/ml/modeling/feature_selection/select_fpr.py +61 -21
- snowflake/ml/modeling/feature_selection/select_fwe.py +61 -21
- snowflake/ml/modeling/feature_selection/select_k_best.py +61 -21
- snowflake/ml/modeling/feature_selection/select_percentile.py +61 -21
- snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +61 -21
- snowflake/ml/modeling/feature_selection/variance_threshold.py +61 -21
- snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +61 -21
- snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +61 -21
- snowflake/ml/modeling/impute/iterative_imputer.py +61 -21
- snowflake/ml/modeling/impute/knn_imputer.py +61 -21
- snowflake/ml/modeling/impute/missing_indicator.py +61 -21
- snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +61 -21
- snowflake/ml/modeling/kernel_approximation/nystroem.py +61 -21
- snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +61 -21
- snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +61 -21
- snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +61 -21
- snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +61 -21
- snowflake/ml/modeling/lightgbm/lgbm_classifier.py +61 -21
- snowflake/ml/modeling/lightgbm/lgbm_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/ard_regression.py +61 -21
- snowflake/ml/modeling/linear_model/bayesian_ridge.py +61 -21
- snowflake/ml/modeling/linear_model/elastic_net.py +61 -21
- snowflake/ml/modeling/linear_model/elastic_net_cv.py +61 -21
- snowflake/ml/modeling/linear_model/gamma_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/huber_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/lars.py +61 -21
- snowflake/ml/modeling/linear_model/lars_cv.py +61 -21
- snowflake/ml/modeling/linear_model/lasso.py +61 -21
- snowflake/ml/modeling/linear_model/lasso_cv.py +61 -21
- snowflake/ml/modeling/linear_model/lasso_lars.py +61 -21
- snowflake/ml/modeling/linear_model/lasso_lars_cv.py +61 -21
- snowflake/ml/modeling/linear_model/lasso_lars_ic.py +61 -21
- snowflake/ml/modeling/linear_model/linear_regression.py +61 -21
- snowflake/ml/modeling/linear_model/logistic_regression.py +61 -21
- snowflake/ml/modeling/linear_model/logistic_regression_cv.py +61 -21
- snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +61 -21
- snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +61 -21
- snowflake/ml/modeling/linear_model/multi_task_lasso.py +61 -21
- snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +61 -21
- snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +61 -21
- snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +61 -21
- snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/perceptron.py +61 -21
- snowflake/ml/modeling/linear_model/poisson_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/ransac_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/ridge.py +61 -21
- snowflake/ml/modeling/linear_model/ridge_classifier.py +61 -21
- snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +61 -21
- snowflake/ml/modeling/linear_model/ridge_cv.py +61 -21
- snowflake/ml/modeling/linear_model/sgd_classifier.py +61 -21
- snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +61 -21
- snowflake/ml/modeling/linear_model/sgd_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/theil_sen_regressor.py +61 -21
- snowflake/ml/modeling/linear_model/tweedie_regressor.py +61 -21
- snowflake/ml/modeling/manifold/isomap.py +61 -21
- snowflake/ml/modeling/manifold/mds.py +61 -21
- snowflake/ml/modeling/manifold/spectral_embedding.py +61 -21
- snowflake/ml/modeling/manifold/tsne.py +61 -21
- snowflake/ml/modeling/metrics/metrics_utils.py +2 -2
- snowflake/ml/modeling/metrics/ranking.py +0 -3
- snowflake/ml/modeling/metrics/regression.py +0 -3
- snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +61 -21
- snowflake/ml/modeling/mixture/gaussian_mixture.py +61 -21
- snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +61 -21
- snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +61 -21
- snowflake/ml/modeling/multiclass/output_code_classifier.py +61 -21
- snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +61 -21
- snowflake/ml/modeling/naive_bayes/categorical_nb.py +61 -21
- snowflake/ml/modeling/naive_bayes/complement_nb.py +61 -21
- snowflake/ml/modeling/naive_bayes/gaussian_nb.py +61 -21
- snowflake/ml/modeling/naive_bayes/multinomial_nb.py +61 -21
- snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +61 -21
- snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +61 -21
- snowflake/ml/modeling/neighbors/kernel_density.py +61 -21
- snowflake/ml/modeling/neighbors/local_outlier_factor.py +61 -21
- snowflake/ml/modeling/neighbors/nearest_centroid.py +61 -21
- snowflake/ml/modeling/neighbors/nearest_neighbors.py +61 -21
- snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +61 -21
- snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +61 -21
- snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +61 -21
- snowflake/ml/modeling/neural_network/bernoulli_rbm.py +61 -21
- snowflake/ml/modeling/neural_network/mlp_classifier.py +61 -21
- snowflake/ml/modeling/neural_network/mlp_regressor.py +61 -21
- snowflake/ml/modeling/parameters/disable_model_tracer.py +5 -0
- snowflake/ml/modeling/pipeline/pipeline.py +1 -13
- snowflake/ml/modeling/preprocessing/polynomial_features.py +61 -21
- snowflake/ml/modeling/semi_supervised/label_propagation.py +61 -21
- snowflake/ml/modeling/semi_supervised/label_spreading.py +61 -21
- snowflake/ml/modeling/svm/linear_svc.py +61 -21
- snowflake/ml/modeling/svm/linear_svr.py +61 -21
- snowflake/ml/modeling/svm/nu_svc.py +61 -21
- snowflake/ml/modeling/svm/nu_svr.py +61 -21
- snowflake/ml/modeling/svm/svc.py +61 -21
- snowflake/ml/modeling/svm/svr.py +61 -21
- snowflake/ml/modeling/tree/decision_tree_classifier.py +61 -21
- snowflake/ml/modeling/tree/decision_tree_regressor.py +61 -21
- snowflake/ml/modeling/tree/extra_tree_classifier.py +61 -21
- snowflake/ml/modeling/tree/extra_tree_regressor.py +61 -21
- snowflake/ml/modeling/xgboost/xgb_classifier.py +64 -23
- snowflake/ml/modeling/xgboost/xgb_regressor.py +64 -23
- snowflake/ml/modeling/xgboost/xgbrf_classifier.py +64 -23
- snowflake/ml/modeling/xgboost/xgbrf_regressor.py +64 -23
- snowflake/ml/monitoring/_client/model_monitor.py +126 -0
- snowflake/ml/monitoring/_client/model_monitor_manager.py +361 -0
- snowflake/ml/monitoring/_client/model_monitor_version.py +1 -0
- snowflake/ml/monitoring/_client/monitor_sql_client.py +1335 -0
- snowflake/ml/monitoring/_client/queries/record_count.ssql +14 -0
- snowflake/ml/monitoring/_client/queries/rmse.ssql +28 -0
- snowflake/ml/monitoring/entities/model_monitor_config.py +28 -0
- snowflake/ml/monitoring/entities/model_monitor_interval.py +46 -0
- snowflake/ml/monitoring/entities/output_score_type.py +90 -0
- snowflake/ml/registry/_manager/model_manager.py +4 -0
- snowflake/ml/registry/registry.py +166 -8
- snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/METADATA +43 -9
- snowflake_ml_python-1.6.3.dist-info/RECORD +400 -0
- {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/WHEEL +1 -1
- snowflake/ml/_internal/container_services/image_registry/credential.py +0 -84
- snowflake/ml/_internal/container_services/image_registry/http_client.py +0 -127
- snowflake/ml/_internal/container_services/image_registry/imagelib.py +0 -400
- snowflake/ml/_internal/container_services/image_registry/registry_client.py +0 -212
- snowflake/ml/_internal/utils/log_stream_processor.py +0 -30
- snowflake/ml/_internal/utils/session_token_manager.py +0 -46
- snowflake/ml/_internal/utils/spcs_attribution_utils.py +0 -122
- snowflake/ml/_internal/utils/uri.py +0 -77
- snowflake/ml/data/torch_dataset.py +0 -33
- snowflake/ml/model/_api.py +0 -568
- snowflake/ml/model/_deploy_client/image_builds/base_image_builder.py +0 -12
- snowflake/ml/model/_deploy_client/image_builds/client_image_builder.py +0 -249
- snowflake/ml/model/_deploy_client/image_builds/docker_context.py +0 -130
- snowflake/ml/model/_deploy_client/image_builds/gunicorn_run.sh +0 -36
- snowflake/ml/model/_deploy_client/image_builds/inference_server/main.py +0 -268
- snowflake/ml/model/_deploy_client/image_builds/server_image_builder.py +0 -215
- snowflake/ml/model/_deploy_client/image_builds/templates/dockerfile_template +0 -53
- snowflake/ml/model/_deploy_client/image_builds/templates/image_build_job_spec_template +0 -38
- snowflake/ml/model/_deploy_client/image_builds/templates/kaniko_shell_script_template +0 -105
- snowflake/ml/model/_deploy_client/snowservice/deploy.py +0 -611
- snowflake/ml/model/_deploy_client/snowservice/deploy_options.py +0 -116
- snowflake/ml/model/_deploy_client/snowservice/instance_types.py +0 -10
- snowflake/ml/model/_deploy_client/snowservice/templates/service_spec_template +0 -28
- snowflake/ml/model/_deploy_client/snowservice/templates/service_spec_template_with_model +0 -21
- snowflake/ml/model/_deploy_client/utils/constants.py +0 -48
- snowflake/ml/model/_deploy_client/utils/snowservice_client.py +0 -280
- snowflake/ml/model/_deploy_client/warehouse/deploy.py +0 -202
- snowflake/ml/model/_deploy_client/warehouse/infer_template.py +0 -99
- snowflake/ml/model/_packager/model_handlers/llm.py +0 -267
- snowflake/ml/model/_packager/model_meta/_core_requirements.py +0 -11
- snowflake/ml/model/deploy_platforms.py +0 -6
- snowflake/ml/model/models/llm.py +0 -104
- snowflake/ml/monitoring/monitor.py +0 -203
- snowflake/ml/registry/_initial_schema.py +0 -142
- snowflake/ml/registry/_schema.py +0 -82
- snowflake/ml/registry/_schema_upgrade_plans.py +0 -116
- snowflake/ml/registry/_schema_version_manager.py +0 -163
- snowflake/ml/registry/model_registry.py +0 -2048
- snowflake_ml_python-1.6.1.dist-info/RECORD +0 -422
- {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/top_level.txt +0 -0
@@ -4,18 +4,17 @@
|
|
4
4
|
#
|
5
5
|
import inspect
|
6
6
|
import os
|
7
|
-
import
|
8
|
-
from typing import Iterable, Optional, Union, List, Any, Dict, Callable, Set
|
9
|
-
from typing_extensions import TypeGuard
|
7
|
+
from typing import Iterable, Optional, Union, List, Any, Dict, Set, Tuple
|
10
8
|
from uuid import uuid4
|
11
9
|
|
12
10
|
import cloudpickle as cp
|
13
|
-
import pandas as pd
|
14
11
|
import numpy as np
|
12
|
+
import pandas as pd
|
15
13
|
from numpy import typing as npt
|
16
14
|
|
17
15
|
|
18
16
|
import numpy
|
17
|
+
import sklearn
|
19
18
|
import xgboost
|
20
19
|
from sklearn.utils.metaestimators import available_if
|
21
20
|
|
@@ -23,12 +22,11 @@ from snowflake.ml.modeling.framework.base import BaseTransformer, _process_cols
|
|
23
22
|
from snowflake.ml._internal import telemetry
|
24
23
|
from snowflake.ml._internal.exceptions import error_codes, exceptions, modeling_error_messages
|
25
24
|
from snowflake.ml._internal.env_utils import SNOWML_SPROC_ENV
|
26
|
-
from snowflake.ml._internal.utils import
|
25
|
+
from snowflake.ml._internal.utils import identifier
|
27
26
|
from snowflake.snowpark import DataFrame, Session
|
28
27
|
from snowflake.snowpark._internal.type_utils import convert_sp_to_sf_type
|
29
28
|
from snowflake.ml.modeling._internal.model_trainer_builder import ModelTrainerBuilder
|
30
29
|
from snowflake.ml.modeling._internal.transformer_protocols import (
|
31
|
-
ModelTransformHandlers,
|
32
30
|
BatchInferenceKwargsTypedDict,
|
33
31
|
ScoreKwargsTypedDict
|
34
32
|
)
|
@@ -363,7 +361,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
363
361
|
self.set_sample_weight_col(sample_weight_col)
|
364
362
|
self._use_external_memory_version = use_external_memory_version
|
365
363
|
self._batch_size = batch_size
|
366
|
-
deps: Set[str] = set([f'numpy=={np.__version__}', f'xgboost=={xgboost.__version__}', f'cloudpickle=={cp.__version__}'])
|
364
|
+
deps: Set[str] = set([f'numpy=={np.__version__}', f'scikit-learn=={sklearn.__version__}', f'xgboost=={xgboost.__version__}', f'cloudpickle=={cp.__version__}'])
|
367
365
|
|
368
366
|
self._deps = list(deps)
|
369
367
|
|
@@ -699,12 +697,23 @@ class XGBRFClassifier(BaseTransformer):
|
|
699
697
|
autogenerated=self._autogenerated,
|
700
698
|
subproject=_SUBPROJECT,
|
701
699
|
)
|
702
|
-
|
703
|
-
|
704
|
-
expected_output_cols_list=(
|
705
|
-
self.output_cols if self.output_cols else self._get_output_column_names(output_cols_prefix)
|
706
|
-
),
|
700
|
+
expected_output_cols = (
|
701
|
+
self.output_cols if self.output_cols else self._get_output_column_names(output_cols_prefix)
|
707
702
|
)
|
703
|
+
if isinstance(dataset, DataFrame):
|
704
|
+
expected_output_cols, example_output_pd_df = self._align_expected_output(
|
705
|
+
"fit_predict", dataset, expected_output_cols, output_cols_prefix
|
706
|
+
)
|
707
|
+
output_result, fitted_estimator = model_trainer.train_fit_predict(
|
708
|
+
drop_input_cols=self._drop_input_cols,
|
709
|
+
expected_output_cols_list=expected_output_cols,
|
710
|
+
example_output_pd_df=example_output_pd_df,
|
711
|
+
)
|
712
|
+
else:
|
713
|
+
output_result, fitted_estimator = model_trainer.train_fit_predict(
|
714
|
+
drop_input_cols=self._drop_input_cols,
|
715
|
+
expected_output_cols_list=expected_output_cols,
|
716
|
+
)
|
708
717
|
self._sklearn_object = fitted_estimator
|
709
718
|
self._is_fitted = True
|
710
719
|
return output_result
|
@@ -727,6 +736,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
727
736
|
"""
|
728
737
|
self._infer_input_output_cols(dataset)
|
729
738
|
super()._check_dataset_type(dataset)
|
739
|
+
|
730
740
|
model_trainer = ModelTrainerBuilder.build_fit_transform(
|
731
741
|
estimator=self._sklearn_object,
|
732
742
|
dataset=dataset,
|
@@ -783,12 +793,41 @@ class XGBRFClassifier(BaseTransformer):
|
|
783
793
|
|
784
794
|
return rv
|
785
795
|
|
786
|
-
def
|
787
|
-
self, method: str, dataset: DataFrame, expected_output_cols_list: List[str], output_cols_prefix: str
|
788
|
-
) -> List[str]:
|
796
|
+
def _align_expected_output(
|
797
|
+
self, method: str, dataset: DataFrame, expected_output_cols_list: List[str], output_cols_prefix: str,
|
798
|
+
) -> Tuple[List[str], pd.DataFrame]:
|
799
|
+
""" Run 1 line of data with the desired method, and return one tuple that consists of the output column names
|
800
|
+
and output dataframe with 1 line.
|
801
|
+
If the method is fit_predict, run 2 lines of data.
|
802
|
+
"""
|
789
803
|
# in case the inferred output column names dimension is different
|
790
804
|
# we use one line of snowpark dataframe and put it into sklearn estimator using pandas
|
791
|
-
|
805
|
+
|
806
|
+
# For fit_predict method, a minimum of 2 is required by MinCovDet, BayesianGaussianMixture
|
807
|
+
# so change the minimum of number of rows to 2
|
808
|
+
num_examples = 2
|
809
|
+
statement_params = telemetry.get_function_usage_statement_params(
|
810
|
+
project=_PROJECT,
|
811
|
+
subproject=_SUBPROJECT,
|
812
|
+
function_name=telemetry.get_statement_params_full_func_name(
|
813
|
+
inspect.currentframe(), XGBRFClassifier.__class__.__name__
|
814
|
+
),
|
815
|
+
api_calls=[Session.call],
|
816
|
+
custom_tags={"autogen": True} if self._autogenerated else None,
|
817
|
+
)
|
818
|
+
if output_cols_prefix == "fit_predict_":
|
819
|
+
if hasattr(self._sklearn_object, "n_clusters"):
|
820
|
+
# cluster classes such as BisectingKMeansTest requires # of examples >= n_clusters
|
821
|
+
num_examples = self._sklearn_object.n_clusters
|
822
|
+
elif hasattr(self._sklearn_object, "min_samples"):
|
823
|
+
# OPTICS default min_samples 5, which requires at least 5 lines of data
|
824
|
+
num_examples = self._sklearn_object.min_samples
|
825
|
+
elif hasattr(self._sklearn_object, "n_neighbors") and hasattr(self._sklearn_object, "n_samples"):
|
826
|
+
# LocalOutlierFactor expects n_neighbors <= n_samples
|
827
|
+
num_examples = self._sklearn_object.n_neighbors
|
828
|
+
sample_pd_df = dataset.select(self.input_cols).limit(num_examples).to_pandas(statement_params=statement_params)
|
829
|
+
else:
|
830
|
+
sample_pd_df = dataset.select(self.input_cols).limit(1).to_pandas(statement_params=statement_params)
|
792
831
|
|
793
832
|
# Rename the pandas df column names to snowflake identifiers and reorder columns to match the order
|
794
833
|
# seen during the fit.
|
@@ -800,12 +839,14 @@ class XGBRFClassifier(BaseTransformer):
|
|
800
839
|
output_df_columns_set: Set[str] = set(output_df_columns) - set(dataset.columns)
|
801
840
|
if self.sample_weight_col:
|
802
841
|
output_df_columns_set -= set(self.sample_weight_col)
|
842
|
+
|
803
843
|
# if the dimension of inferred output column names is correct; use it
|
804
844
|
if len(expected_output_cols_list) == len(output_df_columns_set):
|
805
|
-
return expected_output_cols_list
|
845
|
+
return expected_output_cols_list, output_df_pd
|
806
846
|
# otherwise, use the sklearn estimator's output
|
807
847
|
else:
|
808
|
-
|
848
|
+
expected_output_cols_list = sorted(list(output_df_columns_set), key=lambda x: output_df_columns.index(x))
|
849
|
+
return expected_output_cols_list, output_df_pd[expected_output_cols_list]
|
809
850
|
|
810
851
|
@available_if(original_estimator_has_callable("predict_proba")) # type: ignore[misc]
|
811
852
|
@telemetry.send_api_usage_telemetry(
|
@@ -853,7 +894,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
853
894
|
drop_input_cols=self._drop_input_cols,
|
854
895
|
expected_output_cols_type="float",
|
855
896
|
)
|
856
|
-
expected_output_cols = self.
|
897
|
+
expected_output_cols, _ = self._align_expected_output(
|
857
898
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
858
899
|
)
|
859
900
|
|
@@ -921,7 +962,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
921
962
|
drop_input_cols=self._drop_input_cols,
|
922
963
|
expected_output_cols_type="float",
|
923
964
|
)
|
924
|
-
expected_output_cols = self.
|
965
|
+
expected_output_cols, _ = self._align_expected_output(
|
925
966
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
926
967
|
)
|
927
968
|
elif isinstance(dataset, pd.DataFrame):
|
@@ -984,7 +1025,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
984
1025
|
drop_input_cols=self._drop_input_cols,
|
985
1026
|
expected_output_cols_type="float",
|
986
1027
|
)
|
987
|
-
expected_output_cols = self.
|
1028
|
+
expected_output_cols, _ = self._align_expected_output(
|
988
1029
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
989
1030
|
)
|
990
1031
|
|
@@ -1049,7 +1090,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
1049
1090
|
drop_input_cols = self._drop_input_cols,
|
1050
1091
|
expected_output_cols_type="float",
|
1051
1092
|
)
|
1052
|
-
expected_output_cols = self.
|
1093
|
+
expected_output_cols, _ = self._align_expected_output(
|
1053
1094
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
1054
1095
|
)
|
1055
1096
|
|
@@ -1114,7 +1155,7 @@ class XGBRFClassifier(BaseTransformer):
|
|
1114
1155
|
transform_kwargs = dict(
|
1115
1156
|
session=dataset._session,
|
1116
1157
|
dependencies=self._deps,
|
1117
|
-
score_sproc_imports=['xgboost'],
|
1158
|
+
score_sproc_imports=['xgboost', 'sklearn'],
|
1118
1159
|
)
|
1119
1160
|
elif isinstance(dataset, pd.DataFrame):
|
1120
1161
|
# pandas_handler.score() does not require any extra kwargs.
|
@@ -4,18 +4,17 @@
|
|
4
4
|
#
|
5
5
|
import inspect
|
6
6
|
import os
|
7
|
-
import
|
8
|
-
from typing import Iterable, Optional, Union, List, Any, Dict, Callable, Set
|
9
|
-
from typing_extensions import TypeGuard
|
7
|
+
from typing import Iterable, Optional, Union, List, Any, Dict, Set, Tuple
|
10
8
|
from uuid import uuid4
|
11
9
|
|
12
10
|
import cloudpickle as cp
|
13
|
-
import pandas as pd
|
14
11
|
import numpy as np
|
12
|
+
import pandas as pd
|
15
13
|
from numpy import typing as npt
|
16
14
|
|
17
15
|
|
18
16
|
import numpy
|
17
|
+
import sklearn
|
19
18
|
import xgboost
|
20
19
|
from sklearn.utils.metaestimators import available_if
|
21
20
|
|
@@ -23,12 +22,11 @@ from snowflake.ml.modeling.framework.base import BaseTransformer, _process_cols
|
|
23
22
|
from snowflake.ml._internal import telemetry
|
24
23
|
from snowflake.ml._internal.exceptions import error_codes, exceptions, modeling_error_messages
|
25
24
|
from snowflake.ml._internal.env_utils import SNOWML_SPROC_ENV
|
26
|
-
from snowflake.ml._internal.utils import
|
25
|
+
from snowflake.ml._internal.utils import identifier
|
27
26
|
from snowflake.snowpark import DataFrame, Session
|
28
27
|
from snowflake.snowpark._internal.type_utils import convert_sp_to_sf_type
|
29
28
|
from snowflake.ml.modeling._internal.model_trainer_builder import ModelTrainerBuilder
|
30
29
|
from snowflake.ml.modeling._internal.transformer_protocols import (
|
31
|
-
ModelTransformHandlers,
|
32
30
|
BatchInferenceKwargsTypedDict,
|
33
31
|
ScoreKwargsTypedDict
|
34
32
|
)
|
@@ -363,7 +361,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
363
361
|
self.set_sample_weight_col(sample_weight_col)
|
364
362
|
self._use_external_memory_version = use_external_memory_version
|
365
363
|
self._batch_size = batch_size
|
366
|
-
deps: Set[str] = set([f'numpy=={np.__version__}', f'xgboost=={xgboost.__version__}', f'cloudpickle=={cp.__version__}'])
|
364
|
+
deps: Set[str] = set([f'numpy=={np.__version__}', f'scikit-learn=={sklearn.__version__}', f'xgboost=={xgboost.__version__}', f'cloudpickle=={cp.__version__}'])
|
367
365
|
|
368
366
|
self._deps = list(deps)
|
369
367
|
|
@@ -699,12 +697,23 @@ class XGBRFRegressor(BaseTransformer):
|
|
699
697
|
autogenerated=self._autogenerated,
|
700
698
|
subproject=_SUBPROJECT,
|
701
699
|
)
|
702
|
-
|
703
|
-
|
704
|
-
expected_output_cols_list=(
|
705
|
-
self.output_cols if self.output_cols else self._get_output_column_names(output_cols_prefix)
|
706
|
-
),
|
700
|
+
expected_output_cols = (
|
701
|
+
self.output_cols if self.output_cols else self._get_output_column_names(output_cols_prefix)
|
707
702
|
)
|
703
|
+
if isinstance(dataset, DataFrame):
|
704
|
+
expected_output_cols, example_output_pd_df = self._align_expected_output(
|
705
|
+
"fit_predict", dataset, expected_output_cols, output_cols_prefix
|
706
|
+
)
|
707
|
+
output_result, fitted_estimator = model_trainer.train_fit_predict(
|
708
|
+
drop_input_cols=self._drop_input_cols,
|
709
|
+
expected_output_cols_list=expected_output_cols,
|
710
|
+
example_output_pd_df=example_output_pd_df,
|
711
|
+
)
|
712
|
+
else:
|
713
|
+
output_result, fitted_estimator = model_trainer.train_fit_predict(
|
714
|
+
drop_input_cols=self._drop_input_cols,
|
715
|
+
expected_output_cols_list=expected_output_cols,
|
716
|
+
)
|
708
717
|
self._sklearn_object = fitted_estimator
|
709
718
|
self._is_fitted = True
|
710
719
|
return output_result
|
@@ -727,6 +736,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
727
736
|
"""
|
728
737
|
self._infer_input_output_cols(dataset)
|
729
738
|
super()._check_dataset_type(dataset)
|
739
|
+
|
730
740
|
model_trainer = ModelTrainerBuilder.build_fit_transform(
|
731
741
|
estimator=self._sklearn_object,
|
732
742
|
dataset=dataset,
|
@@ -783,12 +793,41 @@ class XGBRFRegressor(BaseTransformer):
|
|
783
793
|
|
784
794
|
return rv
|
785
795
|
|
786
|
-
def
|
787
|
-
self, method: str, dataset: DataFrame, expected_output_cols_list: List[str], output_cols_prefix: str
|
788
|
-
) -> List[str]:
|
796
|
+
def _align_expected_output(
|
797
|
+
self, method: str, dataset: DataFrame, expected_output_cols_list: List[str], output_cols_prefix: str,
|
798
|
+
) -> Tuple[List[str], pd.DataFrame]:
|
799
|
+
""" Run 1 line of data with the desired method, and return one tuple that consists of the output column names
|
800
|
+
and output dataframe with 1 line.
|
801
|
+
If the method is fit_predict, run 2 lines of data.
|
802
|
+
"""
|
789
803
|
# in case the inferred output column names dimension is different
|
790
804
|
# we use one line of snowpark dataframe and put it into sklearn estimator using pandas
|
791
|
-
|
805
|
+
|
806
|
+
# For fit_predict method, a minimum of 2 is required by MinCovDet, BayesianGaussianMixture
|
807
|
+
# so change the minimum of number of rows to 2
|
808
|
+
num_examples = 2
|
809
|
+
statement_params = telemetry.get_function_usage_statement_params(
|
810
|
+
project=_PROJECT,
|
811
|
+
subproject=_SUBPROJECT,
|
812
|
+
function_name=telemetry.get_statement_params_full_func_name(
|
813
|
+
inspect.currentframe(), XGBRFRegressor.__class__.__name__
|
814
|
+
),
|
815
|
+
api_calls=[Session.call],
|
816
|
+
custom_tags={"autogen": True} if self._autogenerated else None,
|
817
|
+
)
|
818
|
+
if output_cols_prefix == "fit_predict_":
|
819
|
+
if hasattr(self._sklearn_object, "n_clusters"):
|
820
|
+
# cluster classes such as BisectingKMeansTest requires # of examples >= n_clusters
|
821
|
+
num_examples = self._sklearn_object.n_clusters
|
822
|
+
elif hasattr(self._sklearn_object, "min_samples"):
|
823
|
+
# OPTICS default min_samples 5, which requires at least 5 lines of data
|
824
|
+
num_examples = self._sklearn_object.min_samples
|
825
|
+
elif hasattr(self._sklearn_object, "n_neighbors") and hasattr(self._sklearn_object, "n_samples"):
|
826
|
+
# LocalOutlierFactor expects n_neighbors <= n_samples
|
827
|
+
num_examples = self._sklearn_object.n_neighbors
|
828
|
+
sample_pd_df = dataset.select(self.input_cols).limit(num_examples).to_pandas(statement_params=statement_params)
|
829
|
+
else:
|
830
|
+
sample_pd_df = dataset.select(self.input_cols).limit(1).to_pandas(statement_params=statement_params)
|
792
831
|
|
793
832
|
# Rename the pandas df column names to snowflake identifiers and reorder columns to match the order
|
794
833
|
# seen during the fit.
|
@@ -800,12 +839,14 @@ class XGBRFRegressor(BaseTransformer):
|
|
800
839
|
output_df_columns_set: Set[str] = set(output_df_columns) - set(dataset.columns)
|
801
840
|
if self.sample_weight_col:
|
802
841
|
output_df_columns_set -= set(self.sample_weight_col)
|
842
|
+
|
803
843
|
# if the dimension of inferred output column names is correct; use it
|
804
844
|
if len(expected_output_cols_list) == len(output_df_columns_set):
|
805
|
-
return expected_output_cols_list
|
845
|
+
return expected_output_cols_list, output_df_pd
|
806
846
|
# otherwise, use the sklearn estimator's output
|
807
847
|
else:
|
808
|
-
|
848
|
+
expected_output_cols_list = sorted(list(output_df_columns_set), key=lambda x: output_df_columns.index(x))
|
849
|
+
return expected_output_cols_list, output_df_pd[expected_output_cols_list]
|
809
850
|
|
810
851
|
@available_if(original_estimator_has_callable("predict_proba")) # type: ignore[misc]
|
811
852
|
@telemetry.send_api_usage_telemetry(
|
@@ -851,7 +892,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
851
892
|
drop_input_cols=self._drop_input_cols,
|
852
893
|
expected_output_cols_type="float",
|
853
894
|
)
|
854
|
-
expected_output_cols = self.
|
895
|
+
expected_output_cols, _ = self._align_expected_output(
|
855
896
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
856
897
|
)
|
857
898
|
|
@@ -917,7 +958,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
917
958
|
drop_input_cols=self._drop_input_cols,
|
918
959
|
expected_output_cols_type="float",
|
919
960
|
)
|
920
|
-
expected_output_cols = self.
|
961
|
+
expected_output_cols, _ = self._align_expected_output(
|
921
962
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
922
963
|
)
|
923
964
|
elif isinstance(dataset, pd.DataFrame):
|
@@ -980,7 +1021,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
980
1021
|
drop_input_cols=self._drop_input_cols,
|
981
1022
|
expected_output_cols_type="float",
|
982
1023
|
)
|
983
|
-
expected_output_cols = self.
|
1024
|
+
expected_output_cols, _ = self._align_expected_output(
|
984
1025
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
985
1026
|
)
|
986
1027
|
|
@@ -1045,7 +1086,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
1045
1086
|
drop_input_cols = self._drop_input_cols,
|
1046
1087
|
expected_output_cols_type="float",
|
1047
1088
|
)
|
1048
|
-
expected_output_cols = self.
|
1089
|
+
expected_output_cols, _ = self._align_expected_output(
|
1049
1090
|
inference_method, dataset, expected_output_cols, output_cols_prefix
|
1050
1091
|
)
|
1051
1092
|
|
@@ -1110,7 +1151,7 @@ class XGBRFRegressor(BaseTransformer):
|
|
1110
1151
|
transform_kwargs = dict(
|
1111
1152
|
session=dataset._session,
|
1112
1153
|
dependencies=self._deps,
|
1113
|
-
score_sproc_imports=['xgboost'],
|
1154
|
+
score_sproc_imports=['xgboost', 'sklearn'],
|
1114
1155
|
)
|
1115
1156
|
elif isinstance(dataset, pd.DataFrame):
|
1116
1157
|
# pandas_handler.score() does not require any extra kwargs.
|
@@ -0,0 +1,126 @@
|
|
1
|
+
from typing import List, Union
|
2
|
+
|
3
|
+
import pandas as pd
|
4
|
+
|
5
|
+
from snowflake import snowpark
|
6
|
+
from snowflake.ml._internal import telemetry
|
7
|
+
from snowflake.ml._internal.utils import sql_identifier
|
8
|
+
from snowflake.ml.monitoring._client import monitor_sql_client
|
9
|
+
|
10
|
+
|
11
|
+
class ModelMonitor:
|
12
|
+
"""Class to manage instrumentation of Model Monitoring and Observability"""
|
13
|
+
|
14
|
+
name: sql_identifier.SqlIdentifier
|
15
|
+
_model_monitor_client: monitor_sql_client._ModelMonitorSQLClient
|
16
|
+
_fully_qualified_model_name: str
|
17
|
+
_version_name: sql_identifier.SqlIdentifier
|
18
|
+
_function_name: sql_identifier.SqlIdentifier
|
19
|
+
_prediction_columns: List[sql_identifier.SqlIdentifier]
|
20
|
+
_label_columns: List[sql_identifier.SqlIdentifier]
|
21
|
+
|
22
|
+
def __init__(self) -> None:
|
23
|
+
raise RuntimeError("ModelMonitor's initializer is not meant to be used.")
|
24
|
+
|
25
|
+
@classmethod
|
26
|
+
def _ref(
|
27
|
+
cls,
|
28
|
+
model_monitor_client: monitor_sql_client._ModelMonitorSQLClient,
|
29
|
+
name: sql_identifier.SqlIdentifier,
|
30
|
+
*,
|
31
|
+
fully_qualified_model_name: str,
|
32
|
+
version_name: sql_identifier.SqlIdentifier,
|
33
|
+
function_name: sql_identifier.SqlIdentifier,
|
34
|
+
prediction_columns: List[sql_identifier.SqlIdentifier],
|
35
|
+
label_columns: List[sql_identifier.SqlIdentifier],
|
36
|
+
) -> "ModelMonitor":
|
37
|
+
self: "ModelMonitor" = object.__new__(cls)
|
38
|
+
self.name = name
|
39
|
+
self._model_monitor_client = model_monitor_client
|
40
|
+
self._fully_qualified_model_name = fully_qualified_model_name
|
41
|
+
self._version_name = version_name
|
42
|
+
self._function_name = function_name
|
43
|
+
self._prediction_columns = prediction_columns
|
44
|
+
self._label_columns = label_columns
|
45
|
+
return self
|
46
|
+
|
47
|
+
@telemetry.send_api_usage_telemetry(
|
48
|
+
project=telemetry.TelemetryProject.MLOPS.value,
|
49
|
+
subproject=telemetry.TelemetrySubProject.MONITORING.value,
|
50
|
+
)
|
51
|
+
def set_baseline(self, baseline_df: Union[pd.DataFrame, snowpark.DataFrame]) -> None:
|
52
|
+
"""
|
53
|
+
The baseline dataframe is compared with the monitored data once monitoring is enabled.
|
54
|
+
The columns of the dataframe should match the columns of the source table that the
|
55
|
+
ModelMonitor was configured with. Calling this method overwrites any existing baseline split data.
|
56
|
+
|
57
|
+
Args:
|
58
|
+
baseline_df: Snowpark dataframe containing baseline data.
|
59
|
+
|
60
|
+
Raises:
|
61
|
+
ValueError: baseline_df does not contain prediction or label columns
|
62
|
+
"""
|
63
|
+
statement_params = telemetry.get_statement_params(
|
64
|
+
project=telemetry.TelemetryProject.MLOPS.value,
|
65
|
+
subproject=telemetry.TelemetrySubProject.MONITORING.value,
|
66
|
+
)
|
67
|
+
|
68
|
+
if isinstance(baseline_df, pd.DataFrame):
|
69
|
+
baseline_df = self._model_monitor_client._sql_client._session.create_dataframe(baseline_df)
|
70
|
+
|
71
|
+
column_names_identifiers: List[sql_identifier.SqlIdentifier] = [
|
72
|
+
sql_identifier.SqlIdentifier(column_name) for column_name in baseline_df.columns
|
73
|
+
]
|
74
|
+
prediction_cols_not_found = any(
|
75
|
+
[prediction_col not in column_names_identifiers for prediction_col in self._prediction_columns]
|
76
|
+
)
|
77
|
+
label_cols_not_found = any(
|
78
|
+
[label_col.identifier() not in column_names_identifiers for label_col in self._label_columns]
|
79
|
+
)
|
80
|
+
|
81
|
+
if prediction_cols_not_found:
|
82
|
+
raise ValueError(
|
83
|
+
"Specified prediction columns were not found in the baseline dataframe. "
|
84
|
+
f"Columns provided were: {column_names_identifiers}. "
|
85
|
+
f"Configured prediction columns were: {self._prediction_columns}."
|
86
|
+
)
|
87
|
+
if label_cols_not_found:
|
88
|
+
raise ValueError(
|
89
|
+
"Specified label columns were not found in the baseline dataframe."
|
90
|
+
f"Columns provided in the baseline dataframe were: {column_names_identifiers}."
|
91
|
+
f"Configured label columns were: {self._label_columns}."
|
92
|
+
)
|
93
|
+
|
94
|
+
# Create the table by materializing the df
|
95
|
+
self._model_monitor_client.materialize_baseline_dataframe(
|
96
|
+
baseline_df,
|
97
|
+
self._fully_qualified_model_name,
|
98
|
+
self._version_name,
|
99
|
+
statement_params=statement_params,
|
100
|
+
)
|
101
|
+
|
102
|
+
def suspend(self) -> None:
|
103
|
+
"""Suspend pipeline for ModelMonitor"""
|
104
|
+
statement_params = telemetry.get_statement_params(
|
105
|
+
telemetry.TelemetryProject.MLOPS.value,
|
106
|
+
telemetry.TelemetrySubProject.MONITORING.value,
|
107
|
+
)
|
108
|
+
_, _, model_name = sql_identifier.parse_fully_qualified_name(self._fully_qualified_model_name)
|
109
|
+
self._model_monitor_client.suspend_monitor_dynamic_tables(
|
110
|
+
model_name=model_name,
|
111
|
+
version_name=self._version_name,
|
112
|
+
statement_params=statement_params,
|
113
|
+
)
|
114
|
+
|
115
|
+
def resume(self) -> None:
|
116
|
+
"""Resume pipeline for ModelMonitor"""
|
117
|
+
statement_params = telemetry.get_statement_params(
|
118
|
+
telemetry.TelemetryProject.MLOPS.value,
|
119
|
+
telemetry.TelemetrySubProject.MONITORING.value,
|
120
|
+
)
|
121
|
+
_, _, model_name = sql_identifier.parse_fully_qualified_name(self._fully_qualified_model_name)
|
122
|
+
self._model_monitor_client.resume_monitor_dynamic_tables(
|
123
|
+
model_name=model_name,
|
124
|
+
version_name=self._version_name,
|
125
|
+
statement_params=statement_params,
|
126
|
+
)
|