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.
Files changed (427) hide show
  1. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/CHANGELOG.md +46 -0
  2. {snowflake_ml_python-1.8.3/snowflake_ml_python.egg-info → snowflake_ml_python-1.8.5}/PKG-INFO +58 -8
  3. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/pyproject.toml +4 -3
  4. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/__init__.py +7 -1
  5. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/platform_capabilities.py +13 -11
  6. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/telemetry.py +42 -13
  7. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/identifier.py +2 -2
  8. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/data_connector.py +1 -1
  9. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/constants.py +10 -1
  10. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/interop_utils.py +1 -1
  11. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/payload_utils.py +51 -34
  12. snowflake_ml_python-1.8.5/snowflake/ml/jobs/_utils/scripts/constants.py +10 -0
  13. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +4 -4
  14. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +86 -3
  15. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/spec_utils.py +8 -6
  16. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/decorators.py +13 -3
  17. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/job.py +206 -26
  18. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/manager.py +78 -34
  19. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/model/model_version_impl.py +1 -1
  20. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/ops/service_ops.py +31 -17
  21. snowflake_ml_python-1.8.5/snowflake/ml/model/_client/service/model_deployment_spec.py +421 -0
  22. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +25 -0
  23. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/model_version.py +1 -1
  24. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/service.py +20 -32
  25. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_composer.py +44 -19
  26. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/_utils.py +32 -2
  27. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/custom.py +1 -1
  28. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/pytorch.py +1 -2
  29. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/sklearn.py +100 -41
  30. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +7 -4
  31. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/torchscript.py +2 -2
  32. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/xgboost.py +16 -7
  33. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta/model_meta.py +2 -1
  34. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +1 -0
  35. {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
  36. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/dmatrix_handler.py +15 -2
  37. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/custom_model.py +17 -4
  38. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/model_signature.py +3 -3
  39. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +9 -1
  40. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/affinity_propagation.py +9 -1
  41. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +9 -1
  42. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/birch.py +9 -1
  43. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/bisecting_k_means.py +9 -1
  44. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/dbscan.py +9 -1
  45. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/feature_agglomeration.py +9 -1
  46. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/k_means.py +9 -1
  47. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/mean_shift.py +9 -1
  48. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +9 -1
  49. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/optics.py +9 -1
  50. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/spectral_biclustering.py +9 -1
  51. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/spectral_clustering.py +9 -1
  52. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/spectral_coclustering.py +9 -1
  53. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/compose/column_transformer.py +9 -1
  54. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/compose/transformed_target_regressor.py +9 -1
  55. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/elliptic_envelope.py +9 -1
  56. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/empirical_covariance.py +9 -1
  57. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/graphical_lasso.py +9 -1
  58. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +9 -1
  59. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/ledoit_wolf.py +9 -1
  60. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/min_cov_det.py +9 -1
  61. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/oas.py +9 -1
  62. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/shrunk_covariance.py +9 -1
  63. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/dictionary_learning.py +9 -1
  64. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/factor_analysis.py +9 -1
  65. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/fast_ica.py +9 -1
  66. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/incremental_pca.py +9 -1
  67. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/kernel_pca.py +9 -1
  68. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +9 -1
  69. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +9 -1
  70. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/pca.py +9 -1
  71. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/sparse_pca.py +9 -1
  72. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/truncated_svd.py +9 -1
  73. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +9 -1
  74. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +9 -1
  75. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +9 -1
  76. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +9 -1
  77. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/bagging_classifier.py +9 -1
  78. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/bagging_regressor.py +9 -1
  79. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +9 -1
  80. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +9 -1
  81. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +9 -1
  82. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +9 -1
  83. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +9 -1
  84. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +9 -1
  85. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/isolation_forest.py +9 -1
  86. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +9 -1
  87. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +9 -1
  88. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/stacking_regressor.py +9 -1
  89. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/voting_classifier.py +9 -1
  90. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/voting_regressor.py +9 -1
  91. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +9 -1
  92. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_fdr.py +9 -1
  93. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_fpr.py +9 -1
  94. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_fwe.py +9 -1
  95. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_k_best.py +9 -1
  96. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/select_percentile.py +9 -1
  97. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +9 -1
  98. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/variance_threshold.py +9 -1
  99. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +9 -1
  100. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +9 -1
  101. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/iterative_imputer.py +9 -1
  102. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/knn_imputer.py +9 -1
  103. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/missing_indicator.py +9 -1
  104. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +9 -1
  105. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/nystroem.py +9 -1
  106. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +9 -1
  107. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +9 -1
  108. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +9 -1
  109. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +9 -1
  110. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +9 -1
  111. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +9 -1
  112. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ard_regression.py +9 -1
  113. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +9 -1
  114. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/elastic_net.py +9 -1
  115. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +9 -1
  116. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/gamma_regressor.py +9 -1
  117. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/huber_regressor.py +9 -1
  118. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lars.py +9 -1
  119. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lars_cv.py +9 -1
  120. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso.py +9 -1
  121. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_cv.py +9 -1
  122. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_lars.py +9 -1
  123. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +9 -1
  124. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +9 -1
  125. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/linear_regression.py +9 -1
  126. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/logistic_regression.py +9 -1
  127. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +9 -1
  128. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +9 -1
  129. {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
  130. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +9 -1
  131. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +9 -1
  132. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +9 -1
  133. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +9 -1
  134. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +9 -1
  135. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/perceptron.py +9 -1
  136. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/poisson_regressor.py +9 -1
  137. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ransac_regressor.py +9 -1
  138. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge.py +9 -1
  139. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge_classifier.py +9 -1
  140. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +9 -1
  141. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/ridge_cv.py +9 -1
  142. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/sgd_classifier.py +9 -1
  143. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +9 -1
  144. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/sgd_regressor.py +9 -1
  145. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +9 -1
  146. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +9 -1
  147. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/isomap.py +9 -1
  148. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/mds.py +9 -1
  149. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/spectral_embedding.py +9 -1
  150. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/tsne.py +9 -1
  151. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +9 -1
  152. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/mixture/gaussian_mixture.py +9 -1
  153. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +9 -1
  154. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +9 -1
  155. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/output_code_classifier.py +9 -1
  156. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +9 -1
  157. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +9 -1
  158. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/complement_nb.py +9 -1
  159. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +9 -1
  160. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +9 -1
  161. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +9 -1
  162. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +9 -1
  163. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/kernel_density.py +9 -1
  164. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +9 -1
  165. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/nearest_centroid.py +9 -1
  166. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +9 -1
  167. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +9 -1
  168. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +9 -1
  169. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +9 -1
  170. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +9 -1
  171. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/mlp_classifier.py +9 -1
  172. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/mlp_regressor.py +9 -1
  173. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/polynomial_features.py +9 -1
  174. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/semi_supervised/label_propagation.py +9 -1
  175. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/semi_supervised/label_spreading.py +9 -1
  176. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/linear_svc.py +9 -1
  177. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/linear_svr.py +9 -1
  178. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/nu_svc.py +9 -1
  179. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/nu_svr.py +9 -1
  180. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/svc.py +9 -1
  181. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/svr.py +9 -1
  182. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/decision_tree_classifier.py +9 -1
  183. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/decision_tree_regressor.py +9 -1
  184. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/extra_tree_classifier.py +9 -1
  185. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/extra_tree_regressor.py +9 -1
  186. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgb_classifier.py +9 -1
  187. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgb_regressor.py +9 -1
  188. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +9 -1
  189. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +9 -1
  190. snowflake_ml_python-1.8.5/snowflake/ml/monitoring/explain_visualize.py +424 -0
  191. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/registry/_manager/model_manager.py +23 -2
  192. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/registry/registry.py +10 -9
  193. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/connection_params.py +8 -2
  194. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/version.py +1 -1
  195. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5/snowflake_ml_python.egg-info}/PKG-INFO +58 -8
  196. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/SOURCES.txt +1 -0
  197. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/requires.txt +12 -7
  198. snowflake_ml_python-1.8.3/snowflake/ml/jobs/_utils/scripts/constants.py +0 -4
  199. snowflake_ml_python-1.8.3/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -240
  200. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/LICENSE.txt +0 -0
  201. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/README.md +0 -0
  202. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/setup.cfg +0 -0
  203. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_classify_text.py +0 -0
  204. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_complete.py +0 -0
  205. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_embed_text_1024.py +0 -0
  206. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_embed_text_768.py +0 -0
  207. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_extract_answer.py +0 -0
  208. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_finetune.py +0 -0
  209. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_sentiment.py +0 -0
  210. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_sse_client.py +0 -0
  211. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_summarize.py +0 -0
  212. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_translate.py +0 -0
  213. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/cortex/_util.py +0 -0
  214. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/env.py +0 -0
  215. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/env_utils.py +0 -0
  216. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
  217. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
  218. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
  219. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
  220. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
  221. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
  222. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
  223. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
  224. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
  225. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/file_utils.py +0 -0
  226. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
  227. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
  228. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
  229. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
  230. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/init_utils.py +0 -0
  231. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
  232. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/migrator_utils.py +0 -0
  233. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
  234. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/type_utils.py +0 -0
  235. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/db_utils.py +0 -0
  236. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/formatting.py +0 -0
  237. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/import_utils.py +0 -0
  238. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
  239. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/parallelize.py +0 -0
  240. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
  241. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
  242. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/result.py +0 -0
  243. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/service_logger.py +0 -0
  244. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
  245. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
  246. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
  247. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/table_manager.py +0 -0
  248. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
  249. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/__init__.py +0 -0
  250. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
  251. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/data_ingestor.py +0 -0
  252. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/data_source.py +0 -0
  253. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/ingestor_utils.py +0 -0
  254. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/data/torch_utils.py +0 -0
  255. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/__init__.py +0 -0
  256. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset.py +0 -0
  257. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset_factory.py +0 -0
  258. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset_metadata.py +0 -0
  259. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/dataset/dataset_reader.py +0 -0
  260. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/__init__.py +0 -0
  261. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/access_manager.py +0 -0
  262. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/entity.py +0 -0
  263. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
  264. {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
  265. {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
  266. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
  267. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
  268. {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
  269. {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
  270. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
  271. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
  272. {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
  273. {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
  274. {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
  275. {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
  276. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
  277. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
  278. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
  279. {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
  280. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
  281. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
  282. {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
  283. {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
  284. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
  285. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/feature_store.py +0 -0
  286. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/feature_store/feature_view.py +0 -0
  287. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
  288. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/fileset.py +0 -0
  289. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/sfcfs.py +0 -0
  290. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/snowfs.py +0 -0
  291. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/fileset/stage_fs.py +0 -0
  292. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/__init__.py +0 -0
  293. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
  294. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
  295. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/jobs/_utils/types.py +0 -0
  296. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/lineage/__init__.py +0 -0
  297. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/lineage/lineage_node.py +0 -0
  298. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/__init__.py +0 -0
  299. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/model/model_impl.py +0 -0
  300. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
  301. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/ops/model_ops.py +0 -0
  302. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/_base.py +0 -0
  303. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/model.py +0 -0
  304. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/stage.py +0 -0
  305. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_client/sql/tag.py +0 -0
  306. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
  307. {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
  308. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
  309. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/function_generator.py +0 -0
  310. {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
  311. {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
  312. {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
  313. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_model_composer/model_method/model_method.py +0 -0
  314. {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
  315. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_env/model_env.py +0 -0
  316. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handler.py +0 -0
  317. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
  318. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/catboost.py +0 -0
  319. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/huggingface_pipeline.py +0 -0
  320. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
  321. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +0 -0
  322. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
  323. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
  324. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +0 -0
  325. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
  326. {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
  327. {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
  328. {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
  329. {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
  330. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
  331. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
  332. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
  333. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
  334. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_packager.py +0 -0
  335. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
  336. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
  337. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/base_handler.py +0 -0
  338. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
  339. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/core.py +0 -0
  340. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
  341. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
  342. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
  343. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/snowpark_handler.py +0 -0
  344. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
  345. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/_signatures/utils.py +0 -0
  346. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
  347. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/model/type_hints.py +0 -0
  348. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
  349. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
  350. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
  351. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
  352. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
  353. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
  354. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
  355. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
  356. {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
  357. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
  358. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +0 -0
  359. {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
  360. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
  361. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/calibration/__init__.py +0 -0
  362. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/cluster/__init__.py +0 -0
  363. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/compose/__init__.py +0 -0
  364. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/covariance/__init__.py +0 -0
  365. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
  366. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
  367. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
  368. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
  369. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/framework/_utils.py +0 -0
  370. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/framework/base.py +0 -0
  371. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
  372. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/__init__.py +0 -0
  373. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/impute/simple_imputer.py +0 -0
  374. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
  375. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
  376. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
  377. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
  378. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/manifold/__init__.py +0 -0
  379. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/__init__.py +0 -0
  380. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/classification.py +0 -0
  381. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/correlation.py +0 -0
  382. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/covariance.py +0 -0
  383. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
  384. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/ranking.py +0 -0
  385. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/metrics/regression.py +0 -0
  386. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/mixture/__init__.py +0 -0
  387. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
  388. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/model_selection/grid_search_cv.py +0 -0
  389. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +0 -0
  390. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
  391. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
  392. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
  393. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
  394. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
  395. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
  396. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
  397. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
  398. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
  399. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
  400. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
  401. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
  402. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
  403. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
  404. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
  405. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
  406. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
  407. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
  408. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
  409. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
  410. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
  411. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/svm/__init__.py +0 -0
  412. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/tree/__init__.py +0 -0
  413. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
  414. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
  415. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
  416. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
  417. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
  418. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
  419. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/model_monitor.py +0 -0
  420. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/model_monitor_version.py +0 -0
  421. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/monitoring/shap.py +0 -0
  422. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/registry/__init__.py +0 -0
  423. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/authentication.py +0 -0
  424. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/sparse.py +0 -0
  425. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake/ml/utils/sql_client.py +0 -0
  426. {snowflake_ml_python-1.8.3 → snowflake_ml_python-1.8.5}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
  427. {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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-ml-python
3
- Version: 1.8.3
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<3,>=2.0.0
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.0.0
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,>=1.4
253
+ Requires-Dist: scikit-learn<1.6
254
254
  Requires-Dist: scipy<2,>=1.9
255
- Requires-Dist: snowflake-connector-python[pandas]<4,>=3.12.0
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: shap<1,>=0.46.0; extra == "all"
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: shap
285
- Requires-Dist: shap<1,>=0.46.0; extra == "shap"
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,<3", "cryptography", "fsspec[http]>=2024.6.1,<2026", "importlib_resources>=6.1.1, <7", "numpy>=1.23,<2", "packaging>=20.9,<25", "pandas>=1.0.0,<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.4,<1.6", "scipy>=1.9,<2", "snowflake-connector-python[pandas]>=3.12.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",]
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", "shap>=0.46.0,<1", "tensorflow>=2.17.0,<3", "tokenizers>=0.15.1,<1", "torch>=2.0.1,<3", "torchdata>=0.4,<1", "transformers>=4.39.3,<5",]
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
- shap = [ "shap>=0.46.0,<1",]
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 Complete, CompleteOptions, complete
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.is_nested_function_enabled():
22
- # Nested functions are enabled.
23
- print("Nested functions are enabled.")
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
- # Nested functions are disabled.
26
- print("Nested functions are disabled or not supported.")
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("ENABLE_INLINE_DEPLOYMENT_SPEC", False)
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("ENABLE_BUNDLE_MODULE_CHECKOUT", False)
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
- active_session = next(iter(session._get_active_sessions()))
382
- assert active_session, "Missing active session object"
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=active_session._conn._conn, project=project, subproject=subproject)
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
- try:
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 or not telemetry_enabled:
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)
@@ -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
 
@@ -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.0.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
@@ -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, pickle.UnpicklingError):
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:
@@ -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
- if [ "$SNOWFLAKE_JOB_INDEX" -ne "$head_index" ]; then
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(f"describe stage {stage_name}").collect()
303
+ session.sql("describe stage identifier(?)", params=[stage_name]).collect()
287
304
  except sp_exceptions.SnowparkSQLException:
288
305
  session.sql(
289
- f"create stage if not exists {stage_name}"
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 self.pip_requirements:
348
+ if pip_requirements:
329
349
  # Upload requirements.txt to stage
330
350
  session.file.put_stream(
331
- io.BytesIO("\n".join(self.pip_requirements).encode()),
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 warnings
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
- {func_code.strip()}
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--------------------------------"