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.
Files changed (284) hide show
  1. snowflake/cortex/__init__.py +4 -0
  2. snowflake/cortex/_classify_text.py +2 -2
  3. snowflake/cortex/_embed_text_1024.py +37 -0
  4. snowflake/cortex/_embed_text_768.py +37 -0
  5. snowflake/cortex/_extract_answer.py +2 -2
  6. snowflake/cortex/_sentiment.py +2 -2
  7. snowflake/cortex/_summarize.py +2 -2
  8. snowflake/cortex/_translate.py +2 -2
  9. snowflake/cortex/_util.py +4 -4
  10. snowflake/ml/_internal/env_utils.py +5 -5
  11. snowflake/ml/_internal/exceptions/error_codes.py +2 -0
  12. snowflake/ml/_internal/telemetry.py +142 -20
  13. snowflake/ml/_internal/utils/db_utils.py +50 -0
  14. snowflake/ml/_internal/utils/identifier.py +48 -11
  15. snowflake/ml/_internal/utils/service_logger.py +63 -0
  16. snowflake/ml/_internal/utils/snowflake_env.py +23 -13
  17. snowflake/ml/_internal/utils/sql_identifier.py +26 -2
  18. snowflake/ml/_internal/utils/table_manager.py +19 -1
  19. snowflake/ml/data/_internal/arrow_ingestor.py +1 -11
  20. snowflake/ml/data/data_connector.py +33 -7
  21. snowflake/ml/data/ingestor_utils.py +20 -10
  22. snowflake/ml/data/torch_utils.py +68 -0
  23. snowflake/ml/dataset/dataset.py +1 -3
  24. snowflake/ml/feature_store/access_manager.py +3 -3
  25. snowflake/ml/feature_store/feature_store.py +60 -19
  26. snowflake/ml/feature_store/feature_view.py +84 -30
  27. snowflake/ml/fileset/embedded_stage_fs.py +1 -1
  28. snowflake/ml/fileset/fileset.py +1 -1
  29. snowflake/ml/fileset/sfcfs.py +9 -3
  30. snowflake/ml/fileset/stage_fs.py +2 -1
  31. snowflake/ml/lineage/lineage_node.py +7 -2
  32. snowflake/ml/model/__init__.py +1 -2
  33. snowflake/ml/model/_client/model/model_version_impl.py +96 -12
  34. snowflake/ml/model/_client/ops/model_ops.py +124 -6
  35. snowflake/ml/model/_client/ops/service_ops.py +309 -9
  36. snowflake/ml/model/_client/service/model_deployment_spec.py +8 -5
  37. snowflake/ml/model/_client/service/model_deployment_spec_schema.py +2 -2
  38. snowflake/ml/model/_client/sql/_base.py +5 -0
  39. snowflake/ml/model/_client/sql/model.py +1 -0
  40. snowflake/ml/model/_client/sql/model_version.py +9 -5
  41. snowflake/ml/model/_client/sql/service.py +121 -20
  42. snowflake/ml/model/_model_composer/model_composer.py +11 -39
  43. snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +31 -11
  44. snowflake/ml/model/_packager/model_env/model_env.py +4 -38
  45. snowflake/ml/model/_packager/model_handlers/_utils.py +134 -28
  46. snowflake/ml/model/_packager/model_handlers/catboost.py +31 -30
  47. snowflake/ml/model/_packager/model_handlers/huggingface_pipeline.py +26 -18
  48. snowflake/ml/model/_packager/model_handlers/lightgbm.py +31 -58
  49. snowflake/ml/model/_packager/model_handlers/mlflow.py +3 -5
  50. snowflake/ml/model/_packager/model_handlers/model_objective_utils.py +169 -0
  51. snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +15 -8
  52. snowflake/ml/model/_packager/model_handlers/sklearn.py +56 -60
  53. snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +141 -9
  54. snowflake/ml/model/_packager/model_handlers/torchscript.py +2 -2
  55. snowflake/ml/model/_packager/model_handlers/xgboost.py +63 -48
  56. snowflake/ml/model/_packager/model_meta/model_meta.py +16 -42
  57. snowflake/ml/model/_packager/model_meta/model_meta_schema.py +1 -14
  58. snowflake/ml/model/_packager/model_packager.py +14 -8
  59. snowflake/ml/model/_packager/model_runtime/model_runtime.py +11 -0
  60. snowflake/ml/model/_signatures/pytorch_handler.py +1 -1
  61. snowflake/ml/model/_signatures/snowpark_handler.py +3 -2
  62. snowflake/ml/model/_signatures/utils.py +9 -0
  63. snowflake/ml/model/type_hints.py +12 -145
  64. snowflake/ml/modeling/_internal/constants.py +1 -0
  65. snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +5 -5
  66. snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +9 -6
  67. snowflake/ml/modeling/_internal/model_specifications.py +2 -0
  68. snowflake/ml/modeling/_internal/model_trainer.py +1 -0
  69. snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +2 -4
  70. snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +5 -5
  71. snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +130 -166
  72. snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -1
  73. snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +61 -21
  74. snowflake/ml/modeling/cluster/affinity_propagation.py +61 -21
  75. snowflake/ml/modeling/cluster/agglomerative_clustering.py +61 -21
  76. snowflake/ml/modeling/cluster/birch.py +61 -21
  77. snowflake/ml/modeling/cluster/bisecting_k_means.py +61 -21
  78. snowflake/ml/modeling/cluster/dbscan.py +61 -21
  79. snowflake/ml/modeling/cluster/feature_agglomeration.py +61 -21
  80. snowflake/ml/modeling/cluster/k_means.py +61 -21
  81. snowflake/ml/modeling/cluster/mean_shift.py +61 -21
  82. snowflake/ml/modeling/cluster/mini_batch_k_means.py +61 -21
  83. snowflake/ml/modeling/cluster/optics.py +61 -21
  84. snowflake/ml/modeling/cluster/spectral_biclustering.py +61 -21
  85. snowflake/ml/modeling/cluster/spectral_clustering.py +61 -21
  86. snowflake/ml/modeling/cluster/spectral_coclustering.py +61 -21
  87. snowflake/ml/modeling/compose/column_transformer.py +61 -21
  88. snowflake/ml/modeling/compose/transformed_target_regressor.py +61 -21
  89. snowflake/ml/modeling/covariance/elliptic_envelope.py +61 -21
  90. snowflake/ml/modeling/covariance/empirical_covariance.py +61 -21
  91. snowflake/ml/modeling/covariance/graphical_lasso.py +61 -21
  92. snowflake/ml/modeling/covariance/graphical_lasso_cv.py +61 -21
  93. snowflake/ml/modeling/covariance/ledoit_wolf.py +61 -21
  94. snowflake/ml/modeling/covariance/min_cov_det.py +61 -21
  95. snowflake/ml/modeling/covariance/oas.py +61 -21
  96. snowflake/ml/modeling/covariance/shrunk_covariance.py +61 -21
  97. snowflake/ml/modeling/decomposition/dictionary_learning.py +61 -21
  98. snowflake/ml/modeling/decomposition/factor_analysis.py +61 -21
  99. snowflake/ml/modeling/decomposition/fast_ica.py +61 -21
  100. snowflake/ml/modeling/decomposition/incremental_pca.py +61 -21
  101. snowflake/ml/modeling/decomposition/kernel_pca.py +61 -21
  102. snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +61 -21
  103. snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +61 -21
  104. snowflake/ml/modeling/decomposition/pca.py +61 -21
  105. snowflake/ml/modeling/decomposition/sparse_pca.py +61 -21
  106. snowflake/ml/modeling/decomposition/truncated_svd.py +61 -21
  107. snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +61 -21
  108. snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +61 -21
  109. snowflake/ml/modeling/ensemble/ada_boost_classifier.py +61 -21
  110. snowflake/ml/modeling/ensemble/ada_boost_regressor.py +61 -21
  111. snowflake/ml/modeling/ensemble/bagging_classifier.py +61 -21
  112. snowflake/ml/modeling/ensemble/bagging_regressor.py +61 -21
  113. snowflake/ml/modeling/ensemble/extra_trees_classifier.py +61 -21
  114. snowflake/ml/modeling/ensemble/extra_trees_regressor.py +61 -21
  115. snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +61 -21
  116. snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +61 -21
  117. snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +61 -21
  118. snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +61 -21
  119. snowflake/ml/modeling/ensemble/isolation_forest.py +61 -21
  120. snowflake/ml/modeling/ensemble/random_forest_classifier.py +61 -21
  121. snowflake/ml/modeling/ensemble/random_forest_regressor.py +61 -21
  122. snowflake/ml/modeling/ensemble/stacking_regressor.py +61 -21
  123. snowflake/ml/modeling/ensemble/voting_classifier.py +61 -21
  124. snowflake/ml/modeling/ensemble/voting_regressor.py +61 -21
  125. snowflake/ml/modeling/feature_selection/generic_univariate_select.py +61 -21
  126. snowflake/ml/modeling/feature_selection/select_fdr.py +61 -21
  127. snowflake/ml/modeling/feature_selection/select_fpr.py +61 -21
  128. snowflake/ml/modeling/feature_selection/select_fwe.py +61 -21
  129. snowflake/ml/modeling/feature_selection/select_k_best.py +61 -21
  130. snowflake/ml/modeling/feature_selection/select_percentile.py +61 -21
  131. snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +61 -21
  132. snowflake/ml/modeling/feature_selection/variance_threshold.py +61 -21
  133. snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +61 -21
  134. snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +61 -21
  135. snowflake/ml/modeling/impute/iterative_imputer.py +61 -21
  136. snowflake/ml/modeling/impute/knn_imputer.py +61 -21
  137. snowflake/ml/modeling/impute/missing_indicator.py +61 -21
  138. snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +61 -21
  139. snowflake/ml/modeling/kernel_approximation/nystroem.py +61 -21
  140. snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +61 -21
  141. snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +61 -21
  142. snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +61 -21
  143. snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +61 -21
  144. snowflake/ml/modeling/lightgbm/lgbm_classifier.py +61 -21
  145. snowflake/ml/modeling/lightgbm/lgbm_regressor.py +61 -21
  146. snowflake/ml/modeling/linear_model/ard_regression.py +61 -21
  147. snowflake/ml/modeling/linear_model/bayesian_ridge.py +61 -21
  148. snowflake/ml/modeling/linear_model/elastic_net.py +61 -21
  149. snowflake/ml/modeling/linear_model/elastic_net_cv.py +61 -21
  150. snowflake/ml/modeling/linear_model/gamma_regressor.py +61 -21
  151. snowflake/ml/modeling/linear_model/huber_regressor.py +61 -21
  152. snowflake/ml/modeling/linear_model/lars.py +61 -21
  153. snowflake/ml/modeling/linear_model/lars_cv.py +61 -21
  154. snowflake/ml/modeling/linear_model/lasso.py +61 -21
  155. snowflake/ml/modeling/linear_model/lasso_cv.py +61 -21
  156. snowflake/ml/modeling/linear_model/lasso_lars.py +61 -21
  157. snowflake/ml/modeling/linear_model/lasso_lars_cv.py +61 -21
  158. snowflake/ml/modeling/linear_model/lasso_lars_ic.py +61 -21
  159. snowflake/ml/modeling/linear_model/linear_regression.py +61 -21
  160. snowflake/ml/modeling/linear_model/logistic_regression.py +61 -21
  161. snowflake/ml/modeling/linear_model/logistic_regression_cv.py +61 -21
  162. snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +61 -21
  163. snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +61 -21
  164. snowflake/ml/modeling/linear_model/multi_task_lasso.py +61 -21
  165. snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +61 -21
  166. snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +61 -21
  167. snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +61 -21
  168. snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +61 -21
  169. snowflake/ml/modeling/linear_model/perceptron.py +61 -21
  170. snowflake/ml/modeling/linear_model/poisson_regressor.py +61 -21
  171. snowflake/ml/modeling/linear_model/ransac_regressor.py +61 -21
  172. snowflake/ml/modeling/linear_model/ridge.py +61 -21
  173. snowflake/ml/modeling/linear_model/ridge_classifier.py +61 -21
  174. snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +61 -21
  175. snowflake/ml/modeling/linear_model/ridge_cv.py +61 -21
  176. snowflake/ml/modeling/linear_model/sgd_classifier.py +61 -21
  177. snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +61 -21
  178. snowflake/ml/modeling/linear_model/sgd_regressor.py +61 -21
  179. snowflake/ml/modeling/linear_model/theil_sen_regressor.py +61 -21
  180. snowflake/ml/modeling/linear_model/tweedie_regressor.py +61 -21
  181. snowflake/ml/modeling/manifold/isomap.py +61 -21
  182. snowflake/ml/modeling/manifold/mds.py +61 -21
  183. snowflake/ml/modeling/manifold/spectral_embedding.py +61 -21
  184. snowflake/ml/modeling/manifold/tsne.py +61 -21
  185. snowflake/ml/modeling/metrics/metrics_utils.py +2 -2
  186. snowflake/ml/modeling/metrics/ranking.py +0 -3
  187. snowflake/ml/modeling/metrics/regression.py +0 -3
  188. snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +61 -21
  189. snowflake/ml/modeling/mixture/gaussian_mixture.py +61 -21
  190. snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +61 -21
  191. snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +61 -21
  192. snowflake/ml/modeling/multiclass/output_code_classifier.py +61 -21
  193. snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +61 -21
  194. snowflake/ml/modeling/naive_bayes/categorical_nb.py +61 -21
  195. snowflake/ml/modeling/naive_bayes/complement_nb.py +61 -21
  196. snowflake/ml/modeling/naive_bayes/gaussian_nb.py +61 -21
  197. snowflake/ml/modeling/naive_bayes/multinomial_nb.py +61 -21
  198. snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +61 -21
  199. snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +61 -21
  200. snowflake/ml/modeling/neighbors/kernel_density.py +61 -21
  201. snowflake/ml/modeling/neighbors/local_outlier_factor.py +61 -21
  202. snowflake/ml/modeling/neighbors/nearest_centroid.py +61 -21
  203. snowflake/ml/modeling/neighbors/nearest_neighbors.py +61 -21
  204. snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +61 -21
  205. snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +61 -21
  206. snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +61 -21
  207. snowflake/ml/modeling/neural_network/bernoulli_rbm.py +61 -21
  208. snowflake/ml/modeling/neural_network/mlp_classifier.py +61 -21
  209. snowflake/ml/modeling/neural_network/mlp_regressor.py +61 -21
  210. snowflake/ml/modeling/parameters/disable_model_tracer.py +5 -0
  211. snowflake/ml/modeling/pipeline/pipeline.py +1 -13
  212. snowflake/ml/modeling/preprocessing/polynomial_features.py +61 -21
  213. snowflake/ml/modeling/semi_supervised/label_propagation.py +61 -21
  214. snowflake/ml/modeling/semi_supervised/label_spreading.py +61 -21
  215. snowflake/ml/modeling/svm/linear_svc.py +61 -21
  216. snowflake/ml/modeling/svm/linear_svr.py +61 -21
  217. snowflake/ml/modeling/svm/nu_svc.py +61 -21
  218. snowflake/ml/modeling/svm/nu_svr.py +61 -21
  219. snowflake/ml/modeling/svm/svc.py +61 -21
  220. snowflake/ml/modeling/svm/svr.py +61 -21
  221. snowflake/ml/modeling/tree/decision_tree_classifier.py +61 -21
  222. snowflake/ml/modeling/tree/decision_tree_regressor.py +61 -21
  223. snowflake/ml/modeling/tree/extra_tree_classifier.py +61 -21
  224. snowflake/ml/modeling/tree/extra_tree_regressor.py +61 -21
  225. snowflake/ml/modeling/xgboost/xgb_classifier.py +64 -23
  226. snowflake/ml/modeling/xgboost/xgb_regressor.py +64 -23
  227. snowflake/ml/modeling/xgboost/xgbrf_classifier.py +64 -23
  228. snowflake/ml/modeling/xgboost/xgbrf_regressor.py +64 -23
  229. snowflake/ml/monitoring/_client/model_monitor.py +126 -0
  230. snowflake/ml/monitoring/_client/model_monitor_manager.py +361 -0
  231. snowflake/ml/monitoring/_client/model_monitor_version.py +1 -0
  232. snowflake/ml/monitoring/_client/monitor_sql_client.py +1335 -0
  233. snowflake/ml/monitoring/_client/queries/record_count.ssql +14 -0
  234. snowflake/ml/monitoring/_client/queries/rmse.ssql +28 -0
  235. snowflake/ml/monitoring/entities/model_monitor_config.py +28 -0
  236. snowflake/ml/monitoring/entities/model_monitor_interval.py +46 -0
  237. snowflake/ml/monitoring/entities/output_score_type.py +90 -0
  238. snowflake/ml/registry/_manager/model_manager.py +4 -0
  239. snowflake/ml/registry/registry.py +166 -8
  240. snowflake/ml/version.py +1 -1
  241. {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/METADATA +43 -9
  242. snowflake_ml_python-1.6.3.dist-info/RECORD +400 -0
  243. {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/WHEEL +1 -1
  244. snowflake/ml/_internal/container_services/image_registry/credential.py +0 -84
  245. snowflake/ml/_internal/container_services/image_registry/http_client.py +0 -127
  246. snowflake/ml/_internal/container_services/image_registry/imagelib.py +0 -400
  247. snowflake/ml/_internal/container_services/image_registry/registry_client.py +0 -212
  248. snowflake/ml/_internal/utils/log_stream_processor.py +0 -30
  249. snowflake/ml/_internal/utils/session_token_manager.py +0 -46
  250. snowflake/ml/_internal/utils/spcs_attribution_utils.py +0 -122
  251. snowflake/ml/_internal/utils/uri.py +0 -77
  252. snowflake/ml/data/torch_dataset.py +0 -33
  253. snowflake/ml/model/_api.py +0 -568
  254. snowflake/ml/model/_deploy_client/image_builds/base_image_builder.py +0 -12
  255. snowflake/ml/model/_deploy_client/image_builds/client_image_builder.py +0 -249
  256. snowflake/ml/model/_deploy_client/image_builds/docker_context.py +0 -130
  257. snowflake/ml/model/_deploy_client/image_builds/gunicorn_run.sh +0 -36
  258. snowflake/ml/model/_deploy_client/image_builds/inference_server/main.py +0 -268
  259. snowflake/ml/model/_deploy_client/image_builds/server_image_builder.py +0 -215
  260. snowflake/ml/model/_deploy_client/image_builds/templates/dockerfile_template +0 -53
  261. snowflake/ml/model/_deploy_client/image_builds/templates/image_build_job_spec_template +0 -38
  262. snowflake/ml/model/_deploy_client/image_builds/templates/kaniko_shell_script_template +0 -105
  263. snowflake/ml/model/_deploy_client/snowservice/deploy.py +0 -611
  264. snowflake/ml/model/_deploy_client/snowservice/deploy_options.py +0 -116
  265. snowflake/ml/model/_deploy_client/snowservice/instance_types.py +0 -10
  266. snowflake/ml/model/_deploy_client/snowservice/templates/service_spec_template +0 -28
  267. snowflake/ml/model/_deploy_client/snowservice/templates/service_spec_template_with_model +0 -21
  268. snowflake/ml/model/_deploy_client/utils/constants.py +0 -48
  269. snowflake/ml/model/_deploy_client/utils/snowservice_client.py +0 -280
  270. snowflake/ml/model/_deploy_client/warehouse/deploy.py +0 -202
  271. snowflake/ml/model/_deploy_client/warehouse/infer_template.py +0 -99
  272. snowflake/ml/model/_packager/model_handlers/llm.py +0 -267
  273. snowflake/ml/model/_packager/model_meta/_core_requirements.py +0 -11
  274. snowflake/ml/model/deploy_platforms.py +0 -6
  275. snowflake/ml/model/models/llm.py +0 -104
  276. snowflake/ml/monitoring/monitor.py +0 -203
  277. snowflake/ml/registry/_initial_schema.py +0 -142
  278. snowflake/ml/registry/_schema.py +0 -82
  279. snowflake/ml/registry/_schema_upgrade_plans.py +0 -116
  280. snowflake/ml/registry/_schema_version_manager.py +0 -163
  281. snowflake/ml/registry/model_registry.py +0 -2048
  282. snowflake_ml_python-1.6.1.dist-info/RECORD +0 -422
  283. {snowflake_ml_python-1.6.1.dist-info → snowflake_ml_python-1.6.3.dist-info}/LICENSE.txt +0 -0
  284. {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 posixpath
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 pkg_version_utils, identifier
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
- output_result, fitted_estimator = model_trainer.train_fit_predict(
703
- drop_input_cols=self._drop_input_cols,
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 _align_expected_output_names(
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
- sample_pd_df = dataset.select(self.input_cols).limit(1).to_pandas()
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
- return sorted(list(output_df_columns_set), key=lambda x: output_df_columns.index(x))
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._align_expected_output_names(
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._align_expected_output_names(
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._align_expected_output_names(
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._align_expected_output_names(
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 posixpath
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 pkg_version_utils, identifier
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
- output_result, fitted_estimator = model_trainer.train_fit_predict(
703
- drop_input_cols=self._drop_input_cols,
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 _align_expected_output_names(
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
- sample_pd_df = dataset.select(self.input_cols).limit(1).to_pandas()
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
- return sorted(list(output_df_columns_set), key=lambda x: output_df_columns.index(x))
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._align_expected_output_names(
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._align_expected_output_names(
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._align_expected_output_names(
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._align_expected_output_names(
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
+ )