snowflake-ml-python 1.22.0__py3-none-any.whl → 1.23.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. snowflake/ml/jobs/__init__.py +2 -0
  2. snowflake/ml/jobs/_utils/constants.py +1 -0
  3. snowflake/ml/jobs/_utils/payload_utils.py +38 -18
  4. snowflake/ml/jobs/_utils/query_helper.py +8 -1
  5. snowflake/ml/jobs/_utils/runtime_env_utils.py +117 -0
  6. snowflake/ml/jobs/_utils/stage_utils.py +2 -2
  7. snowflake/ml/jobs/_utils/types.py +22 -2
  8. snowflake/ml/jobs/job_definition.py +232 -0
  9. snowflake/ml/jobs/manager.py +16 -177
  10. snowflake/ml/model/_client/model/model_version_impl.py +90 -76
  11. snowflake/ml/model/_client/ops/model_ops.py +2 -18
  12. snowflake/ml/model/_client/ops/param_utils.py +124 -0
  13. snowflake/ml/model/_client/ops/service_ops.py +63 -18
  14. snowflake/ml/model/_client/service/model_deployment_spec.py +12 -5
  15. snowflake/ml/model/_client/service/model_deployment_spec_schema.py +1 -0
  16. snowflake/ml/model/_client/sql/service.py +4 -25
  17. snowflake/ml/model/_model_composer/model_method/infer_function.py_template +21 -3
  18. snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template +21 -3
  19. snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template +21 -3
  20. snowflake/ml/model/_model_composer/model_method/model_method.py +2 -1
  21. snowflake/ml/model/_packager/model_handlers/huggingface.py +54 -10
  22. snowflake/ml/model/_packager/model_handlers/sentence_transformers.py +52 -16
  23. snowflake/ml/model/_signatures/utils.py +55 -0
  24. snowflake/ml/model/openai_signatures.py +97 -0
  25. snowflake/ml/registry/_manager/model_parameter_reconciler.py +1 -1
  26. snowflake/ml/version.py +1 -1
  27. {snowflake_ml_python-1.22.0.dist-info → snowflake_ml_python-1.23.0.dist-info}/METADATA +67 -1
  28. {snowflake_ml_python-1.22.0.dist-info → snowflake_ml_python-1.23.0.dist-info}/RECORD +31 -29
  29. snowflake/ml/experiment/callback/__init__.py +0 -0
  30. {snowflake_ml_python-1.22.0.dist-info → snowflake_ml_python-1.23.0.dist-info}/WHEEL +0 -0
  31. {snowflake_ml_python-1.22.0.dist-info → snowflake_ml_python-1.23.0.dist-info}/licenses/LICENSE.txt +0 -0
  32. {snowflake_ml_python-1.22.0.dist-info → snowflake_ml_python-1.23.0.dist-info}/top_level.txt +0 -0
@@ -23,24 +23,55 @@ if TYPE_CHECKING:
23
23
 
24
24
  logger = logging.getLogger(__name__)
25
25
 
26
+ # Allowlist of supported target methods for SentenceTransformer models.
27
+ _ALLOWED_TARGET_METHODS = ["encode", "encode_queries", "encode_documents"]
28
+
26
29
 
27
30
  def _validate_sentence_transformers_signatures(sigs: dict[str, model_signature.ModelSignature]) -> None:
28
- if list(sigs.keys()) != ["encode"]:
29
- raise ValueError("target_methods can only be ['encode']")
31
+ """Validate signatures for SentenceTransformer models.
32
+
33
+ Args:
34
+ sigs: Dictionary mapping method names to their signatures.
35
+
36
+ Raises:
37
+ ValueError: If signatures are empty, contain unsupported methods, or violate per-method constraints.
38
+ """
39
+ # Check that signatures are non-empty
40
+ if not sigs:
41
+ raise ValueError("At least one signature must be provided.")
42
+
43
+ # Check that all methods are in the allowlist
44
+ unsupported_methods = set(sigs.keys()) - set(_ALLOWED_TARGET_METHODS)
45
+ if unsupported_methods:
46
+ raise ValueError(
47
+ f"Unsupported target methods: {sorted(unsupported_methods)}. "
48
+ f"Supported methods are: {_ALLOWED_TARGET_METHODS}."
49
+ )
30
50
 
31
- if len(sigs["encode"].inputs) != 1:
32
- raise ValueError("SentenceTransformer can only accept 1 input column")
51
+ # Validate per-method constraints
52
+ for method_name, sig in sigs.items():
53
+ if len(sig.inputs) != 1:
54
+ raise ValueError(f"SentenceTransformer method '{method_name}' must have exactly 1 input column.")
33
55
 
34
- if len(sigs["encode"].outputs) != 1:
35
- raise ValueError("SentenceTransformer can only return 1 output column")
56
+ if len(sig.outputs) != 1:
57
+ raise ValueError(f"SentenceTransformer method '{method_name}' must have exactly 1 output column.")
36
58
 
37
- assert isinstance(sigs["encode"].inputs[0], model_signature.FeatureSpec)
59
+ # FeatureSpec is expected here; FeatureGroupSpec would indicate a nested/grouped input
60
+ # which SentenceTransformer does not support.
61
+ if not isinstance(sig.inputs[0], model_signature.FeatureSpec):
62
+ raise ValueError(
63
+ f"SentenceTransformer method '{method_name}' requires a FeatureSpec input, "
64
+ f"got {type(sig.inputs[0]).__name__}."
65
+ )
38
66
 
39
- if sigs["encode"].inputs[0]._shape is not None:
40
- raise ValueError("SentenceTransformer does not support input shape")
67
+ if sig.inputs[0]._shape is not None:
68
+ raise ValueError(f"SentenceTransformer method '{method_name}' does not support input shape.")
41
69
 
42
- if sigs["encode"].inputs[0]._dtype != model_signature.DataType.STRING:
43
- raise ValueError("SentenceTransformer only accepts string input")
70
+ if sig.inputs[0]._dtype != model_signature.DataType.STRING:
71
+ raise ValueError(
72
+ f"SentenceTransformer method '{method_name}' only accepts STRING input, "
73
+ f"got {sig.inputs[0]._dtype.name}."
74
+ )
44
75
 
