snowflake-ml-python 1.15.0__py3-none-any.whl → 1.16.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- snowflake/ml/_internal/platform_capabilities.py +4 -0
- snowflake/ml/_internal/utils/mixins.py +24 -9
- snowflake/ml/experiment/experiment_tracking.py +63 -19
- snowflake/ml/jobs/_utils/spec_utils.py +49 -11
- snowflake/ml/jobs/manager.py +20 -0
- snowflake/ml/model/__init__.py +16 -2
- snowflake/ml/model/_client/model/batch_inference_specs.py +18 -2
- snowflake/ml/model/_client/model/model_version_impl.py +5 -0
- snowflake/ml/model/_client/ops/service_ops.py +50 -5
- snowflake/ml/model/_client/service/model_deployment_spec.py +1 -1
- snowflake/ml/model/_client/sql/stage.py +8 -0
- snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +1 -0
- snowflake/ml/model/_model_composer/model_method/model_method.py +25 -2
- snowflake/ml/model/_packager/model_env/model_env.py +26 -16
- snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +1 -1
- snowflake/ml/model/type_hints.py +13 -0
- snowflake/ml/model/volatility.py +34 -0
- snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +1 -1
- snowflake/ml/modeling/cluster/affinity_propagation.py +1 -1
- snowflake/ml/modeling/cluster/agglomerative_clustering.py +1 -1
- snowflake/ml/modeling/cluster/birch.py +1 -1
- snowflake/ml/modeling/cluster/bisecting_k_means.py +1 -1
- snowflake/ml/modeling/cluster/dbscan.py +1 -1
- snowflake/ml/modeling/cluster/feature_agglomeration.py +1 -1
- snowflake/ml/modeling/cluster/k_means.py +1 -1
- snowflake/ml/modeling/cluster/mean_shift.py +1 -1
- snowflake/ml/modeling/cluster/mini_batch_k_means.py +1 -1
- snowflake/ml/modeling/cluster/optics.py +1 -1
- snowflake/ml/modeling/cluster/spectral_biclustering.py +1 -1
- snowflake/ml/modeling/cluster/spectral_clustering.py +1 -1
- snowflake/ml/modeling/cluster/spectral_coclustering.py +1 -1
- snowflake/ml/modeling/compose/column_transformer.py +1 -1
- snowflake/ml/modeling/compose/transformed_target_regressor.py +1 -1
- snowflake/ml/modeling/covariance/elliptic_envelope.py +1 -1
- snowflake/ml/modeling/covariance/empirical_covariance.py +1 -1
- snowflake/ml/modeling/covariance/graphical_lasso.py +1 -1
- snowflake/ml/modeling/covariance/graphical_lasso_cv.py +1 -1
- snowflake/ml/modeling/covariance/ledoit_wolf.py +1 -1
- snowflake/ml/modeling/covariance/min_cov_det.py +1 -1
- snowflake/ml/modeling/covariance/oas.py +1 -1
- snowflake/ml/modeling/covariance/shrunk_covariance.py +1 -1
- snowflake/ml/modeling/decomposition/dictionary_learning.py +1 -1
- snowflake/ml/modeling/decomposition/factor_analysis.py +1 -1
- snowflake/ml/modeling/decomposition/fast_ica.py +1 -1
- snowflake/ml/modeling/decomposition/incremental_pca.py +1 -1
- snowflake/ml/modeling/decomposition/kernel_pca.py +1 -1
- snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +1 -1
- snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +1 -1
- snowflake/ml/modeling/decomposition/pca.py +1 -1
- snowflake/ml/modeling/decomposition/sparse_pca.py +1 -1
- snowflake/ml/modeling/decomposition/truncated_svd.py +1 -1
- snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +1 -1
- snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +1 -1
- snowflake/ml/modeling/ensemble/ada_boost_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/ada_boost_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/bagging_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/bagging_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/extra_trees_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/extra_trees_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/isolation_forest.py +1 -1
- snowflake/ml/modeling/ensemble/random_forest_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/random_forest_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/stacking_regressor.py +1 -1
- snowflake/ml/modeling/ensemble/voting_classifier.py +1 -1
- snowflake/ml/modeling/ensemble/voting_regressor.py +1 -1
- snowflake/ml/modeling/feature_selection/generic_univariate_select.py +1 -1
- snowflake/ml/modeling/feature_selection/select_fdr.py +1 -1
- snowflake/ml/modeling/feature_selection/select_fpr.py +1 -1
- snowflake/ml/modeling/feature_selection/select_fwe.py +1 -1
- snowflake/ml/modeling/feature_selection/select_k_best.py +1 -1
- snowflake/ml/modeling/feature_selection/select_percentile.py +1 -1
- snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +1 -1
- snowflake/ml/modeling/feature_selection/variance_threshold.py +1 -1
- snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +1 -1
- snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +1 -1
- snowflake/ml/modeling/impute/iterative_imputer.py +1 -1
- snowflake/ml/modeling/impute/knn_imputer.py +1 -1
- snowflake/ml/modeling/impute/missing_indicator.py +1 -1
- snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +1 -1
- snowflake/ml/modeling/kernel_approximation/nystroem.py +1 -1
- snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +1 -1
- snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +1 -1
- snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +1 -1
- snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +1 -1
- snowflake/ml/modeling/lightgbm/lgbm_classifier.py +1 -1
- snowflake/ml/modeling/lightgbm/lgbm_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/ard_regression.py +1 -1
- snowflake/ml/modeling/linear_model/bayesian_ridge.py +1 -1
- snowflake/ml/modeling/linear_model/elastic_net.py +1 -1
- snowflake/ml/modeling/linear_model/elastic_net_cv.py +1 -1
- snowflake/ml/modeling/linear_model/gamma_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/huber_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/lars.py +1 -1
- snowflake/ml/modeling/linear_model/lars_cv.py +1 -1
- snowflake/ml/modeling/linear_model/lasso.py +1 -1
- snowflake/ml/modeling/linear_model/lasso_cv.py +1 -1
- snowflake/ml/modeling/linear_model/lasso_lars.py +1 -1
- snowflake/ml/modeling/linear_model/lasso_lars_cv.py +1 -1
- snowflake/ml/modeling/linear_model/lasso_lars_ic.py +1 -1
- snowflake/ml/modeling/linear_model/linear_regression.py +1 -1
- snowflake/ml/modeling/linear_model/logistic_regression.py +1 -1
- snowflake/ml/modeling/linear_model/logistic_regression_cv.py +1 -1
- snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +1 -1
- snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +1 -1
- snowflake/ml/modeling/linear_model/multi_task_lasso.py +1 -1
- snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +1 -1
- snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +1 -1
- snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +1 -1
- snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/perceptron.py +1 -1
- snowflake/ml/modeling/linear_model/poisson_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/ransac_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/ridge.py +1 -1
- snowflake/ml/modeling/linear_model/ridge_classifier.py +1 -1
- snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +1 -1
- snowflake/ml/modeling/linear_model/ridge_cv.py +1 -1
- snowflake/ml/modeling/linear_model/sgd_classifier.py +1 -1
- snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +1 -1
- snowflake/ml/modeling/linear_model/sgd_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/theil_sen_regressor.py +1 -1
- snowflake/ml/modeling/linear_model/tweedie_regressor.py +1 -1
- snowflake/ml/modeling/manifold/isomap.py +1 -1
- snowflake/ml/modeling/manifold/mds.py +1 -1
- snowflake/ml/modeling/manifold/spectral_embedding.py +1 -1
- snowflake/ml/modeling/manifold/tsne.py +1 -1
- snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +1 -1
- snowflake/ml/modeling/mixture/gaussian_mixture.py +1 -1
- snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +1 -1
- snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +1 -1
- snowflake/ml/modeling/multiclass/output_code_classifier.py +1 -1
- snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +1 -1
- snowflake/ml/modeling/naive_bayes/categorical_nb.py +1 -1
- snowflake/ml/modeling/naive_bayes/complement_nb.py +1 -1
- snowflake/ml/modeling/naive_bayes/gaussian_nb.py +1 -1
- snowflake/ml/modeling/naive_bayes/multinomial_nb.py +1 -1
- snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +1 -1
- snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +1 -1
- snowflake/ml/modeling/neighbors/kernel_density.py +1 -1
- snowflake/ml/modeling/neighbors/local_outlier_factor.py +1 -1
- snowflake/ml/modeling/neighbors/nearest_centroid.py +1 -1
- snowflake/ml/modeling/neighbors/nearest_neighbors.py +1 -1
- snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +1 -1
- snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +1 -1
- snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +1 -1
- snowflake/ml/modeling/neural_network/bernoulli_rbm.py +1 -1
- snowflake/ml/modeling/neural_network/mlp_classifier.py +1 -1
- snowflake/ml/modeling/neural_network/mlp_regressor.py +1 -1
- snowflake/ml/modeling/preprocessing/polynomial_features.py +1 -1
- snowflake/ml/modeling/semi_supervised/label_propagation.py +1 -1
- snowflake/ml/modeling/semi_supervised/label_spreading.py +1 -1
- snowflake/ml/modeling/svm/linear_svc.py +1 -1
- snowflake/ml/modeling/svm/linear_svr.py +1 -1
- snowflake/ml/modeling/svm/nu_svc.py +1 -1
- snowflake/ml/modeling/svm/nu_svr.py +1 -1
- snowflake/ml/modeling/svm/svc.py +1 -1
- snowflake/ml/modeling/svm/svr.py +1 -1
- snowflake/ml/modeling/tree/decision_tree_classifier.py +1 -1
- snowflake/ml/modeling/tree/decision_tree_regressor.py +1 -1
- snowflake/ml/modeling/tree/extra_tree_classifier.py +1 -1
- snowflake/ml/modeling/tree/extra_tree_regressor.py +1 -1
- snowflake/ml/modeling/xgboost/xgb_classifier.py +1 -1
- snowflake/ml/modeling/xgboost/xgb_regressor.py +1 -1
- snowflake/ml/modeling/xgboost/xgbrf_classifier.py +1 -1
- snowflake/ml/modeling/xgboost/xgbrf_regressor.py +1 -1
- snowflake/ml/registry/_manager/model_manager.py +1 -0
- snowflake/ml/registry/_manager/model_parameter_reconciler.py +27 -0
- snowflake/ml/registry/registry.py +15 -0
- snowflake/ml/utils/authentication.py +16 -0
- snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.15.0.dist-info → snowflake_ml_python-1.16.0.dist-info}/METADATA +41 -3
- {snowflake_ml_python-1.15.0.dist-info → snowflake_ml_python-1.16.0.dist-info}/RECORD +178 -177
- {snowflake_ml_python-1.15.0.dist-info → snowflake_ml_python-1.16.0.dist-info}/WHEEL +0 -0
- {snowflake_ml_python-1.15.0.dist-info → snowflake_ml_python-1.16.0.dist-info}/licenses/LICENSE.txt +0 -0
- {snowflake_ml_python-1.15.0.dist-info → snowflake_ml_python-1.16.0.dist-info}/top_level.txt +0 -0
|
@@ -11,6 +11,7 @@ from snowflake.ml._internal.exceptions import error_codes, exceptions
|
|
|
11
11
|
from snowflake.ml._internal.utils import sql_identifier
|
|
12
12
|
from snowflake.ml.model import target_platform, type_hints as model_types
|
|
13
13
|
from snowflake.ml.model._model_composer.model_manifest import model_manifest_schema
|
|
14
|
+
from snowflake.ml.model.volatility import DEFAULT_VOLATILITY_BY_MODEL_TYPE, Volatility
|
|
14
15
|
from snowflake.snowpark import Session
|
|
15
16
|
from snowflake.snowpark._internal import utils as snowpark_utils
|
|
16
17
|
|
|
@@ -34,6 +35,7 @@ class ModelParameterReconciler:
|
|
|
34
35
|
|
|
35
36
|
def __init__(
|
|
36
37
|
self,
|
|
38
|
+
model: model_types.SupportedModelType,
|
|
37
39
|
session: Session,
|
|
38
40
|
database_name: sql_identifier.SqlIdentifier,
|
|
39
41
|
schema_name: sql_identifier.SqlIdentifier,
|
|
@@ -45,6 +47,7 @@ class ModelParameterReconciler:
|
|
|
45
47
|
python_version: Optional[str] = None,
|
|
46
48
|
statement_params: Optional[dict[str, str]] = None,
|
|
47
49
|
) -> None:
|
|
50
|
+
self._model = model
|
|
48
51
|
self._session = session
|
|
49
52
|
self._database_name = database_name
|
|
50
53
|
self._schema_name = schema_name
|
|
@@ -67,6 +70,7 @@ class ModelParameterReconciler:
|
|
|
67
70
|
reconciled_target_platforms = self._reconcile_target_platforms()
|
|
68
71
|
reconciled_options = self._reconcile_explainability_options(reconciled_target_platforms)
|
|
69
72
|
reconciled_options = self._reconcile_relax_version(reconciled_options, reconciled_target_platforms)
|
|
73
|
+
reconciled_options = self._reconcile_volatility_defaults(reconciled_options) # ADD THIS LINE
|
|
70
74
|
|
|
71
75
|
return ReconciledParameters(
|
|
72
76
|
conda_dependencies=self._conda_dependencies,
|
|
@@ -292,3 +296,26 @@ class ModelParameterReconciler:
|
|
|
292
296
|
)
|
|
293
297
|
|
|
294
298
|
return options
|
|
299
|
+
|
|
300
|
+
def _get_default_volatility_for_model(self, model: model_types.SupportedModelType) -> Volatility:
|
|
301
|
+
"""Get default volatility for a model based on its type."""
|
|
302
|
+
from snowflake.ml.model._packager import model_handler
|
|
303
|
+
|
|
304
|
+
handler = model_handler.find_handler(model)
|
|
305
|
+
# default to IMMUTABLE if no handler found or handler type not in defaults
|
|
306
|
+
if not handler or handler.HANDLER_TYPE not in DEFAULT_VOLATILITY_BY_MODEL_TYPE:
|
|
307
|
+
return Volatility.IMMUTABLE
|
|
308
|
+
return DEFAULT_VOLATILITY_BY_MODEL_TYPE[handler.HANDLER_TYPE]
|
|
309
|
+
|
|
310
|
+
def _reconcile_volatility_defaults(self, options: model_types.ModelSaveOption) -> model_types.ModelSaveOption:
|
|
311
|
+
"""Set global default volatility based on model type."""
|
|
312
|
+
|
|
313
|
+
# Skip if default_volatility is already explicitly set
|
|
314
|
+
if "volatility" in options:
|
|
315
|
+
return options
|
|
316
|
+
|
|
317
|
+
# Get default volatility for this model type
|
|
318
|
+
default_volatility = self._get_default_volatility_for_model(self._model)
|
|
319
|
+
options["volatility"] = default_volatility
|
|
320
|
+
|
|
321
|
+
return options
|
|
@@ -235,6 +235,10 @@ class Registry:
|
|
|
235
235
|
- max_batch_size: Maximum batch size that the method could accept in the Snowflake Warehouse.
|
|
236
236
|
Defaults to None, determined automatically by Snowflake.
|
|
237
237
|
- function_type: One of supported model method function types (FUNCTION or TABLE_FUNCTION).
|
|
238
|
+
- volatility: Volatility level for the function (use Volatility.VOLATILE or Volatility.IMMUTABLE).
|
|
239
|
+
Volatility.VOLATILE functions may return different results for the same arguments, while
|
|
240
|
+
Volatility.IMMUTABLE functions always return the same result for the same arguments.
|
|
241
|
+
Defaults to None (no volatility specified).
|
|
238
242
|
Returns:
|
|
239
243
|
ModelVersion: ModelVersion object corresponding to the model just logged.
|
|
240
244
|
"""
|
|
@@ -366,6 +370,12 @@ class Registry:
|
|
|
366
370
|
Warehouse. It detects any ==x.y.z in specifiers and replaced with >=x.y, <(x+1). Defaults to True.
|
|
367
371
|
- function_type: Set the method function type globally. To set method function types individually see
|
|
368
372
|
function_type in model_options.
|
|
373
|
+
- volatility: Set the volatility for all model methods globally (use Volatility.VOLATILE or
|
|
374
|
+
Volatility.IMMUTABLE). Volatility.VOLATILE functions may return different results for the same
|
|
375
|
+
arguments, while Volatility.IMMUTABLE functions always return the same result for the same arguments.
|
|
376
|
+
Defaults are set automatically based on model type: supported models (sklearn, xgboost, pytorch,
|
|
377
|
+
huggingface_pipeline, mlflow, etc.) default to IMMUTABLE, while custom models default to VOLATILE.
|
|
378
|
+
Individual method volatility can be set in method_options and will override this global setting.
|
|
369
379
|
- target_methods: List of target methods to register when logging the model.
|
|
370
380
|
This option is not used in MLFlow models. Defaults to None, in which case the model handler's
|
|
371
381
|
default target methods will be used.
|
|
@@ -382,6 +392,11 @@ class Registry:
|
|
|
382
392
|
- max_batch_size: Maximum batch size that the method could accept in the Snowflake Warehouse.
|
|
383
393
|
Defaults to None, determined automatically by Snowflake.
|
|
384
394
|
- function_type: One of supported model method function types (FUNCTION or TABLE_FUNCTION).
|
|
395
|
+
- volatility: Volatility level for the function (use Volatility.VOLATILE or Volatility.IMMUTABLE).
|
|
396
|
+
Volatility.VOLATILE functions may return different results for the same arguments, while
|
|
397
|
+
Volatility.IMMUTABLE functions always return the same result for the same arguments.
|
|
398
|
+
This per-method setting overrides any global volatility setting.
|
|
399
|
+
Defaults to None (no volatility specified).
|
|
385
400
|
|
|
386
401
|
Raises:
|
|
387
402
|
ValueError: If extra arguments are specified ModelVersion is provided.
|
|
@@ -73,3 +73,19 @@ class SnowflakeJWTTokenAuth(auth.AuthBase):
|
|
|
73
73
|
def __call__(self, r: requests.PreparedRequest) -> requests.PreparedRequest:
|
|
74
74
|
r.headers["Authorization"] = f'Snowflake Token="{self.snowflake_token}"'
|
|
75
75
|
return r
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class SnowflakePATAuth(auth.AuthBase):
|
|
79
|
+
"""Authentication using Snowflake Programmatic Access Token (PAT)."""
|
|
80
|
+
|
|
81
|
+
def __init__(self, pat_token: str) -> None:
|
|
82
|
+
"""Initialize with a PAT token.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
pat_token: The programmatic access token string
|
|
86
|
+
"""
|
|
87
|
+
self.pat_token = pat_token
|
|
88
|
+
|
|
89
|
+
def __call__(self, r: requests.PreparedRequest) -> requests.PreparedRequest:
|
|
90
|
+
r.headers["Authorization"] = f'Snowflake Token="{self.pat_token}"'
|
|
91
|
+
return r
|
snowflake/ml/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# This is parsed by regex in conda recipe meta file. Make sure not to break it.
|
|
2
|
-
VERSION = "1.
|
|
2
|
+
VERSION = "1.16.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-ml-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.16.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:
|
|
@@ -250,7 +250,7 @@ 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.
|
|
253
|
+
Requires-Dist: scikit-learn<1.8
|
|
254
254
|
Requires-Dist: scipy<2,>=1.9
|
|
255
255
|
Requires-Dist: shap<1,>=0.46.0
|
|
256
256
|
Requires-Dist: snowflake-connector-python[pandas]<4,>=3.16.0
|
|
@@ -406,7 +406,45 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
406
406
|
|
|
407
407
|
# Release History
|
|
408
408
|
|
|
409
|
-
## 1.
|
|
409
|
+
## 1.16.0
|
|
410
|
+
|
|
411
|
+
### Bug Fixes
|
|
412
|
+
|
|
413
|
+
* Registry: Remove redundant pip dependency warnings when `artifact_repository_map` is provided for warehouse model deployments.
|
|
414
|
+
|
|
415
|
+
### Behavior Changes
|
|
416
|
+
|
|
417
|
+
### New Features
|
|
418
|
+
|
|
419
|
+
* Support scikit-learn < 1.8.
|
|
420
|
+
* ML Job: Added support for configuring the runtime image via `runtime_environment`
|
|
421
|
+
(image tag or full image URL) at submission time.
|
|
422
|
+
Examples:
|
|
423
|
+
* @remote(compute_pool, stage_name = 'payload_stage', runtime_environment = '1.8.0')
|
|
424
|
+
* submit_file('/path/to/repo/test.py', compute_pool, stage_name = 'payload_stage', runtime_environment = '/mydb/myschema/myrepo/myimage:latest')
|
|
425
|
+
* Registry: Ability to mark model methods as `Volatility.VOLATILE` or `Volatility.IMMUTABLE`.
|
|
426
|
+
|
|
427
|
+
```python
|
|
428
|
+
from snowflake.ml.model.volatility import Volatility
|
|
429
|
+
|
|
430
|
+
options = {
|
|
431
|
+
"embed_local_ml_library": True,
|
|
432
|
+
"relax_version": True,
|
|
433
|
+
"save_location": "/path/to/my/directory",
|
|
434
|
+
"function_type": "TABLE_FUNCTION",
|
|
435
|
+
"volatility": Volatility.IMMUTABLE,
|
|
436
|
+
"method_options": {
|
|
437
|
+
"predict": {
|
|
438
|
+
"case_sensitive": False,
|
|
439
|
+
"max_batch_size": 100,
|
|
440
|
+
"function_type": "TABLE_FUNCTION",
|
|
441
|
+
"volatility": Volatility.VOLATILE,
|
|
442
|
+
},
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
````
|
|
446
|
+
|
|
447
|
+
## 1.15.0 (09-29-2025)
|
|
410
448
|
|
|
411
449
|
### Bug Fixes
|
|
412
450
|
|