snowflake-ml-python 1.10.0__tar.gz → 1.12.0__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.10.0 → snowflake_ml_python-1.12.0}/CHANGELOG.md +83 -3
- {snowflake_ml_python-1.10.0/snowflake_ml_python.egg-info → snowflake_ml_python-1.12.0}/PKG-INFO +87 -7
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/pyproject.toml +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_complete.py +3 -2
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/service_logger.py +26 -1
- snowflake_ml_python-1.12.0/snowflake/ml/experiment/_client/artifact.py +76 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/_client/experiment_tracking_sql_client.py +64 -1
- snowflake_ml_python-1.12.0/snowflake/ml/experiment/callback/keras.py +63 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/callback/lightgbm.py +5 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/callback/xgboost.py +5 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/experiment_tracking.py +89 -4
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/feature_store.py +1150 -131
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/feature_view.py +122 -0
- snowflake_ml_python-1.12.0/snowflake/ml/jobs/_utils/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/constants.py +9 -14
- snowflake_ml_python-1.12.0/snowflake/ml/jobs/_utils/feature_flags.py +16 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/payload_utils.py +61 -19
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/query_helper.py +5 -1
- snowflake_ml_python-1.12.0/snowflake/ml/jobs/_utils/runtime_env_utils.py +63 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +18 -7
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +15 -7
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/spec_utils.py +44 -13
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/stage_utils.py +22 -9
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/types.py +7 -8
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/job.py +34 -18
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/manager.py +107 -24
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/__init__.py +6 -1
- snowflake_ml_python-1.12.0/snowflake/ml/model/_client/model/batch_inference_specs.py +27 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/model/model_version_impl.py +225 -73
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/ops/service_ops.py +128 -174
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/service/model_deployment_spec.py +123 -64
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +25 -9
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_composer.py +1 -70
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +2 -43
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/huggingface_pipeline.py +207 -2
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/sklearn.py +3 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +3 -3
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/snowpark_handler.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/utils.py +4 -2
- snowflake_ml_python-1.12.0/snowflake/ml/model/inference_engine.py +5 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/models/huggingface_pipeline.py +4 -3
- snowflake_ml_python-1.12.0/snowflake/ml/model/openai_signatures.py +57 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/estimator_utils.py +43 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +14 -3
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +17 -6
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/affinity_propagation.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/birch.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/bisecting_k_means.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/dbscan.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/feature_agglomeration.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/k_means.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/mean_shift.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/optics.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/spectral_biclustering.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/spectral_clustering.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/spectral_coclustering.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/compose/column_transformer.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/compose/transformed_target_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/elliptic_envelope.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/empirical_covariance.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/graphical_lasso.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/ledoit_wolf.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/min_cov_det.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/oas.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/shrunk_covariance.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/dictionary_learning.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/factor_analysis.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/fast_ica.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/incremental_pca.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/kernel_pca.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/pca.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/sparse_pca.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/truncated_svd.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/bagging_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/bagging_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/isolation_forest.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/stacking_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/voting_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/voting_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/select_fdr.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/select_fpr.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/select_fwe.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/select_k_best.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/select_percentile.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/variance_threshold.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/impute/iterative_imputer.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/impute/knn_imputer.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/impute/missing_indicator.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_approximation/nystroem.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/ard_regression.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/elastic_net.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/gamma_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/huber_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lars.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lars_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lasso.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lasso_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lasso_lars.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/linear_regression.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/logistic_regression.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/perceptron.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/poisson_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/ransac_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/ridge.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/ridge_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/ridge_cv.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/sgd_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/sgd_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/manifold/isomap.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/manifold/mds.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/manifold/spectral_embedding.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/manifold/tsne.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/mixture/gaussian_mixture.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/multiclass/output_code_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/naive_bayes/complement_nb.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/kernel_density.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/nearest_centroid.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neural_network/mlp_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neural_network/mlp_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/polynomial_features.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/semi_supervised/label_propagation.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/semi_supervised/label_spreading.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/linear_svc.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/linear_svr.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/nu_svc.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/nu_svr.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/svc.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/svr.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/tree/decision_tree_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/tree/decision_tree_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/tree/extra_tree_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/tree/extra_tree_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/xgboost/xgb_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/xgboost/xgb_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +91 -6
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +3 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/entities/model_monitor_config.py +3 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/model_monitor.py +26 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/registry/_manager/model_manager.py +7 -35
- snowflake_ml_python-1.12.0/snowflake/ml/registry/_manager/model_parameter_reconciler.py +294 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0/snowflake_ml_python.egg-info}/PKG-INFO +87 -7
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake_ml_python.egg-info/SOURCES.txt +8 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake_ml_python.egg-info/requires.txt +3 -3
- snowflake_ml_python-1.10.0/snowflake/ml/registry/_manager/model_parameter_reconciler.py +0 -105
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/README.md +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/setup.cfg +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_classify_text.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_embed_text_1024.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_embed_text_768.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_extract_answer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_finetune.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_sentiment.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_sse_client.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_summarize.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_translate.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/cortex/_util.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/env.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/env_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/file_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/init_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/migrator_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/platform_capabilities.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/telemetry.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/type_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/db_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/formatting.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/identifier.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/import_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/mixins.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/parallelize.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/result.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/table_manager.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/data_connector.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/data_ingestor.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/data_source.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/ingestor_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/data/torch_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/dataset/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/dataset/dataset.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/dataset/dataset_factory.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/dataset/dataset_metadata.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/dataset/dataset_reader.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/_entities/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/_entities/experiment.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/_entities/run.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/_entities/run_metadata.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/_experiment_info.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/experiment/utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/access_manager.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/entity.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/airline_features/features/plane_features.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/airline_features/features/weather_features.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/station_feature.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/trip_feature.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/entities.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/location_features.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/trip_features.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/source.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/source_data/nyc_yellow_trips.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/managed_wine_features.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/static_wine_features.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/fileset/fileset.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/fileset/sfcfs.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/fileset/snowfs.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/fileset/stage_fs.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/function_payload_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/interop_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/scripts/constants.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/jobs/decorators.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/lineage/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/lineage/lineage_node.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/model/model_impl.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/ops/model_ops.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/sql/_base.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/sql/model.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/sql/model_version.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/sql/service.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/sql/stage.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_client/sql/tag.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_method/function_generator.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_method/infer_function.py_template +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_method/model_method.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_model_composer/model_user_file/model_user_file.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_env/model_env.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/catboost.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/custom.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/pytorch.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/torchscript.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers/xgboost.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_meta/model_meta.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_packager.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/base_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/core.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/dmatrix_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/custom_model.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/event_handler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/model_signature.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/target_platform.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/task.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/model/type_hints.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_search_udf_file.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/calibration/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/cluster/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/compose/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/covariance/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/framework/_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/framework/base.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/impute/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/impute/simple_imputer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/manifold/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/classification.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/correlation.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/covariance.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/ranking.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/metrics/regression.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/mixture/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/model_selection/grid_search_cv.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/svm/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/tree/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/explain_visualize.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/monitoring/shap.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/registry/__init__.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/registry/registry.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/utils/authentication.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/utils/html_utils.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/utils/sparse.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake/ml/utils/sql_client.py +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
- {snowflake_ml_python-1.10.0 → snowflake_ml_python-1.12.0}/snowflake_ml_python.egg-info/top_level.txt +0 -0
|
@@ -1,13 +1,94 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
3
|
+
## 1.12.0
|
|
4
|
+
|
|
5
|
+
### Bug Fixes
|
|
6
|
+
|
|
7
|
+
* Registry: Fixed an issue where the string representation of dictionary-type output columns was being incorrectly
|
|
8
|
+
created during structured output deserialization. Now, the original data type is properly preserved.
|
|
9
|
+
|
|
10
|
+
### Behavior Changes
|
|
11
|
+
|
|
12
|
+
### New Features
|
|
13
|
+
|
|
14
|
+
* Registry: Add OpenAI chat completion compatible signature option for `text-generation` models.
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from snowflake.ml.model import openai_signatures
|
|
18
|
+
import pandas as pd
|
|
19
|
+
|
|
20
|
+
mv = snowflake_registry.log_model(
|
|
21
|
+
model=generator,
|
|
22
|
+
model_name=...,
|
|
23
|
+
...,
|
|
24
|
+
signatures=openai_signatures.OPENAI_CHAT_SIGNATURE,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# create a pd.DataFrame with openai.client.chat.completions arguments like below:
|
|
28
|
+
x_df = pd.DataFrame.from_records(
|
|
29
|
+
[
|
|
30
|
+
{
|
|
31
|
+
"messages": [
|
|
32
|
+
{"role": "system", "content": "Complete the sentence."},
|
|
33
|
+
{
|
|
34
|
+
"role": "user",
|
|
35
|
+
"content": "A descendant of the Lost City of Atlantis, who swam to Earth while saying, ",
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
"max_completion_tokens": 250,
|
|
39
|
+
"temperature": 0.9,
|
|
40
|
+
"stop": None,
|
|
41
|
+
"n": 3,
|
|
42
|
+
"stream": False,
|
|
43
|
+
"top_p": 1.0,
|
|
44
|
+
"frequency_penalty": 0.1,
|
|
45
|
+
"presence_penalty": 0.2,
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
# OpenAI Chat Completion compatible output
|
|
51
|
+
output_df = mv.run(X=x_df)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
* Model Monitoring: Added support for segment columns to enable filtered analysis.
|
|
55
|
+
* Added `segment_columns` parameter to `ModelMonitorSourceConfig` to specify columns for segmenting monitoring data
|
|
56
|
+
* Segment columns must be of STRING type and exist in the source table
|
|
57
|
+
* Added methods to dynamically manage segments:
|
|
58
|
+
* `add_segment_column()`: Add a new segment column to an existing monitor
|
|
59
|
+
* `drop_segment_column()`: Remove a segment column from an existing monitor
|
|
60
|
+
* Experiment Tracking (PrPr): Support for logging artifacts (files and directories) with `log_artifact`
|
|
61
|
+
* Experiment Tracking (PrPr): Support for listing artifacts in a run with `list_artifacts`
|
|
62
|
+
* Experiment Tracking (PrPr): Support for downloading artifacts in a run with `download_artifacts`
|
|
63
|
+
|
|
64
|
+
## 1.11.0 (08-12-2025)
|
|
4
65
|
|
|
5
66
|
### Bug Fixes
|
|
6
67
|
|
|
68
|
+
* ML Job: Fix `Error: Unable to retrieve head IP address` if not all instances start within the timeout.
|
|
69
|
+
* ML Job: Fix `TypeError: SnowflakeCursor.execute() got an unexpected keyword argument '_force_qmark_paramstyle'`
|
|
70
|
+
when running inside Stored Procedures.
|
|
71
|
+
|
|
7
72
|
### Behavior Changes
|
|
8
73
|
|
|
9
74
|
### New Features
|
|
10
75
|
|
|
76
|
+
* `ModelVersion.create_service()`: Made `image_repo` argument optional. By
|
|
77
|
+
default it will use a default image repo, which is
|
|
78
|
+
being rolled out in server version 9.22+.
|
|
79
|
+
* Experiment Tracking (PrPr): Automatically log the model, metrics, and parameters while training Keras models with
|
|
80
|
+
`snowflake.ml.experiment.callback.keras.SnowflakeKerasCallback`.
|
|
81
|
+
|
|
82
|
+
## 1.10.0
|
|
83
|
+
|
|
84
|
+
### Behavior Changes
|
|
85
|
+
|
|
86
|
+
* Experiment Tracking (PrPr): The import paths for the auto-logging callbacks have changed to
|
|
87
|
+
`snowflake.ml.experiment.callback.xgboost.SnowflakeXgboostCallback` and
|
|
88
|
+
`snowflake.ml.experiment.callback.lightgbm.SnowflakeLightgbmCallback`.
|
|
89
|
+
|
|
90
|
+
### New Features
|
|
91
|
+
|
|
11
92
|
* Registry: add progress bars for `ModelVersion.create_service` and `ModelVersion.log_model`.
|
|
12
93
|
* ModelRegistry: Logs emitted during `ModelVersion.create_service` will be written to a file. The file location
|
|
13
94
|
will be shown in the console.
|
|
@@ -26,13 +107,13 @@
|
|
|
26
107
|
|
|
27
108
|
```python
|
|
28
109
|
from snowflake.ml.experiment import ExperimentTracking
|
|
110
|
+
from snowflake.ml.experiment.callback import SnowflakeXgboostCallback, SnowflakeLightgbmCallback
|
|
29
111
|
|
|
30
112
|
exp = ExperimentTracking(session=sp_session, database_name="ML", schema_name="PUBLIC")
|
|
31
113
|
|
|
32
114
|
exp.set_experiment("MY_EXPERIMENT")
|
|
33
115
|
|
|
34
116
|
# XGBoost
|
|
35
|
-
from snowflake.ml.experiment.callback.xgboost import SnowflakeXgboostCallback
|
|
36
117
|
callback = SnowflakeXgboostCallback(
|
|
37
118
|
exp, log_model=True, log_metrics=True, log_params=True, model_name="model_name", model_signature=sig
|
|
38
119
|
)
|
|
@@ -41,7 +122,6 @@ with exp.start_run():
|
|
|
41
122
|
model.fit(X, y, eval_set=[(X_test, y_test)])
|
|
42
123
|
|
|
43
124
|
# LightGBM
|
|
44
|
-
from snowflake.ml.experiment.callback.lightgbm import SnowflakeLightgbmCallback
|
|
45
125
|
callback = SnowflakeLightgbmCallback(
|
|
46
126
|
exp, log_model=True, log_metrics=True, log_params=True, model_name="model_name", model_signature=sig
|
|
47
127
|
)
|
{snowflake_ml_python-1.10.0/snowflake_ml_python.egg-info → snowflake_ml_python-1.12.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-ml-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.12.0
|
|
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:
|
|
@@ -244,17 +244,17 @@ Requires-Dist: numpy<3,>=1.23
|
|
|
244
244
|
Requires-Dist: packaging<25,>=20.9
|
|
245
245
|
Requires-Dist: pandas<3,>=2.1.4
|
|
246
246
|
Requires-Dist: platformdirs<5
|
|
247
|
-
Requires-Dist: pyarrow
|
|
247
|
+
Requires-Dist: pyarrow<19.0.0
|
|
248
248
|
Requires-Dist: pydantic<3,>=2.8.2
|
|
249
249
|
Requires-Dist: pyjwt<3,>=2.0.0
|
|
250
250
|
Requires-Dist: pytimeparse<2,>=1.1.8
|
|
251
251
|
Requires-Dist: pyyaml<7,>=6.0
|
|
252
252
|
Requires-Dist: retrying<2,>=1.3.3
|
|
253
253
|
Requires-Dist: s3fs<2026,>=2024.6.1
|
|
254
|
-
Requires-Dist: scikit-learn<1.
|
|
254
|
+
Requires-Dist: scikit-learn<1.7
|
|
255
255
|
Requires-Dist: scipy<2,>=1.9
|
|
256
256
|
Requires-Dist: shap<1,>=0.46.0
|
|
257
|
-
Requires-Dist: snowflake-connector-python[pandas]<4,>=3.
|
|
257
|
+
Requires-Dist: snowflake-connector-python[pandas]<4,>=3.16.0
|
|
258
258
|
Requires-Dist: snowflake-snowpark-python!=1.26.0,<2,>=1.17.0
|
|
259
259
|
Requires-Dist: snowflake.core<2,>=1.0.2
|
|
260
260
|
Requires-Dist: sqlparse<1,>=0.4
|
|
@@ -410,14 +410,95 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
410
410
|
|
|
411
411
|
# Release History
|
|
412
412
|
|
|
413
|
-
## 1.
|
|
413
|
+
## 1.12.0
|
|
414
|
+
|
|
415
|
+
### Bug Fixes
|
|
416
|
+
|
|
417
|
+
* Registry: Fixed an issue where the string representation of dictionary-type output columns was being incorrectly
|
|
418
|
+
created during structured output deserialization. Now, the original data type is properly preserved.
|
|
419
|
+
|
|
420
|
+
### Behavior Changes
|
|
421
|
+
|
|
422
|
+
### New Features
|
|
423
|
+
|
|
424
|
+
* Registry: Add OpenAI chat completion compatible signature option for `text-generation` models.
|
|
425
|
+
|
|
426
|
+
```python
|
|
427
|
+
from snowflake.ml.model import openai_signatures
|
|
428
|
+
import pandas as pd
|
|
429
|
+
|
|
430
|
+
mv = snowflake_registry.log_model(
|
|
431
|
+
model=generator,
|
|
432
|
+
model_name=...,
|
|
433
|
+
...,
|
|
434
|
+
signatures=openai_signatures.OPENAI_CHAT_SIGNATURE,
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
# create a pd.DataFrame with openai.client.chat.completions arguments like below:
|
|
438
|
+
x_df = pd.DataFrame.from_records(
|
|
439
|
+
[
|
|
440
|
+
{
|
|
441
|
+
"messages": [
|
|
442
|
+
{"role": "system", "content": "Complete the sentence."},
|
|
443
|
+
{
|
|
444
|
+
"role": "user",
|
|
445
|
+
"content": "A descendant of the Lost City of Atlantis, who swam to Earth while saying, ",
|
|
446
|
+
},
|
|
447
|
+
],
|
|
448
|
+
"max_completion_tokens": 250,
|
|
449
|
+
"temperature": 0.9,
|
|
450
|
+
"stop": None,
|
|
451
|
+
"n": 3,
|
|
452
|
+
"stream": False,
|
|
453
|
+
"top_p": 1.0,
|
|
454
|
+
"frequency_penalty": 0.1,
|
|
455
|
+
"presence_penalty": 0.2,
|
|
456
|
+
}
|
|
457
|
+
],
|
|
458
|
+
)
|
|
459
|
+
|
|
460
|
+
# OpenAI Chat Completion compatible output
|
|
461
|
+
output_df = mv.run(X=x_df)
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
* Model Monitoring: Added support for segment columns to enable filtered analysis.
|
|
465
|
+
* Added `segment_columns` parameter to `ModelMonitorSourceConfig` to specify columns for segmenting monitoring data
|
|
466
|
+
* Segment columns must be of STRING type and exist in the source table
|
|
467
|
+
* Added methods to dynamically manage segments:
|
|
468
|
+
* `add_segment_column()`: Add a new segment column to an existing monitor
|
|
469
|
+
* `drop_segment_column()`: Remove a segment column from an existing monitor
|
|
470
|
+
* Experiment Tracking (PrPr): Support for logging artifacts (files and directories) with `log_artifact`
|
|
471
|
+
* Experiment Tracking (PrPr): Support for listing artifacts in a run with `list_artifacts`
|
|
472
|
+
* Experiment Tracking (PrPr): Support for downloading artifacts in a run with `download_artifacts`
|
|
473
|
+
|
|
474
|
+
## 1.11.0 (08-12-2025)
|
|
414
475
|
|
|
415
476
|
### Bug Fixes
|
|
416
477
|
|
|
478
|
+
* ML Job: Fix `Error: Unable to retrieve head IP address` if not all instances start within the timeout.
|
|
479
|
+
* ML Job: Fix `TypeError: SnowflakeCursor.execute() got an unexpected keyword argument '_force_qmark_paramstyle'`
|
|
480
|
+
when running inside Stored Procedures.
|
|
481
|
+
|
|
417
482
|
### Behavior Changes
|
|
418
483
|
|
|
419
484
|
### New Features
|
|
420
485
|
|
|
486
|
+
* `ModelVersion.create_service()`: Made `image_repo` argument optional. By
|
|
487
|
+
default it will use a default image repo, which is
|
|
488
|
+
being rolled out in server version 9.22+.
|
|
489
|
+
* Experiment Tracking (PrPr): Automatically log the model, metrics, and parameters while training Keras models with
|
|
490
|
+
`snowflake.ml.experiment.callback.keras.SnowflakeKerasCallback`.
|
|
491
|
+
|
|
492
|
+
## 1.10.0
|
|
493
|
+
|
|
494
|
+
### Behavior Changes
|
|
495
|
+
|
|
496
|
+
* Experiment Tracking (PrPr): The import paths for the auto-logging callbacks have changed to
|
|
497
|
+
`snowflake.ml.experiment.callback.xgboost.SnowflakeXgboostCallback` and
|
|
498
|
+
`snowflake.ml.experiment.callback.lightgbm.SnowflakeLightgbmCallback`.
|
|
499
|
+
|
|
500
|
+
### New Features
|
|
501
|
+
|
|
421
502
|
* Registry: add progress bars for `ModelVersion.create_service` and `ModelVersion.log_model`.
|
|
422
503
|
* ModelRegistry: Logs emitted during `ModelVersion.create_service` will be written to a file. The file location
|
|
423
504
|
will be shown in the console.
|
|
@@ -436,13 +517,13 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
436
517
|
|
|
437
518
|
```python
|
|
438
519
|
from snowflake.ml.experiment import ExperimentTracking
|
|
520
|
+
from snowflake.ml.experiment.callback import SnowflakeXgboostCallback, SnowflakeLightgbmCallback
|
|
439
521
|
|
|
440
522
|
exp = ExperimentTracking(session=sp_session, database_name="ML", schema_name="PUBLIC")
|
|
441
523
|
|
|
442
524
|
exp.set_experiment("MY_EXPERIMENT")
|
|
443
525
|
|
|
444
526
|
# XGBoost
|
|
445
|
-
from snowflake.ml.experiment.callback.xgboost import SnowflakeXgboostCallback
|
|
446
527
|
callback = SnowflakeXgboostCallback(
|
|
447
528
|
exp, log_model=True, log_metrics=True, log_params=True, model_name="model_name", model_signature=sig
|
|
448
529
|
)
|
|
@@ -451,7 +532,6 @@ with exp.start_run():
|
|
|
451
532
|
model.fit(X, y, eval_set=[(X_test, y_test)])
|
|
452
533
|
|
|
453
534
|
# LightGBM
|
|
454
|
-
from snowflake.ml.experiment.callback.lightgbm import SnowflakeLightgbmCallback
|
|
455
535
|
callback = SnowflakeLightgbmCallback(
|
|
456
536
|
exp, log_model=True, log_metrics=True, log_params=True, model_name="model_name", model_signature=sig
|
|
457
537
|
)
|
|
@@ -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", "cryptography", "fsspec[http]>=2024.6.1,<2026", "importlib_resources>=6.1.1, <7", "numpy>=1.23,<3", "packaging>=20.9,<25", "pandas>=2.1.4,<3", "platformdirs<5", "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.
|
|
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,<3", "packaging>=20.9,<25", "pandas>=2.1.4,<3", "platformdirs<5", "pyarrow<19.0.0", "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.7", "scipy>=1.9,<2", "shap>=0.46.0,<1", "snowflake-connector-python[pandas]>=3.16.0,<4", "snowflake-snowpark-python>=1.17.0,<2,!=1.26.0", "snowflake.core>=1.0.2,<2", "sqlparse>=0.4,<1", "tqdm<5", "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"
|
|
@@ -88,7 +88,7 @@ class MidStreamException(Exception):
|
|
|
88
88
|
message = reason
|
|
89
89
|
if http_resp:
|
|
90
90
|
message = f"Error in stream (HTTP Response: {http_resp.status}) - {http_resp.reason}"
|
|
91
|
-
if request_id != "":
|
|
91
|
+
if request_id is not None and request_id != "":
|
|
92
92
|
# add request_id to error message
|
|
93
93
|
message += f" (Request ID: {request_id})"
|
|
94
94
|
super().__init__(message)
|
|
@@ -327,7 +327,8 @@ def _return_stream_response(
|
|
|
327
327
|
# This is the case of midstream errors which were introduced specifically for structured output.
|
|
328
328
|
# TODO: discuss during code review
|
|
329
329
|
if parsed_resp.get("error"):
|
|
330
|
-
|
|
330
|
+
error_info = parsed_resp["error"]
|
|
331
|
+
raise MidStreamException(reason=str(error_info), request_id=request_id)
|
|
331
332
|
else:
|
|
332
333
|
pass
|
|
333
334
|
|
|
@@ -9,8 +9,33 @@ from typing import Optional
|
|
|
9
9
|
|
|
10
10
|
import platformdirs
|
|
11
11
|
|
|
12
|
+
|
|
13
|
+
class ProgressBarAwareConsoleHandler(logging.StreamHandler): # type: ignore[type-arg]
|
|
14
|
+
"""A logging handler that adapts to different progress bar systems to avoid interfering with display."""
|
|
15
|
+
|
|
16
|
+
def emit(self, record: logging.LogRecord) -> None:
|
|
17
|
+
try:
|
|
18
|
+
msg = self.format(record)
|
|
19
|
+
|
|
20
|
+
# Check if tqdm progress bars are active - use tqdm.write() to avoid interference
|
|
21
|
+
try:
|
|
22
|
+
import tqdm
|
|
23
|
+
|
|
24
|
+
if hasattr(tqdm.tqdm, "_instances") and tqdm.tqdm._instances:
|
|
25
|
+
tqdm.tqdm.write(msg, file=self.stream)
|
|
26
|
+
return
|
|
27
|
+
except (ImportError, AttributeError):
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
# Fallback to regular stream writing (works for all contexts including Streamlit)
|
|
31
|
+
self.stream.write(msg + "\n")
|
|
32
|
+
self.flush()
|
|
33
|
+
except Exception:
|
|
34
|
+
self.handleError(record)
|
|
35
|
+
|
|
36
|
+
|
|
12
37
|
# Module-level logger for operational messages that should appear on console
|
|
13
|
-
stdout_handler =
|
|
38
|
+
stdout_handler = ProgressBarAwareConsoleHandler(sys.stdout)
|
|
14
39
|
stdout_handler.setFormatter(logging.Formatter("%(message)s"))
|
|
15
40
|
|
|
16
41
|
console_logger = logging.getLogger(__name__)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import posixpath
|
|
3
|
+
from typing import NamedTuple
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ArtifactInfo(NamedTuple):
|
|
7
|
+
name: str
|
|
8
|
+
size: int
|
|
9
|
+
md5: str
|
|
10
|
+
last_modified: str
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_put_path_pairs(local_path: str, artifact_path: str) -> list[tuple[str, str]]:
|
|
14
|
+
"""Enumerate files to upload and their destination subdirectories.
|
|
15
|
+
|
|
16
|
+
Expands a local path (file or directory) into a list of pairs used for uploading
|
|
17
|
+
artifacts to the stage.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
local_path: Absolute or relative path to a local file or directory to upload.
|
|
21
|
+
artifact_path: Destination subdirectory under the run's artifact root in the
|
|
22
|
+
stage. If empty, files are uploaded to the root. When uploading a
|
|
23
|
+
directory, this value is prepended to each file's relative path.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
A list of tuples ``(local_file_path, destination_artifact_subdir)``. For a
|
|
27
|
+
single file, the list contains one entry with ``destination_artifact_subdir``
|
|
28
|
+
set to ``artifact_path``. For directories, one entry per file is produced and
|
|
29
|
+
subdirectories are preserved using POSIX separators.
|
|
30
|
+
|
|
31
|
+
Raises:
|
|
32
|
+
FileNotFoundError: If ``local_path`` does not exist.
|
|
33
|
+
"""
|
|
34
|
+
if not os.path.exists(local_path):
|
|
35
|
+
raise FileNotFoundError(f"Local path does not exist: {local_path}")
|
|
36
|
+
|
|
37
|
+
if os.path.isfile(local_path):
|
|
38
|
+
return [(local_path, artifact_path)]
|
|
39
|
+
|
|
40
|
+
pairs: list[tuple[str, str]] = []
|
|
41
|
+
base_dir = local_path
|
|
42
|
+
for root, _, files in os.walk(base_dir):
|
|
43
|
+
if not files:
|
|
44
|
+
continue
|
|
45
|
+
rel_dir = os.path.relpath(root, base_dir)
|
|
46
|
+
rel_dir_posix = "" if rel_dir in (".", "") else rel_dir.replace(os.sep, "/")
|
|
47
|
+
dest_artifact_path = posixpath.join(artifact_path, rel_dir_posix) if rel_dir_posix else artifact_path
|
|
48
|
+
for filename in files:
|
|
49
|
+
file_path = os.path.join(root, filename)
|
|
50
|
+
pairs.append((file_path, dest_artifact_path))
|
|
51
|
+
return pairs
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def get_download_path_pairs(artifacts: list[ArtifactInfo], base_target_dir: str) -> list[tuple[str, str]]:
|
|
55
|
+
"""Given artifact metadata entries, computes where each artifact should be written
|
|
56
|
+
locally.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
artifacts: List of artifact metadata where ``name`` is a POSIX-style path
|
|
60
|
+
relative to the run's artifact root (e.g., ``"file.txt"`` or
|
|
61
|
+
``"nested/dir/file.txt"``).
|
|
62
|
+
base_target_dir: Local base directory to download into. If empty, the
|
|
63
|
+
current working directory is used. Directories will be created as
|
|
64
|
+
needed.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
A list of tuples ``(artifact_relative_path, local_directory)``. Each tuple
|
|
68
|
+
provides the relative path to request from the stage and the local directory
|
|
69
|
+
where the file should be written.
|
|
70
|
+
"""
|
|
71
|
+
planned: list[tuple[str, str]] = []
|
|
72
|
+
for info in artifacts:
|
|
73
|
+
rel_dir = os.path.dirname(info.name)
|
|
74
|
+
local_dir = base_target_dir if rel_dir in ("", ".") else os.path.join(base_target_dir, rel_dir)
|
|
75
|
+
planned.append((info.name, local_dir))
|
|
76
|
+
return planned
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
3
|
from snowflake.ml._internal.utils import query_result_checker, sql_identifier
|
|
4
|
+
from snowflake.ml.experiment._client import artifact
|
|
4
5
|
from snowflake.ml.model._client.sql import _base
|
|
5
6
|
from snowflake.ml.utils import sql_client
|
|
6
|
-
from snowflake.snowpark import row, session
|
|
7
|
+
from snowflake.snowpark import file_operation, row, session
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class ExperimentTrackingSQLClient(_base._BaseSQLClient):
|
|
@@ -88,6 +89,59 @@ class ExperimentTrackingSQLClient(_base._BaseSQLClient):
|
|
|
88
89
|
f"ALTER EXPERIMENT {experiment_fqn} MODIFY RUN {run_name} SET METADATA=$${run_metadata}$$",
|
|
89
90
|
).has_dimensions(expected_rows=1, expected_cols=1).validate()
|
|
90
91
|
|
|
92
|
+
def put_artifact(
|
|
93
|
+
self,
|
|
94
|
+
*,
|
|
95
|
+
experiment_name: sql_identifier.SqlIdentifier,
|
|
96
|
+
run_name: sql_identifier.SqlIdentifier,
|
|
97
|
+
artifact_path: str,
|
|
98
|
+
file_path: str,
|
|
99
|
+
auto_compress: bool = False,
|
|
100
|
+
) -> file_operation.PutResult:
|
|
101
|
+
return self._session.file.put(
|
|
102
|
+
local_file_name=file_path,
|
|
103
|
+
stage_location=self._build_snow_uri(experiment_name, run_name, artifact_path),
|
|
104
|
+
overwrite=True,
|
|
105
|
+
auto_compress=auto_compress,
|
|
106
|
+
)[0]
|
|
107
|
+
|
|
108
|
+
def list_artifacts(
|
|
109
|
+
self,
|
|
110
|
+
*,
|
|
111
|
+
experiment_name: sql_identifier.SqlIdentifier,
|
|
112
|
+
run_name: sql_identifier.SqlIdentifier,
|
|
113
|
+
artifact_path: str,
|
|
114
|
+
) -> list[artifact.ArtifactInfo]:
|
|
115
|
+
results = (
|
|
116
|
+
query_result_checker.SqlResultValidator(
|
|
117
|
+
self._session, f"LIST {self._build_snow_uri(experiment_name, run_name, artifact_path)}"
|
|
118
|
+
)
|
|
119
|
+
.has_dimensions(expected_cols=4)
|
|
120
|
+
.validate()
|
|
121
|
+
)
|
|
122
|
+
return [
|
|
123
|
+
artifact.ArtifactInfo(
|
|
124
|
+
name=str(result.name).removeprefix(f"/versions/{run_name}/"),
|
|
125
|
+
size=result.size,
|
|
126
|
+
md5=result.md5,
|
|
127
|
+
last_modified=result.last_modified,
|
|
128
|
+
)
|
|
129
|
+
for result in results
|
|
130
|
+
]
|
|
131
|
+
|
|
132
|
+
def get_artifact(
|
|
133
|
+
self,
|
|
134
|
+
*,
|
|
135
|
+
experiment_name: sql_identifier.SqlIdentifier,
|
|
136
|
+
run_name: sql_identifier.SqlIdentifier,
|
|
137
|
+
artifact_path: str,
|
|
138
|
+
target_path: str,
|
|
139
|
+
) -> file_operation.GetResult:
|
|
140
|
+
return self._session.file.get(
|
|
141
|
+
stage_location=self._build_snow_uri(experiment_name, run_name, artifact_path),
|
|
142
|
+
target_directory=target_path,
|
|
143
|
+
)[0]
|
|
144
|
+
|
|
91
145
|
def show_runs_in_experiment(
|
|
92
146
|
self, *, experiment_name: sql_identifier.SqlIdentifier, like: Optional[str] = None
|
|
93
147
|
) -> list[row.Row]:
|
|
@@ -96,3 +150,12 @@ class ExperimentTrackingSQLClient(_base._BaseSQLClient):
|
|
|
96
150
|
return query_result_checker.SqlResultValidator(
|
|
97
151
|
self._session, f"SHOW RUNS {like_clause} IN EXPERIMENT {experiment_fqn}"
|
|
98
152
|
).validate()
|
|
153
|
+
|
|
154
|
+
def _build_snow_uri(
|
|
155
|
+
self, experiment_name: sql_identifier.SqlIdentifier, run_name: sql_identifier.SqlIdentifier, artifact_path: str
|
|
156
|
+
) -> str:
|
|
157
|
+
experiment_fqn = self.fully_qualified_object_name(self._database_name, self._schema_name, experiment_name)
|
|
158
|
+
uri = f"snow://experiment/{experiment_fqn}/versions/{run_name}"
|
|
159
|
+
if artifact_path:
|
|
160
|
+
uri += f"/{artifact_path}"
|
|
161
|
+
return uri
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import TYPE_CHECKING, Any, Optional
|
|
3
|
+
from warnings import warn
|
|
4
|
+
|
|
5
|
+
import keras
|
|
6
|
+
|
|
7
|
+
from snowflake.ml.experiment import utils
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from snowflake.ml.experiment.experiment_tracking import ExperimentTracking
|
|
11
|
+
from snowflake.ml.model.model_signature import ModelSignature
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SnowflakeKerasCallback(keras.callbacks.Callback):
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
experiment_tracking: "ExperimentTracking",
|
|
18
|
+
log_model: bool = True,
|
|
19
|
+
log_metrics: bool = True,
|
|
20
|
+
log_params: bool = True,
|
|
21
|
+
log_every_n_epochs: int = 1,
|
|
22
|
+
model_name: Optional[str] = None,
|
|
23
|
+
model_signature: Optional["ModelSignature"] = None,
|
|
24
|
+
) -> None:
|
|
25
|
+
self._experiment_tracking = experiment_tracking
|
|
26
|
+
self.log_model = log_model
|
|
27
|
+
self.log_metrics = log_metrics
|
|
28
|
+
self.log_params = log_params
|
|
29
|
+
if log_every_n_epochs < 1:
|
|
30
|
+
raise ValueError("`log_every_n_epochs` must be positive.")
|
|
31
|
+
self.log_every_n_epochs = log_every_n_epochs
|
|
32
|
+
self.model_name = model_name
|
|
33
|
+
self.model_signature = model_signature
|
|
34
|
+
|
|
35
|
+
def on_train_begin(self, logs: Optional[dict[str, Any]] = None) -> None:
|
|
36
|
+
if self.log_params:
|
|
37
|
+
params = json.loads(self.model.to_json())
|
|
38
|
+
self._experiment_tracking.log_params(utils.flatten_nested_params(params))
|
|
39
|
+
|
|
40
|
+
def on_epoch_end(self, epoch: int, logs: Optional[dict[str, Any]] = None) -> None:
|
|
41
|
+
if self.log_metrics and logs and epoch % self.log_every_n_epochs == 0:
|
|
42
|
+
for key, value in logs.items():
|
|
43
|
+
try:
|
|
44
|
+
value = float(value)
|
|
45
|
+
except Exception:
|
|
46
|
+
pass
|
|
47
|
+
else:
|
|
48
|
+
self._experiment_tracking.log_metric(key=key, value=value, step=epoch)
|
|
49
|
+
|
|
50
|
+
def on_train_end(self, logs: Optional[dict[str, Any]] = None) -> None:
|
|
51
|
+
if self.log_model:
|
|
52
|
+
if not self.model_signature:
|
|
53
|
+
warn(
|
|
54
|
+
"Model will not be logged because model signature is missing. "
|
|
55
|
+
"To autolog the model, please specify `model_signature` when constructing SnowflakeKerasCallback."
|
|
56
|
+
)
|
|
57
|
+
return
|
|
58
|
+
model_name = self.model_name or self._experiment_tracking._get_or_set_experiment().name + "_model"
|
|
59
|
+
self._experiment_tracking.log_model( # type: ignore[call-arg]
|
|
60
|
+
model=self.model,
|
|
61
|
+
model_name=model_name,
|
|
62
|
+
signatures={"predict": self.model_signature},
|
|
63
|
+
)
|
|
@@ -15,6 +15,7 @@ class SnowflakeLightgbmCallback(lgb.callback._RecordEvaluationCallback):
|
|
|
15
15
|
log_model: bool = True,
|
|
16
16
|
log_metrics: bool = True,
|
|
17
17
|
log_params: bool = True,
|
|
18
|
+
log_every_n_epochs: int = 1,
|
|
18
19
|
model_name: Optional[str] = None,
|
|
19
20
|
model_signature: Optional["ModelSignature"] = None,
|
|
20
21
|
) -> None:
|
|
@@ -22,6 +23,9 @@ class SnowflakeLightgbmCallback(lgb.callback._RecordEvaluationCallback):
|
|
|
22
23
|
self.log_model = log_model
|
|
23
24
|
self.log_metrics = log_metrics
|
|
24
25
|
self.log_params = log_params
|
|
26
|
+
if log_every_n_epochs < 1:
|
|
27
|
+
raise ValueError("`log_every_n_epochs` must be positive.")
|
|
28
|
+
self.log_every_n_epochs = log_every_n_epochs
|
|
25
29
|
self.model_name = model_name
|
|
26
30
|
self.model_signature = model_signature
|
|
27
31
|
|
|
@@ -32,7 +36,7 @@ class SnowflakeLightgbmCallback(lgb.callback._RecordEvaluationCallback):
|
|
|
32
36
|
if env.iteration == env.begin_iteration: # Log params only at the first iteration
|
|
33
37
|
self._experiment_tracking.log_params(env.params)
|
|
34
38
|
|
|
35
|
-
if self.log_metrics:
|
|
39
|
+
if self.log_metrics and env.iteration % self.log_every_n_epochs == 0:
|
|
36
40
|
super().__call__(env)
|
|
37
41
|
for dataset_name, metrics in self.eval_result.items():
|
|
38
42
|
for metric_name, log in metrics.items():
|
|
@@ -18,6 +18,7 @@ class SnowflakeXgboostCallback(xgb.callback.TrainingCallback):
|
|
|
18
18
|
log_model: bool = True,
|
|
19
19
|
log_metrics: bool = True,
|
|
20
20
|
log_params: bool = True,
|
|
21
|
+
log_every_n_epochs: int = 1,
|
|
21
22
|
model_name: Optional[str] = None,
|
|
22
23
|
model_signature: Optional["ModelSignature"] = None,
|
|
23
24
|
) -> None:
|
|
@@ -25,6 +26,9 @@ class SnowflakeXgboostCallback(xgb.callback.TrainingCallback):
|
|
|
25
26
|
self.log_model = log_model
|
|
26
27
|
self.log_metrics = log_metrics
|
|
27
28
|
self.log_params = log_params
|
|
29
|
+
if log_every_n_epochs < 1:
|
|
30
|
+
raise ValueError("`log_every_n_epochs` must be positive.")
|
|
31
|
+
self.log_every_n_epochs = log_every_n_epochs
|
|
28
32
|
self.model_name = model_name
|
|
29
33
|
self.model_signature = model_signature
|
|
30
34
|
|
|
@@ -36,7 +40,7 @@ class SnowflakeXgboostCallback(xgb.callback.TrainingCallback):
|
|
|
36
40
|
return model
|
|
37
41
|
|
|
38
42
|
def after_iteration(self, model: Any, epoch: int, evals_log: dict[str, dict[str, Any]]) -> bool:
|
|
39
|
-
if self.log_metrics:
|
|
43
|
+
if self.log_metrics and epoch % self.log_every_n_epochs == 0:
|
|
40
44
|
for dataset_name, metrics in evals_log.items():
|
|
41
45
|
for metric_name, log in metrics.items():
|
|
42
46
|
metric_key = dataset_name + ":" + metric_name
|