45
76
 
46
77
  @final
@@ -51,7 +82,7 @@ class SentenceTransformerHandler(_base.BaseModelHandler["sentence_transformers.S
51
82
  _HANDLER_MIGRATOR_PLANS: dict[str, type[base_migrator.BaseModelHandlerMigrator]] = {}
52
83
 
53
84
  MODEL_BLOB_FILE_OR_DIR = "model"
54
- DEFAULT_TARGET_METHODS = ["encode"]
85
+ DEFAULT_TARGET_METHODS = ["encode", "encode_queries", "encode_documents"]
55
86
 
56
87
  @classmethod
57
88
  def can_handle(
@@ -98,8 +129,13 @@ class SentenceTransformerHandler(_base.BaseModelHandler["sentence_transformers.S
98
129
  target_methods=kwargs.pop("target_methods", None),
99
130
  default_target_methods=cls.DEFAULT_TARGET_METHODS,
100
131
  )
101
- if target_methods != ["encode"]:
102
- raise ValueError("target_methods can only be ['encode']")
132
+
133
+ # Validate target_methods
134
+ if not target_methods:
135
+ raise ValueError("At least one target method must be specified.")
136
+
137
+ if not set(target_methods).issubset(_ALLOWED_TARGET_METHODS):
138
+ raise ValueError(f"target_methods {target_methods} must be a subset of {_ALLOWED_TARGET_METHODS}.")
103
139
 
104
140
  def get_prediction(
105
141
  target_method_name: str, sample_input_data: model_types.SupportedLocalDataType
@@ -246,10 +282,10 @@ class SentenceTransformerHandler(_base.BaseModelHandler["sentence_transformers.S
246
282
 
247
283
  type_method_dict = {}
248
284
  for target_method_name, sig in model_meta.signatures.items():
249
- if target_method_name == "encode":
285
+ if target_method_name in _ALLOWED_TARGET_METHODS:
250
286
  type_method_dict[target_method_name] = get_prediction(raw_model, sig, target_method_name)
251
287
  else:
252
- ValueError(f"{target_method_name} is currently not supported.")
288
+ raise ValueError(f"{target_method_name} is currently not supported.")
253
289
 
254
290
  _SentenceTransformer = type(
255
291
  "_SentenceTransformer",
@@ -9,6 +9,7 @@ from snowflake.ml._internal.exceptions import (
9
9
  error_codes,
10
10
  exceptions as snowml_exceptions,
11
11
  )
12
+ from snowflake.ml.model import openai_signatures
12
13
  from snowflake.ml.model._signatures import core
13
14
 
14
15
 
@@ -259,6 +260,48 @@ def huggingface_pipeline_signature_auto_infer(
259
260
  ],
260
261
  )
261
262
 
263
+ # https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.ImageClassificationPipeline
264
+ if task == "image-classification":
265
+ return core.ModelSignature(
266
+ inputs=[
267
+ core.FeatureSpec(name="images", dtype=core.DataType.BYTES),
268
+ ],
269
+ outputs=[
270
+ core.FeatureGroupSpec(
271
+ name="labels",
272
+ specs=[
273
+ core.FeatureSpec(name="label", dtype=core.DataType.STRING),
274
+ core.FeatureSpec(name="score", dtype=core.DataType.DOUBLE),
275
+ ],
276
+ shape=(-1,),
277
+ ),
278
+ ],
279
+ )
280
+
281
+ # https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.AutomaticSpeechRecognitionPipeline
282
+ if task == "automatic-speech-recognition":
283
+ return core.ModelSignature(
284
+ inputs=[
285
+ core.FeatureSpec(name="audio", dtype=core.DataType.BYTES),
286
+ ],
287
+ outputs=[
288
+ core.FeatureGroupSpec(
289
+ name="outputs",
290
+ specs=[
291
+ core.FeatureSpec(name="text", dtype=core.DataType.STRING),
292
+ core.FeatureGroupSpec(
293
+ name="chunks",
294
+ specs=[
295
+ core.FeatureSpec(name="timestamp", dtype=core.DataType.DOUBLE, shape=(2,)),
296
+ core.FeatureSpec(name="text", dtype=core.DataType.STRING),
297
+ ],
298
+ shape=(-1,), # Variable length list of chunks
299
+ ),
300
+ ],
301
+ ),
302
+ ],
303
+ )
304
+
262
305
  # https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.TextGenerationPipeline
263
306
  if task == "text-generation":
264
307
  if params.get("return_tensors", False):
@@ -288,6 +331,18 @@ def huggingface_pipeline_signature_auto_infer(
288
331
  )
289
332
  ],
290
333
  )
334
+
335
+ # https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.ImageTextToTextPipeline
336
+ if task == "image-text-to-text":
337
+ if params.get("return_tensors", False):
338
+ raise NotImplementedError(
339
+ f"Auto deployment for HuggingFace pipeline {task} "
340
+ "when `return_tensors` set to `True` has not been supported yet."
341
+ )
342
+ # Always generate a dict per input
343
+ # defaulting to OPENAI_CHAT_SIGNATURE_SPEC for image-text-to-text pipeline
344
+ return openai_signatures._OPENAI_CHAT_SIGNATURE_SPEC
345
+
291
346
  # https://huggingface.co/docs/transformers/en/main_classes/pipelines#transformers.Text2TextGenerationPipeline
292
347
  if task == "text2text-generation":
293
348
  if params.get("return_tensors", False):
@@ -1,6 +1,94 @@
1
1
  from snowflake.ml.model._signatures import core
2
2
 
3
3
  _OPENAI_CHAT_SIGNATURE_SPEC = core.ModelSignature(
4
+ inputs=[
5
+ core.FeatureGroupSpec(
6
+ name="messages",
7
+ specs=[
8
+ core.FeatureGroupSpec(
9
+ name="content",
10
+ specs=[
11
+ core.FeatureSpec(name="type", dtype=core.DataType.STRING),
12
+ # Text prompts
13
+ core.FeatureSpec(name="text", dtype=core.DataType.STRING),
14
+ # Image URL prompts
15
+ core.FeatureGroupSpec(
16
+ name="image_url",
17
+ specs=[
18
+ # Base64 encoded image URL or image URL
19
+ core.FeatureSpec(name="url", dtype=core.DataType.STRING),
20
+ # Image detail level (e.g., "low", "high", "auto")
21
+ core.FeatureSpec(name="detail", dtype=core.DataType.STRING),
22
+ ],
23
+ ),
24
+ # Video URL prompts
25
+ core.FeatureGroupSpec(
26
+ name="video_url",
27
+ specs=[
28
+ # Base64 encoded video URL
29
+ core.FeatureSpec(name="url", dtype=core.DataType.STRING),
30
+ ],
31
+ ),
32
+ # Audio prompts
33
+ core.FeatureGroupSpec(
34
+ name="input_audio",
35
+ specs=[
36
+ core.FeatureSpec(name="data", dtype=core.DataType.STRING),
37
+ core.FeatureSpec(name="format", dtype=core.DataType.STRING),
38
+ ],
39
+ ),
40
+ ],
41
+ shape=(-1,),
42
+ ),
43
+ core.FeatureSpec(name="name", dtype=core.DataType.STRING),
44
+ core.FeatureSpec(name="role", dtype=core.DataType.STRING),
45
+ core.FeatureSpec(name="title", dtype=core.DataType.STRING),
46
+ ],
47
+ shape=(-1,),
48
+ ),
49
+ core.FeatureSpec(name="temperature", dtype=core.DataType.DOUBLE),
50
+ core.FeatureSpec(name="max_completion_tokens", dtype=core.DataType.INT64),
51
+ core.FeatureSpec(name="stop", dtype=core.DataType.STRING, shape=(-1,)),
52
+ core.FeatureSpec(name="n", dtype=core.DataType.INT32),
53
+ core.FeatureSpec(name="stream", dtype=core.DataType.BOOL),
54
+ core.FeatureSpec(name="top_p", dtype=core.DataType.DOUBLE),
55
+ core.FeatureSpec(name="frequency_penalty", dtype=core.DataType.DOUBLE),
56
+ core.FeatureSpec(name="presence_penalty", dtype=core.DataType.DOUBLE),
57
+ ],
58
+ outputs=[
59
+ core.FeatureSpec(name="id", dtype=core.DataType.STRING),
60
+ core.FeatureSpec(name="object", dtype=core.DataType.STRING),
61
+ core.FeatureSpec(name="created", dtype=core.DataType.FLOAT),
62
+ core.FeatureSpec(name="model", dtype=core.DataType.STRING),
63
+ core.FeatureGroupSpec(
64
+ name="choices",
65
+ specs=[
66
+ core.FeatureSpec(name="index", dtype=core.DataType.INT32),
67
+ core.FeatureGroupSpec(
68
+ name="message",
69
+ specs=[
70
+ core.FeatureSpec(name="content", dtype=core.DataType.STRING),
71
+ core.FeatureSpec(name="name", dtype=core.DataType.STRING),
72
+ core.FeatureSpec(name="role", dtype=core.DataType.STRING),
73
+ ],
74
+ ),
75
+ core.FeatureSpec(name="logprobs", dtype=core.DataType.STRING),
76
+ core.FeatureSpec(name="finish_reason", dtype=core.DataType.STRING),
77
+ ],
78
+ shape=(-1,),
79
+ ),
80
+ core.FeatureGroupSpec(
81
+ name="usage",
82
+ specs=[
83
+ core.FeatureSpec(name="completion_tokens", dtype=core.DataType.INT32),
84
+ core.FeatureSpec(name="prompt_tokens", dtype=core.DataType.INT32),
85
+ core.FeatureSpec(name="total_tokens", dtype=core.DataType.INT32),
86
+ ],
87
+ ),
88
+ ],
89
+ )
90
+
91
+ _OPENAI_CHAT_SIGNATURE_SPEC_WITH_CONTENT_FORMAT_STRING = core.ModelSignature(
4
92
  inputs=[
5
93
  core.FeatureGroupSpec(
6
94
  name="messages",
@@ -54,4 +142,13 @@ _OPENAI_CHAT_SIGNATURE_SPEC = core.ModelSignature(
54
142
  ],
55
143
  )
56
144
 
145
+
146
+ # Refer vLLM documentation: https://docs.vllm.ai/en/stable/serving/openai_compatible_server/#chat-template
147
+
148
+ # Use this if you prefer to use the content format string instead of the default ChatML template.
149
+ # Most models support this.
150
+ OPENAI_CHAT_SIGNATURE_WITH_CONTENT_FORMAT_STRING = {"__call__": _OPENAI_CHAT_SIGNATURE_SPEC_WITH_CONTENT_FORMAT_STRING}
151
+
152
+ # This is the default signature.
153
+ # The content format allows vLLM to handler content parts like text, image, video, audio, file, etc.
57
154
  OPENAI_CHAT_SIGNATURE = {"__call__": _OPENAI_CHAT_SIGNATURE_SPEC}
@@ -126,7 +126,7 @@ class ModelParameterReconciler:
126
126
  # Default the target platform to SPCS if not specified when running in ML runtime
127
127
  if env.IN_ML_RUNTIME:
128
128
  logger.info(
129
- "Logging the model on Container Runtime for ML without specifying `target_platforms`. "
129
+ "Logging the model on Container Runtime without specifying `target_platforms`. "
130
130
  'Default to `target_platforms=["SNOWPARK_CONTAINER_SERVICES"]`.'
131
131
  )
132
132
  return [target_platform.TargetPlatform.SNOWPARK_CONTAINER_SERVICES]
snowflake/ml/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  # This is parsed by regex in conda recipe meta file. Make sure not to break it.
2
- VERSION = "1.22.0"
2
+ VERSION = "1.23.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: snowflake-ml-python
3
- Version: 1.22.0
3
+ Version: 1.23.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:
@@ -417,6 +417,22 @@ NOTE: Version 1.7.0 is used as example here. Please choose the the latest versio
417
417
 
418
418
  # Release History
419
419
 
420
+ ## 1.23.0
421
+
422
+ ### New Features
423
+
424
+ * ML Jobs: Enabled support for Python 3.11 and Python 3.12 by default. Jobs will automatically select a
425
+ runtime environment matching the client Python version.
426
+
427
+ ### Bug Fixes
428
+
429
+ * Registry: Fix failures on empty output in HuggingFace's Token Classification (aka Named Entity Recognition) models.
430
+ * Model serving: don't parse instance or container statuses to fix bug with missing container status.
431
+
432
+ ### Behavior Changes
433
+
434
+ ### Deprecations
435
+
420
436
  ## 1.22.0
421
437
 
422
438
  ### New Features
@@ -439,10 +455,60 @@ mv = registry.log_model(
439
455
  )
440
456
  ```
441
457
 
458
+ * Registry: Added support for `image-text-to-text` task type in `huggingface.TransformersPipeline`.
459
+ Note: Requires vLLM inference engine while creating the service.
460
+
442
461
  ### Bug Fixes
443
462
 
444
463
  ### Behavior Changes
445
464
 
465
+ * Registry: The `openai_signatures.OPENAI_CHAT_SIGNATURE` signature now handles content parts and
466
+ requires input data to be passed in list of dictionary. To use string content (previous behavior),
467
+ use `openai_signatures.OPENAI_CHAT_SIGNATURE_WITH_CONTENT_FORMAT_STRING`.
468
+
469
+ ```python
470
+ from snowflake.ml.model import openai_signatures
471
+ import pandas as pd
472
+
473
+ mv = snowflake_registry.log_model(
474
+ model=generator,
475
+ model_name=...,
476
+ ...,
477
+ signatures=openai_signatures.OPENAI_CHAT_SIGNATURE,
478
+ )
479
+
480
+ # create a pd.DataFrame with openai.client.chat.completions arguments like below:
481
+ x_df = pd.DataFrame.from_records(
482
+ [
483
+ {
484
+ "messages": [
485
+ {"role": "system", "content": "Complete the sentence."},
486
+ {
487
+ "role": "user",
488
+ "content": [
489
+ {
490
+ "type": "text",
491
+ "text": "A descendant of the Lost City of Atlantis, who swam to Earth while saying, ",
492
+ }
493
+ ],
494
+ },
495
+ ],
496
+ "max_completion_tokens": 250,
497
+ "temperature": 0.9,
498
+ "stop": None,
499
+ "n": 3,
500
+ "stream": False,
501
+ "top_p": 1.0,
502
+ "frequency_penalty": 0.1,
503
+ "presence_penalty": 0.2,
504
+ }
505
+ ],
506
+ )
507
+
508
+ # OpenAI Chat Completion compatible output
509
+ output_df = mv.run(X=x_df)
510
+ ```
511
+
446
512
  ### Deprecations
447
513
 
448
514
  ## 1.21.0
@@ -10,7 +10,7 @@ snowflake/cortex/_sse_client.py,sha256=sLYgqAfTOPADCnaWH2RWAJi8KbU_7gSRsTUDcDD5T
10
10
  snowflake/cortex/_summarize.py,sha256=7GH8zqfIdOiHA5w4b6EvJEKEWhaTrL4YA6iDGbn7BNM,1307
11
11
  snowflake/cortex/_translate.py,sha256=9ZGjvAnJFisbzJ_bXnt4pyug5UzhHJRXW8AhGQEersM,1652
12
12
  snowflake/cortex/_util.py,sha256=krNTpbkFLXwdFqy1bd0xi7ZmOzOHRnIfHdQCPiLZJxk,3288
13
- snowflake/ml/version.py,sha256=_JcB9jxPpN07nlKMJK54-i2xkicKgy6P-gyd_SPnpZA,99
13
+ snowflake/ml/version.py,sha256=4kkULHrWTWUklPOTCjLofNqUa56UDa5-aT7xzkSZmTQ,99
14
14
  snowflake/ml/_internal/env.py,sha256=EY_2KVe8oR3LgKWdaeRb5rRU-NDNXJppPDsFJmMZUUY,265
15
15
  snowflake/ml/_internal/env_utils.py,sha256=Xx03pV_qEIVJJY--J3ZmnqK9Ugf0Os3O2vrF8xOyq_c,31500
16
16
  snowflake/ml/_internal/file_utils.py,sha256=7sA6loOeSfmGP4yx16P4usT9ZtRqG3ycnXu7_Tk7dOs,14206
@@ -74,7 +74,6 @@ snowflake/ml/experiment/_entities/__init__.py,sha256=11XxkvAzosydf5owNmMzLwXZdQ2
74
74
  snowflake/ml/experiment/_entities/experiment.py,sha256=lKmQj59K8fGDWVwRqeIesxorrChb-m78vX_WUmI7PV0,225
75
75
  snowflake/ml/experiment/_entities/run.py,sha256=6_R35nI24PzIWMrwPKDif5ZINAAE6J0R7p4UmlT-m4o,2251
76
76
  snowflake/ml/experiment/_entities/run_metadata.py,sha256=25cIg8FnAYHk5SoTg_StzL10_BkomL7xrhMmWxUTU8E,366
77
- snowflake/ml/experiment/callback/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
77
  snowflake/ml/experiment/callback/keras.py,sha256=2kNYVWJjBKn9i2pioiGthLNjclNdSHn-6xHm6tlDc4E,4122
79
78
  snowflake/ml/experiment/callback/lightgbm.py,sha256=dftlOMT9Wxo-XPaSvgbMh5IwVfQEskz4Ev4jd4G3_ns,4249
80
79
  snowflake/ml/experiment/callback/xgboost.py,sha256=VLO3uW0Pot1b4nRaoi8tjLtDt3hrkTV0_6cqja3SqZQ,4197
@@ -110,10 +109,11 @@ snowflake/ml/fileset/fileset.py,sha256=ApMpHiiyzGRkyxQfJPdXPuKtw_wOXbOfQCXSH6pDw
110
109
  snowflake/ml/fileset/sfcfs.py,sha256=FJFc9-gc0KXaNyc10ZovN_87aUCShb0WztVwa02t0io,15517
111
110
  snowflake/ml/fileset/snowfs.py,sha256=uF5QluYtiJ-HezGIhF55dONi3t0E6N7ByaVAIAlM3nk,5133
112
111
  snowflake/ml/fileset/stage_fs.py,sha256=SnkgCta6_5G6Ljl-Nzctr4yavhHUSlNKN3je0ojp54E,20685
113
- snowflake/ml/jobs/__init__.py,sha256=h176wKqEylZs5cdWdzWHuUrSAcwctDdw4tUhIpy-mO4,657
112
+ snowflake/ml/jobs/__init__.py,sha256=JypKzxERpcn4yJ7FILA98Gl0sFDEGkAIQ35b1iSzaXg,741
114
113
  snowflake/ml/jobs/decorators.py,sha256=mQgdWvvCwD7q79cSFKZHKegXGh2j1u8WM64UD3lCKr4,3428
115
114
  snowflake/ml/jobs/job.py,sha256=wEeIk5RZhkaJ56Zb1cBxsTAUJIo4QyhpRWaZaiYBuGY,27697
116
- snowflake/ml/jobs/manager.py,sha256=pv4D3SxiiDi2JIUgRzY5yhF0w1pDaS24oTE4qtWS6fk,27633
115
+ snowflake/ml/jobs/job_definition.py,sha256=f1lZoTdn1AulJTHstAN8yDd-8Cx4kv4A0KBm-TAxJq4,10377
116
+ snowflake/ml/jobs/manager.py,sha256=heuOXEn7Y5Gb5s2y55GEx6i9mr-Z2tTL-b0rPGYv3ao,20469
117
117
  snowflake/ml/jobs/_interop/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
118
  snowflake/ml/jobs/_interop/data_utils.py,sha256=xUO5YlhUKFVCDtbjam5gP2lka3lfoknTLr7syNAVxK0,4074
119
119
  snowflake/ml/jobs/_interop/dto_schema.py,sha256=NhoQ6WJa7uLO9VJojEENVVZhZMfL_G1VPPSSUYmmhO8,2750
@@ -123,14 +123,15 @@ snowflake/ml/jobs/_interop/protocols.py,sha256=I-RGWUDUc_FsKsq_mtczO7n93O_IzUvmE
123
123
  snowflake/ml/jobs/_interop/results.py,sha256=nQ07XJ1BZEkPB4xa12pbGyaKqR8sWCoSzx0IKQlub4w,1714
124
124
  snowflake/ml/jobs/_interop/utils.py,sha256=TWFkUcAYmb-fpTwEL8idkk3XxlZ8vLz4X_gyS78PSi4,5552
125
125
  snowflake/ml/jobs/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
- snowflake/ml/jobs/_utils/constants.py,sha256=vANNraDqsZkyhQ3lYQJnFx6NligKUdAaj2qMNRZpTEA,4645
126
+ snowflake/ml/jobs/_utils/constants.py,sha256=7KMhM-7KEursLjFBlj4xaQ4uGFJtjJ12rlx55hcBCQ0,4677
127
127
  snowflake/ml/jobs/_utils/feature_flags.py,sha256=dLWBVIjyB2vsa4Vtm7Yhty6DOi8Nn73_YSjuYf73Y7A,1669
128
128
  snowflake/ml/jobs/_utils/function_payload_utils.py,sha256=4LBaStMdhRxcqwRkwFje-WwiEKRWnBfkaOYouF3N3Kg,1308
129
- snowflake/ml/jobs/_utils/payload_utils.py,sha256=ga7VbdiufuStLHn1_4xIOIhJtWrrE9-yMEZxsLDQ36A,33279
130
- snowflake/ml/jobs/_utils/query_helper.py,sha256=1-XK-y4iukbR1693qAELprRbHmJDM4YoEBHov8IYbHU,1115
129
+ snowflake/ml/jobs/_utils/payload_utils.py,sha256=X9nG3kKlxr-2EfnLXhLwHdXoAhQS_MaTPfXPydlE_JU,33824
130
+ snowflake/ml/jobs/_utils/query_helper.py,sha256=DxezZzftVT7WZzf0uzEn0l6U7BFLNU4U4W_IRCzgbaI,1265
131
+ snowflake/ml/jobs/_utils/runtime_env_utils.py,sha256=EHESq95LhgKi1E68u9vlp8Brc4Ff8R0dFlIXAXoB1EA,4472
131
132
  snowflake/ml/jobs/_utils/spec_utils.py,sha256=eC24LFiHtHQiswrZy7m94jixIInJFXNZ_-Km-xr9NJg,871
132
- snowflake/ml/jobs/_utils/stage_utils.py,sha256=_eLdp9YTslkq6F7K-3K6WVBsMWtm6E6p3fJG1UFk3wQ,5890
133
- snowflake/ml/jobs/_utils/types.py,sha256=__wwHJmdp9CvEI2HmosRJ4DxeZAkVDQ37D9ImCavvng,2579
133
+ snowflake/ml/jobs/_utils/stage_utils.py,sha256=vUWBj5nAsdcYe5Gtv_JhHYMbE5sKGFW6w7qh6uPtBUI,5912
134
+ snowflake/ml/jobs/_utils/types.py,sha256=UJ_WjiHcMxR3DZb5LQm-bUs7i74tZi7DHXrWRyvqlpg,3154
134
135
  snowflake/ml/jobs/_utils/scripts/constants.py,sha256=YyIWZqQPYOTtgCY6SfyJjk2A98I5RQVmrOuLtET5Pqg,173
135
136
  snowflake/ml/jobs/_utils/scripts/get_instance_ip.py,sha256=N2wJYMPlwg-hidwgHhDhiBWOE6TskqCfWLMRRNnZBQs,5776
136
137
  snowflake/ml/jobs/_utils/scripts/mljob_launcher.py,sha256=D2yheAux0GrIcxzD7IPEuUaRb4JyDdDpxRXXNlxszWQ,19912
@@ -147,7 +148,7 @@ snowflake/ml/model/custom_model.py,sha256=sdyKhT-QNNtTeu3idu6BExZNVyjUD4YTU8cru3
147
148
  snowflake/ml/model/event_handler.py,sha256=pojleQVM9TPNeDvliTvon2Sfxqbf2WWxrOebo1SaEHo,7211
148
149
  snowflake/ml/model/inference_engine.py,sha256=L0nwySY2Qwp3JzuRpPS87r0--m3HTUNUgZXYyOPJjyk,66
149
150
  snowflake/ml/model/model_signature.py,sha256=ae1tkh3Rw9MzJSxmVT9kb0PwD3TANtKbWwp6b8-cItE,32847
150
- snowflake/ml/model/openai_signatures.py,sha256=ZVnHDgaOA6RcvtSP3HIbHVgr3scJH2gG_9QvZidn41g,2630
151
+ snowflake/ml/model/openai_signatures.py,sha256=wu7l9V6-fWNJoAdE3R25hYBAmVfND5oaWdsUXilxBDo,7329
151
152
  snowflake/ml/model/target_platform.py,sha256=H5d-wtuKQyVlq9x33vPtYZAlR5ka0ytcKRYgwlKl0bQ,390
152
153
  snowflake/ml/model/task.py,sha256=Zp5JaLB-YfX5p_HSaw81P3J7UnycQq5EMa87A35VOaQ,286
153
154
  snowflake/ml/model/type_hints.py,sha256=Xxa6b9ezbvXYvSIN5R4Zv6Dro4ZH74-eW4cno92VTJE,11475
@@ -155,18 +156,19 @@ snowflake/ml/model/volatility.py,sha256=qu-wqe9oKkRwXwE2qkKygxTWzUypQYEk3UjsqOGR
155
156
  snowflake/ml/model/_client/model/batch_inference_specs.py,sha256=BA_pF9Hnwz9iIywi4CUaNMLPqWE4R7Q8QE9kWFU369E,4797
156
157
  snowflake/ml/model/_client/model/inference_engine_utils.py,sha256=yPkdImi2qP1uG1WzLKCBZgXV-DiIBVpImEosIjYJk8Y,1958
157
158
  snowflake/ml/model/_client/model/model_impl.py,sha256=Yabrbir5vPMOnsVmQJ23YN7vqhi756Jcm6pfO8Aq92o,17469
158
- snowflake/ml/model/_client/model/model_version_impl.py,sha256=wcqFQXuQXez6gAcYA2Bj0FnVoyoDiUp6_JvOKcwJE2s,68149
159
+ snowflake/ml/model/_client/model/model_version_impl.py,sha256=Un8AiOjIxee8RmieXCMSeCfVWXjThurT5ABpXUDxjoM,69024
159
160
  snowflake/ml/model/_client/ops/deployment_step.py,sha256=9kxKDr9xcD4KmVM-9O4_tm3ytkllQVoElJD793VI84Q,1428
160
161
  snowflake/ml/model/_client/ops/metadata_ops.py,sha256=qpK6PL3OyfuhyOmpvLCpHLy6vCxbZbp1HlEvakFGwv4,4884
161
- snowflake/ml/model/_client/ops/model_ops.py,sha256=NmTP9jbojy6rxEpC18h_3fHPiTCZQw3I0TVgiF_dtnE,54938
162
- snowflake/ml/model/_client/ops/service_ops.py,sha256=VfIMn-p8YlsenObkRG5GK2e9SHK7Afi_PKYoZfus8iU,46589
162
+ snowflake/ml/model/_client/ops/model_ops.py,sha256=QzUFshidzdHkWIalbI0iLLA46OUgt4DWQVYQnHsWF3A,54272
163
+ snowflake/ml/model/_client/ops/param_utils.py,sha256=MPPerO8wYNYIuig4rFoG_YI5idD_dBlrWXgmAXcR2nM,5160
164
+ snowflake/ml/model/_client/ops/service_ops.py,sha256=Ew86CVvKiJtAMcoDw_1QmQqwdoVRxKH85yXmHr5PpEs,48414
163
165
  snowflake/ml/model/_client/service/import_model_spec_schema.py,sha256=SlEX1GiPlB8whMCmiwKUopnrGlm4fkQOQbTW2KyVTFU,554
164
- snowflake/ml/model/_client/service/model_deployment_spec.py,sha256=AEF_orcAj090oafVJ01iH767h_6a68Bb2oZqCQccIOo,19942
165
- snowflake/ml/model/_client/service/model_deployment_spec_schema.py,sha256=f21_tYaGFPt07w1kgcIGWc4XKWWBGKKc3ivMKVTaOM0,2585
166
+ snowflake/ml/model/_client/service/model_deployment_spec.py,sha256=Qg7cR9jQTnbWHIV5FyxUZocxWH0nFEem9wdOt5osKIw,20149
167
+ snowflake/ml/model/_client/service/model_deployment_spec_schema.py,sha256=2FCfhyg7F2XYVWKFybeEQ9Fq3goZ3XKmJdH_CuRqPpI,2649
166
168
  snowflake/ml/model/_client/sql/_base.py,sha256=Qrm8M92g3MHb-QnSLUlbd8iVKCRxLhG_zr5M2qmXwJ8,1473
167
169
  snowflake/ml/model/_client/sql/model.py,sha256=nstZ8zR7MkXVEfhqLt7PWMik6dZr06nzq7VsF5NVNow,5840
168
170
  snowflake/ml/model/_client/sql/model_version.py,sha256=SOYr13YEq0mxgIatsSchOq0aKUgdPhKO3clRQ6AMa7U,24766
169
- snowflake/ml/model/_client/sql/service.py,sha256=zcyNsZVyanWC-iBcGOlBYz2DZ2jxnwdr5XT2xXa3oAk,15533
171
+ snowflake/ml/model/_client/sql/service.py,sha256=e_qnt-mGlac1vCGjqOHjYDpplvZy8YiC82Ir0VyH1Tc,14882
170
172
  snowflake/ml/model/_client/sql/stage.py,sha256=1TWYIVoWIeNwhVG9uqwmNpmKcC6x45LrbxCtzJW7fi4,1214
171
173
  snowflake/ml/model/_client/sql/tag.py,sha256=9sI0VoldKmsfToWSjMQddozPPGCxYUI6n0gPBiqd6x8,4333
172
174
  snowflake/ml/model/_model_composer/model_composer.py,sha256=1iMJe9b71xHC4K8VGTreQMJhI3ryAeQl3SpSK77uK_g,8313
@@ -174,10 +176,10 @@ snowflake/ml/model/_model_composer/model_manifest/model_manifest.py,sha256=MyNaO
174
176
  snowflake/ml/model/_model_composer/model_manifest/model_manifest_schema.py,sha256=GsHTjZPUpiVSePzNswNFxW3w07IQ32Vi_B9t-W8jUHE,3140
175
177
  snowflake/ml/model/_model_composer/model_method/constants.py,sha256=hoJwIopSdZiYn0fGq15_NiirC0l02d5LEs2D-4J_tPk,35
176
178
  snowflake/ml/model/_model_composer/model_method/function_generator.py,sha256=nnUJki3bJVCTF3gZ-usZW3xQ6wwlJ08EfNsPAgsnI3s,2625
177
- snowflake/ml/model/_model_composer/model_method/infer_function.py_template,sha256=olysEb_bE2C8CjIRAhm7qdr2mtgk77Tx45gnLRVQGFw,1511
178
- snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template,sha256=8p8jkTOJA-mBt5cuGhcWSH4z7ySQ9xevC35UioCLkC8,1539
179
- snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template,sha256=QT32N6akQDutLh00cXp2OD4WI6Gb7IGG1snsnrXNih8,1453
180
- snowflake/ml/model/_model_composer/model_method/model_method.py,sha256=Gau0GM87VN7uezzLmcPKeK7HCK6VQA92yk8adlcXI9E,11807
179
+ snowflake/ml/model/_model_composer/model_method/infer_function.py_template,sha256=YBVm2KL6lUNuuyTwvYDrvc6x94SeqLPx7G_snRoUEMI,2193
180
+ snowflake/ml/model/_model_composer/model_method/infer_partitioned.py_template,sha256=QsnDLnPKYgm01HSAflxWUUr5rf_tDnEyI6d8wgXd3fE,2253
181
+ snowflake/ml/model/_model_composer/model_method/infer_table_function.py_template,sha256=p8ymUzEiZG6Rd7091HxRSEaxxNru6lT0SQAE46GcHxQ,2167
182
+ snowflake/ml/model/_model_composer/model_method/model_method.py,sha256=txvypSvsNh9mvJLwP01B4WiosFNzYjqLS-dSgD2bDYw,11916
181
183
  snowflake/ml/model/_model_composer/model_method/utils.py,sha256=RQi2qebBeE-0Y-jLYXiDWZU8nfvbnif9QbExeWiMmyI,1057
182
184
  snowflake/ml/model/_model_composer/model_user_file/model_user_file.py,sha256=dYNgg8P9p6nRH47-OLxZIbt_Ja3t1VPGNQ0qJtpGuAw,1018
183
185
  snowflake/ml/model/_packager/model_handler.py,sha256=xbqTFDC7ArQyYuOk6zMV_dSttWbsKKVuaOUAY3ddQmE,2846
@@ -187,13 +189,13 @@ snowflake/ml/model/_packager/model_handlers/_base.py,sha256=OZhGv7nyej3PqaoBz021
187
189
  snowflake/ml/model/_packager/model_handlers/_utils.py,sha256=v_IjjbvzJDqrAYSq4_l7_CiN8vkMzLx5MlYDJ_oL970,15522
188
190
  snowflake/ml/model/_packager/model_handlers/catboost.py,sha256=dbI2QizGZS04l6ehgXb3oy5YSXrlwRHz8YENVefEbms,10676
189
191
  snowflake/ml/model/_packager/model_handlers/custom.py,sha256=eOPTt3BoT5r9Z6rzvKaLhbffND647-j8aQ8fD50-cmA,10595
190
- snowflake/ml/model/_packager/model_handlers/huggingface.py,sha256=2515WbwyuVKQy2ZJURwWY-yAfVH12s_gYBgPl-Lp7ts,42624
192
+ snowflake/ml/model/_packager/model_handlers/huggingface.py,sha256=rp4W4ZlkeGjaUq3xZHZuUVfroWggVDSXOGV5R0fbet8,45216
191
193
  snowflake/ml/model/_packager/model_handlers/keras.py,sha256=JKBCiJEjc41zaoEhsen7rnlyPo2RBuEqG9Vq6JR_Cq0,8696
192
194
  snowflake/ml/model/_packager/model_handlers/lightgbm.py,sha256=DAFMiqpXEUmKqeq5rgn5j6rtuwScNnuiMUBwS4OyC7Q,11074
193
195
  snowflake/ml/model/_packager/model_handlers/mlflow.py,sha256=6ZkRRiaTtFatIv1zaWAJ-TGkTRTmrj0P-YCSgpYnRrQ,9434
194
196
  snowflake/ml/model/_packager/model_handlers/prophet.py,sha256=MzmIkX2WukTApf85SUEmn8k_jeBAhfGa_8RTZK0-aCA,23913
195
197
  snowflake/ml/model/_packager/model_handlers/pytorch.py,sha256=mF-pzH1kqL7egpYA3kP1NVwOLNPYdOViEkywdzRXYJc,9867
196
- snowflake/ml/model/_packager/model_handlers/sentence_transformers.py,sha256=sKp-bt-fAnruDMZJ5cN6F_m9dJRY0G2FjJ4-KjNLgcg,11380
198
+ snowflake/ml/model/_packager/model_handlers/sentence_transformers.py,sha256=ER3FEZB-iq3_rGxofOsBGDFSuxC2OUOm020rP97SEhs,13023
197
199
  snowflake/ml/model/_packager/model_handlers/sklearn.py,sha256=_D1YE7TmEJDsuOUt-mT-2Nza2Bz0sIzSGRKn9sxuDhI,18340
198
200
  snowflake/ml/model/_packager/model_handlers/snowmlmodel.py,sha256=uvz-hosuNbtcQFprnS8GzjnM8fWULBDMRbXq8immW9Q,18352
199
201
  snowflake/ml/model/_packager/model_handlers/tensorflow.py,sha256=2J2XWYOC70axWaoNJa9aQLMyjLAKIskrT31t_LgqcIk,11350
@@ -222,7 +224,7 @@ snowflake/ml/model/_signatures/pandas_handler.py,sha256=Gz2olwWzT4Kb3yBH0uYn3o92
222
224
  snowflake/ml/model/_signatures/pytorch_handler.py,sha256=Xy-ITCCX_EgHcyIIqeYSDUIvE2kiqECa8swy1hmohyc,5036
223
225
  snowflake/ml/model/_signatures/snowpark_handler.py,sha256=aNGPa2v0kTMuSZ80NBdHeAWYva0Nc1vo17ZjQwIjf2E,7621
224
226
  snowflake/ml/model/_signatures/tensorflow_handler.py,sha256=_yrvMg-w_jJoYuyrGXKPX4Dv7Vt8z1e6xIKiWGuZcc4,5660
225
- snowflake/ml/model/_signatures/utils.py,sha256=QnfkgHBuI23m0-a0_Ghq1efMrN_dWzhRbpuY9U2U730,16635
227
+ snowflake/ml/model/_signatures/utils.py,sha256=6iu52gcbaZXQb6rDgzGJDNRhKQk0MqwJnt9ihDZQHC4,19014
226
228
  snowflake/ml/model/models/huggingface.py,sha256=VO84lBizmSALntWCnK4O_eY_Cq2uzMooyHtfJXuFkew,13791
227
229
  snowflake/ml/model/models/huggingface_pipeline.py,sha256=yJ7NW97EW5GRtOPYCYuNjoPIgXbAIyOEKW9P1trt9vY,14226
228
230
  snowflake/ml/modeling/_internal/estimator_utils.py,sha256=dfPPWO-RHf5C3Tya3VQ4KEqoa32pm-WKwRrjzjDInLk,13956
@@ -453,14 +455,14 @@ snowflake/ml/monitoring/entities/model_monitor_config.py,sha256=auy9BD0IoyUpZPZX
453
455
  snowflake/ml/registry/__init__.py,sha256=XdPQK9ejYkSJVrSQ7HD3jKQO0hKq2mC4bPCB6qrtH3U,76
454
456
  snowflake/ml/registry/registry.py,sha256=_vtQCh4DmhnPusTKWJteRPJkDpLFEfG150cjED70sOA,34611
455
457
  snowflake/ml/registry/_manager/model_manager.py,sha256=splK5YGErt-eDIy6UbZAB3VKsGMZSJk2_MzfgrIQOhY,26306
456
- snowflake/ml/registry/_manager/model_parameter_reconciler.py,sha256=QsnIp9bspUo7wqGwn2o78YewsNDOgYp3eQtfJ_Rf2Tc,15332
458
+ snowflake/ml/registry/_manager/model_parameter_reconciler.py,sha256=BTi8WNQCW1TiW8jd9LbR6mrIHE29ehocKSh6mVQX0vI,15325
457
459
  snowflake/ml/utils/authentication.py,sha256=TQV3E8YDHAPXA3dS8JWDmb_Zm8P0d9c8kCexRI4nefo,3106
458
460
  snowflake/ml/utils/connection_params.py,sha256=NSBUgcs-DXPRHs1BKpxdSubbJx1yrFRlMPBp-bE3Ugc,8308
459
461
  snowflake/ml/utils/html_utils.py,sha256=4g1EPuD8EnOAK7BCYiY8Wp3ZrdDkNOcUDrDAbUYxLfs,9954
460
462
  snowflake/ml/utils/sparse.py,sha256=zLBNh-ynhGpKH5TFtopk0YLkHGvv0yq1q-sV59YQKgg,3819
461
463
  snowflake/ml/utils/sql_client.py,sha256=pSe2od6Pkh-8NwG3D-xqN76_uNf-ohOtVbT55HeQg1Y,668
462
- snowflake_ml_python-1.22.0.dist-info/licenses/LICENSE.txt,sha256=PdEp56Av5m3_kl21iFkVTX_EbHJKFGEdmYeIO1pL_Yk,11365
463
- snowflake_ml_python-1.22.0.dist-info/METADATA,sha256=blcI4iB283G6JXS7v5Ttkw5bunAO1Q4tqkgAaqruA_8,102098
464
- snowflake_ml_python-1.22.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
465
- snowflake_ml_python-1.22.0.dist-info/top_level.txt,sha256=TY0gFSHKDdZy3THb0FGomyikWQasEGldIR1O0HGOHVw,10
466
- snowflake_ml_python-1.22.0.dist-info/RECORD,,
464
+ snowflake_ml_python-1.23.0.dist-info/licenses/LICENSE.txt,sha256=PdEp56Av5m3_kl21iFkVTX_EbHJKFGEdmYeIO1pL_Yk,11365
465
+ snowflake_ml_python-1.23.0.dist-info/METADATA,sha256=xQBz4OlefNPg0IGBeFQ3iFWZA3WYziR-xmnaVaiyQE8,104165
466
+ snowflake_ml_python-1.23.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
467
+ snowflake_ml_python-1.23.0.dist-info/top_level.txt,sha256=TY0gFSHKDdZy3THb0FGomyikWQasEGldIR1O0HGOHVw,10
468
+ snowflake_ml_python-1.23.0.dist-info/RECORD,,
File without changes