Snowflake ML Python release notes¶
This article contains the release notes for the Snowflake ML Python, including the following when applicable:
- Behavior changes
- New features
- Customer-facing bug fixes
Note
These notes do not include changes in features that have not been publicly announced. Such features might appear in the Snowflake ML Python source code but not in the public documentation.
See Snowflake ML: End-to-End Agentic Machine Learning for documentation.
Verifying the snowflake-ml-python package¶
All Snowflake packages are signed, allowing you to verify their origin. To verify the snowflake.ml.python package, follow the steps below:
- Install
cosign. This example uses the Go installation: Installing cosign with Go. - Download the file from a repository such as PyPi.
- Download a
.sigfile for that release from the GitHub releases page. - Verify the signature using
cosign. For example:
Note
This example uses the library and signature for version 1.27.0 of the package. Use the filenames of the version you are verifying.
Deprecation notices¶
snowflake.ml.fileset.FileSethas been deprecated and will be removed in a future release. Use snowflake.ml.dataset.Dataset and snowflake.ml.data.DataConnector instead.- The “CamelCase” function names in
snowflake.ml.cortexhave been deprecated and will be removed in a future release. Use the “snake_case” names for these functions instead. For example, useclassify_textinstead ofClassifyText. - The
partitioned_inference_apidecorator has been deprecated and will be removed in a future release. Usecustom_model.partitioned_apiinstead. - The
additional_payloadsargument of theMLJob.submit_*methods has been deprecated and will be removed in a future release. Use theimportsargument instead. - The
snowflake.ml.model.models.huggingface_pipeline.HuggingfacePipelineModelclass has been deprecated and will be removed in a future release.
Version 1.48.0 (2026-07-22)¶
New Features¶
- Experiment Tracking:
ExperimentTrackingnow captures best-effort source provenance (entry-point filename and any surrounding git commit, branch, and remote URL) for each new run by default. Passcapture_source_info=Falseto disable it. Collection is always non-fatal and never blocks run creation.
Bug Fixes¶
Behavior Changes¶
Deprecations¶
Version 1.47.0 (2026-07-15)¶
New Features¶
- Experiment Tracking: Added
ExperimentTracking.list_model_versionsto retrieve the model versions that were logged under a run. Models logged vialog_modelinside a run are linked to that run through Snowflake lineage, and this method traverses that lineage to return the correspondingModelVersionobjects.
Bug Fixes¶
- Experiment Tracking: Fix a bug where
.set_experimentdoes not recreate an experiment deleted in Snowsight
Behavior Changes¶
- Registry:
enable_explainabilitynow defaults toFalsefor all model types when logging a model. Previously it defaulted toTruefor XGBoost, LightGBM, and CatBoost models and was auto-enabled for supported scikit-learn and Snowpark ML modeling models when running in the Warehouse. To generate anexplainmethod, explicitly passoptions={"enable_explainability": True}tolog_model(this requiressample_input_datafor supported model types).
Deprecations¶
Version 1.46.0 (2026-07-07)¶
New Features¶
Bug Fixes¶
Behavior Changes¶
- Registry: For Snowpark ML Pipeline models with explainability enabled, explanations now cover only the columns the
final estimator was actually trained on (its
input_cols). Untransformed passthrough columns (e.g. raw string columns left in place by an encoder using newoutput_cols, or the label column) are no longer included in the explain output. This also fixes a failure where such passthrough columns could reach the SHAP explainer and raise an error duringlog_model(..., enable_explainability=True).
Deprecations¶
Version 1.45.0 (2026-07-01)¶
New Features¶
- Feature Store:
FeatureViewnow supports aninitialization_warehousethat is used for the initial build and any subsequent reinitializations of the backing dynamic table (a full scan of the source data), whilewarehousecontinues to drive the lighter incremental refreshes. This mirrors the dynamic tableINITIALIZATION_WAREHOUSEknob, lets you pair a larger warehouse for initialization with a smaller one for steady-state refresh, and is also used for the one-time backfill of streaming feature views. It can be set at registration, changed viaupdate_feature_view(initialization_warehouse=...), and is surfaced bylist_feature_views(verbose=True).
- Registry: LLM models deployed with the OpenAI chat signatures now support structured outputs
through an optional
response_formatparam matching the OpenAI Chat Completions API ({"type": "json_schema", "json_schema": {"name": "...", "schema": {...}}}), letting callers constrain model output to a JSON Schema.
Bug Fixes¶
Behavior Changes¶
Deprecations¶
Version 1.44.0 (2026-06-23)¶
New Features¶
Bug Fixes¶
Behavior Changes¶
Deprecations¶
Version 1.43.0 (2026-06-16)¶
New Features¶
- Registry:
inference_engine_options["engine"]now accepts case-insensitive strings in addition toInferenceEngineenum members. Supported values are"vllm"and"python_generic"(for example,"vLLM","VLLM", and"PYTHON_GENERIC"are all accepted). This applies toModelVersion.create_service()andModelVersion.run_batch().
Bug Fixes¶
- Registry: Fixed
explain()failing with type mismatch errors when passing a Snowpark DataFrame. Snowpark DataFrame columns are now explicitly cast to match model signature types before SQL generation. Table functions (used byexplain) enforce stricter type coercion than scalar functions (used bypredict), so columns that were implicitly coerced forpredictwould be rejected byexplain.
Behavior Changes¶
- Registry:
SentenceTransformersmodels no longer hard-code a default inference batch size of 32. Whenbatch_sizeis not specified atlog_modeltime and is not overridden at inference, thesentence-transformerslibrary default is used. To pin a specific size, passbatch_sizevialog_model(..., options={"batch_size": N})or as an inference-time parameter. AllSentenceTransformersmodels logged with this release require a client/serving runtime on version 1.43.0 or later (regardless of whetherbatch_sizewas specified).
Deprecations¶
Version 1.42.0 (2026-06-11)¶
New Features¶
-
Registry: Support
truncate_dimforSentenceTransformersmodels. Truncation set at construction (SentenceTransformer(..., truncate_dim=N)) is captured when the model is logged and restored on reload. On clients withsentence-transformers5.0.0 or later,truncate_dimis also exposed as a runtime parameter in the model signature. -
Registry:
log_model()now captures a representative row fromsample_input_dataand stores it alongside the model so inference code snippets shown in the model registry UI can be pre-filled with realistic values. Passoptions={"capture_sample_input_data": False}to opt out (e.g., for sensitive data); generic placeholder values will be used in the snippets instead.
Bug Fixes¶
- Registry: Pin
transformers<5for additional HuggingFace pipeline tasks removed intransformers 5.x(summarization,text2text-generation,question-answering, andtranslation_*), preventing deployment failures from missing pipeline classes.
Behavior Changes¶
Deprecations¶
Version 1.41.0 (2026-05-27)¶
New Features¶
- Registry: Extended
ParamSpecsupport to MLflow PyFunc, LightGBM, XGBoost, and CatBoost models. Parameters declared in the model signature can now be passed at inference time.
Bug Fixes¶
Behavior Changes¶
Deprecations¶
Version 1.40.0 (2026-05-19)¶
New Features¶
Bug Fixes¶
- Feature Store:
get_feature_view()now correctly preservesonline_configfor feature views whose names require SQL quoting (mixed case or special characters such as a space). Previously the returned FeatureView reportedonline=Falseeven when online was enabled at registration, causingread_feature_view(store_type=ONLINE)to fail with “Online store is not enabled”.
Behavior Changes¶
-
Registry:
log_model(..., options=...)now rejects unknown top-level keys and unknown keys inside eachmethod_optionsentry (for example misspellings or options that belong to a different model framework). Previously those keys were ignored. Validation is based on the public save-option TypedDicts and runs before dependency reconciliation. -
Registry:
use_gpuis declared on the CatBoost, XGBoost, PyTorch, and TorchScript save-option TypedDicts to match the save paths that already read this flag.
Deprecations¶
Version 1.39.0¶
New Features¶
Bug Fixes¶
- Feature Store:
update_feature_viewnow correctly handles every transition between duration-based and CRON-basedrefresh_freq. Previously a CRON expression was forwarded to the Dynamic Table’sTARGET_LAG(which Snowflake rejects),duration → cronfailed because the companion Task did not yet exist, andcron → durationleft the Task orphaned and continuing to fire on its old schedule. All four(old, new)transitions now correctly create, alter, or drop the Task as needed, with symmetric rollback on failure.
Behavior Changes¶
-
Feature Store: For CRON-based feature views,
get_feature_view(),list_feature_views(), andregister_feature_view()now return the original cron expression asrefresh_freqinstead of"DOWNSTREAM". The underlying Dynamic Table still usesTARGET_LAG = 'DOWNSTREAM'with a companion Task — this is purely a display change so the round-trip preserves what the user passed in. -
Registry: When
target_platformsincludes WAREHOUSE and pip installs are needed without a user-suppliedpipartifact repository,log_modelinjectssnowflake.snowpark.pypi_shared_repositoryafter verifying access. This applies to explicitpip_requirementsand to pip-only packaging when there are no user conda dependencies. Ifpypi_shared_repositoryis inaccessible in the pip-only case, automatic packaging dependencies fall back to conda instead of forcing pip-only without an index.
Deprecations¶
Version 1.38.0¶
New Features¶
- Registry: Auto-inferred signatures for HuggingFace pipeline models now include task-specific
ParamSpecs, allowing users to control inference behavior at prediction time viaparams. Generative tasks expose GenerationConfig parameters (e.g.temperature,max_new_tokens,top_p); non-generative tasks expose their own task-specific parameters (e.g.top_kfor fill-mask,aggregation_strategyfor zero-shot-classification).
Bug Fixes¶
Behavior Changes¶
-
Registry: For HuggingFace
text-generationpipelines whose tokenizer defines a chat template, the auto-inferred signature now matches the OpenAI Chat Completions API (_OPENAI_CHAT_SIGNATURE_WITH_PARAMS_SPEC). Inputs are a singlemessagescolumn and inference controls (temperature,max_completion_tokens,stop,n,stream,top_p,frequency_penalty,presence_penalty) move frominputstoparamswith default values. Predictions return the OpenAI response shape (id,object,created,model,choices,usage); the generated text is atchoices[0].message.contentinstead ofoutputs[0].generated_text. -
Registry: For HuggingFace
image-text-to-text,video-text-to-text, andaudio-text-to-textpipelines, the auto-inferred signature now uses_OPENAI_CHAT_SIGNATURE_WITH_PARAMS_SPECinstead of_OPENAI_CHAT_SIGNATURE_SPEC. The input column set narrows to justmessages, and the inference controls move toparamswith default values; the output schema is unchanged.
Deprecations¶
Version 1.37.0 (2026-04-29)¶
New Features¶
-
Registry (PrPr): The
model_init_oncesave option now applies to TABLE_FUNCTION model methods (including partitioned table functions) for warehouse deployments, in addition to scalar FUNCTION methods. The generated handler uses the same eager@udf_init_oncemodel load path as UDFs. -
Experiment Tracking:
end_runnow accepts an optionalstatusargument ("FINISHED"or"FAILED") to explicitly set the final run status. When a run’s context manager exits with an exception, the status is automatically set to"FAILED".
Bug Fixes¶
-
Registry: Fixed
log_model()failing for some Snowpark MLPipelinemodels with explainability when the full pipeline could not be converted to a native object; task inference now uses the final estimator instead. -
Registry:
run_batch()now raises a clearValueErrorwhen a partitioned model’s output signature includes the partition column. Previously this produced duplicate columns in the output, causing cryptic Ray/Arrow errors (AttributeErrororKeyError) deep in the batch inference pipeline.
Behavior Changes¶
Deprecations¶
Version 1.36.0 (2026-04-22)¶
New Features¶
- Feature Store: for latency-sensitive online feature view reads, set use_session_warehouse=True to re-use the warehouse from the current session and achieve the best latency.
Bug Fixes¶
- Registry: Pin
transformers<5when saving HuggingFace pipeline models that use tasks removed intransformers 5.x(image-to-text,visual-question-answering,conversational), preventing deployment failures from missing pipeline classes.
Behavior Changes¶
- Registry: Logging a model with
pip_requirementsand noartifact_repository_mapnow raises aValueErrorwhentarget_platformsexplicitly includes"WAREHOUSE". Previously this combination would silently proceed, resulting in the warehouse deployment being silently dropped.
Deprecations¶
Version 1.35.0 (2026-04-17)¶
New Features¶
Bug Fixes¶
- Registry: Fixed
ParamSpec.from_mlflow_specdroppingshape, which caused shaped scalar params (e.g., array of ints) from MLflow to fail validation during model import.
Behavior Changes¶
- ML Jobs:
spec_overridesnow validates container keys and warns when keys other thannameandsecretsare provided. Additional keys are not officially supported and may not behave as expected.
Deprecations¶
Version 1.34.0 (2026-04-08)¶
New Features¶
- Experiment Tracking: Added
list_paramsandlist_metricsmethods to retrieve parameters and metrics for runs within an experiment. Both methods return a Dataframe and accept an optionalrun_nameargument to filter to a specific run.
Bug Fixes¶
- Feature Store: Fixed
generate_dataset()/generate_training_set()SQL generation for Unicode and case-sensitive identifiers (for example Japanese column names), ensuring columns are quoted exactly once and preventing SQL compilation errors such asunexpected '<column_name>'.
Behavior Changes¶
- Registry:
enable_explainability=Trueis now allowed for SPCS-only and non-warehouse-runnable models. Previously this raised aValueError.
Deprecations¶
Version 1.33.0 (2026-03-31)¶
New Features¶
- Registry: Extended
ParamSpecsupport to PyTorch models. Parameters declared in the model signature can now be passed at inference time, matching the existing support for custom models. - Registry (PrPr): Added
model_init_oncemodel save option tolog_model. When set toTrue, the model is loaded once per worker process at startup, eliminating model-loading overhead. Defaults toFalse. - Experiment Tracking live logging is out of private preview and will become generally available over the next few weeks.
- Registry: Bumped
transformersupper bound to<6, adding compatibility with Hugging Face Transformers v5.
Bug Fixes¶
- Experiment Tracking live logging: Fixed a bug where the tracebacks for uncaught exceptions were not logged when
the code was running in a
with exp.start_run()block. - Registry: Fixed a thread leak in
create_service(block=True)where the log-streaming thread could outlive the error handler when service deployment fails.
Behavior Changes¶
Deprecations¶
Version 1.32.0 (2026-03-26)¶
New Features¶
- Registry: Extended
ParamSpecsupport to scikit-learn models. Parameters declared in the model signature can now be passed at inference time, matching the existing support for custom models. - Registry:
infer_signature()now accepts adictfor theparamsargument (e.g.,params={"temperature": 0.7, "max_tokens": 100}), automatically inferringParamSpecobjects from the Python value types. The existingSequence[BaseParamSpec]form is still supported.
Bug Fixes¶
- Experiment Tracking live logging (PrPr): Fixed a bug where the tracebacks for uncaught exceptions were not logged when the code was running inside Snowflake notebooks.
Behavior Changes¶
- Registry: The models from
huggingface.TransformersPipelineandtransformers.Pipelinewill default to safetensors file format by default by usingsafe_serialization=Trueparameter to thesave_pretrainedcall. This creates safetensors files instead of PyTorch binaries or pt files, addressing security vulnerability CVE-2025-32434.
Deprecations¶
Version 1.31.0 (2026-03-19)¶
New Features¶
Bug Fixes¶
- Registry: Fixed custom model handler to explicitly persist
PARTITIONED=Falsein model metadata for@inference_apimethods. Previously, custom models using@inference_apiwithTABLE_FUNCTIONtype were incorrectly reported as partitioned. - Registry: Fixed sklearn and SnowML model handlers to explicitly persist
PARTITIONED=Falsemetadata for theexplainmethod, preventing it from being incorrectly reported as partitioned at read time. - Registry: Fixed inconsistent
infer_signaturefor columns containing NaN values. Previously, the inferred dtype (DOUBLEvsINT64) depended on whether NaN rows survived truncation, causing downstream validation failures. Now, the original pandas column dtype is respected duringinfer_signature, so columns with mix of integer andnp.nanorNoneare consistently inferred asDOUBLEregardless of NaN position. - Registry: Fixed a bug where invalid parameter types (e.g., passing a string to an integer parameter)
were silently coerced instead of raising an error. Parameters are now strictly validated against their
declared types before inference. This may break code that relied on the silent coercion behavior
(e.g.,
mv.run(..., params={"max_tokens": "100"})ormv.run(..., params={"some_int_param": True})). - ML Job: Fixed explicitly named
MLJobDefinitionobjects so they can be overwritten in place and invoked repeatedly without job name collisions; thegenerate_suffixargument has been removed. - Experiment Tracking live logging (PrPr): Fixed a bug that generated too many lines of log that consist entirely of whitespace.
Behavior Changes¶
- Registry: Warehouse partitioned model inference no longer includes non-partition input columns (which were always NULL) in the output. The output now contains only the model’s output columns and the partition column.
Deprecations¶
Version 1.30.0¶
New Features¶
- Experiment Tracking live logging (PrPr): In SPCS, call
set_live_logging_status(True)to automatically capture and persist outputs to stdout and stderr while a run is active. The captured logs can be viewed from the Experiments UI. - Registry: Support logging MLflow models created via
mlflow.*.save_model()to the Snowflake Model Registry. Previously, only models logged throughmlflow.*.log_model()were supported. This also enables logging custommlflow.pyfunc.PythonModelsubclasses saved locally.
Bug Fixes¶
- Registry: Fixed Prophet model handler to correctly mark the
predictmethod as partitioned, ensuring it uses a partitionedTABLE_FUNCTIONwhen deployed to Snowflake. - Registry: Support
text-generationmodels without chat template. The model will have signatures to automatically take plain strings as input without needing to specify the signatures inlog_model. The signature can be overridden if the user chooses to.
Behavior Changes¶
- Registry: Huggingface models with task
text-generationthat do not have chat templates will be logged with signature that supports plain text (string) as input.
Deprecations¶
- Registry: Removed support for logging Hugging Face Pipelines in config-only mode. Config-only models could not run in warehouse and required an External Access Integration (EAI) with egress to Hugging Face hosts. Use remote logging or local download instead — these approaches support warehouse execution and store model weights at log time, enabling fully air-gapped services.
Version 1.29.0 (2026-02-24)¶
New Features¶
- Model serving: Introducing
InferenceEngine.PYTHON_GENERICenum value. Users can passInferenceEngine.PYTHON_GENERICto use a Python-based inference server for model serving.
Bug Fixes¶
- Registry: Fixed a bug where using inference parameters (ParamSpec) with table function or
partitioned model methods would fail at runtime with a
NameError. - Registry: Fixed a bug where MLflow models with string columns failed during inference with
“Can not safely convert string to <U0>” errors due to MLflow’s schema validation not handling
pd.StringDtypecorrectly.
Behavior Changes¶
- Dependencies: Removed
snowflake.coreas a runtime dependency. If you usesnowflake.core(e.g.,TaskDag,Root,Task), addsnowflake.coreexplicitly to your dependencies.
Deprecations¶
Version 1.28.0 (2026-02-17)¶
New Features¶
Bug Fixes¶
Behavior Changes¶
Deprecations¶
Version 1.27.0 (2026-02-12)¶
Bug fixes¶
Model Registry bug fixes:
- Fixed failure of
model_version.runcaused by requiring READ privilege on the model instead of USAGE when the user’s role had only the USAGE privilege.
Feature store bug fixes:
- Fixed failure of
register_feature_viewwithoverwrite=Truewhen the existing feature view is external and the new feature view is managed, or vice versa.
Version 1.26.0 (2026-02-05)¶
New features¶
New Model Registry features:
- Model signatures can now include inference parameters via
ParamSpec, allowing you to define constant parameters to be passed at inference time without including them in the input data. Example:
New Feature Store features:
- New
auto_prefixparameter andwith_namemethod to prevent column name collisions when joining multiple feature views in dataset generation. - Dynamic Iceberg tables can now be used as backing storage for Feature Views. Use
StorageConfigwithStorageFormat.ICEBERGto store data in Apache Iceberg format on external cloud storage. A newdefault_iceberg_external_volumeparameter is available inFeatureStoreto set a default external volume for Iceberg feature views.
Version 1.25.1 (2026-02-03)¶
No public-facing changes. This release includes changes to a preview feature that has not been publicly announced.
Version 1.25.0 (2026-01-28)¶
New features¶
New Model Serving features:
- The
create_servicemethod accepts a newautocaptureargument to indicate whether inference data should be captured (see Autocapture inference logs for realtime inference). - The
create_serviceandlog_model_and_create_servicemethods now accept an optionalmin_instancesargument to specify the minimum number of instances for the service. The service automatically scales between the specified minimum and maximum instances based on traffic and hardware utilization. Ifmin_instancesis 0, the service automatically suspends when no traffic is detected for a period of time. The default value formin_instancesis 0.
Version 1.24.0 (2026-01-22)¶
New features¶
New Feature Store features:
- Tile-based aggregation support using a new
FeatureAPI for efficient and point-in-time correct time-series feature computation using pre-computed tiles.
New Model Registry features:
- SentenceTransformer models now support automatic signature inference. When logging a SentenceTransformer model,
sample_input_datais optional. The signature is automatically inferred from the model’s embedding dimension when sample input data is not provided.. Theencode,encode_query,encode_document,encode_queries,encode_documentsmethods are supported.
Version 1.23.0 (2026-01-165)¶
New features¶
New ML Jobs features:
- ML Jobs now support Python 3.11 and Python 3.12. Jobs automatically select a runtime environment matching the client Python version.
Bug fixes¶
Model Registry bug fixes:
- Empty output in HuggingFace’s Token Classification (Named Entity Recognition) models no longer causes failures.
Model Serving bug fixes:
- Container statuses are now correctly reported and should not be blank.
Version 1.22.0 (2026-01-09)¶
New features¶
New Model Registry features:
- You can now remotely log a transformer pipeline model using a Snowpark Container Services (SPCS) job.
Version 1.21.0 (2026-01-05)¶
Behavior changes¶
ML Jobs behavior changes:
- The behavior of the
additional_payloadsparameter is changing. Use theimportsargument to declare additional dependencies, such as ZIP files and Python modules. Local directories and Python files are automatically compressed, and their internal layout is determined by the specified import path. The import path applies only to local directories, Python files, and staged python files; it has no effect on other import types. When referencing files in a stage, only individual files are supported, not directories.
Experiment Tracking behavior changes:
ExperimentTrackingis now a singleton class.
Bug fixes¶
Experiment Tracking bug fixes:
- Reaching the run metadata size limit in
log_metricsorlog_paramsnow issues a warning instead of raising an exception.
Model Registry bug fixes:
ModelVersion.runnow raises aValueErrorif the model is a SPCS-only model andservice_nameis not provided.
New preview features¶
- The
create_servicemethod now accepts the Boolean argumentautocaptureto indicate whether inference data is automatically captured.
New release features¶
New Model Registry features:
-
The new
snowflake.ml.model.models.huggingface.TransformersPipelineclass is intended to replacesnowflake.ml.model.models.huggingface_pipeline.HuggingfacePipelineModel, although the older class is not yet deprecated. The new class knows model signatures for common tasks so that you do not need to specify them manually. The supported tasks are currently:fill-maskquestion-answeringsummarizationtable-question-answeringtext2text-generationtext-classification(aliassentiment-analysis)text-generationtoken-classification(aliasner)translationtranslation_xx_to_yyzero-shot-classification(lets you log models without loading them into memory)
-
The
list_servicesAPI now shows an internal endpoint that can be called from another SPCS node or notebook without Enterprise Application Integration. It also indicates whether autocapture is enabled for each service.
New DataConnector features:
- New
to_huggingface_datasetmethod converts Snowflake data to HuggingFace datasets. Supports both in-memoryDataset(streaming=False) and streamingIterableDataset(streaming=True) modes.
Deprecation notices¶
- The
snowflake.ml.model.models.huggingface_pipeline.HuggingfacePipelineModelclass has been deprecated and will be removed in a future release.