snowflake-ml-python 1.53.0__tar.gz → 1.54.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.53.0 → snowflake_ml_python-1.54.0}/CHANGELOG.md +37 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/PKG-INFO +38 -2
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/env_utils.py +13 -3
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/platform_capabilities.py +1 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/telemetry.py +9 -5
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_source_info.py +30 -3
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/experiment_tracking.py +4 -3
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/aggregation.py +26 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_store.py +76 -23
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view.py +24 -22
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/metadata_manager.py +21 -6
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/online_service.py +38 -14
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/stream_config.py +10 -3
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/streaming_registration.py +42 -4
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/results.py +2 -5
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/job.py +67 -62
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/job_definition.py +5 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/manager.py +2 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/__init__.py +2 -0
- snowflake_ml_python-1.54.0/snowflake/ml/model/_client/model/_loaded_model_telemetry.py +152 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/model_version_impl.py +10 -3
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/model_ops.py +1 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/function_generator.py +6 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/model_method.py +8 -2
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/utils.py +14 -4
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_env/model_env.py +4 -1
- snowflake_ml_python-1.54.0/snowflake/ml/model/_packager/model_handlers/peft_adapter.py +224 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_meta.py +17 -5
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +11 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_packager.py +12 -8
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_save_options.py +1 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/models/huggingface.py +88 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/type_hints.py +22 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/volatility.py +1 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/_manager/model_manager.py +90 -3
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/registry.py +14 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/version.py +1 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/PKG-INFO +38 -2
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/SOURCES.txt +2 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/LICENSE.txt +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/README.md +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/pyproject.toml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/setup.cfg +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_classify_text.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_complete.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_embed_text_1024.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_embed_text_768.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_extract_answer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_finetune.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_sentiment.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_sse_client.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_summarize.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_translate.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_util.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/env.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/file_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/init_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/migrator_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/type_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/db_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/formatting.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/identifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/import_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/mixins.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/parallelize.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/result.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/service_logger.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/table_manager.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/tee.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/url.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/data_connector.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/data_ingestor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/data_source.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/ingestor_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/torch_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset_factory.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset_metadata.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset_reader.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_client/artifact.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_client/experiment_tracking_sql_client.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/experiment.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/run.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/run_metadata.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_experiment_info.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_logging/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_logging/experiment_logger.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_logging/experiment_logging_context.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/callback/keras.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/callback/lightgbm.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/callback/xgboost.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/_compute_fn_validation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/access_manager.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/entity.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/airline_features/features/plane_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/airline_features/features/weather_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/station_feature.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/citibike_trip_features/features/trip_feature.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/entities.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/location_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/features/trip_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/new_york_taxi_features/source.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/nyc_yellow_trips.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/managed_wine_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/wine_quality_features/features/static_wine_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature.py +1 -1
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_group.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view_append_only_validation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view_refresh_freq.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/interval_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/online_service_http_client.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_config.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_dataset.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_dataset_udf.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_registration.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/request_source.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/builder.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/enums.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/models.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/table_schema_evolution.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/stream_source.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/tile_sql_generator.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/fileset.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/sfcfs.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/snowfs.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/stage_fs.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/data_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/dto_schema.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/exception_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/legacy.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/protocols.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/arg_protocol.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/constants.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/feature_flags.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/payload_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/query_helper.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/runtime_env_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/constants.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/start_mlruntime.sh +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/startup.sh +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/stage_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/type_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/decorators.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/lineage/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/lineage/lineage_node.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_job_specs.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_serialization.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_specs.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_task.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_task_v2.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/inference_engine_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/model_impl.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/deployment_step.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/live_commit_naming.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/param_ops.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/param_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/service_ops.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/import_model_spec_schema.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/inference_job_service_spec.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/_base.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/model.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/model_version.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/service.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/stage.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/tag.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/huggingface_lazy_uploader.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_composer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/infer_function.py_template +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/infer_function_init_once.py_template +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/infer_partitioned_init_once.py_template +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/infer_table_function_init_once.py_template +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_user_file/model_user_file.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/catboost.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/custom.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_default.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_openai_chat_wrapper.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_task_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_text_to_text.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/automatic_speech_recognition.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/conversational.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/document_question_answering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/fill_mask.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_feature_extraction.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_text_to_text.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_to_text.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/object_detection.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/question_answering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/summarization.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/table_question_answering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text2text_generation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_generation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/token_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/translation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_text_to_text.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/visual_question_answering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_audio_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_image_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_object_detection.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/zero_shot_text_classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/prophet.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/pytorch.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/sklearn.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/torchscript.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/xgboost.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers_migrator/pytorch_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers_migrator/tensorflow_migrator_2025_01_01.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers_migrator/torchscript_migrator_2023_12_01.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_sample_input_data.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_runtime/_snowml_inference_alternative_requirements.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/base_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/core.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/dmatrix_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/snowpark_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/batch/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/batch_inference/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/code_path.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/compute_pool.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/custom_model.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/event_handler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/inference_engine.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/model_signature.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/openai_signatures.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/target_platform.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/task.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_search_udf_file.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/xgboost_external_memory_trainer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/calibration/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/affinity_propagation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/birch.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/bisecting_k_means.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/dbscan.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/feature_agglomeration.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/k_means.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/mean_shift.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/optics.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/spectral_biclustering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/spectral_clustering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/spectral_coclustering.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/compose/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/compose/column_transformer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/compose/transformed_target_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/elliptic_envelope.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/empirical_covariance.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/graphical_lasso.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/ledoit_wolf.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/min_cov_det.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/oas.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/shrunk_covariance.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/dictionary_learning.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/factor_analysis.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/fast_ica.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/incremental_pca.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/kernel_pca.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/pca.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/sparse_pca.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/truncated_svd.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/bagging_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/bagging_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/isolation_forest.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/stacking_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/voting_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/voting_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_fdr.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_fpr.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_fwe.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_k_best.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_percentile.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/variance_threshold.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/framework/_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/framework/base.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/iterative_imputer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/knn_imputer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/missing_indicator.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/simple_imputer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/nystroem.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ard_regression.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/elastic_net.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/gamma_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/huber_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lars.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lars_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_lars.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/linear_regression.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/logistic_regression.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/perceptron.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/poisson_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ransac_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/sgd_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/sgd_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/isomap.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/mds.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/spectral_embedding.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/tsne.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/classification.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/correlation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/covariance.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/ranking.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/regression.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/mixture/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/mixture/gaussian_mixture.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/model_selection/grid_search_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/output_code_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/complement_nb.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/kernel_density.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/nearest_centroid.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/mlp_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/mlp_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/polynomial_features.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/semi_supervised/label_propagation.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/semi_supervised/label_spreading.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/linear_svc.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/linear_svr.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/nu_svc.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/nu_svr.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/svc.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/svr.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/decision_tree_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/decision_tree_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/extra_tree_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/extra_tree_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgb_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgb_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/explain_visualize.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/model_monitor.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/shap.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/__init__.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/_manager/model_parameter_reconciler.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/authentication.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/connection_params.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/html_utils.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/sparse.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/sql_client.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/stage_file.py +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/requires.txt +0 -0
- {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
# Release History
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
3
|
+
## 1.54.0
|
|
4
|
+
|
|
5
|
+
### New Features
|
|
6
|
+
|
|
7
|
+
* Registry: `log_model(..., options={"case_sensitive": True})` and
|
|
8
|
+
`options={"max_batch_size": N}` apply those settings to all methods. Per-method
|
|
9
|
+
`method_options` still override the global values.
|
|
10
|
+
|
|
11
|
+
* Feature Store: `create_online_service` accepts a `size` kwarg naming the size to provision the Online
|
|
12
|
+
Service at, one of `"XS"`, `"S"`, `"M"`, `"L"`, `"XL"`, `"2XL"`, `"3XL"` (case-insensitive). When
|
|
13
|
+
omitted, the server-side default applies; accounts that cap the available size provision at their
|
|
14
|
+
cap. `get_online_service_status()` now reports the provisioned `size`, which is `None` for services
|
|
15
|
+
created before sizes were recorded.
|
|
16
|
+
|
|
17
|
+
* Experiment Tracking: Source provenance now also records the id of the enclosing ML job when a run is created from
|
|
18
|
+
inside one.
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* Feature Store: Feature View metadata tags carrying unknown keys (including a legacy `refresh_mode`)
|
|
23
|
+
no longer fail to deserialize; unknown keys are ignored on read and the tag still does not persist
|
|
24
|
+
`refresh_mode`.
|
|
25
|
+
* Registry: Fixed `ModelVersion.load()` failing with `ValueError: ... is not a valid SQL identifier`
|
|
26
|
+
when the model's owner role is a quoted identifier.
|
|
27
|
+
* Feature Store: Fixed FeatureStore.update_feature_view() failing with `SQL compilation error:
|
|
28
|
+
invalid value 'ADAPTIVE' for property 'REFRESH_MODE'` when enabling online storage for an existing
|
|
29
|
+
feature view.
|
|
30
|
+
|
|
31
|
+
### Behavior Changes
|
|
32
|
+
|
|
33
|
+
### Deprecations
|
|
34
|
+
|
|
35
|
+
## 1.53.0 (2026-08-24)
|
|
4
36
|
|
|
5
37
|
### New Features
|
|
6
38
|
|
|
@@ -29,6 +61,10 @@
|
|
|
29
61
|
|
|
30
62
|
### Bug Fixes
|
|
31
63
|
|
|
64
|
+
* Feature Store: online feature reads and stream ingestion no longer fail while the Online Service is
|
|
65
|
+
changing size (status `UPDATING_SIZE`). The service serves reads and writes throughout a size
|
|
66
|
+
change, which can take hours, so it is now treated as serviceable like `UPDATING` already was.
|
|
67
|
+
|
|
32
68
|
### Behavior Changes
|
|
33
69
|
|
|
34
70
|
* Feature Store: `register_feature_view` now records `FV_SOURCE_REFS` metadata for managed batch
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: snowflake-ml-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.54.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:
|
|
@@ -416,7 +416,39 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
416
416
|
|
|
417
417
|
# Release History
|
|
418
418
|
|
|
419
|
-
## 1.
|
|
419
|
+
## 1.54.0
|
|
420
|
+
|
|
421
|
+
### New Features
|
|
422
|
+
|
|
423
|
+
* Registry: `log_model(..., options={"case_sensitive": True})` and
|
|
424
|
+
`options={"max_batch_size": N}` apply those settings to all methods. Per-method
|
|
425
|
+
`method_options` still override the global values.
|
|
426
|
+
|
|
427
|
+
* Feature Store: `create_online_service` accepts a `size` kwarg naming the size to provision the Online
|
|
428
|
+
Service at, one of `"XS"`, `"S"`, `"M"`, `"L"`, `"XL"`, `"2XL"`, `"3XL"` (case-insensitive). When
|
|
429
|
+
omitted, the server-side default applies; accounts that cap the available size provision at their
|
|
430
|
+
cap. `get_online_service_status()` now reports the provisioned `size`, which is `None` for services
|
|
431
|
+
created before sizes were recorded.
|
|
432
|
+
|
|
433
|
+
* Experiment Tracking: Source provenance now also records the id of the enclosing ML job when a run is created from
|
|
434
|
+
inside one.
|
|
435
|
+
|
|
436
|
+
### Bug Fixes
|
|
437
|
+
|
|
438
|
+
* Feature Store: Feature View metadata tags carrying unknown keys (including a legacy `refresh_mode`)
|
|
439
|
+
no longer fail to deserialize; unknown keys are ignored on read and the tag still does not persist
|
|
440
|
+
`refresh_mode`.
|
|
441
|
+
* Registry: Fixed `ModelVersion.load()` failing with `ValueError: ... is not a valid SQL identifier`
|
|
442
|
+
when the model's owner role is a quoted identifier.
|
|
443
|
+
* Feature Store: Fixed FeatureStore.update_feature_view() failing with `SQL compilation error:
|
|
444
|
+
invalid value 'ADAPTIVE' for property 'REFRESH_MODE'` when enabling online storage for an existing
|
|
445
|
+
feature view.
|
|
446
|
+
|
|
447
|
+
### Behavior Changes
|
|
448
|
+
|
|
449
|
+
### Deprecations
|
|
450
|
+
|
|
451
|
+
## 1.53.0 (2026-08-24)
|
|
420
452
|
|
|
421
453
|
### New Features
|
|
422
454
|
|
|
@@ -445,6 +477,10 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
|
|
|
445
477
|
|
|
446
478
|
### Bug Fixes
|
|
447
479
|
|
|
480
|
+
* Feature Store: online feature reads and stream ingestion no longer fail while the Online Service is
|
|
481
|
+
changing size (status `UPDATING_SIZE`). The service serves reads and writes throughout a size
|
|
482
|
+
change, which can take hours, so it is now treated as serviceable like `UPDATING` already was.
|
|
483
|
+
|
|
448
484
|
### Behavior Changes
|
|
449
485
|
|
|
450
486
|
* Feature Store: `register_feature_view` now records `FV_SOURCE_REFS` metadata for managed batch
|
{snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/env_utils.py
RENAMED
|
@@ -689,22 +689,30 @@ def save_requirements_file(
|
|
|
689
689
|
path: pathlib.Path,
|
|
690
690
|
pip_deps: list[requirements.Requirement],
|
|
691
691
|
cuda_version: Optional[str] = None,
|
|
692
|
-
) ->
|
|
692
|
+
) -> list[str]:
|
|
693
693
|
"""Generate Python requirements.txt file in the given directory path.
|
|
694
694
|
|
|
695
695
|
Args:
|
|
696
696
|
path: Path to the requirements.txt file.
|
|
697
697
|
pip_deps: List of dependencies after validation.
|
|
698
698
|
cuda_version: Optional CUDA version for GPU models. If provided and torch is in
|
|
699
|
-
dependencies,
|
|
699
|
+
dependencies, pins torch to CUDA variant.
|
|
700
|
+
|
|
701
|
+
Returns:
|
|
702
|
+
List of extra pip index URLs (e.g. ``["https://download.pytorch.org/whl/cu124"]``)
|
|
703
|
+
that were NOT written to requirements.txt because SPCS rejects non-PEP-508 lines.
|
|
704
|
+
Callers should persist these via model metadata so the build step can apply them.
|
|
700
705
|
"""
|
|
701
706
|
assert path.suffix in [".txt"], "PIP requirement file should have extension of txt."
|
|
702
707
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
703
708
|
|
|
704
709
|
lines: list[str] = []
|
|
710
|
+
pip_extra_index_urls: list[str] = []
|
|
705
711
|
|
|
706
712
|
if cuda_version and _has_torch_dependency(pip_deps):
|
|
707
|
-
|
|
713
|
+
# Strip the "--extra-index-url " prefix to store just the URL.
|
|
714
|
+
raw = _get_pytorch_cuda_index_url(cuda_version)
|
|
715
|
+
pip_extra_index_urls.append(raw.removeprefix("--extra-index-url "))
|
|
708
716
|
pip_deps = _pin_torch_to_cuda_variant(pip_deps, cuda_version)
|
|
709
717
|
|
|
710
718
|
lines.extend(map(str, pip_deps))
|
|
@@ -712,6 +720,8 @@ def save_requirements_file(
|
|
|
712
720
|
with open(path, "w", encoding="utf-8") as out:
|
|
713
721
|
out.write("\n".join(lines))
|
|
714
722
|
|
|
723
|
+
return pip_extra_index_urls
|
|
724
|
+
|
|
715
725
|
|
|
716
726
|
def load_conda_env_file(
|
|
717
727
|
path: pathlib.Path,
|
|
@@ -84,7 +84,7 @@ class PlatformCapabilities:
|
|
|
84
84
|
return self._get_bool_feature(LIVE_COMMIT_PARAMETER, False)
|
|
85
85
|
|
|
86
86
|
def is_hidden_live_commit_enabled(self) -> bool:
|
|
87
|
-
return False
|
|
87
|
+
return self._get_bool_feature(HIDDEN_LIVE_COMMIT_PARAMETER, False)
|
|
88
88
|
|
|
89
89
|
def is_model_method_signature_parameters_enabled(self) -> bool:
|
|
90
90
|
return self._get_bool_feature(ENABLE_MODEL_METHOD_SIGNATURE_PARAMETERS, False)
|
{snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/telemetry.py
RENAMED
|
@@ -9,7 +9,8 @@ import sys
|
|
|
9
9
|
import time
|
|
10
10
|
import traceback
|
|
11
11
|
import types
|
|
12
|
-
from
|
|
12
|
+
from collections.abc import Iterable, Mapping
|
|
13
|
+
from typing import Any, Callable, Optional, TypeVar, Union, cast
|
|
13
14
|
|
|
14
15
|
from typing_extensions import ParamSpec
|
|
15
16
|
|
|
@@ -119,6 +120,7 @@ class TelemetryField(enum.Enum):
|
|
|
119
120
|
TYPE_FUNCTION_USAGE = "function_usage"
|
|
120
121
|
TYPE_SNOWML_SPCS_USAGE = "snowml_spcs_usage"
|
|
121
122
|
TYPE_SNOWML_PIPELINE_USAGE = "snowml_pipeline_usage"
|
|
123
|
+
TYPE_SNOWML_LOADED_MODEL_USAGE = "snowml_loaded_model_usage"
|
|
122
124
|
# message keys for telemetry
|
|
123
125
|
KEY_PROJECT = "project"
|
|
124
126
|
KEY_SUBPROJECT = "subproject"
|
|
@@ -717,6 +719,12 @@ def _extract_arg_value(field: str, sig: inspect.Signature, args: Any, kwargs: An
|
|
|
717
719
|
Tuple: First value indicates if `field` exists.
|
|
718
720
|
Second value is the extracted value if existed.
|
|
719
721
|
"""
|
|
722
|
+
# Check keyword arguments first. The field may have no named parameter of its own and instead be
|
|
723
|
+
# absorbed by a variadic keyword parameter (**kwargs), in which case the signature lookup below
|
|
724
|
+
# would not find it even though the caller passed a value.
|
|
725
|
+
if field in kwargs:
|
|
726
|
+
return True, kwargs[field]
|
|
727
|
+
|
|
720
728
|
if field not in sig.parameters:
|
|
721
729
|
return False, None
|
|
722
730
|
|
|
@@ -729,10 +737,6 @@ def _extract_arg_value(field: str, sig: inspect.Signature, args: Any, kwargs: An
|
|
|
729
737
|
if idx < len(args):
|
|
730
738
|
return True, args[idx]
|
|
731
739
|
|
|
732
|
-
# Check if value was passed as keyword argument
|
|
733
|
-
if field in kwargs:
|
|
734
|
-
return True, kwargs[field]
|
|
735
|
-
|
|
736
740
|
# Fall back to default value if available
|
|
737
741
|
if param.default is not inspect.Parameter.empty:
|
|
738
742
|
return True, param.default
|
{snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_source_info.py
RENAMED
|
@@ -44,6 +44,11 @@ _SNOWFLAKE_FILE_DOMAIN_TYPE_ENV = "SNOWFLAKE_FILE_DOMAIN_TYPE"
|
|
|
44
44
|
_SNOWFLAKE_FILE_DOMAIN_NAME_ENV = "SNOWFLAKE_FILE_DOMAIN_NAME"
|
|
45
45
|
_SNOWFLAKE_MAIN_FILE_PATH_ENV = "SNOWFLAKE_MAIN_FILE_PATH"
|
|
46
46
|
|
|
47
|
+
# Environment variable Snowflake injects into an ML job's container, carrying the
|
|
48
|
+
# job's fully-qualified id. Its presence is how we recognize that the run was
|
|
49
|
+
# created from inside an ML job.
|
|
50
|
+
_ML_JOB_ID_ENV = "MLRS_JOB_ID"
|
|
51
|
+
|
|
47
52
|
|
|
48
53
|
@dataclasses.dataclass(frozen=True)
|
|
49
54
|
class GitInfo:
|
|
@@ -72,6 +77,9 @@ class SourceInfo:
|
|
|
72
77
|
# ``entry_point``, not duplicated here.
|
|
73
78
|
snowflake_file_domain_type: Optional[str] = None
|
|
74
79
|
snowflake_file_domain_name: Optional[str] = None
|
|
80
|
+
# The fully-qualified id of the ML job this run was created from, taken from
|
|
81
|
+
# the environment. ``None`` when not running inside an ML job.
|
|
82
|
+
ml_job_id: Optional[str] = None
|
|
75
83
|
|
|
76
84
|
def is_empty(self) -> bool:
|
|
77
85
|
"""Return True when there is nothing useful to send."""
|
|
@@ -80,6 +88,7 @@ class SourceInfo:
|
|
|
80
88
|
and (self.git is None or self.git.is_empty())
|
|
81
89
|
and self.snowflake_file_domain_type is None
|
|
82
90
|
and self.snowflake_file_domain_name is None
|
|
91
|
+
and self.ml_job_id is None
|
|
83
92
|
)
|
|
84
93
|
|
|
85
94
|
def to_json_dict(self) -> dict[str, Any]:
|
|
@@ -92,8 +101,9 @@ class SourceInfo:
|
|
|
92
101
|
|
|
93
102
|
Returns:
|
|
94
103
|
A JSON-serializable dict whose keys (``entry_point``, ``git``,
|
|
95
|
-
``snowflake_file_domain_type``, ``snowflake_file_domain_name
|
|
96
|
-
included only when resolved. May be empty when
|
|
104
|
+
``snowflake_file_domain_type``, ``snowflake_file_domain_name``,
|
|
105
|
+
``ml_job_id``) are included only when resolved. May be empty when
|
|
106
|
+
nothing was collected.
|
|
97
107
|
"""
|
|
98
108
|
out: dict[str, Any] = {}
|
|
99
109
|
if self.entry_point is not None and "$$" not in self.entry_point:
|
|
@@ -110,6 +120,8 @@ class SourceInfo:
|
|
|
110
120
|
out["snowflake_file_domain_type"] = self.snowflake_file_domain_type
|
|
111
121
|
if self.snowflake_file_domain_name is not None and "$$" not in self.snowflake_file_domain_name:
|
|
112
122
|
out["snowflake_file_domain_name"] = self.snowflake_file_domain_name
|
|
123
|
+
if self.ml_job_id is not None and "$$" not in self.ml_job_id:
|
|
124
|
+
out["ml_job_id"] = self.ml_job_id
|
|
113
125
|
return out
|
|
114
126
|
|
|
115
127
|
@classmethod
|
|
@@ -121,24 +133,39 @@ class SourceInfo:
|
|
|
121
133
|
be resolved or collection failed.
|
|
122
134
|
"""
|
|
123
135
|
try:
|
|
136
|
+
# An ML job id is orthogonal to how the entry point is described, so
|
|
137
|
+
# it is resolved once and attached to whichever shape is returned.
|
|
138
|
+
ml_job_id = _collect_ml_job_id()
|
|
139
|
+
|
|
124
140
|
# Snowflake-managed files (notebooks or .py workspace files) describe
|
|
125
141
|
# the running file via environment variables rather than a resolvable
|
|
126
142
|
# local path, so they are handled first and independently of the
|
|
127
143
|
# git/notebook-path machinery.
|
|
128
144
|
snowflake_file = _collect_snowflake_file()
|
|
129
145
|
if snowflake_file is not None:
|
|
130
|
-
return snowflake_file
|
|
146
|
+
return dataclasses.replace(snowflake_file, ml_job_id=ml_job_id)
|
|
131
147
|
|
|
132
148
|
# Resolve the notebook once so entry-point and git agree on the same file.
|
|
133
149
|
notebook_path = _resolve_notebook_path() if _in_ipython_kernel() else None
|
|
134
150
|
return cls(
|
|
135
151
|
entry_point=_detect_entry_point(notebook_path),
|
|
136
152
|
git=_collect_git(notebook_path),
|
|
153
|
+
ml_job_id=ml_job_id,
|
|
137
154
|
)
|
|
138
155
|
except Exception:
|
|
139
156
|
return cls()
|
|
140
157
|
|
|
141
158
|
|
|
159
|
+
def _collect_ml_job_id() -> Optional[str]:
|
|
160
|
+
"""Collect the fully-qualified id of the enclosing ML job.
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
The ML job id from the environment, or ``None`` when not running inside
|
|
164
|
+
an ML job (or when the server does not expose the id).
|
|
165
|
+
"""
|
|
166
|
+
return os.environ.get(_ML_JOB_ID_ENV) or None
|
|
167
|
+
|
|
168
|
+
|
|
142
169
|
def _collect_snowflake_file() -> Optional[SourceInfo]:
|
|
143
170
|
"""Collect source info when running inside a Snowflake-managed file.
|
|
144
171
|
|
|
@@ -63,9 +63,10 @@ class ExperimentTracking:
|
|
|
63
63
|
schema_name: The name of the schema. If None, the current schema of the session
|
|
64
64
|
will be used. If there is no active schema, the PUBLIC schema will be used. Defaults to None.
|
|
65
65
|
capture_source_info: If True, each new run records best-effort source provenance — the
|
|
66
|
-
entry-point filename
|
|
67
|
-
|
|
68
|
-
run creation. Defaults to
|
|
66
|
+
entry-point filename, any surrounding git commit, branch, and remote URL, and the id
|
|
67
|
+
of the enclosing ML job when running inside one. Set to False to skip collection
|
|
68
|
+
entirely. Collection is always non-fatal and never blocks run creation. Defaults to
|
|
69
|
+
True.
|
|
69
70
|
|
|
70
71
|
Raises:
|
|
71
72
|
ValueError: If no database is provided and no active database exists in the session.
|
{snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/aggregation.py
RENAMED
|
@@ -33,6 +33,12 @@ class AggregationType(Enum):
|
|
|
33
33
|
- Sketch aggregations (APPROX_COUNT_DISTINCT, APPROX_PERCENTILE): Stored as mergeable state in tiles
|
|
34
34
|
- List aggregations (LAST_N, LAST_DISTINCT_N, FIRST_N, FIRST_DISTINCT_N): Stored as arrays in tiles
|
|
35
35
|
- Secondary-key array (_SECONDARY_KEY_ARRAY): Internal-only ARRAY_AGG of the secondary-key column
|
|
36
|
+
|
|
37
|
+
Each value is the short function token used in the imperative metadata
|
|
38
|
+
tag / FeatureView JSON and in auto-generated output column names. Snowflake
|
|
39
|
+
``DESCRIBE ... TYPE = SPECIFICATION`` reports its own SQL spelling for some
|
|
40
|
+
functions (e.g. ``stddev`` for ``STD``); the declarative layer reconciles
|
|
41
|
+
that spelling on read/hash rather than changing these values.
|
|
36
42
|
"""
|
|
37
43
|
|
|
38
44
|
SUM = "sum"
|
|
@@ -50,6 +56,25 @@ class AggregationType(Enum):
|
|
|
50
56
|
FIRST_DISTINCT_N = "first_distinct_n"
|
|
51
57
|
_SECONDARY_KEY_ARRAY = "secondary_key_array"
|
|
52
58
|
|
|
59
|
+
@classmethod
|
|
60
|
+
def _missing_(cls, value: object) -> AggregationType | None:
|
|
61
|
+
"""Accept Snowflake's SPECIFICATION spelling ``stddev`` as ``STD``.
|
|
62
|
+
|
|
63
|
+
The imperative wire token stays ``"std"``; ``DESCRIBE ... TYPE =
|
|
64
|
+
SPECIFICATION`` reports ``"stddev"`` for the same function, so reads of
|
|
65
|
+
the applied spec must resolve that spelling back to ``STD``.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
value: The raw value that failed direct enum lookup.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
``STD`` when ``value`` is the string ``"stddev"`` (case-insensitive),
|
|
72
|
+
otherwise ``None`` to preserve the standard ``ValueError``.
|
|
73
|
+
"""
|
|
74
|
+
if isinstance(value, str) and value.lower() == "stddev":
|
|
75
|
+
return cls.STD
|
|
76
|
+
return None
|
|
77
|
+
|
|
53
78
|
def is_simple(self) -> bool:
|
|
54
79
|
"""Check if this is a simple aggregation (scalar result per tile).
|
|
55
80
|
|
|
@@ -223,7 +248,7 @@ class AggregationSpec:
|
|
|
223
248
|
AggregationType.VAR,
|
|
224
249
|
)
|
|
225
250
|
if self.function not in supported_lifetime_types:
|
|
226
|
-
supported_names = ", ".join(t.
|
|
251
|
+
supported_names = ", ".join(t.name for t in supported_lifetime_types)
|
|
227
252
|
raise ValueError(
|
|
228
253
|
f"Lifetime window is not supported for {self.function.value} aggregation "
|
|
229
254
|
f"'{self.output_column}'. Lifetime is only supported for: {supported_names}."
|
|
@@ -1298,24 +1298,33 @@ class FeatureStore:
|
|
|
1298
1298
|
created_resources=created_resources,
|
|
1299
1299
|
)
|
|
1300
1300
|
|
|
1301
|
-
# Step 3: Save aggregation metadata for tiled feature views (atomically)
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
feature_view.
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1301
|
+
# Step 3: Save aggregation metadata for tiled feature views (atomically),
|
|
1302
|
+
# and also for non-tiled advanced BFVs that carry aggregation_secondary_keys
|
|
1303
|
+
# so get_feature_view() can restore them without re-deriving from the DT.
|
|
1304
|
+
if feature_view.is_tiled or feature_view.aggregation_secondary_keys:
|
|
1305
|
+
if feature_view.is_tiled:
|
|
1306
|
+
agg_metadata = AggregationMetadata(
|
|
1307
|
+
feature_granularity=feature_view.feature_granularity,
|
|
1308
|
+
features=feature_view.aggregation_specs,
|
|
1309
|
+
feature_aggregation_method=(
|
|
1310
|
+
feature_view.feature_aggregation_method.value
|
|
1311
|
+
if feature_view.feature_aggregation_method is not None
|
|
1312
|
+
else None
|
|
1313
|
+
),
|
|
1314
|
+
# Stored in FEATURE_SPECS so ``get_feature_view``
|
|
1315
|
+
# reconstructs the exact secondary key order registered.
|
|
1316
|
+
aggregation_secondary_keys=(
|
|
1317
|
+
list(feature_view.aggregation_secondary_keys)
|
|
1318
|
+
if feature_view.aggregation_secondary_keys
|
|
1319
|
+
else None
|
|
1320
|
+
),
|
|
1321
|
+
)
|
|
1322
|
+
else:
|
|
1323
|
+
# Non-tiled advanced BFV: persist only secondary keys.
|
|
1324
|
+
# feature_granularity and features stay None so that
|
|
1325
|
+
# get_feature_view() correctly reconstructs is_tiled=False.
|
|
1326
|
+
sk = list(feature_view.aggregation_secondary_keys) # type: ignore[arg-type]
|
|
1327
|
+
agg_metadata = AggregationMetadata(aggregation_secondary_keys=sk)
|
|
1319
1328
|
# Convert SqlIdentifier keys to strings if descriptions exist
|
|
1320
1329
|
descs = None
|
|
1321
1330
|
if feature_view.feature_descs:
|
|
@@ -2203,7 +2212,9 @@ class FeatureStore:
|
|
|
2203
2212
|
)
|
|
2204
2213
|
|
|
2205
2214
|
@dispatch_decorator()
|
|
2206
|
-
def create_online_service(
|
|
2215
|
+
def create_online_service(
|
|
2216
|
+
self, producer_role: str, consumer_role: str, *, size: Optional[str] = None
|
|
2217
|
+
) -> online_service.OnlineServiceResult:
|
|
2207
2218
|
"""Create the Online Service for this store's schema.
|
|
2208
2219
|
|
|
2209
2220
|
Requires schema OWNERSHIP and account feature enablement. After SUCCESS, poll
|
|
@@ -2213,6 +2224,10 @@ class FeatureStore:
|
|
|
2213
2224
|
Args:
|
|
2214
2225
|
producer_role: Role name granted producer privileges on the Online Service.
|
|
2215
2226
|
consumer_role: Role name granted consumer privileges on the Online Service.
|
|
2227
|
+
size: Size to provision the Online Service at, one of ``"XS"``, ``"S"``, ``"M"``,
|
|
2228
|
+
``"L"``, ``"XL"``, ``"2XL"``, ``"3XL"`` (case-insensitive). Defaults to the
|
|
2229
|
+
server-side default when omitted. Accounts that cap the available size
|
|
2230
|
+
provision at their cap instead.
|
|
2216
2231
|
|
|
2217
2232
|
Returns:
|
|
2218
2233
|
Parsed create result from the Online Service.
|
|
@@ -2223,6 +2238,7 @@ class FeatureStore:
|
|
|
2223
2238
|
self._config.schema,
|
|
2224
2239
|
producer_role,
|
|
2225
2240
|
consumer_role,
|
|
2241
|
+
size=size,
|
|
2226
2242
|
statement_params=self._telemetry_stmp,
|
|
2227
2243
|
)
|
|
2228
2244
|
|
|
@@ -2234,7 +2250,7 @@ class FeatureStore:
|
|
|
2234
2250
|
``RUNNING`` before using online feature reads or stream ingestion.
|
|
2235
2251
|
|
|
2236
2252
|
Returns:
|
|
2237
|
-
OnlineServiceStatus with ``status``, ``message``, and ``
|
|
2253
|
+
OnlineServiceStatus with ``status``, ``message``, ``endpoints``, and ``size``.
|
|
2238
2254
|
"""
|
|
2239
2255
|
return online_service.get_online_service_status(
|
|
2240
2256
|
self._session,
|
|
@@ -6903,7 +6919,9 @@ END;"""
|
|
|
6903
6919
|
feature_view: FeatureView,
|
|
6904
6920
|
tagging_clause_str: str,
|
|
6905
6921
|
) -> str:
|
|
6906
|
-
|
|
6922
|
+
# Include column definitions only if provided (empty when feature_descs is None).
|
|
6923
|
+
col_clause = f" ({column_descs})" if column_descs else ""
|
|
6924
|
+
return f"""CREATE{overwrite_clause} VIEW {view_name}{col_clause}
|
|
6907
6925
|
COMMENT = {_sql_string_literal(feature_view.desc)}
|
|
6908
6926
|
TAG (
|
|
6909
6927
|
{tagging_clause_str}
|
|
@@ -8058,6 +8076,14 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
8058
8076
|
if target_lag == "DOWNSTREAM":
|
|
8059
8077
|
target_lag = self._resolve_task_schedule(FeatureView._get_physical_name(name, version), target_lag)
|
|
8060
8078
|
values.append(target_lag)
|
|
8079
|
+
# ``refresh_mode`` is the Snowflake-resolved value from the deployed
|
|
8080
|
+
# Dynamic Table (``SHOW DYNAMIC TABLES.refresh_mode`` surfaces
|
|
8081
|
+
# ``INCREMENTAL`` / ``FULL`` after ``AUTO`` is resolved). The
|
|
8082
|
+
# imperative API returns this resolved value to all callers; it is
|
|
8083
|
+
# not persisted on the metadata tag. The declarative round-trip
|
|
8084
|
+
# handles the authored-vs-resolved asymmetry in
|
|
8085
|
+
# ``decl/invariants._normalize_applied_bfv_for_hash`` rather than by
|
|
8086
|
+
# reading an authored value back here.
|
|
8061
8087
|
values.append(row["refresh_mode"] if "refresh_mode" in row else None)
|
|
8062
8088
|
values.append(row["scheduling_state"] if "scheduling_state" in row else None)
|
|
8063
8089
|
values.append(row["warehouse"] if "warehouse" in row else None)
|
|
@@ -8294,7 +8320,10 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
8294
8320
|
agg_metadata = self._metadata_manager.get_feature_specs(name.identifier(), version)
|
|
8295
8321
|
feature_granularity = agg_metadata.feature_granularity if agg_metadata else None
|
|
8296
8322
|
aggregation_specs = agg_metadata.features if agg_metadata else None
|
|
8297
|
-
|
|
8323
|
+
# Tiled iff a tile size was persisted. Null granularity is passthrough (SK-only).
|
|
8324
|
+
is_tiled = agg_metadata is not None and agg_metadata.feature_granularity is not None
|
|
8325
|
+
if not is_tiled:
|
|
8326
|
+
aggregation_specs = None # [] is not a tiled spec list
|
|
8298
8327
|
# Restored from the FEATURE_SPECS row; None when no tiling metadata.
|
|
8299
8328
|
aggregation_secondary_keys = agg_metadata.aggregation_secondary_keys if agg_metadata else None
|
|
8300
8329
|
# The persisted aggregation method must be known before _construct_feature_view runs
|
|
@@ -8575,6 +8604,29 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
8575
8604
|
descs[SqlIdentifier(r["name"], case_sensitive=True).identifier()] = r["comment"]
|
|
8576
8605
|
return descs
|
|
8577
8606
|
|
|
8607
|
+
_DT_TO_OFT_REFRESH_MODE = {
|
|
8608
|
+
"INCREMENTAL": "INCREMENTAL",
|
|
8609
|
+
"FULL": "FULL",
|
|
8610
|
+
"ADAPTIVE": "INCREMENTAL",
|
|
8611
|
+
}
|
|
8612
|
+
|
|
8613
|
+
@staticmethod
|
|
8614
|
+
def _dt_to_oft_refresh_mode(dt_refresh_mode: str) -> str:
|
|
8615
|
+
"""Map a resolved Dynamic Table refresh mode to an Online Feature Table refresh mode.
|
|
8616
|
+
|
|
8617
|
+
``ADAPTIVE`` is incrementalizable but is not a valid OFT ``REFRESH_MODE``.
|
|
8618
|
+
|
|
8619
|
+
Args:
|
|
8620
|
+
dt_refresh_mode: Resolved DT refresh mode (``INCREMENTAL``, ``FULL``, or ``ADAPTIVE``).
|
|
8621
|
+
|
|
8622
|
+
Returns:
|
|
8623
|
+
OFT refresh mode (``INCREMENTAL`` or ``FULL``).
|
|
8624
|
+
"""
|
|
8625
|
+
mapped = FeatureStore._DT_TO_OFT_REFRESH_MODE.get(dt_refresh_mode.upper())
|
|
8626
|
+
if mapped is None:
|
|
8627
|
+
return dt_refresh_mode
|
|
8628
|
+
return mapped
|
|
8629
|
+
|
|
8578
8630
|
def _tag_oft(self, fully_qualified_oft_name: str, obj_type: _FeatureStoreObjTypes) -> None:
|
|
8579
8631
|
"""Apply the FS object tag to a freshly-created OFT.
|
|
8580
8632
|
|
|
@@ -8672,7 +8724,8 @@ FROM {batch_cte_names[0]}{''.join(merge_join_parts)}
|
|
|
8672
8724
|
|
|
8673
8725
|
refresh_mode_clause = ""
|
|
8674
8726
|
if feature_view.refresh_mode:
|
|
8675
|
-
|
|
8727
|
+
oft_refresh_mode = self._dt_to_oft_refresh_mode(feature_view.refresh_mode)
|
|
8728
|
+
refresh_mode_clause = f"REFRESH_MODE='{oft_refresh_mode}'"
|
|
8676
8729
|
|
|
8677
8730
|
timestamp_clause = ""
|
|
8678
8731
|
if feature_view.timestamp_col:
|
{snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view.py
RENAMED
|
@@ -7,7 +7,7 @@ import json
|
|
|
7
7
|
import re
|
|
8
8
|
import warnings
|
|
9
9
|
from collections import OrderedDict
|
|
10
|
-
from dataclasses import asdict, dataclass
|
|
10
|
+
from dataclasses import asdict, dataclass, fields
|
|
11
11
|
from enum import Enum
|
|
12
12
|
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
13
13
|
|
|
@@ -410,21 +410,12 @@ class _FeatureViewMetadata:
|
|
|
410
410
|
@classmethod
|
|
411
411
|
def from_json(cls, json_str: str) -> _FeatureViewMetadata:
|
|
412
412
|
state_dict = json.loads(json_str)
|
|
413
|
-
#
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
#
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
# Backward compatibility: old FVs don't have is_rollup
|
|
420
|
-
if "is_rollup" not in state_dict:
|
|
421
|
-
state_dict["is_rollup"] = False
|
|
422
|
-
# Backward compatibility: old FVs don't have is_streaming
|
|
423
|
-
if "is_streaming" not in state_dict:
|
|
424
|
-
state_dict["is_streaming"] = False
|
|
425
|
-
if "is_append_only" not in state_dict:
|
|
426
|
-
state_dict["is_append_only"] = False
|
|
427
|
-
return cls(**state_dict)
|
|
413
|
+
# Drop keys that are not constructor fields so a tag written by a
|
|
414
|
+
# different SDK version (carrying keys this one does not know) does not
|
|
415
|
+
# raise ``TypeError``. Optional fields omitted by older tags fall back
|
|
416
|
+
# to their dataclass defaults.
|
|
417
|
+
known_fields = {f.name for f in fields(cls)}
|
|
418
|
+
return cls(**{k: v for k, v in state_dict.items() if k in known_fields})
|
|
428
419
|
|
|
429
420
|
|
|
430
421
|
@dataclass(frozen=True)
|
|
@@ -2147,6 +2138,22 @@ Got {len(self._feature_df.queries['queries'])}: {self._feature_df.queries['queri
|
|
|
2147
2138
|
"timestamp_col is required for tile-based aggregations. "
|
|
2148
2139
|
"Specify the timestamp column used for time-series lookups."
|
|
2149
2140
|
)
|
|
2141
|
+
# refresh_freq is the OFFLINE object's cadence: it drives the
|
|
2142
|
+
# CREATE DYNAMIC TABLE … TARGET_LAG clause over the tiling
|
|
2143
|
+
# query (_get_tile_query). Every tiled FV — batch AND
|
|
2144
|
+
# streaming — must be a managed Dynamic Table so the
|
|
2145
|
+
# pre-computed partial aggregates exist for the merge-at-read
|
|
2146
|
+
# path. Without refresh_freq the register flow falls to
|
|
2147
|
+
# _create_offline_feature_view_view_query and builds a plain
|
|
2148
|
+
# VIEW over the untiled source query (empty column list) — no
|
|
2149
|
+
# tiles. The VIEW path is only correct for non-tiled streaming
|
|
2150
|
+
# FVs.
|
|
2151
|
+
#
|
|
2152
|
+
# This is independent of the Online Feature Table's TARGET_LAG,
|
|
2153
|
+
# which is "0 seconds" for every streaming kind because data
|
|
2154
|
+
# lands via the ingest path (stream source -> UDF transform ->
|
|
2155
|
+
# spec-backed OFT) as soon as it is available. A zero OFT lag
|
|
2156
|
+
# is not a reason to skip the offline tile Dynamic Table.
|
|
2150
2157
|
if self._refresh_freq is None:
|
|
2151
2158
|
raise ValueError(
|
|
2152
2159
|
"refresh_freq is required for tile-based aggregations. "
|
|
@@ -2166,12 +2173,7 @@ Got {len(self._feature_df.queries['queries'])}: {self._feature_df.queries['queri
|
|
|
2166
2173
|
# Validate Iceberg storage configuration
|
|
2167
2174
|
if self._storage_config is not None and self._storage_config.format == StorageFormat.ICEBERG:
|
|
2168
2175
|
if self.online:
|
|
2169
|
-
|
|
2170
|
-
if store_type != OnlineStoreType.POSTGRES:
|
|
2171
|
-
raise ValueError(
|
|
2172
|
-
"Online storage with Iceberg is only supported with the Postgres online store. "
|
|
2173
|
-
"Use OnlineConfig(store_type=OnlineStoreType.POSTGRES)."
|
|
2174
|
-
)
|
|
2176
|
+
raise ValueError("Online storage is not supported with Iceberg.")
|
|
2175
2177
|
if self._refresh_freq is None:
|
|
2176
2178
|
raise ValueError("Iceberg storage requires refresh_freq.")
|
|
2177
2179
|
|
|
@@ -85,18 +85,32 @@ class FeatureViewMetadataConfig:
|
|
|
85
85
|
|
|
86
86
|
@dataclass
|
|
87
87
|
class AggregationMetadata:
|
|
88
|
-
"""Aggregation configuration for tiled feature views.
|
|
88
|
+
"""Aggregation configuration for tiled feature views.
|
|
89
|
+
|
|
90
|
+
``aggregation_secondary_keys`` was promoted from a tiling-time-only
|
|
91
|
+
detail to authoritative metadata so the applied-state recovery path
|
|
92
|
+
can rehydrate it without re-deriving from the synthesized
|
|
93
|
+
``_SECONDARY_KEY_ARRAY`` aggregation specs (which is lossy on the
|
|
94
|
+
ordering boundary and forced an UPDATE_FV on round-trip). See plan
|
|
95
|
+
section A2.
|
|
96
|
+
|
|
97
|
+
Non-tiled BFVs that only carry ``aggregation_secondary_keys`` have
|
|
98
|
+
``feature_granularity`` and ``features`` set to None. They still serialize
|
|
99
|
+
both keys (as null and []) so older clients can read the row, and a null
|
|
100
|
+
``feature_granularity`` marks the row as passthrough on read.
|
|
101
|
+
"""
|
|
89
102
|
|
|
90
|
-
feature_granularity: str
|
|
91
|
-
features: list[AggregationSpec]
|
|
103
|
+
feature_granularity: Optional[str] = None
|
|
104
|
+
features: Optional[list[AggregationSpec]] = None
|
|
92
105
|
feature_aggregation_method: Optional[str] = None
|
|
93
106
|
aggregation_secondary_keys: Optional[list[str]] = None
|
|
94
107
|
|
|
95
108
|
def to_dict(self) -> dict[str, Any]:
|
|
96
109
|
"""Convert to dictionary for JSON serialization."""
|
|
110
|
+
# Always emit keys so older from_dict can parse SK-only rows.
|
|
97
111
|
d: dict[str, Any] = {
|
|
98
112
|
"feature_granularity": self.feature_granularity,
|
|
99
|
-
"features": [f.to_dict() for f in self.features],
|
|
113
|
+
"features": [f.to_dict() for f in (self.features or [])],
|
|
100
114
|
}
|
|
101
115
|
if self.feature_aggregation_method is not None:
|
|
102
116
|
d["feature_aggregation_method"] = self.feature_aggregation_method
|
|
@@ -108,9 +122,10 @@ class AggregationMetadata:
|
|
|
108
122
|
def from_dict(cls, data: dict[str, Any]) -> AggregationMetadata:
|
|
109
123
|
"""Create from dictionary."""
|
|
110
124
|
raw_secondary_keys = data.get("aggregation_secondary_keys")
|
|
125
|
+
raw_features = data.get("features")
|
|
111
126
|
return cls(
|
|
112
|
-
feature_granularity=data
|
|
113
|
-
features=[AggregationSpec.from_dict(f) for f in
|
|
127
|
+
feature_granularity=data.get("feature_granularity"),
|
|
128
|
+
features=[AggregationSpec.from_dict(f) for f in raw_features] if raw_features is not None else None,
|
|
114
129
|
feature_aggregation_method=data.get("feature_aggregation_method"),
|
|
115
130
|
aggregation_secondary_keys=list(raw_secondary_keys) if raw_secondary_keys is not None else None,
|
|
116
131
|
)
|