snowflake-ml-python 1.8.3__tar.gz → 1.8.5__tar.gz
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_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/CHANGELOG.md +46 -0
- {snowflake_ml_python-1.8.3/snowflake_ml_python.egg-info → snowflake_ml_python-1.8.5}/PKG-INFO +58 -8
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/pyproject.toml +4 -3
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/__init__.py +7 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/platform_capabilities.py +13 -11
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/telemetry.py +42 -13
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/identifier.py +2 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/data_connector.py +1 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/constants.py +10 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/interop_utils.py +1 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/payload_utils.py +51 -34
- snowflake_ml_python-1.8.5/snowflake/ml/jobs/_utils/scripts/constants.py +10 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +4 -4
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +86 -3
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/spec_utils.py +8 -6
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/decorators.py +13 -3
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/job.py +206 -26
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/manager.py +78 -34
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/model/model_version_impl.py +1 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/ops/service_ops.py +31 -17
- snowflake_ml_python-1.8.5/snowflake/ml/model/_client/service/model_deployment_spec.py +421 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +25 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/model_version.py +1 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/service.py +20 -32
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_composer.py +44 -19
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/_utils.py +32 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/custom.py +1 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/pytorch.py +1 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/sklearn.py +100 -41
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +7 -4
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/torchscript.py +2 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/xgboost.py +16 -7
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta/model_meta.py +2 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +1 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +5 -4
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/dmatrix_handler.py +15 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/custom_model.py +17 -4
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/model_signature.py +3 -3
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/affinity_propagation.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/birch.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/bisecting_k_means.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/dbscan.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/feature_agglomeration.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/k_means.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/mean_shift.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/optics.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/spectral_biclustering.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/spectral_clustering.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/spectral_coclustering.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/compose/column_transformer.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/compose/transformed_target_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/elliptic_envelope.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/empirical_covariance.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/graphical_lasso.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/ledoit_wolf.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/min_cov_det.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/oas.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/shrunk_covariance.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/dictionary_learning.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/factor_analysis.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/fast_ica.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/incremental_pca.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/kernel_pca.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/pca.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/sparse_pca.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/truncated_svd.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/bagging_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/bagging_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/isolation_forest.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/stacking_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/voting_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/voting_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_fdr.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_fpr.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_fwe.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_k_best.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_percentile.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/variance_threshold.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/iterative_imputer.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/knn_imputer.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/missing_indicator.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/nystroem.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ard_regression.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/elastic_net.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/gamma_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/huber_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lars.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lars_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_lars.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/linear_regression.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/logistic_regression.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/perceptron.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/poisson_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ransac_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge_cv.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/sgd_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/sgd_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/isomap.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/mds.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/spectral_embedding.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/tsne.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/mixture/gaussian_mixture.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/output_code_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/complement_nb.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/kernel_density.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/nearest_centroid.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/mlp_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/mlp_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/polynomial_features.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/semi_supervised/label_propagation.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/semi_supervised/label_spreading.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/linear_svc.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/linear_svr.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/nu_svc.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/nu_svr.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/svc.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/svr.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/decision_tree_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/decision_tree_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/extra_tree_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/extra_tree_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgb_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgb_regressor.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +9 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +9 -1
- snowflake_ml_python-1.8.5/snowflake/ml/monitoring/explain_visualize.py +424 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/registry/_manager/model_manager.py +23 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/registry/registry.py +10 -9
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/connection_params.py +8 -2
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5/snowflake_ml_python.egg-info}/PKG-INFO +58 -8
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/SOURCES.txt +1 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/requires.txt +12 -7
- snowflake_ml_python-1.8.3/snowflake/ml/jobs/_utils/scripts/constants.py +0 -4
- snowflake_ml_python-1.8.3/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -240
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/README.md +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/setup.cfg +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_classify_text.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_complete.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_embed_text_1024.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_embed_text_768.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_extract_answer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_finetune.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_sentiment.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_sse_client.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_summarize.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_translate.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_util.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/env.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/env_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/file_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/init_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/migrator_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/type_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/db_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/formatting.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/import_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/parallelize.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/result.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/service_logger.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/table_manager.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/data_ingestor.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/data_source.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/ingestor_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/torch_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset_factory.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset_metadata.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset_reader.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/access_manager.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/entity.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/airline_features/features/plane_features.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/airline_features/features/weather_features.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/citibike_trip_features/features/station_feature.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/citibike_trip_features/features/trip_feature.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/new_york_taxi_features/entities.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/location_features.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/trip_features.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/new_york_taxi_features/source.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/nyc_yellow_trips.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/wine_quality_features/features/managed_wine_features.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/wine_quality_features/features/static_wine_features.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/feature_store.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/feature_view.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/fileset.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/sfcfs.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/snowfs.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/stage_fs.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/types.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/lineage/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/lineage/lineage_node.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/model/model_impl.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/ops/model_ops.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/_base.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/model.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/stage.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/tag.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/function_generator.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/infer_function.py_template +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/model_method.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_user_file/model_user_file.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_env/model_env.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/catboost.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/huggingface_pipeline.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_packager.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/base_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/core.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/snowpark_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/type_hints.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_search_udf_file.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/calibration/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/compose/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/framework/_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/framework/base.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/simple_imputer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/classification.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/correlation.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/covariance.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/ranking.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/regression.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/mixture/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/model_selection/grid_search_cv.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/model_monitor.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/model_monitor_version.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/shap.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/registry/__init__.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/authentication.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/sparse.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/sql_client.py +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
- {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/top_level.txt +0 -0
@@ -1,5 +1,50 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
## 1.8.5
|
4
|
+
|
5
|
+
### Bug Fixes
|
6
|
+
|
7
|
+
- Registry: Fixed a bug when listing and deleting container services.
|
8
|
+
- Registry: Fixed explainability issue with scikit-learn pipelines, skipping explain function creation.
|
9
|
+
- Explainability: bump minimum streamlit version down to 1.30
|
10
|
+
- Modeling: Make XGBoost a required dependency (xgboost is not a required dependency in snowflake-ml-python 1.8.4).
|
11
|
+
|
12
|
+
### Breaking change
|
13
|
+
|
14
|
+
- ML Job: Rename argument `num_instances` to `target_instances` in job submission APIs and
|
15
|
+
change type from `Optional[int]` to `int`
|
16
|
+
|
17
|
+
### New Features
|
18
|
+
|
19
|
+
- Registry: No longer checks if the snowflake-ml-python version is available in the Snowflake Conda channel when logging
|
20
|
+
an SPCS-only model.
|
21
|
+
- ML Job: Add `min_instances` argument to the job decorator to allow waiting for workers to be ready.
|
22
|
+
|
23
|
+
## 1.8.4 (2025-05-12)
|
24
|
+
|
25
|
+
### Bug Fixes
|
26
|
+
|
27
|
+
- Registry: Default `enable_explainability` to True when the model can be deployed to Warehouse.
|
28
|
+
- Registry: Add `custom_model.partitioned_api` decorator and deprecate `partitioned_inference_api`.
|
29
|
+
- Registry: Fixed a bug when logging pytroch and tensorflow models that caused
|
30
|
+
`UnboundLocalError: local variable 'multiple_inputs' referenced before assignment`.
|
31
|
+
|
32
|
+
### Breaking change
|
33
|
+
|
34
|
+
- ML Job: Updated property `id` to be fully qualified name; Introduced new property `name` to represent the ML Job name
|
35
|
+
- ML Job: Modified `list_jobs()` to return ML Job `name` instead of `id`
|
36
|
+
- Registry: Error in `log_model` if `enable_explainability` is True and model is only deployed to
|
37
|
+
Snowpark Container Services, instead of just user warning.
|
38
|
+
|
39
|
+
### New Features
|
40
|
+
|
41
|
+
- ML Job: Extend `@remote` function decorator, `submit_file()` and `submit_directory()` to accept `database` and
|
42
|
+
`schema` parameters
|
43
|
+
- ML Job: Support querying by fully qualified name in `get_job()`
|
44
|
+
- Explainability: Added visualization functions to `snowflake.ml.monitoring` to plot explanations in notebooks.
|
45
|
+
- Explainability: Support explain for categorical transforms for sklearn pipeline
|
46
|
+
- Support categorical type for `xgboost.DMatrix` inputs.
|
47
|
+
|
3
48
|
## 1.8.3
|
4
49
|
|
5
50
|
### Bug Fixes
|
@@ -13,6 +58,7 @@
|
|
13
58
|
as a list of strings
|
14
59
|
- Registry: Support `ModelVersion.run_job` to run inference with a single-node Snowpark Container Services job.
|
15
60
|
- DataConnector: Removed PrPr decorators
|
61
|
+
- Registry: Default the target platform to warehouse when logging a partitioned model.
|
16
62
|
|
17
63
|
## 1.8.2
|
18
64
|
|
{snowflake_ml_python-1.8.3/snowflake_ml_python.egg-info → snowflake_ml_python-1.8.5}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: snowflake-ml-python
|
3
|
-
Version: 1.8.
|
3
|
+
Version: 1.8.5
|
4
4
|
Summary: The machine learning client library that is used for interacting with Snowflake to build machine learning solutions.
|
5
5
|
Author-email: "Snowflake, Inc" <support@snowflake.com>
|
6
6
|
License:
|
@@ -236,13 +236,13 @@ License-File: LICENSE.txt
|
|
236
236
|
Requires-Dist: absl-py<2,>=0.15
|
237
237
|
Requires-Dist: anyio<5,>=3.5.0
|
238
238
|
Requires-Dist: cachetools<6,>=3.1.1
|
239
|
-
Requires-Dist: cloudpickle
|
239
|
+
Requires-Dist: cloudpickle>=2.0.0
|
240
240
|
Requires-Dist: cryptography
|
241
241
|
Requires-Dist: fsspec[http]<2026,>=2024.6.1
|
242
242
|
Requires-Dist: importlib_resources<7,>=6.1.1
|
243
243
|
Requires-Dist: numpy<2,>=1.23
|
244
244
|
Requires-Dist: packaging<25,>=20.9
|
245
|
-
Requires-Dist: pandas<3,>=1.
|
245
|
+
Requires-Dist: pandas<3,>=2.1.4
|
246
246
|
Requires-Dist: pyarrow
|
247
247
|
Requires-Dist: pydantic<3,>=2.8.2
|
248
248
|
Requires-Dist: pyjwt<3,>=2.0.0
|
@@ -250,27 +250,31 @@ Requires-Dist: pytimeparse<2,>=1.1.8
|
|
250
250
|
Requires-Dist: pyyaml<7,>=6.0
|
251
251
|
Requires-Dist: retrying<2,>=1.3.3
|
252
252
|
Requires-Dist: s3fs<2026,>=2024.6.1
|
253
|
-
Requires-Dist: scikit-learn<1.6
|
253
|
+
Requires-Dist: scikit-learn<1.6
|
254
254
|
Requires-Dist: scipy<2,>=1.9
|
255
|
-
Requires-Dist:
|
255
|
+
Requires-Dist: shap<1,>=0.46.0
|
256
|
+
Requires-Dist: snowflake-connector-python[pandas]<4,>=3.15.0
|
256
257
|
Requires-Dist: snowflake-snowpark-python!=1.26.0,<2,>=1.17.0
|
257
258
|
Requires-Dist: snowflake.core<2,>=1.0.2
|
258
259
|
Requires-Dist: sqlparse<1,>=0.4
|
259
260
|
Requires-Dist: typing-extensions<5,>=4.1.0
|
260
261
|
Requires-Dist: xgboost<3,>=1.7.3
|
261
262
|
Provides-Extra: all
|
263
|
+
Requires-Dist: altair<6,>=5; extra == "all"
|
262
264
|
Requires-Dist: catboost<2,>=1.2.0; extra == "all"
|
263
265
|
Requires-Dist: keras<4,>=2.0.0; extra == "all"
|
264
266
|
Requires-Dist: lightgbm<5,>=4.1.0; extra == "all"
|
265
267
|
Requires-Dist: mlflow<3,>=2.16.0; extra == "all"
|
266
268
|
Requires-Dist: sentence-transformers<4,>=2.7.0; extra == "all"
|
267
269
|
Requires-Dist: sentencepiece<0.2.0,>=0.1.95; extra == "all"
|
268
|
-
Requires-Dist:
|
270
|
+
Requires-Dist: streamlit<2,>=1.30.0; extra == "all"
|
269
271
|
Requires-Dist: tensorflow<3,>=2.17.0; extra == "all"
|
270
272
|
Requires-Dist: tokenizers<1,>=0.15.1; extra == "all"
|
271
273
|
Requires-Dist: torch<3,>=2.0.1; extra == "all"
|
272
274
|
Requires-Dist: torchdata<1,>=0.4; extra == "all"
|
273
275
|
Requires-Dist: transformers<5,>=4.39.3; extra == "all"
|
276
|
+
Provides-Extra: altair
|
277
|
+
Requires-Dist: altair<6,>=5; extra == "altair"
|
274
278
|
Provides-Extra: catboost
|
275
279
|
Requires-Dist: catboost<2,>=1.2.0; extra == "catboost"
|
276
280
|
Provides-Extra: keras
|
@@ -281,8 +285,8 @@ Provides-Extra: lightgbm
|
|
281
285
|
Requires-Dist: lightgbm<5,>=4.1.0; extra == "lightgbm"
|
282
286
|
Provides-Extra: mlflow
|
283
287
|
Requires-Dist: mlflow<3,>=2.16.0; extra == "mlflow"
|
284
|
-
Provides-Extra:
|
285
|
-
Requires-Dist:
|
288
|
+
Provides-Extra: streamlit
|
289
|
+
Requires-Dist: streamlit<2,>=1.30.0; extra == "streamlit"
|
286
290
|
Provides-Extra: tensorflow
|
287
291
|
Requires-Dist: tensorflow<3,>=2.17.0; extra == "tensorflow"
|
288
292
|
Provides-Extra: torch
|
@@ -404,6 +408,51 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
404
408
|
|
405
409
|
# Release History
|
406
410
|
|
411
|
+
## 1.8.5
|
412
|
+
|
413
|
+
### Bug Fixes
|
414
|
+
|
415
|
+
- Registry: Fixed a bug when listing and deleting container services.
|
416
|
+
- Registry: Fixed explainability issue with scikit-learn pipelines, skipping explain function creation.
|
417
|
+
- Explainability: bump minimum streamlit version down to 1.30
|
418
|
+
- Modeling: Make XGBoost a required dependency (xgboost is not a required dependency in snowflake-ml-python 1.8.4).
|
419
|
+
|
420
|
+
### Breaking change
|
421
|
+
|
422
|
+
- ML Job: Rename argument `num_instances` to `target_instances` in job submission APIs and
|
423
|
+
change type from `Optional[int]` to `int`
|
424
|
+
|
425
|
+
### New Features
|
426
|
+
|
427
|
+
- Registry: No longer checks if the snowflake-ml-python version is available in the Snowflake Conda channel when logging
|
428
|
+
an SPCS-only model.
|
429
|
+
- ML Job: Add `min_instances` argument to the job decorator to allow waiting for workers to be ready.
|
430
|
+
|
431
|
+
## 1.8.4 (2025-05-12)
|
432
|
+
|
433
|
+
### Bug Fixes
|
434
|
+
|
435
|
+
- Registry: Default `enable_explainability` to True when the model can be deployed to Warehouse.
|
436
|
+
- Registry: Add `custom_model.partitioned_api` decorator and deprecate `partitioned_inference_api`.
|
437
|
+
- Registry: Fixed a bug when logging pytroch and tensorflow models that caused
|
438
|
+
`UnboundLocalError: local variable 'multiple_inputs' referenced before assignment`.
|
439
|
+
|
440
|
+
### Breaking change
|
441
|
+
|
442
|
+
- ML Job: Updated property `id` to be fully qualified name; Introduced new property `name` to represent the ML Job name
|
443
|
+
- ML Job: Modified `list_jobs()` to return ML Job `name` instead of `id`
|
444
|
+
- Registry: Error in `log_model` if `enable_explainability` is True and model is only deployed to
|
445
|
+
Snowpark Container Services, instead of just user warning.
|
446
|
+
|
447
|
+
### New Features
|
448
|
+
|
449
|
+
- ML Job: Extend `@remote` function decorator, `submit_file()` and `submit_directory()` to accept `database` and
|
450
|
+
`schema` parameters
|
451
|
+
- ML Job: Support querying by fully qualified name in `get_job()`
|
452
|
+
- Explainability: Added visualization functions to `snowflake.ml.monitoring` to plot explanations in notebooks.
|
453
|
+
- Explainability: Support explain for categorical transforms for sklearn pipeline
|
454
|
+
- Support categorical type for `xgboost.DMatrix` inputs.
|
455
|
+
|
407
456
|
## 1.8.3
|
408
457
|
|
409
458
|
### Bug Fixes
|
@@ -417,6 +466,7 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
417
466
|
as a list of strings
|
418
467
|
- Registry: Support `ModelVersion.run_job` to run inference with a single-node Snowpark Container Services job.
|
419
468
|
- DataConnector: Removed PrPr decorators
|
469
|
+
- Registry: Default the target platform to warehouse when logging a partitioned model.
|
420
470
|
|
421
471
|
## 1.8.2
|
422
472
|
|
@@ -8,7 +8,7 @@ description = "The machine learning client library that is used for interacting
|
|
8
8
|
classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Other Environment", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Database", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Scientific/Engineering :: Information Analysis",]
|
9
9
|
requires-python = ">=3.9, <3.13"
|
10
10
|
dynamic = [ "version", "readme",]
|
11
|
-
dependencies = [ "absl-py>=0.15,<2", "anyio>=3.5.0,<5", "cachetools>=3.1.1,<6", "cloudpickle>=2.0.0
|
11
|
+
dependencies = [ "absl-py>=0.15,<2", "anyio>=3.5.0,<5", "cachetools>=3.1.1,<6", "cloudpickle>=2.0.0", "cryptography", "fsspec[http]>=2024.6.1,<2026", "importlib_resources>=6.1.1, <7", "numpy>=1.23,<2", "packaging>=20.9,<25", "pandas>=2.1.4,<3", "pyarrow", "pydantic>=2.8.2, <3", "pyjwt>=2.0.0, <3", "pytimeparse>=1.1.8,<2", "pyyaml>=6.0,<7", "retrying>=1.3.3,<2", "s3fs>=2024.6.1,<2026", "scikit-learn<1.6", "scipy>=1.9,<2", "shap>=0.46.0,<1", "snowflake-connector-python[pandas]>=3.15.0,<4", "snowflake-snowpark-python>=1.17.0,<2,!=1.26.0", "snowflake.core>=1.0.2,<2", "sqlparse>=0.4,<1", "typing-extensions>=4.1.0,<5", "xgboost>=1.7.3,<3",]
|
12
12
|
[[project.authors]]
|
13
13
|
name = "Snowflake, Inc"
|
14
14
|
email = "support@snowflake.com"
|
@@ -24,12 +24,13 @@ Issues = "https://github.com/snowflakedb/snowflake-ml-python/issues"
|
|
24
24
|
Changelog = "https://github.com/snowflakedb/snowflake-ml-python/blob/master/CHANGELOG.md"
|
25
25
|
|
26
26
|
[project.optional-dependencies]
|
27
|
-
all = [ "catboost>=1.2.0, <2", "keras>=2.0.0,<4", "lightgbm>=4.1.0, <5", "mlflow>=2.16.0, <3", "sentence-transformers>=2.7.0,<4", "sentencepiece>=0.1.95,<0.2.0", "
|
27
|
+
all = [ "altair>=5,<6", "catboost>=1.2.0, <2", "keras>=2.0.0,<4", "lightgbm>=4.1.0, <5", "mlflow>=2.16.0, <3", "sentence-transformers>=2.7.0,<4", "sentencepiece>=0.1.95,<0.2.0", "streamlit>=1.30.0,<2", "tensorflow>=2.17.0,<3", "tokenizers>=0.15.1,<1", "torch>=2.0.1,<3", "torchdata>=0.4,<1", "transformers>=4.39.3,<5",]
|
28
|
+
altair = [ "altair>=5,<6",]
|
28
29
|
catboost = [ "catboost>=1.2.0, <2",]
|
29
30
|
keras = [ "keras>=2.0.0,<4", "tensorflow>=2.17.0,<3", "torch>=2.0.1,<3",]
|
30
31
|
lightgbm = [ "lightgbm>=4.1.0, <5",]
|
31
32
|
mlflow = [ "mlflow>=2.16.0, <3",]
|
32
|
-
|
33
|
+
streamlit = [ "streamlit>=1.30.0,<2",]
|
33
34
|
tensorflow = [ "tensorflow>=2.17.0,<3",]
|
34
35
|
torch = [ "torch>=2.0.1,<3", "torchdata>=0.4,<1",]
|
35
36
|
transformers = [ "sentence-transformers>=2.7.0,<4", "sentencepiece>=0.1.95,<0.2.0", "tokenizers>=0.15.1,<1", "torch>=2.0.1,<3", "transformers>=4.39.3,<5",]
|
@@ -1,5 +1,10 @@
|
|
1
1
|
from snowflake.cortex._classify_text import ClassifyText, classify_text
|
2
|
-
from snowflake.cortex._complete import
|
2
|
+
from snowflake.cortex._complete import (
|
3
|
+
Complete,
|
4
|
+
CompleteOptions,
|
5
|
+
ConversationMessage,
|
6
|
+
complete,
|
7
|
+
)
|
3
8
|
from snowflake.cortex._embed_text_768 import EmbedText768, embed_text_768
|
4
9
|
from snowflake.cortex._embed_text_1024 import EmbedText1024, embed_text_1024
|
5
10
|
from snowflake.cortex._extract_answer import ExtractAnswer, extract_answer
|
@@ -14,6 +19,7 @@ __all__ = [
|
|
14
19
|
"Complete",
|
15
20
|
"complete",
|
16
21
|
"CompleteOptions",
|
22
|
+
"ConversationMessage",
|
17
23
|
"EmbedText768",
|
18
24
|
"embed_text_768",
|
19
25
|
"EmbedText1024",
|
@@ -11,6 +11,9 @@ from snowflake.snowpark import (
|
|
11
11
|
session as snowpark_session,
|
12
12
|
)
|
13
13
|
|
14
|
+
LIVE_COMMIT_PARAMETER = "ENABLE_LIVE_VERSION_IN_SDK"
|
15
|
+
INLINE_DEPLOYMENT_SPEC_PARAMETER = "ENABLE_INLINE_DEPLOYMENT_SPEC"
|
16
|
+
|
14
17
|
|
15
18
|
class PlatformCapabilities:
|
16
19
|
"""Class that retrieves platform feature values for the currently running server.
|
@@ -18,12 +21,12 @@ class PlatformCapabilities:
|
|
18
21
|
Example usage:
|
19
22
|
```
|
20
23
|
pc = PlatformCapabilities.get_instance(session)
|
21
|
-
if pc.
|
22
|
-
#
|
23
|
-
print("
|
24
|
+
if pc.is_inlined_deployment_spec_enabled():
|
25
|
+
# Inline deployment spec is enabled.
|
26
|
+
print("Inline deployment spec is enabled.")
|
24
27
|
else:
|
25
|
-
#
|
26
|
-
print("
|
28
|
+
# Inline deployment spec is disabled.
|
29
|
+
print("Inline deployment spec is disabled or not supported.")
|
27
30
|
```
|
28
31
|
"""
|
29
32
|
|
@@ -50,9 +53,11 @@ class PlatformCapabilities:
|
|
50
53
|
|
51
54
|
# For contextmanager, we need to have return type Iterator[Never]. However, Never type is introduced only in
|
52
55
|
# Python 3.11. So, we are ignoring the type for this method.
|
56
|
+
_dummy_features: dict[str, Any] = {"dummy": "dummy"}
|
57
|
+
|
53
58
|
@classmethod # type: ignore[arg-type]
|
54
59
|
@contextmanager
|
55
|
-
def mock_features(cls, features: dict[str, Any]) -> None: # type: ignore[misc]
|
60
|
+
def mock_features(cls, features: dict[str, Any] = _dummy_features) -> None: # type: ignore[misc]
|
56
61
|
logging.debug(f"Setting mock features: {features}")
|
57
62
|
cls.set_mock_features(features)
|
58
63
|
try:
|
@@ -61,14 +66,11 @@ class PlatformCapabilities:
|
|
61
66
|
logging.debug(f"Clearing mock features: {features}")
|
62
67
|
cls.clear_mock_features()
|
63
68
|
|
64
|
-
def is_nested_function_enabled(self) -> bool:
|
65
|
-
return self._get_bool_feature("SPCS_MODEL_ENABLE_EMBEDDED_SERVICE_FUNCTIONS", False)
|
66
|
-
|
67
69
|
def is_inlined_deployment_spec_enabled(self) -> bool:
|
68
|
-
return self._get_bool_feature(
|
70
|
+
return self._get_bool_feature(INLINE_DEPLOYMENT_SPEC_PARAMETER, False)
|
69
71
|
|
70
72
|
def is_live_commit_enabled(self) -> bool:
|
71
|
-
return self._get_bool_feature(
|
73
|
+
return self._get_bool_feature(LIVE_COMMIT_PARAMETER, False)
|
72
74
|
|
73
75
|
@staticmethod
|
74
76
|
def _get_features(session: snowpark_session.Session) -> dict[str, Any]:
|
@@ -4,6 +4,7 @@ import enum
|
|
4
4
|
import functools
|
5
5
|
import inspect
|
6
6
|
import operator
|
7
|
+
import os
|
7
8
|
import sys
|
8
9
|
import time
|
9
10
|
import traceback
|
@@ -13,7 +14,7 @@ from typing import Any, Callable, Iterable, Mapping, Optional, TypeVar, Union, c
|
|
13
14
|
from typing_extensions import ParamSpec
|
14
15
|
|
15
16
|
from snowflake import connector
|
16
|
-
from snowflake.connector import telemetry as connector_telemetry, time_util
|
17
|
+
from snowflake.connector import connect, telemetry as connector_telemetry, time_util
|
17
18
|
from snowflake.ml import version as snowml_version
|
18
19
|
from snowflake.ml._internal import env
|
19
20
|
from snowflake.ml._internal.exceptions import (
|
@@ -37,6 +38,37 @@ _Args = ParamSpec("_Args")
|
|
37
38
|
_ReturnValue = TypeVar("_ReturnValue")
|
38
39
|
|
39
40
|
|
41
|
+
def _get_login_token() -> Union[str, bytes]:
|
42
|
+
with open("/snowflake/session/token") as f:
|
43
|
+
return f.read()
|
44
|
+
|
45
|
+
|
46
|
+
def _get_snowflake_connection() -> Optional[connector.SnowflakeConnection]:
|
47
|
+
conn = None
|
48
|
+
if os.getenv("SNOWFLAKE_HOST") is not None and os.getenv("SNOWFLAKE_ACCOUNT") is not None:
|
49
|
+
try:
|
50
|
+
conn = connect(
|
51
|
+
host=os.getenv("SNOWFLAKE_HOST"),
|
52
|
+
account=os.getenv("SNOWFLAKE_ACCOUNT"),
|
53
|
+
token=_get_login_token(),
|
54
|
+
authenticator="oauth",
|
55
|
+
)
|
56
|
+
except Exception:
|
57
|
+
# Failed to get a new SnowflakeConnection in SPCS. Fall back to using the active session.
|
58
|
+
# This will work in some cases once SPCS enables multiple authentication modes, and users select any auth.
|
59
|
+
pass
|
60
|
+
|
61
|
+
if conn is None:
|
62
|
+
try:
|
63
|
+
active_session = next(iter(session._get_active_sessions()))
|
64
|
+
conn = active_session._conn._conn if active_session.telemetry_enabled else None
|
65
|
+
except snowpark_exceptions.SnowparkSessionException:
|
66
|
+
# Failed to get an active session. No connection available.
|
67
|
+
pass
|
68
|
+
|
69
|
+
return conn
|
70
|
+
|
71
|
+
|
40
72
|
@enum.unique
|
41
73
|
class TelemetryProject(enum.Enum):
|
42
74
|
MLOPS = "MLOps"
|
@@ -378,10 +410,14 @@ def send_custom_usage(
|
|
378
410
|
data: Optional[dict[str, Any]] = None,
|
379
411
|
**kwargs: Any,
|
380
412
|
) -> None:
|
381
|
-
|
382
|
-
|
413
|
+
conn = _get_snowflake_connection()
|
414
|
+
if conn is None:
|
415
|
+
raise ValueError(
|
416
|
+
"""Snowflake connection is required to send custom telemetry. This means there
|
417
|
+
must be at least one active session, or that telemetry is being sent from within an SPCS service."""
|
418
|
+
)
|
383
419
|
|
384
|
-
client = _SourceTelemetryClient(conn=
|
420
|
+
client = _SourceTelemetryClient(conn=conn, project=project, subproject=subproject)
|
385
421
|
common_metrics = client._create_basic_telemetry_data(telemetry_type=telemetry_type)
|
386
422
|
data = {**common_metrics, TelemetryField.KEY_DATA.value: data, **kwargs}
|
387
423
|
client._send(msg=data)
|
@@ -501,7 +537,6 @@ def send_api_usage_telemetry(
|
|
501
537
|
return update_stmt_params_if_snowpark_df(result, statement_params)
|
502
538
|
|
503
539
|
# prioritize `conn_attr_name` over the active session
|
504
|
-
telemetry_enabled = True
|
505
540
|
if conn_attr_name:
|
506
541
|
# raise AttributeError if conn attribute does not exist in `self`
|
507
542
|
conn = operator.attrgetter(conn_attr_name)(args[0])
|
@@ -509,16 +544,10 @@ def send_api_usage_telemetry(
|
|
509
544
|
raise TypeError(
|
510
545
|
f"Expected a conn object of type {' or '.join(_CONNECTION_TYPES.keys())} but got {type(conn)}"
|
511
546
|
)
|
512
|
-
# get an active session
|
513
547
|
else:
|
514
|
-
|
515
|
-
active_session = next(iter(session._get_active_sessions()))
|
516
|
-
conn = active_session._conn._conn
|
517
|
-
telemetry_enabled = active_session.telemetry_enabled
|
518
|
-
except snowpark_exceptions.SnowparkSessionException:
|
519
|
-
conn = None
|
548
|
+
conn = _get_snowflake_connection()
|
520
549
|
|
521
|
-
if conn is None
|
550
|
+
if conn is None:
|
522
551
|
# Telemetry not enabled, just execute without our additional telemetry logic
|
523
552
|
try:
|
524
553
|
return ctx.run(execute_func_with_statement_params)
|
{snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/identifier.py
RENAMED
@@ -12,7 +12,7 @@ SF_IDENTIFIER_RE = re.compile(_SF_IDENTIFIER)
|
|
12
12
|
_SF_SCHEMA_LEVEL_OBJECT = (
|
13
13
|
rf"(?:(?:(?P<db>{_SF_IDENTIFIER})\.)?(?P<schema>{_SF_IDENTIFIER})\.)?(?P<object>{_SF_IDENTIFIER})"
|
14
14
|
)
|
15
|
-
_SF_STAGE_PATH = rf"{_SF_SCHEMA_LEVEL_OBJECT}(?P<path
|
15
|
+
_SF_STAGE_PATH = rf"@?{_SF_SCHEMA_LEVEL_OBJECT}(?P<path>/.*)?"
|
16
16
|
_SF_SCHEMA_LEVEL_OBJECT_RE = re.compile(_SF_SCHEMA_LEVEL_OBJECT)
|
17
17
|
_SF_STAGE_PATH_RE = re.compile(_SF_STAGE_PATH)
|
18
18
|
|
@@ -197,7 +197,7 @@ def parse_snowflake_stage_path(
|
|
197
197
|
res.group("db"),
|
198
198
|
res.group("schema"),
|
199
199
|
res.group("object"),
|
200
|
-
res.group("path"),
|
200
|
+
res.group("path") or "",
|
201
201
|
)
|
202
202
|
|
203
203
|
|
@@ -249,7 +249,7 @@ class DataConnector:
|
|
249
249
|
|
250
250
|
# Switch to use Runtime's Data Ingester if running in ML runtime
|
251
251
|
# Fail silently if the data ingester is not found
|
252
|
-
if env.IN_ML_RUNTIME and os.getenv(env.USE_OPTIMIZED_DATA_INGESTOR):
|
252
|
+
if env.IN_ML_RUNTIME and os.getenv(env.USE_OPTIMIZED_DATA_INGESTOR, "").lower() in ("true", "1"):
|
253
253
|
try:
|
254
254
|
from runtime_external_entities import get_ingester_class
|
255
255
|
|
{snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/constants.py
RENAMED
@@ -5,6 +5,7 @@ from snowflake.ml.jobs._utils.types import ComputeResources
|
|
5
5
|
DEFAULT_CONTAINER_NAME = "main"
|
6
6
|
PAYLOAD_DIR_ENV_VAR = "MLRS_PAYLOAD_DIR"
|
7
7
|
RESULT_PATH_ENV_VAR = "MLRS_RESULT_PATH"
|
8
|
+
MIN_INSTANCES_ENV_VAR = "MLRS_MIN_INSTANCES"
|
8
9
|
MEMORY_VOLUME_NAME = "dshm"
|
9
10
|
STAGE_VOLUME_NAME = "stage-volume"
|
10
11
|
STAGE_VOLUME_MOUNT_PATH = "/mnt/app"
|
@@ -13,7 +14,7 @@ STAGE_VOLUME_MOUNT_PATH = "/mnt/app"
|
|
13
14
|
DEFAULT_IMAGE_REPO = "/snowflake/images/snowflake_images"
|
14
15
|
DEFAULT_IMAGE_CPU = "st_plat/runtime/x86/runtime_image/snowbooks"
|
15
16
|
DEFAULT_IMAGE_GPU = "st_plat/runtime/x86/generic_gpu/runtime_image/snowbooks"
|
16
|
-
DEFAULT_IMAGE_TAG = "1.
|
17
|
+
DEFAULT_IMAGE_TAG = "1.2.3"
|
17
18
|
DEFAULT_ENTRYPOINT_PATH = "func.py"
|
18
19
|
|
19
20
|
# Percent of container memory to allocate for /dev/shm volume
|
@@ -37,6 +38,7 @@ RAY_PORTS = {
|
|
37
38
|
# Node health check configuration
|
38
39
|
# TODO(SNOW-1937020): Revisit the health check configuration
|
39
40
|
ML_RUNTIME_HEALTH_CHECK_PORT = "5001"
|
41
|
+
ENABLE_HEALTH_CHECKS_ENV_VAR = "ENABLE_HEALTH_CHECKS"
|
40
42
|
ENABLE_HEALTH_CHECKS = "false"
|
41
43
|
|
42
44
|
# Job status polling constants
|
@@ -47,6 +49,13 @@ JOB_POLL_MAX_DELAY_SECONDS = 1
|
|
47
49
|
IS_MLJOB_REMOTE_ATTR = "_is_mljob_remote_callable"
|
48
50
|
RESULT_PATH_DEFAULT_VALUE = "mljob_result.pkl"
|
49
51
|
|
52
|
+
# Log start and end messages
|
53
|
+
LOG_START_MSG = "--------------------------------\nML job started\n--------------------------------"
|
54
|
+
LOG_END_MSG = "--------------------------------\nML job finished\n--------------------------------"
|
55
|
+
|
56
|
+
# Default setting for verbose logging in get_log function
|
57
|
+
DEFAULT_VERBOSE_LOG = False
|
58
|
+
|
50
59
|
# Compute pool resource information
|
51
60
|
# TODO: Query Snowflake for resource information instead of relying on this hardcoded
|
52
61
|
# table from https://docs.snowflake.com/en/sql-reference/sql/create-compute-pool
|
{snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/interop_utils.py
RENAMED
@@ -80,7 +80,7 @@ def fetch_result(session: snowpark.Session, result_path: str) -> ExecutionResult
|
|
80
80
|
# TODO: Check if file exists
|
81
81
|
with session.file.get_stream(result_path) as result_stream:
|
82
82
|
return ExecutionResult.from_dict(pickle.load(result_stream))
|
83
|
-
except (sp_exceptions.SnowparkSQLException, TypeError,
|
83
|
+
except (sp_exceptions.SnowparkSQLException, pickle.UnpicklingError, TypeError, ImportError):
|
84
84
|
# Fall back to JSON result if loading pickled result fails for any reason
|
85
85
|
result_json_path = os.path.splitext(result_path)[0] + ".json"
|
86
86
|
with session.file.get_stream(result_json_path) as result_stream:
|
{snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/payload_utils.py
RENAMED
@@ -9,6 +9,7 @@ from pathlib import Path, PurePath
|
|
9
9
|
from typing import Any, Callable, Optional, Union, cast, get_args, get_origin
|
10
10
|
|
11
11
|
import cloudpickle as cp
|
12
|
+
from packaging import version
|
12
13
|
|
13
14
|
from snowflake import snowpark
|
14
15
|
from snowflake.ml.jobs._utils import constants, types
|
@@ -97,11 +98,23 @@ _STARTUP_SCRIPT_CODE = textwrap.dedent(
|
|
97
98
|
head_info=$(python3 get_instance_ip.py "$SNOWFLAKE_SERVICE_NAME" --head)
|
98
99
|
if [ $? -eq 0 ]; then
|
99
100
|
# Parse the output using read
|
100
|
-
read head_index head_ip <<< "$head_info"
|
101
|
+
read head_index head_ip head_status<<< "$head_info"
|
102
|
+
|
103
|
+
if [ "$SNOWFLAKE_JOB_INDEX" -ne "$head_index" ]; then
|
104
|
+
NODE_TYPE="worker"
|
105
|
+
echo "{constants.LOG_START_MSG}"
|
106
|
+
fi
|
101
107
|
|
102
108
|
# Use the parsed variables
|
103
109
|
echo "Head Instance Index: $head_index"
|
104
110
|
echo "Head Instance IP: $head_ip"
|
111
|
+
echo "Head Instance Status: $head_status"
|
112
|
+
|
113
|
+
# If the head status is not "READY" or "PENDING", exit early
|
114
|
+
if [ "$head_status" != "READY" ] && [ "$head_status" != "PENDING" ]; then
|
115
|
+
echo "Head instance status is not READY or PENDING. Exiting."
|
116
|
+
exit 0
|
117
|
+
fi
|
105
118
|
|
106
119
|
else
|
107
120
|
echo "Error: Failed to get head instance information."
|
@@ -109,9 +122,7 @@ _STARTUP_SCRIPT_CODE = textwrap.dedent(
|
|
109
122
|
exit 1
|
110
123
|
fi
|
111
124
|
|
112
|
-
|
113
|
-
NODE_TYPE="worker"
|
114
|
-
fi
|
125
|
+
|
115
126
|
fi
|
116
127
|
|
117
128
|
# Common parameters for both head and worker nodes
|
@@ -160,6 +171,10 @@ _STARTUP_SCRIPT_CODE = textwrap.dedent(
|
|
160
171
|
# Start Ray on a worker node - run in background
|
161
172
|
ray start "${{common_params[@]}}" "${{worker_params[@]}}" -v --block &
|
162
173
|
|
174
|
+
echo "Worker node started on address $eth0Ip. See more logs in the head node."
|
175
|
+
|
176
|
+
echo "{constants.LOG_END_MSG}"
|
177
|
+
|
163
178
|
# Start the worker shutdown listener in the background
|
164
179
|
echo "Starting worker shutdown listener..."
|
165
180
|
python worker_shutdown_listener.py
|
@@ -181,15 +196,16 @@ _STARTUP_SCRIPT_CODE = textwrap.dedent(
|
|
181
196
|
|
182
197
|
# Start Ray on the head node
|
183
198
|
ray start "${{common_params[@]}}" "${{head_params[@]}}" -v
|
199
|
+
|
184
200
|
##### End Ray configuration #####
|
185
201
|
|
186
202
|
# TODO: Monitor MLRS and handle process crashes
|
187
203
|
python -m web.ml_runtime_grpc_server &
|
188
204
|
|
189
205
|
# TODO: Launch worker service(s) using SQL if Ray and MLRS successfully started
|
206
|
+
echo Running command: python "$@"
|
190
207
|
|
191
208
|
# Run user's Python entrypoint
|
192
|
-
echo Running command: python "$@"
|
193
209
|
python "$@"
|
194
210
|
|
195
211
|
# After the user's job completes, signal workers to shut down
|
@@ -278,17 +294,19 @@ class JobPayload:
|
|
278
294
|
stage_path = PurePath(stage_path) if isinstance(stage_path, str) else stage_path
|
279
295
|
source = resolve_source(self.source)
|
280
296
|
entrypoint = resolve_entrypoint(source, self.entrypoint)
|
297
|
+
pip_requirements = self.pip_requirements or []
|
281
298
|
|
282
299
|
# Create stage if necessary
|
283
300
|
stage_name = stage_path.parts[0].lstrip("@")
|
284
301
|
# Explicitly check if stage exists first since we may not have CREATE STAGE privilege
|
285
302
|
try:
|
286
|
-
session.sql(
|
303
|
+
session.sql("describe stage identifier(?)", params=[stage_name]).collect()
|
287
304
|
except sp_exceptions.SnowparkSQLException:
|
288
305
|
session.sql(
|
289
|
-
|
306
|
+
"create stage if not exists identifier(?)"
|
290
307
|
" encryption = ( type = 'SNOWFLAKE_SSE' )"
|
291
|
-
" comment = 'Created by snowflake.ml.jobs Python API'"
|
308
|
+
" comment = 'Created by snowflake.ml.jobs Python API'",
|
309
|
+
params=[stage_name],
|
292
310
|
).collect()
|
293
311
|
|
294
312
|
# Upload payload to stage
|
@@ -301,6 +319,8 @@ class JobPayload:
|
|
301
319
|
overwrite=True,
|
302
320
|
)
|
303
321
|
source = Path(entrypoint.file_path.parent)
|
322
|
+
if not any(r.startswith("cloudpickle") for r in pip_requirements):
|
323
|
+
pip_requirements.append(f"cloudpickle~={version.parse(cp.__version__).major}.0")
|
304
324
|
elif source.is_dir():
|
305
325
|
# Manually traverse the directory and upload each file, since Snowflake PUT
|
306
326
|
# can't handle directories. Reduce the number of PUT operations by using
|
@@ -325,10 +345,10 @@ class JobPayload:
|
|
325
345
|
|
326
346
|
# Upload requirements
|
327
347
|
# TODO: Check if payload includes both a requirements.txt file and pip_requirements
|
328
|
-
if
|
348
|
+
if pip_requirements:
|
329
349
|
# Upload requirements.txt to stage
|
330
350
|
session.file.put_stream(
|
331
|
-
io.BytesIO("\n".join(
|
351
|
+
io.BytesIO("\n".join(pip_requirements).encode()),
|
332
352
|
stage_location=stage_path.joinpath("requirements.txt").as_posix(),
|
333
353
|
auto_compress=False,
|
334
354
|
overwrite=True,
|
@@ -495,13 +515,6 @@ def generate_python_code(func: Callable[..., Any], source_code_display: bool = F
|
|
495
515
|
# https://github.com/snowflakedb/snowpark-python/blob/main/src/snowflake/snowpark/_internal/udf_utils.py
|
496
516
|
source_code_comment = _generate_source_code_comment(func) if source_code_display else ""
|
497
517
|
|
498
|
-
func_code = f"""
|
499
|
-
{source_code_comment}
|
500
|
-
|
501
|
-
import pickle
|
502
|
-
{_ENTRYPOINT_FUNC_NAME} = pickle.loads(bytes.fromhex('{_serialize_callable(func).hex()}'))
|
503
|
-
"""
|
504
|
-
|
505
518
|
arg_dict_name = "kwargs"
|
506
519
|
if getattr(func, constants.IS_MLJOB_REMOTE_ATTR, None):
|
507
520
|
param_code = f"{arg_dict_name} = {{}}"
|
@@ -509,25 +522,29 @@ import pickle
|
|
509
522
|
param_code = _generate_param_handler_code(signature, arg_dict_name)
|
510
523
|
|
511
524
|
return f"""
|
512
|
-
### Version guard to check compatibility across Python versions ###
|
513
|
-
import os
|
514
525
|
import sys
|
515
|
-
import
|
516
|
-
|
517
|
-
if sys.version_info.major != {sys.version_info.major} or sys.version_info.minor != {sys.version_info.minor}:
|
518
|
-
warnings.warn(
|
519
|
-
"Python version mismatch: job was created using"
|
520
|
-
" python{sys.version_info.major}.{sys.version_info.minor}"
|
521
|
-
f" but runtime environment uses python{{sys.version_info.major}}.{{sys.version_info.minor}}."
|
522
|
-
" Compatibility across Python versions is not guaranteed and may result in unexpected behavior."
|
523
|
-
" This will be fixed in a future release; for now, please use Python version"
|
524
|
-
f" {{sys.version_info.major}}.{{sys.version_info.minor}}.",
|
525
|
-
RuntimeWarning,
|
526
|
-
stacklevel=0,
|
527
|
-
)
|
528
|
-
### End version guard ###
|
526
|
+
import pickle
|
529
527
|
|
530
|
-
|
528
|
+
try:
|
529
|
+
{textwrap.indent(source_code_comment, ' ')}
|
530
|
+
{_ENTRYPOINT_FUNC_NAME} = pickle.loads(bytes.fromhex('{_serialize_callable(func).hex()}'))
|
531
|
+
except (TypeError, pickle.PickleError):
|
532
|
+
if sys.version_info.major != {sys.version_info.major} or sys.version_info.minor != {sys.version_info.minor}:
|
533
|
+
raise RuntimeError(
|
534
|
+
"Failed to deserialize function due to Python version mismatch."
|
535
|
+
f" Runtime environment is Python {{sys.version_info.major}}.{{sys.version_info.minor}}"
|
536
|
+
" but function was serialized using Python {sys.version_info.major}.{sys.version_info.minor}."
|
537
|
+
) from None
|
538
|
+
raise
|
539
|
+
except AttributeError as e:
|
540
|
+
if 'cloudpickle' in str(e):
|
541
|
+
import cloudpickle as cp
|
542
|
+
raise RuntimeError(
|
543
|
+
"Failed to deserialize function due to cloudpickle version mismatch."
|
544
|
+
f" Runtime environment uses cloudpickle=={{cp.__version__}}"
|
545
|
+
" but job was serialized using cloudpickle=={cp.__version__}."
|
546
|
+
) from e
|
547
|
+
raise
|
531
548
|
|
532
549
|
if __name__ == '__main__':
|
533
550
|
{textwrap.indent(param_code, ' ')}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# Constants defining the shutdown signal actor configuration.
|
2
|
+
SHUTDOWN_ACTOR_NAME = "ShutdownSignal"
|
3
|
+
SHUTDOWN_ACTOR_NAMESPACE = "default"
|
4
|
+
SHUTDOWN_RPC_TIMEOUT_SECONDS = 5.0
|
5
|
+
|
6
|
+
|
7
|
+
# Log start and end messages
|
8
|
+
# Inherited from snowflake.ml.jobs._utils.constants
|
9
|
+
LOG_START_MSG = "--------------------------------\nML job started\n--------------------------------"
|
10
|
+
LOG_END_MSG = "--------------------------------\nML job finished\n--------------------------------"
|