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.
Files changed (552) hide show
  1. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/CHANGELOG.md +37 -1
  2. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/PKG-INFO +38 -2
  3. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/env_utils.py +13 -3
  4. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/platform_capabilities.py +1 -1
  5. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/telemetry.py +9 -5
  6. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_source_info.py +30 -3
  7. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/experiment_tracking.py +4 -3
  8. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/aggregation.py +26 -1
  9. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_store.py +76 -23
  10. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view.py +24 -22
  11. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/metadata_manager.py +21 -6
  12. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/online_service.py +38 -14
  13. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/stream_config.py +10 -3
  14. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/streaming_registration.py +42 -4
  15. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/results.py +2 -5
  16. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/job.py +67 -62
  17. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/job_definition.py +5 -1
  18. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/manager.py +2 -1
  19. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/__init__.py +2 -0
  20. snowflake_ml_python-1.54.0/snowflake/ml/model/_client/model/_loaded_model_telemetry.py +152 -0
  21. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/model_version_impl.py +10 -3
  22. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/model_ops.py +1 -1
  23. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/function_generator.py +6 -1
  24. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/model_method.py +8 -2
  25. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/utils.py +14 -4
  26. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_env/model_env.py +4 -1
  27. snowflake_ml_python-1.54.0/snowflake/ml/model/_packager/model_handlers/peft_adapter.py +224 -0
  28. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_meta.py +17 -5
  29. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_meta_schema.py +11 -0
  30. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_packager.py +12 -8
  31. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_save_options.py +1 -0
  32. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/models/huggingface.py +88 -1
  33. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/type_hints.py +22 -0
  34. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/volatility.py +1 -0
  35. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/_manager/model_manager.py +90 -3
  36. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/registry.py +14 -0
  37. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/version.py +1 -1
  38. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/PKG-INFO +38 -2
  39. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/SOURCES.txt +2 -0
  40. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/LICENSE.txt +0 -0
  41. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/README.md +0 -0
  42. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/pyproject.toml +0 -0
  43. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/setup.cfg +0 -0
  44. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/__init__.py +0 -0
  45. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_classify_text.py +0 -0
  46. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_complete.py +0 -0
  47. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_embed_text_1024.py +0 -0
  48. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_embed_text_768.py +0 -0
  49. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_extract_answer.py +0 -0
  50. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_finetune.py +0 -0
  51. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_sentiment.py +0 -0
  52. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_sse_client.py +0 -0
  53. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_summarize.py +0 -0
  54. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_translate.py +0 -0
  55. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/cortex/_util.py +0 -0
  56. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/env.py +0 -0
  57. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/dataset_error_messages.py +0 -0
  58. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/dataset_errors.py +0 -0
  59. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/error_codes.py +0 -0
  60. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/error_messages.py +0 -0
  61. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/exceptions.py +0 -0
  62. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/fileset_error_messages.py +0 -0
  63. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/fileset_errors.py +0 -0
  64. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/modeling_error_messages.py +0 -0
  65. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/exceptions/sql_error_codes.py +0 -0
  66. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/file_utils.py +0 -0
  67. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/adjectives.txt +0 -0
  68. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/animals.txt +0 -0
  69. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/hrid_generator.py +0 -0
  70. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/human_readable_id/hrid_generator_base.py +0 -0
  71. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/init_utils.py +0 -0
  72. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/lineage/lineage_utils.py +0 -0
  73. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/migrator_utils.py +0 -0
  74. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/relax_version_strategy.py +0 -0
  75. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/type_utils.py +0 -0
  76. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/connection_params.py +0 -0
  77. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/db_utils.py +0 -0
  78. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/formatting.py +0 -0
  79. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/identifier.py +0 -0
  80. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/import_utils.py +0 -0
  81. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/jwt_generator.py +0 -0
  82. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/mixins.py +0 -0
  83. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/parallelize.py +0 -0
  84. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/pkg_version_utils.py +0 -0
  85. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/query_result_checker.py +0 -0
  86. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/result.py +0 -0
  87. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/service_logger.py +0 -0
  88. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/snowflake_env.py +0 -0
  89. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/snowpark_dataframe_utils.py +0 -0
  90. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/sql_identifier.py +0 -0
  91. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/table_manager.py +0 -0
  92. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/tee.py +0 -0
  93. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/temp_file_utils.py +0 -0
  94. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/_internal/utils/url.py +0 -0
  95. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/__init__.py +0 -0
  96. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/_internal/arrow_ingestor.py +0 -0
  97. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/data_connector.py +0 -0
  98. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/data_ingestor.py +0 -0
  99. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/data_source.py +0 -0
  100. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/ingestor_utils.py +0 -0
  101. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/data/torch_utils.py +0 -0
  102. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/__init__.py +0 -0
  103. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset.py +0 -0
  104. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset_factory.py +0 -0
  105. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset_metadata.py +0 -0
  106. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/dataset/dataset_reader.py +0 -0
  107. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/__init__.py +0 -0
  108. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_client/artifact.py +0 -0
  109. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_client/experiment_tracking_sql_client.py +0 -0
  110. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/__init__.py +0 -0
  111. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/experiment.py +0 -0
  112. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/run.py +0 -0
  113. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_entities/run_metadata.py +0 -0
  114. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_experiment_info.py +0 -0
  115. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_logging/__init__.py +0 -0
  116. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_logging/experiment_logger.py +0 -0
  117. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/_logging/experiment_logging_context.py +0 -0
  118. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/callback/keras.py +0 -0
  119. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/callback/lightgbm.py +0 -0
  120. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/callback/xgboost.py +0 -0
  121. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/experiment/utils.py +0 -0
  122. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/__init__.py +0 -0
  123. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/_compute_fn_validation.py +0 -0
  124. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/access_manager.py +0 -0
  125. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/entity.py +0 -0
  126. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/airline_features/entities.py +0 -0
  127. {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
  128. {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
  129. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/airline_features/source.yaml +0 -0
  130. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/citibike_trip_features/entities.py +0 -0
  131. {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
  132. {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
  133. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/citibike_trip_features/source.yaml +0 -0
  134. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/example_helper.py +0 -0
  135. {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
  136. {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
  137. {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
  138. {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
  139. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/airline.yaml +0 -0
  140. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/citibike_trips.yaml +0 -0
  141. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/fraud_transactions.yaml +0 -0
  142. {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
  143. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/source_data/winequality_red.yaml +0 -0
  144. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/wine_quality_features/entities.py +0 -0
  145. {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
  146. {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
  147. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/examples/wine_quality_features/source.yaml +0 -0
  148. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature.py +1 -1
  149. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_group.py +0 -0
  150. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view_append_only_validation.py +0 -0
  151. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/feature_view_refresh_freq.py +0 -0
  152. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/interval_utils.py +0 -0
  153. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/online_service_http_client.py +0 -0
  154. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_config.py +0 -0
  155. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_dataset.py +0 -0
  156. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_dataset_udf.py +0 -0
  157. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/realtime_registration.py +0 -0
  158. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/request_source.py +0 -0
  159. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/__init__.py +0 -0
  160. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/builder.py +0 -0
  161. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/enums.py +0 -0
  162. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/models.py +0 -0
  163. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/spec/table_schema_evolution.py +0 -0
  164. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/stream_source.py +0 -0
  165. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/feature_store/tile_sql_generator.py +0 -0
  166. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/embedded_stage_fs.py +0 -0
  167. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/fileset.py +0 -0
  168. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/sfcfs.py +0 -0
  169. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/snowfs.py +0 -0
  170. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/fileset/stage_fs.py +0 -0
  171. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/__init__.py +0 -0
  172. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/__init__.py +0 -0
  173. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/data_utils.py +0 -0
  174. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/dto_schema.py +0 -0
  175. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/exception_utils.py +0 -0
  176. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/legacy.py +0 -0
  177. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/protocols.py +0 -0
  178. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_interop/utils.py +0 -0
  179. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/__init__.py +0 -0
  180. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/arg_protocol.py +0 -0
  181. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/constants.py +0 -0
  182. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/feature_flags.py +0 -0
  183. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/payload_utils.py +0 -0
  184. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/query_helper.py +0 -0
  185. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/runtime_env_utils.py +0 -0
  186. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/__init__.py +0 -0
  187. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/constants.py +0 -0
  188. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/get_instance_ip.py +0 -0
  189. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/mljob_launcher.py +0 -0
  190. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/signal_workers.py +0 -0
  191. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/start_mlruntime.sh +0 -0
  192. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/startup.sh +0 -0
  193. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/scripts/worker_shutdown_listener.py +0 -0
  194. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/stage_utils.py +0 -0
  195. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/_utils/type_utils.py +0 -0
  196. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/jobs/decorators.py +0 -0
  197. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/lineage/__init__.py +0 -0
  198. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/lineage/lineage_node.py +0 -0
  199. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_job_specs.py +0 -0
  200. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_serialization.py +0 -0
  201. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_specs.py +0 -0
  202. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_task.py +0 -0
  203. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/batch_inference_task_v2.py +0 -0
  204. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/inference_engine_utils.py +0 -0
  205. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/model/model_impl.py +0 -0
  206. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/deployment_step.py +0 -0
  207. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/live_commit_naming.py +0 -0
  208. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/metadata_ops.py +0 -0
  209. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/param_ops.py +0 -0
  210. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/param_utils.py +0 -0
  211. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/ops/service_ops.py +0 -0
  212. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/import_model_spec_schema.py +0 -0
  213. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/inference_job_service_spec.py +0 -0
  214. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/model_deployment_spec.py +0 -0
  215. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/service/model_deployment_spec_schema.py +0 -0
  216. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/_base.py +0 -0
  217. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/model.py +0 -0
  218. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/model_version.py +0 -0
  219. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/service.py +0 -0
  220. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/stage.py +0 -0
  221. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_client/sql/tag.py +0 -0
  222. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/huggingface_lazy_uploader.py +0 -0
  223. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_composer.py +0 -0
  224. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_manifest/model_manifest.py +0 -0
  225. {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
  226. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_model_composer/model_method/constants.py +0 -0
  227. {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
  228. {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
  229. {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
  230. {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
  231. {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
  232. {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
  233. {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
  234. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handler.py +0 -0
  235. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/_base.py +0 -0
  236. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/_utils.py +0 -0
  237. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/catboost.py +0 -0
  238. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/custom.py +0 -0
  239. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/__init__.py +0 -0
  240. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_default.py +0 -0
  241. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_handler.py +0 -0
  242. {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
  243. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_task_handler.py +0 -0
  244. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/_utils.py +0 -0
  245. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/audio_classification.py +0 -0
  246. {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
  247. {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
  248. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/conversational.py +0 -0
  249. {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
  250. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/fill_mask.py +0 -0
  251. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/image_classification.py +0 -0
  252. {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
  253. {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
  254. {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
  255. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/object_detection.py +0 -0
  256. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/question_answering.py +0 -0
  257. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/summarization.py +0 -0
  258. {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
  259. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text2text_generation.py +0 -0
  260. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_classification.py +0 -0
  261. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/text_generation.py +0 -0
  262. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/token_classification.py +0 -0
  263. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/translation.py +0 -0
  264. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/huggingface/video_classification.py +0 -0
  265. {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
  266. {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
  267. {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
  268. {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
  269. {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
  270. {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
  271. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/keras.py +0 -0
  272. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/lightgbm.py +0 -0
  273. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/mlflow.py +0 -0
  274. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/prophet.py +0 -0
  275. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/pytorch.py +0 -0
  276. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +0 -0
  277. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/sklearn.py +0 -0
  278. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/snowmlmodel.py +0 -0
  279. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/tensorflow.py +0 -0
  280. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/torchscript.py +0 -0
  281. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers/xgboost.py +0 -0
  282. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_handlers_migrator/base_migrator.py +0 -0
  283. {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
  284. {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
  285. {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
  286. {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
  287. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta/model_blob_meta.py +0 -0
  288. {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
  289. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta_migrator/base_migrator.py +0 -0
  290. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_plans.py +0 -0
  291. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_meta_migrator/migrator_v1.py +0 -0
  292. {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
  293. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_runtime/model_runtime.py +0 -0
  294. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_packager/model_task/model_task_utils.py +0 -0
  295. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/base_handler.py +0 -0
  296. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/builtins_handler.py +0 -0
  297. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/core.py +0 -0
  298. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/dmatrix_handler.py +0 -0
  299. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/numpy_handler.py +0 -0
  300. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/pandas_handler.py +0 -0
  301. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/pytorch_handler.py +0 -0
  302. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/snowpark_handler.py +0 -0
  303. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/tensorflow_handler.py +0 -0
  304. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/_signatures/utils.py +0 -0
  305. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/batch/__init__.py +0 -0
  306. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/batch_inference/__init__.py +0 -0
  307. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/code_path.py +0 -0
  308. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/compute_pool.py +0 -0
  309. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/custom_model.py +0 -0
  310. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/event_handler.py +0 -0
  311. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/inference_engine.py +0 -0
  312. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/model_signature.py +0 -0
  313. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/models/huggingface_pipeline.py +0 -0
  314. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/openai_signatures.py +0 -0
  315. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/target_platform.py +0 -0
  316. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/model/task.py +0 -0
  317. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/estimator_utils.py +0 -0
  318. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_handlers.py +0 -0
  319. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/local_implementations/pandas_trainer.py +0 -0
  320. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_specifications.py +0 -0
  321. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_trainer.py +0 -0
  322. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_trainer_builder.py +0 -0
  323. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/model_transformer_builder.py +0 -0
  324. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/distributed_hpo_trainer.py +0 -0
  325. {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
  326. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_handlers.py +0 -0
  327. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/snowpark_implementations/snowpark_trainer.py +0 -0
  328. {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
  329. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/_internal/transformer_protocols.py +0 -0
  330. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/calibration/__init__.py +0 -0
  331. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/calibration/calibrated_classifier_cv.py +0 -0
  332. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/__init__.py +0 -0
  333. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/affinity_propagation.py +0 -0
  334. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/agglomerative_clustering.py +0 -0
  335. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/birch.py +0 -0
  336. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/bisecting_k_means.py +0 -0
  337. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/dbscan.py +0 -0
  338. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/feature_agglomeration.py +0 -0
  339. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/k_means.py +0 -0
  340. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/mean_shift.py +0 -0
  341. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/mini_batch_k_means.py +0 -0
  342. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/optics.py +0 -0
  343. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/spectral_biclustering.py +0 -0
  344. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/spectral_clustering.py +0 -0
  345. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/cluster/spectral_coclustering.py +0 -0
  346. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/compose/__init__.py +0 -0
  347. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/compose/column_transformer.py +0 -0
  348. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/compose/transformed_target_regressor.py +0 -0
  349. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/__init__.py +0 -0
  350. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/elliptic_envelope.py +0 -0
  351. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/empirical_covariance.py +0 -0
  352. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/graphical_lasso.py +0 -0
  353. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/graphical_lasso_cv.py +0 -0
  354. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/ledoit_wolf.py +0 -0
  355. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/min_cov_det.py +0 -0
  356. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/oas.py +0 -0
  357. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/covariance/shrunk_covariance.py +0 -0
  358. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/__init__.py +0 -0
  359. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/dictionary_learning.py +0 -0
  360. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/factor_analysis.py +0 -0
  361. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/fast_ica.py +0 -0
  362. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/incremental_pca.py +0 -0
  363. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/kernel_pca.py +0 -0
  364. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/mini_batch_dictionary_learning.py +0 -0
  365. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/mini_batch_sparse_pca.py +0 -0
  366. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/pca.py +0 -0
  367. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/sparse_pca.py +0 -0
  368. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/decomposition/truncated_svd.py +0 -0
  369. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/discriminant_analysis/__init__.py +0 -0
  370. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/discriminant_analysis/linear_discriminant_analysis.py +0 -0
  371. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/discriminant_analysis/quadratic_discriminant_analysis.py +0 -0
  372. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/__init__.py +0 -0
  373. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/ada_boost_classifier.py +0 -0
  374. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/ada_boost_regressor.py +0 -0
  375. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/bagging_classifier.py +0 -0
  376. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/bagging_regressor.py +0 -0
  377. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/extra_trees_classifier.py +0 -0
  378. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/extra_trees_regressor.py +0 -0
  379. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/gradient_boosting_classifier.py +0 -0
  380. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/gradient_boosting_regressor.py +0 -0
  381. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_classifier.py +0 -0
  382. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/hist_gradient_boosting_regressor.py +0 -0
  383. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/isolation_forest.py +0 -0
  384. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/random_forest_classifier.py +0 -0
  385. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/random_forest_regressor.py +0 -0
  386. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/stacking_regressor.py +0 -0
  387. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/voting_classifier.py +0 -0
  388. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/ensemble/voting_regressor.py +0 -0
  389. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/__init__.py +0 -0
  390. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/generic_univariate_select.py +0 -0
  391. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_fdr.py +0 -0
  392. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_fpr.py +0 -0
  393. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_fwe.py +0 -0
  394. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_k_best.py +0 -0
  395. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/select_percentile.py +0 -0
  396. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/sequential_feature_selector.py +0 -0
  397. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/feature_selection/variance_threshold.py +0 -0
  398. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/framework/_utils.py +0 -0
  399. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/framework/base.py +0 -0
  400. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/gaussian_process/__init__.py +0 -0
  401. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_classifier.py +0 -0
  402. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/gaussian_process/gaussian_process_regressor.py +0 -0
  403. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/__init__.py +0 -0
  404. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/iterative_imputer.py +0 -0
  405. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/knn_imputer.py +0 -0
  406. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/missing_indicator.py +0 -0
  407. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/impute/simple_imputer.py +0 -0
  408. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/__init__.py +0 -0
  409. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/additive_chi2_sampler.py +0 -0
  410. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/nystroem.py +0 -0
  411. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/polynomial_count_sketch.py +0 -0
  412. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/rbf_sampler.py +0 -0
  413. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_approximation/skewed_chi2_sampler.py +0 -0
  414. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_ridge/__init__.py +0 -0
  415. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/kernel_ridge/kernel_ridge.py +0 -0
  416. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/lightgbm/__init__.py +0 -0
  417. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/lightgbm/lgbm_classifier.py +0 -0
  418. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/lightgbm/lgbm_regressor.py +0 -0
  419. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/__init__.py +0 -0
  420. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ard_regression.py +0 -0
  421. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/bayesian_ridge.py +0 -0
  422. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/elastic_net.py +0 -0
  423. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/elastic_net_cv.py +0 -0
  424. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/gamma_regressor.py +0 -0
  425. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/huber_regressor.py +0 -0
  426. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lars.py +0 -0
  427. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lars_cv.py +0 -0
  428. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso.py +0 -0
  429. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_cv.py +0 -0
  430. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_lars.py +0 -0
  431. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_lars_cv.py +0 -0
  432. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/lasso_lars_ic.py +0 -0
  433. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/linear_regression.py +0 -0
  434. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/logistic_regression.py +0 -0
  435. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/logistic_regression_cv.py +0 -0
  436. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_elastic_net.py +0 -0
  437. {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
  438. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_lasso.py +0 -0
  439. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/multi_task_lasso_cv.py +0 -0
  440. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/orthogonal_matching_pursuit.py +0 -0
  441. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/passive_aggressive_classifier.py +0 -0
  442. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/passive_aggressive_regressor.py +0 -0
  443. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/perceptron.py +0 -0
  444. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/poisson_regressor.py +0 -0
  445. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ransac_regressor.py +0 -0
  446. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge.py +0 -0
  447. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge_classifier.py +0 -0
  448. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge_classifier_cv.py +0 -0
  449. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/ridge_cv.py +0 -0
  450. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/sgd_classifier.py +0 -0
  451. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/sgd_one_class_svm.py +0 -0
  452. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/sgd_regressor.py +0 -0
  453. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/theil_sen_regressor.py +0 -0
  454. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/linear_model/tweedie_regressor.py +0 -0
  455. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/__init__.py +0 -0
  456. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/isomap.py +0 -0
  457. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/mds.py +0 -0
  458. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/spectral_embedding.py +0 -0
  459. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/manifold/tsne.py +0 -0
  460. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/__init__.py +0 -0
  461. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/classification.py +0 -0
  462. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/correlation.py +0 -0
  463. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/covariance.py +0 -0
  464. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/metrics_utils.py +0 -0
  465. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/ranking.py +0 -0
  466. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/metrics/regression.py +0 -0
  467. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/mixture/__init__.py +0 -0
  468. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/mixture/bayesian_gaussian_mixture.py +0 -0
  469. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/mixture/gaussian_mixture.py +0 -0
  470. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/model_selection/__init__.py +0 -0
  471. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/model_selection/grid_search_cv.py +0 -0
  472. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/model_selection/randomized_search_cv.py +0 -0
  473. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/__init__.py +0 -0
  474. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/one_vs_one_classifier.py +0 -0
  475. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/one_vs_rest_classifier.py +0 -0
  476. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/multiclass/output_code_classifier.py +0 -0
  477. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/__init__.py +0 -0
  478. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/bernoulli_nb.py +0 -0
  479. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/categorical_nb.py +0 -0
  480. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/complement_nb.py +0 -0
  481. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/gaussian_nb.py +0 -0
  482. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/naive_bayes/multinomial_nb.py +0 -0
  483. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/__init__.py +0 -0
  484. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/k_neighbors_classifier.py +0 -0
  485. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/k_neighbors_regressor.py +0 -0
  486. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/kernel_density.py +0 -0
  487. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/local_outlier_factor.py +0 -0
  488. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/nearest_centroid.py +0 -0
  489. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/nearest_neighbors.py +0 -0
  490. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/neighborhood_components_analysis.py +0 -0
  491. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/radius_neighbors_classifier.py +0 -0
  492. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neighbors/radius_neighbors_regressor.py +0 -0
  493. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/__init__.py +0 -0
  494. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/bernoulli_rbm.py +0 -0
  495. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/mlp_classifier.py +0 -0
  496. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/neural_network/mlp_regressor.py +0 -0
  497. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/parameters/disable_distributed_hpo.py +0 -0
  498. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/parameters/disable_model_tracer.py +0 -0
  499. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/parameters/enable_anonymous_sproc.py +0 -0
  500. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/pipeline/__init__.py +0 -0
  501. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/pipeline/pipeline.py +0 -0
  502. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/__init__.py +0 -0
  503. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/binarizer.py +0 -0
  504. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/k_bins_discretizer.py +0 -0
  505. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/label_encoder.py +0 -0
  506. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/max_abs_scaler.py +0 -0
  507. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/min_max_scaler.py +0 -0
  508. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/normalizer.py +0 -0
  509. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/one_hot_encoder.py +0 -0
  510. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/ordinal_encoder.py +0 -0
  511. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/polynomial_features.py +0 -0
  512. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/robust_scaler.py +0 -0
  513. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/preprocessing/standard_scaler.py +0 -0
  514. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/semi_supervised/__init__.py +0 -0
  515. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/semi_supervised/label_propagation.py +0 -0
  516. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/semi_supervised/label_spreading.py +0 -0
  517. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/__init__.py +0 -0
  518. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/linear_svc.py +0 -0
  519. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/linear_svr.py +0 -0
  520. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/nu_svc.py +0 -0
  521. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/nu_svr.py +0 -0
  522. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/svc.py +0 -0
  523. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/svm/svr.py +0 -0
  524. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/__init__.py +0 -0
  525. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/decision_tree_classifier.py +0 -0
  526. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/decision_tree_regressor.py +0 -0
  527. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/extra_tree_classifier.py +0 -0
  528. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/tree/extra_tree_regressor.py +0 -0
  529. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/__init__.py +0 -0
  530. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgb_classifier.py +0 -0
  531. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgb_regressor.py +0 -0
  532. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgbrf_classifier.py +0 -0
  533. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/modeling/xgboost/xgbrf_regressor.py +0 -0
  534. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_client/model_monitor_sql_client.py +0 -0
  535. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_client/queries/record_count.ssql +0 -0
  536. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_client/queries/rmse.ssql +0 -0
  537. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/_manager/model_monitor_manager.py +0 -0
  538. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/entities/model_monitor_config.py +0 -0
  539. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/explain_visualize.py +0 -0
  540. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/model_monitor.py +0 -0
  541. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/monitoring/shap.py +0 -0
  542. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/__init__.py +0 -0
  543. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/registry/_manager/model_parameter_reconciler.py +0 -0
  544. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/authentication.py +0 -0
  545. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/connection_params.py +0 -0
  546. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/html_utils.py +0 -0
  547. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/sparse.py +0 -0
  548. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/sql_client.py +0 -0
  549. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake/ml/utils/stage_file.py +0 -0
  550. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/dependency_links.txt +0 -0
  551. {snowflake_ml_python-1.53.0 → snowflake_ml_python-1.54.0}/snowflake_ml_python.egg-info/requires.txt +0 -0
  552. {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.53.0
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.53.0
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.53.0
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
@@ -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
- ) -> None:
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, adds PyTorch CUDA index URL and pins torch to CUDA variant.
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
- lines.append(_get_pytorch_cuda_index_url(cuda_version))
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)
@@ -9,7 +9,8 @@ import sys
9
9
  import time
10
10
  import traceback
11
11
  import types
12
- from typing import Any, Callable, Iterable, Mapping, Optional, TypeVar, Union, cast
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
@@ -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``) are
96
- included only when resolved. May be empty when nothing was collected.
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 and any surrounding git commit, branch, and remote URL. Set to
67
- False to skip collection entirely. Collection is always non-fatal and never blocks
68
- run creation. Defaults to True.
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.
@@ -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.value.upper() for t in supported_lifetime_types)
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
- if feature_view.is_tiled:
1303
- agg_metadata = AggregationMetadata(
1304
- feature_granularity=feature_view.feature_granularity, # type: ignore[arg-type]
1305
- features=feature_view.aggregation_specs, # type: ignore[arg-type]
1306
- feature_aggregation_method=(
1307
- feature_view.feature_aggregation_method.value
1308
- if feature_view.feature_aggregation_method is not None
1309
- else None
1310
- ),
1311
- # Stored in FEATURE_SPECS so ``get_feature_view``
1312
- # reconstructs the exact secondary key order registered.
1313
- aggregation_secondary_keys=(
1314
- list(feature_view.aggregation_secondary_keys)
1315
- if feature_view.aggregation_secondary_keys
1316
- else None
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(self, producer_role: str, consumer_role: str) -> online_service.OnlineServiceResult:
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 ``endpoints``.
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
- return f"""CREATE{overwrite_clause} VIEW {view_name} ({column_descs})
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
- is_tiled = agg_metadata is not None
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
- refresh_mode_clause = f"REFRESH_MODE='{feature_view.refresh_mode}'"
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:
@@ -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
- # Backward compatibility: old FVs don't have is_tiled
414
- if "is_tiled" not in state_dict:
415
- state_dict["is_tiled"] = False
416
- # Backward compatibility: old FVs don't have is_iceberg
417
- if "is_iceberg" not in state_dict:
418
- state_dict["is_iceberg"] = False
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
- store_type = self._online_config.store_type if self._online_config is not None else None
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["feature_granularity"],
113
- features=[AggregationSpec.from_dict(f) for f in data["features"]],
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
  )