zenml-nightly 0.68.1.dev20241111__py3-none-any.whl → 0.68.1.dev20241112__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.
@@ -18,6 +18,7 @@ import json
18
18
  import logging
19
19
  import math
20
20
  import os
21
+ import random
21
22
  import re
22
23
  import sys
23
24
  import time
@@ -126,6 +127,7 @@ from zenml.exceptions import (
126
127
  ActionExistsError,
127
128
  AuthorizationException,
128
129
  BackupSecretsStoreNotConfiguredError,
130
+ EntityCreationError,
129
131
  EntityExistsError,
130
132
  EventSourceExistsError,
131
133
  IllegalOperationError,
@@ -372,6 +374,25 @@ logger = get_logger(__name__)
372
374
  ZENML_SQLITE_DB_FILENAME = "zenml.db"
373
375
 
374
376
 
377
+ def exponential_backoff_with_jitter(
378
+ attempt: int, base_duration: float = 0.05
379
+ ) -> float:
380
+ """Exponential backoff with jitter.
381
+
382
+ Implemented the `Full jitter` algorithm described in
383
+ https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
384
+
385
+ Args:
386
+ attempt: The backoff attempt.
387
+ base_duration: The backoff base duration.
388
+
389
+ Returns:
390
+ The backoff duration.
391
+ """
392
+ exponential_backoff = base_duration * 1.5**attempt
393
+ return random.uniform(0, exponential_backoff)
394
+
395
+
375
396
  class SQLDatabaseDriver(StrEnum):
376
397
  """SQL database drivers supported by the SQL ZenML store."""
377
398
 
@@ -2782,7 +2803,9 @@ class SqlZenStore(BaseZenStore):
2782
2803
  artifact_version: The artifact version to create.
2783
2804
 
2784
2805
  Raises:
2785
- EntityExistsError: If the artifact version already exists.
2806
+ EntityExistsError: If an artifact version with the same name
2807
+ already exists.
2808
+ EntityCreationError: If the artifact version creation failed.
2786
2809
 
2787
2810
  Returns:
2788
2811
  The created artifact version.
@@ -2823,7 +2846,7 @@ class SqlZenStore(BaseZenStore):
2823
2846
  artifact_version_id = artifact_version_schema.id
2824
2847
  except IntegrityError:
2825
2848
  if remaining_tries == 0:
2826
- raise EntityExistsError(
2849
+ raise EntityCreationError(
2827
2850
  f"Failed to create version for artifact "
2828
2851
  f"{artifact_schema.name}. This is most likely "
2829
2852
  "caused by multiple parallel requests that try "
@@ -2831,12 +2854,14 @@ class SqlZenStore(BaseZenStore):
2831
2854
  "database."
2832
2855
  )
2833
2856
  else:
2834
- # Exponential backoff to account for heavy
2835
- # parallelization
2836
- sleep_duration = 0.05 * 1.5 ** (
2857
+ attempt = (
2837
2858
  MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
2838
2859
  - remaining_tries
2839
2860
  )
2861
+ sleep_duration = exponential_backoff_with_jitter(
2862
+ attempt=attempt
2863
+ )
2864
+
2840
2865
  logger.debug(
2841
2866
  "Failed to create artifact version %s "
2842
2867
  "(version %s) due to an integrity error. "
@@ -4229,20 +4254,6 @@ class SqlZenStore(BaseZenStore):
4229
4254
  EntityExistsError: If an identical pipeline already exists.
4230
4255
  """
4231
4256
  with Session(self.engine) as session:
4232
- # Check if pipeline with the given name already exists
4233
- existing_pipeline = session.exec(
4234
- select(PipelineSchema)
4235
- .where(PipelineSchema.name == pipeline.name)
4236
- .where(PipelineSchema.workspace_id == pipeline.workspace)
4237
- ).first()
4238
- if existing_pipeline is not None:
4239
- raise EntityExistsError(
4240
- f"Unable to create pipeline in workspace "
4241
- f"'{pipeline.workspace}': A pipeline with this name "
4242
- "already exists."
4243
- )
4244
-
4245
- # Create the pipeline
4246
4257
  new_pipeline = PipelineSchema.from_request(pipeline)
4247
4258
 
4248
4259
  if pipeline.tags:
@@ -4253,7 +4264,14 @@ class SqlZenStore(BaseZenStore):
4253
4264
  )
4254
4265
 
4255
4266
  session.add(new_pipeline)
4256
- session.commit()
4267
+ try:
4268
+ session.commit()
4269
+ except IntegrityError:
4270
+ raise EntityExistsError(
4271
+ f"Unable to create pipeline in workspace "
4272
+ f"'{pipeline.workspace}': A pipeline with the name "
4273
+ f"{pipeline.name} already exists."
4274
+ )
4257
4275
  session.refresh(new_pipeline)
4258
4276
 
4259
4277
  return new_pipeline.to_model(
@@ -5097,6 +5115,26 @@ class SqlZenStore(BaseZenStore):
5097
5115
 
5098
5116
  # ----------------------------- Pipeline runs -----------------------------
5099
5117
 
5118
+ def _pipeline_run_exists(self, workspace_id: UUID, name: str) -> bool:
5119
+ """Check if a pipeline name with a certain name exists.
5120
+
5121
+ Args:
5122
+ workspace_id: The workspace to check.
5123
+ name: The run name.
5124
+
5125
+ Returns:
5126
+ If a pipeline run with the given name exists.
5127
+ """
5128
+ with Session(self.engine) as session:
5129
+ return (
5130
+ session.exec(
5131
+ select(PipelineRunSchema.id)
5132
+ .where(PipelineRunSchema.workspace_id == workspace_id)
5133
+ .where(PipelineRunSchema.name == name)
5134
+ ).first()
5135
+ is not None
5136
+ )
5137
+
5100
5138
  def create_run(
5101
5139
  self, pipeline_run: PipelineRunRequest
5102
5140
  ) -> PipelineRunResponse:
@@ -5112,18 +5150,6 @@ class SqlZenStore(BaseZenStore):
5112
5150
  EntityExistsError: If a run with the same name already exists.
5113
5151
  """
5114
5152
  with Session(self.engine) as session:
5115
- # Check if pipeline run with same name already exists.
5116
- existing_domain_run = session.exec(
5117
- select(PipelineRunSchema).where(
5118
- PipelineRunSchema.name == pipeline_run.name
5119
- )
5120
- ).first()
5121
- if existing_domain_run is not None:
5122
- raise EntityExistsError(
5123
- f"Unable to create pipeline run: A pipeline run with name "
5124
- f"'{pipeline_run.name}' already exists."
5125
- )
5126
-
5127
5153
  # Create the pipeline run
5128
5154
  new_run = PipelineRunSchema.from_request(pipeline_run)
5129
5155
 
@@ -5135,7 +5161,22 @@ class SqlZenStore(BaseZenStore):
5135
5161
  )
5136
5162
 
5137
5163
  session.add(new_run)
5138
- session.commit()
5164
+ try:
5165
+ session.commit()
5166
+ except IntegrityError:
5167
+ if self._pipeline_run_exists(
5168
+ workspace_id=pipeline_run.workspace, name=pipeline_run.name
5169
+ ):
5170
+ raise EntityExistsError(
5171
+ f"Unable to create pipeline run: A pipeline run with "
5172
+ f"name '{pipeline_run.name}' already exists."
5173
+ )
5174
+ else:
5175
+ raise EntityExistsError(
5176
+ "Unable to create pipeline run: A pipeline run with "
5177
+ "the same deployment_id and orchestrator_run_id "
5178
+ "already exists."
5179
+ )
5139
5180
 
5140
5181
  return new_run.to_model(
5141
5182
  include_metadata=True, include_resources=True
@@ -5327,21 +5368,14 @@ class SqlZenStore(BaseZenStore):
5327
5368
  if pre_creation_hook:
5328
5369
  pre_creation_hook()
5329
5370
  return self.create_run(pipeline_run), True
5330
- except (EntityExistsError, IntegrityError) as create_error:
5331
- # Creating the run failed with an
5332
- # - IntegrityError: This happens when we violated a unique
5333
- # constraint, which in turn means a run with the same
5334
- # deployment_id and orchestrator_run_id exists. We now fetch and
5335
- # return that run.
5336
- # - EntityExistsError: This happens when a run with the same name
5337
- # already exists. This could be either a different run (in which
5338
- # case we want to fail) or a run created by a step of the same
5339
- # pipeline run (in which case we want to return it).
5340
- # Note: The IntegrityError might also be raised when other unique
5341
- # constraints get violated. The only other such constraint is the
5342
- # primary key constraint on the run ID, which means we randomly
5343
- # generated an existing UUID. In this case the call below will fail,
5344
- # but the chance of that happening is so low we don't handle it.
5371
+ except EntityExistsError as create_error:
5372
+ # Creating the run failed because
5373
+ # - a run with the same deployment_id and orchestrator_run_id
5374
+ # exists. We now fetch and return that run.
5375
+ # - a run with the same name already exists. This could be either a
5376
+ # different run (in which case we want to fail) or a run created
5377
+ # by a step of the same pipeline run (in which case we want to
5378
+ # return it).
5345
5379
  try:
5346
5380
  return (
5347
5381
  self._get_run_by_orchestrator_run_id(
@@ -5351,18 +5385,11 @@ class SqlZenStore(BaseZenStore):
5351
5385
  False,
5352
5386
  )
5353
5387
  except KeyError:
5354
- if isinstance(create_error, EntityExistsError):
5355
- # There was a run with the same name which does not share
5356
- # the deployment_id and orchestrator_run_id -> We fail with
5357
- # the error that run names must be unique.
5358
- raise create_error from None
5359
-
5360
- # This should never happen as the run creation failed with an
5361
- # IntegrityError which means a run with the deployment_id and
5362
- # orchestrator_run_id exists.
5363
- raise RuntimeError(
5364
- f"Failed to get or create run: {create_error}"
5365
- )
5388
+ # We should only get here if the run creation failed because
5389
+ # of a name conflict. We raise the error that happened during
5390
+ # creation in any case to forward the error message to the
5391
+ # user.
5392
+ raise create_error
5366
5393
 
5367
5394
  def list_runs(
5368
5395
  self,
@@ -10000,19 +10027,10 @@ class SqlZenStore(BaseZenStore):
10000
10027
  The newly created model.
10001
10028
 
10002
10029
  Raises:
10003
- EntityExistsError: If a workspace with the given name already exists.
10030
+ EntityExistsError: If a model with the given name already exists.
10004
10031
  """
10005
10032
  validate_name(model)
10006
10033
  with Session(self.engine) as session:
10007
- existing_model = session.exec(
10008
- select(ModelSchema).where(ModelSchema.name == model.name)
10009
- ).first()
10010
- if existing_model is not None:
10011
- raise EntityExistsError(
10012
- f"Unable to create model {model.name}: "
10013
- "A model with this name already exists."
10014
- )
10015
-
10016
10034
  model_schema = ModelSchema.from_request(model)
10017
10035
  session.add(model_schema)
10018
10036
 
@@ -10022,7 +10040,14 @@ class SqlZenStore(BaseZenStore):
10022
10040
  resource_id=model_schema.id,
10023
10041
  resource_type=TaggableResourceTypes.MODEL,
10024
10042
  )
10025
- session.commit()
10043
+ try:
10044
+ session.commit()
10045
+ except IntegrityError:
10046
+ raise EntityExistsError(
10047
+ f"Unable to create model {model.name}: "
10048
+ "A model with this name already exists."
10049
+ )
10050
+
10026
10051
  return model_schema.to_model(
10027
10052
  include_metadata=True, include_resources=True
10028
10053
  )
@@ -10158,6 +10183,50 @@ class SqlZenStore(BaseZenStore):
10158
10183
 
10159
10184
  # ----------------------------- Model Versions -----------------------------
10160
10185
 
10186
+ def _get_next_numeric_version_for_model(
10187
+ self, session: Session, model_id: UUID
10188
+ ) -> int:
10189
+ """Get the next numeric version for a model.
10190
+
10191
+ Args:
10192
+ session: DB session.
10193
+ model_id: ID of the model for which to get the next numeric
10194
+ version.
10195
+
10196
+ Returns:
10197
+ The next numeric version.
10198
+ """
10199
+ current_max_version = session.exec(
10200
+ select(func.max(ModelVersionSchema.number)).where(
10201
+ ModelVersionSchema.model_id == model_id
10202
+ )
10203
+ ).first()
10204
+
10205
+ if current_max_version is None:
10206
+ return 1
10207
+ else:
10208
+ return int(current_max_version) + 1
10209
+
10210
+ def _model_version_exists(self, model_id: UUID, version: str) -> bool:
10211
+ """Check if a model version with a certain version exists.
10212
+
10213
+ Args:
10214
+ model_id: The model ID of the version.
10215
+ version: The version name.
10216
+
10217
+ Returns:
10218
+ If a model version with the given version name exists.
10219
+ """
10220
+ with Session(self.engine) as session:
10221
+ return (
10222
+ session.exec(
10223
+ select(ModelVersionSchema.id)
10224
+ .where(ModelVersionSchema.model_id == model_id)
10225
+ .where(ModelVersionSchema.name == version)
10226
+ ).first()
10227
+ is not None
10228
+ )
10229
+
10161
10230
  @track_decorator(AnalyticsEvent.CREATED_MODEL_VERSION)
10162
10231
  def create_model_version(
10163
10232
  self, model_version: ModelVersionRequest
@@ -10172,70 +10241,95 @@ class SqlZenStore(BaseZenStore):
10172
10241
 
10173
10242
  Raises:
10174
10243
  ValueError: If `number` is not None during model version creation.
10175
- EntityExistsError: If a workspace with the given name already exists.
10244
+ EntityExistsError: If a model version with the given name already
10245
+ exists.
10246
+ EntityCreationError: If the model version creation failed.
10176
10247
  """
10177
10248
  if model_version.number is not None:
10178
10249
  raise ValueError(
10179
10250
  "`number` field must be None during model version creation."
10180
10251
  )
10181
- with Session(self.engine) as session:
10182
- model_version_ = model_version.model_copy()
10183
- model = self.get_model(model_version_.model)
10184
10252
 
10185
- def _check(tolerance: int = 0) -> None:
10186
- query = session.exec(
10187
- select(ModelVersionSchema)
10188
- .where(ModelVersionSchema.model_id == model.id)
10189
- .where(ModelVersionSchema.name == model_version_.name)
10190
- )
10191
- existing_model_version = query.fetchmany(tolerance + 1)
10192
- if (
10193
- existing_model_version is not None
10194
- and len(existing_model_version) > tolerance
10195
- ):
10196
- raise EntityExistsError(
10197
- f"Unable to create model version {model_version_.name}: "
10198
- f"A model version with this name already exists in {model.name} model."
10199
- )
10253
+ model = self.get_model(model_version.model)
10200
10254
 
10201
- _check()
10202
- all_versions = session.exec(
10203
- select(ModelVersionSchema)
10204
- .where(ModelVersionSchema.model_id == model.id)
10205
- .order_by(ModelVersionSchema.number.desc()) # type: ignore[attr-defined]
10206
- ).first()
10255
+ has_custom_name = model_version.name is not None
10256
+ if has_custom_name:
10257
+ validate_name(model_version)
10207
10258
 
10208
- model_version_.number = (
10209
- all_versions.number + 1 if all_versions else 1
10210
- )
10259
+ model_version_id = None
10211
10260
 
10212
- if model_version_.name is None:
10213
- model_version_.name = str(model_version_.number)
10214
- else:
10215
- validate_name(model_version_)
10261
+ remaining_tries = MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
10262
+ while remaining_tries > 0:
10263
+ remaining_tries -= 1
10264
+ try:
10265
+ with Session(self.engine) as session:
10266
+ model_version.number = (
10267
+ self._get_next_numeric_version_for_model(
10268
+ session=session,
10269
+ model_id=model.id,
10270
+ )
10271
+ )
10272
+ if not has_custom_name:
10273
+ model_version.name = str(model_version.number)
10216
10274
 
10217
- model_version_schema = ModelVersionSchema.from_request(
10218
- model_version_
10219
- )
10220
- session.add(model_version_schema)
10275
+ model_version_schema = ModelVersionSchema.from_request(
10276
+ model_version
10277
+ )
10278
+ session.add(model_version_schema)
10279
+ session.commit()
10221
10280
 
10222
- if model_version_.tags:
10223
- self._attach_tags_to_resource(
10224
- tag_names=model_version_.tags,
10225
- resource_id=model_version_schema.id,
10226
- resource_type=TaggableResourceTypes.MODEL_VERSION,
10227
- )
10228
- try:
10229
- _check(1)
10230
- session.commit()
10231
- except EntityExistsError as e:
10232
- session.rollback()
10233
- raise e
10281
+ model_version_id = model_version_schema.id
10282
+ break
10283
+ except IntegrityError:
10284
+ if has_custom_name and self._model_version_exists(
10285
+ model_id=model.id, version=cast(str, model_version.name)
10286
+ ):
10287
+ # We failed not because of a version number conflict,
10288
+ # but because the user requested a version name that
10289
+ # is already taken -> We don't retry anymore but fail
10290
+ # immediately.
10291
+ raise EntityExistsError(
10292
+ f"Unable to create model version "
10293
+ f"{model.name} (version "
10294
+ f"{model_version.name}): A model with the "
10295
+ "same name and version already exists."
10296
+ )
10297
+ elif remaining_tries == 0:
10298
+ raise EntityCreationError(
10299
+ f"Failed to create version for model "
10300
+ f"{model.name}. This is most likely "
10301
+ "caused by multiple parallel requests that try "
10302
+ "to create versions for this model in the "
10303
+ "database."
10304
+ )
10305
+ else:
10306
+ attempt = (
10307
+ MAX_RETRIES_FOR_VERSIONED_ENTITY_CREATION
10308
+ - remaining_tries
10309
+ )
10310
+ sleep_duration = exponential_backoff_with_jitter(
10311
+ attempt=attempt
10312
+ )
10313
+ logger.debug(
10314
+ "Failed to create model version %s "
10315
+ "(version %s) due to an integrity error. "
10316
+ "Retrying in %f seconds.",
10317
+ model.name,
10318
+ model_version.number,
10319
+ sleep_duration,
10320
+ )
10321
+ time.sleep(sleep_duration)
10234
10322
 
10235
- return model_version_schema.to_model(
10236
- include_metadata=True, include_resources=True
10323
+ assert model_version_id
10324
+ if model_version.tags:
10325
+ self._attach_tags_to_resource(
10326
+ tag_names=model_version.tags,
10327
+ resource_id=model_version_id,
10328
+ resource_type=TaggableResourceTypes.MODEL_VERSION,
10237
10329
  )
10238
10330
 
10331
+ return self.get_model_version(model_version_id)
10332
+
10239
10333
  def get_model_version(
10240
10334
  self, model_version_id: UUID, hydrate: bool = True
10241
10335
  ) -> ModelVersionResponse:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zenml-nightly
3
- Version: 0.68.1.dev20241111
3
+ Version: 0.68.1.dev20241112
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  Home-page: https://zenml.io
6
6
  License: Apache-2.0
@@ -6,7 +6,7 @@ RELEASE_NOTES.md,sha256=oShLQurhMKncKnc_y7tiasEfgy1aCOOjxdpax-MlGI8,381641
6
6
  ROADMAP.md,sha256=hiLSmr16BH8Dfx7SaQM4JcXCGCVl6mFZPFAwJeDTrJU,407
7
7
  SECURITY.md,sha256=9DepA8y03yvCZLHEfcXLTDH4lUyKHquAdukBsccNN7c,682
8
8
  zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
9
- zenml/VERSION,sha256=IuisxGNbhi4gddTnFeqhXiX0t3p8HCnX_Fl3ZR2IU8k,19
9
+ zenml/VERSION,sha256=OXcTlmA2yd-HtC5NPhXEUs8HQPxAPaXHPaLm2ElMCyU,19
10
10
  zenml/__init__.py,sha256=XhLh9kV87ErcivCctQJaTtUOjl6kugT3pVyqqLKzBP8,2058
11
11
  zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
12
12
  zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
@@ -37,7 +37,7 @@ zenml/cli/__init__.py,sha256=o72CwXCP9TxQpS-FH9RZuDfA2FifFpIsISESNORh6aI,74915
37
37
  zenml/cli/annotator.py,sha256=tEdducGdFn57DFLJVZQ-MyXH1auTGFueRmDc78N-vPQ,6970
38
38
  zenml/cli/artifact.py,sha256=7lsAS52DroBTFkFWxkyb-lIDOGP5jPL_Se_RDG_2jgg,9564
39
39
  zenml/cli/authorized_device.py,sha256=_1PzE3BM2SmwtuzRliEMStvbBRKWQmg_lbwCRtn8dBg,4324
40
- zenml/cli/base.py,sha256=vBfKjkpcndZiWSsR56vJlJRYcZz4QASM80e7oZ0125g,28240
40
+ zenml/cli/base.py,sha256=oNLhgdwv8LlVLkHG2P_BwUIkZgbzEH055i86CHuB1bg,28240
41
41
  zenml/cli/cli.py,sha256=Pnq468IZ4oqzluA_gZ5PsrdnSPEyHcasIH-xI1_8Y_Q,5454
42
42
  zenml/cli/code_repository.py,sha256=7DNJMc7RL8GaU8DwX0mDSViLH9oclqhsX2AU-VWOKb8,6979
43
43
  zenml/cli/config.py,sha256=UI_j0a_zRgEUd2q0zuOi4UgbjiCYjMJ_Y9iSg-wi8Oo,2768
@@ -62,7 +62,7 @@ zenml/cli/user_management.py,sha256=fTuRworQahst_j78qPYTtgciUeUOxwo7efiyPwmj2tI,
62
62
  zenml/cli/utils.py,sha256=ULjd6QjzuWgSGpc6jhNXkp6n1LDtNVhnOnQr6B-lqj0,88071
63
63
  zenml/cli/version.py,sha256=nm1iSU_1V6-MUwpMKeXcwFhLYGUMLswvQL67cEuCpxA,3635
64
64
  zenml/cli/workspace.py,sha256=bp02aXou574ToWPD8OAIB_cg3mvpE011H8aMKegT-nU,2970
65
- zenml/client.py,sha256=TB1y4q-p-EiuL071amTvIkNdHC6gDwWRgMMmGTJaL44,281115
65
+ zenml/client.py,sha256=lFTdBaqyixQR_zuJ5Qf13q5W4Gwul6b729sFB0ll5ds,281152
66
66
  zenml/client_lazy_loader.py,sha256=MOBgS1ITYqGvPUnWQ6edn9s8Hr_72YfWbwEIfHKUr9g,7104
67
67
  zenml/code_repositories/__init__.py,sha256=W5bDfzAG8OXIKZSV1L-VHuzMcSCYa9qzTdPb3jqfyYw,920
68
68
  zenml/code_repositories/base_code_repository.py,sha256=_DbxIBxvJlN0PFhST0vlTIQ26Q6V3Nar0kYdeGaJrk8,4386
@@ -117,7 +117,7 @@ zenml/event_sources/base_event.py,sha256=irrpiYi4fDYewzaXtb6_gPsqyFlYYLSap2BTGQz
117
117
  zenml/event_sources/base_event_source.py,sha256=04ramQhcPhGD9Mo9BcJZR-b9fJb8a4wzvlPVMAb9Dyk,25893
118
118
  zenml/event_sources/webhooks/__init__.py,sha256=VsHzSn1oKFaUs495ZqsKCfXiYxtaeGsnSGuvuqbGXCg,658
119
119
  zenml/event_sources/webhooks/base_webhook_event_source.py,sha256=2zADrL3cNpD-akZRdemUePUnTl8pPMPVX6eFQgWeUSo,7371
120
- zenml/exceptions.py,sha256=DTctP4YMNVX_wL7Nrqq_qIMNDzB2GmSBsrlHFhBXzoI,9573
120
+ zenml/exceptions.py,sha256=lPJ3_uJYwK33hIC6uebDHcGVX-NU2L51Q5ulMChYqv0,9687
121
121
  zenml/experiment_trackers/__init__.py,sha256=b5XlKoRtMR1WBQVEiItolkpsa0iJ1IqxTmmRatr4YDw,1119
122
122
  zenml/experiment_trackers/base_experiment_tracker.py,sha256=K92w7c0r45qLPIsA3YmwPflaIl_WTK8-_Hh_1MQiLkE,2218
123
123
  zenml/feature_stores/__init__.py,sha256=tSW7YnDa3NDnlkX3yA_CTdX7ocWB9gsfF-7X9sc6i8Y,1415
@@ -150,7 +150,7 @@ zenml/integrations/aws/flavors/aws_container_registry_flavor.py,sha256=GIDLOySz1
150
150
  zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py,sha256=UyHXFP9rn9DQ-Erd9Rtqun9GTcp3Rftbn2a9Xysh_TU,12826
151
151
  zenml/integrations/aws/flavors/sagemaker_step_operator_flavor.py,sha256=OnNokixzGvOTBoZJQ5TDG3k4FFsP1pJmxbiij2VLW4s,5978
152
152
  zenml/integrations/aws/orchestrators/__init__.py,sha256=Wh0Fhtt_uo6YrkvXY9kL0M478FL7XpapjoFreUZbgUg,794
153
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py,sha256=dl_Sb3Kpaz9v6a_XHPYf4aBlHypKQAKmaFmPSZB-YBE,26543
153
+ zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py,sha256=7vSHeRFTuKFARe46gegnb20VW6qVtf5Nw6Lu2iyda5o,25952
154
154
  zenml/integrations/aws/orchestrators/sagemaker_orchestrator_entrypoint_config.py,sha256=WXCWdVojIZxx5_3-g1T95S2vsJ-RLNGcp-V409wgme0,1555
155
155
  zenml/integrations/aws/service_connectors/__init__.py,sha256=w2Md40yG89PwmU9eBceh6dGy3XYZ3MKusNAZ51sGOgE,783
156
156
  zenml/integrations/aws/service_connectors/aws_service_connector.py,sha256=O524UfOHJ3wRiPq7jpGPmgIWmn9ezhgmS5iilbyfNvg,92327
@@ -371,7 +371,7 @@ zenml/integrations/lightning/__init__.py,sha256=Wyj8P7ihX8DpOO4bmggM_Pq3HDwU02fj
371
371
  zenml/integrations/lightning/flavors/__init__.py,sha256=Ma949QQTTYw1Zw1fo6zSUXomXfXQRTPHY9N2wZGweMA,883
372
372
  zenml/integrations/lightning/flavors/lightning_orchestrator_flavor.py,sha256=prKhMbvbtEXWYbprM9udc4HJltwCNTKqCRqUZwWgJ2I,4853
373
373
  zenml/integrations/lightning/orchestrators/__init__.py,sha256=rUaCQPcbpAPy57jx8ZqEOjTJv8zigT_nCPrMdfQJ8OU,1030
374
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py,sha256=iI-lmLp-RFdxG9fUpEYzroSAruTZIhEuaMFMp2-TiHA,23917
374
+ zenml/integrations/lightning/orchestrators/lightning_orchestrator.py,sha256=6XGg-cKKRNCot6DI9ub4oZWF4_K41OHs1lT90FL8VsM,24712
375
375
  zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py,sha256=VHVXZ6jZ0URLhwaIPMyDmrnrBpYvzDnqQdIoSVM9m6E,11506
376
376
  zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint_configuration.py,sha256=B04oUPEA0X60rsjfurtsSHgyY1ejOkXxY8llWr1XD5o,2248
377
377
  zenml/integrations/lightning/orchestrators/utils.py,sha256=XbBYYnmfNCnoja4InAbt_UL5hzk2fcQcvpX8dQtm2rc,2058
@@ -604,7 +604,7 @@ zenml/metadata/lazy_load.py,sha256=DtYSkhdTr2LDJoq2GYkwfLHy-3xcVoOFu_y4PKhVU_o,2
604
604
  zenml/metadata/metadata_types.py,sha256=ts1EhF2qGZb8siKv1nkPSeFeyR2kbiIODkpk-hyoTxE,6745
605
605
  zenml/model/__init__.py,sha256=bFPHnWCgAGAjUPCmODHUmwbB0KGljNSEik857Yi-QX0,673
606
606
  zenml/model/lazy_load.py,sha256=nnu37QaIPU0peqVCEwG3k37LJe_D1i6RCs_8xoId6yk,4583
607
- zenml/model/model.py,sha256=4sAWrrX95XCslyV8JPT7u5hudTT44Tq82btmS3i2yl4,32814
607
+ zenml/model/model.py,sha256=C9a-BX70nOFpyNI0yUq6kNoA5-ocjywiaQqmtndlup0,30497
608
608
  zenml/model/utils.py,sha256=iG8BoWppZx9ujgnJUtjJtrIj2bvzGGPKdtrqTblfJek,6744
609
609
  zenml/model_deployers/__init__.py,sha256=oVBLtTfrNenl5OI1iqtQUvJ0vpocRVUN_HIt8qpoZmY,1730
610
610
  zenml/model_deployers/base_model_deployer.py,sha256=Xg5lxBFYM41vqxQhaB54Dxu_zLCyPDgqwrTyMcAxiS4,24609
@@ -730,10 +730,10 @@ zenml/stack/stack_component.py,sha256=sDMpC_vAws1_GeEFhGNEJ6J4EQ9P2Ez18uAd-pO9lm
730
730
  zenml/stack/stack_validator.py,sha256=hWbvvGIeWLj6NwSsF4GCc6RAxAWvxHXTcBZL9nJvcak,3111
731
731
  zenml/stack/utils.py,sha256=qHMFi8SVMSDFeZTFO4KkvaLUbF-l3B0_JZ5SSMxYrwI,6406
732
732
  zenml/stack_deployments/__init__.py,sha256=-7593cQ_ZgRn774Ol-8AKXXQquIU4DSiaThVEr6TfWM,644
733
- zenml/stack_deployments/aws_stack_deployment.py,sha256=Er8DYBCt9CVoo2KcMMEGOjn3Cgd3Rxobcr8lCRuNPkM,11155
734
- zenml/stack_deployments/azure_stack_deployment.py,sha256=2iXL3Q1eJiFj044tjzmjDgK04iIDhskNIGvFWszJx70,12661
735
- zenml/stack_deployments/gcp_stack_deployment.py,sha256=vuM4wh8VkZS5uJTtmARdPEGJe9GciIH_cQrq0GjLKkQ,12297
736
- zenml/stack_deployments/stack_deployment.py,sha256=CXr4GSxO6IPXRs_Ow7hil-s2QS-zgeAs_mtShOnPZUo,7610
733
+ zenml/stack_deployments/aws_stack_deployment.py,sha256=_bB0N3meKc0kH3gtysO0sIGp-80AUC44SYRvbqZMNg0,11450
734
+ zenml/stack_deployments/azure_stack_deployment.py,sha256=E0PhlmC_2Urf_7k1U7EoOHU21CbhY_3jZG0wXO1NcWI,13032
735
+ zenml/stack_deployments/gcp_stack_deployment.py,sha256=RD9Z0cZicZexUyK2YE0855LHu_VGOrLUnzy-QnrBRnA,12596
736
+ zenml/stack_deployments/stack_deployment.py,sha256=hrupbDuIfI6YhzHcmxNLsfnS7Qu_Pgv_5didiyv0msk,7572
737
737
  zenml/stack_deployments/utils.py,sha256=4rU0JM6wAmSLLlH7f9xk3g3EsacMHQYDTgN1OvU9pRs,1738
738
738
  zenml/step_operators/__init__.py,sha256=tqj7fgnQyZubLjwUu4ITwkA-70KMQz4g37agbfF7ZgE,1228
739
739
  zenml/step_operators/base_step_operator.py,sha256=ZRnY6lcEHY8xZskrKKdPhgKg2BlEoh2_kb8xCaM2D1g,3522
@@ -984,7 +984,7 @@ zenml/zen_server/deploy/helm/templates/server-service.yaml,sha256=PEYcze_4pKINKW
984
984
  zenml/zen_server/deploy/helm/templates/serviceaccount.yaml,sha256=4qX970F0O_SR1HSAMugyYAvwSN_63CqQofU4jV0YJO4,826
985
985
  zenml/zen_server/deploy/helm/templates/tests/test-connection.yaml,sha256=DPuf5tBRFLlxGLi8XgIbTG9nxaGn-8Z_oIkYJKjFBNs,379
986
986
  zenml/zen_server/deploy/helm/values.yaml,sha256=ci4vk2n3UbGoogcj-PgTcQRHF4nnGg9qMC-ZIGY8wWY,40445
987
- zenml/zen_server/exceptions.py,sha256=hHJODFRWY2cP5qDqwSMs4I0FR_cNA4MsO7zFRnvQLSc,9802
987
+ zenml/zen_server/exceptions.py,sha256=HunRj5SZolEYBZjrGCQsJ17bO6RJwkHLU5V8HLsfucE,9859
988
988
  zenml/zen_server/feature_gate/__init__.py,sha256=yabe4fBY6NSusn-QlKQDLOvXVLERNpcAQgigsyWQIbQ,612
989
989
  zenml/zen_server/feature_gate/endpoint_utils.py,sha256=upQzEOlrD5c6cg0TfxYVM4BKDHle3LIV_c7NZHoaKvg,2220
990
990
  zenml/zen_server/feature_gate/feature_gate_interface.py,sha256=AdYAsHiNbGaloxSHpm7DLSsa8CDEGu8ikyxp9U3a0wU,1639
@@ -1006,6 +1006,7 @@ zenml/zen_server/routers/code_repositories_endpoints.py,sha256=WFCRPsv3Qrm8QtCr5
1006
1006
  zenml/zen_server/routers/devices_endpoints.py,sha256=luqj7owGuQ-2LyAC6Pka7GjEVpYpfi_QDdFKXhWlXek,10712
1007
1007
  zenml/zen_server/routers/event_source_endpoints.py,sha256=dXupWrySV3LtxsqMVoYpUJ-OK7q6o6ehfuYW_RU1JlA,10379
1008
1008
  zenml/zen_server/routers/flavors_endpoints.py,sha256=6NDfPmPyhtCqUhGc-moYFRugJNp7gjxbSN479iJ4gTI,5462
1009
+ zenml/zen_server/routers/logs_endpoints.py,sha256=WMw0ZOEsBeib6msMz4ye66Eozv9BdDvF8GIwEZetfH8,1912
1009
1010
  zenml/zen_server/routers/model_versions_endpoints.py,sha256=9F2np2xbZJqvg_Rla0R0Pt_l-5dLpLMIoLnh7NU-tnI,11190
1010
1011
  zenml/zen_server/routers/models_endpoints.py,sha256=_spMFdxSpeNff0CUnA-7ybqEcr_BSWTAfsyIEah_M_Q,6484
1011
1012
  zenml/zen_server/routers/pipeline_builds_endpoints.py,sha256=SkFyhiknq0CqPEqfcrFw1fhAYy7bMe2KHe37bDJhsGM,3596
@@ -1035,7 +1036,7 @@ zenml/zen_server/template_execution/runner_entrypoint_configuration.py,sha256=Y8
1035
1036
  zenml/zen_server/template_execution/utils.py,sha256=R6KYPcTOv9K-mGTaOrF-DcAAGGRjJeocTiIDR1SvULE,16125
1036
1037
  zenml/zen_server/template_execution/workload_manager_interface.py,sha256=CL9c7z8ajuZE01DaHmdCDCZmsroDcTarvN-nE8jv6qQ,2590
1037
1038
  zenml/zen_server/utils.py,sha256=vJwJQYTVhmxUkMKF2G94q1EqDNLZvZKgGbVpVakYT6U,16456
1038
- zenml/zen_server/zen_server_api.py,sha256=bBTq6ttJiBQx0GJ_7Qq8w_TB6_URK5KjryEj9ReWEtw,16022
1039
+ zenml/zen_server/zen_server_api.py,sha256=ZyJpyq6MUHdvv8DcNVl-vFGhyyqRCMmFUbk3NpAxlNo,16084
1039
1040
  zenml/zen_stores/__init__.py,sha256=6LTgH6XwDeDxKqVJ1JTfGhmS8II1NLopPloINGmdyI0,691
1040
1041
  zenml/zen_stores/base_zen_store.py,sha256=n18GtHR7YlaFxfb6D1QBl2KeeCKraKJCldDuD_Yl7r4,15516
1041
1042
  zenml/zen_stores/migrations/README.md,sha256=x04jsb6EOP6PBEGMQlDELiqKEham2O-iztAs9AylMFc,4898
@@ -1178,6 +1179,7 @@ zenml/zen_stores/migrations/versions/7f603e583dd7_fixed_migration.py,sha256=UGwP
1178
1179
  zenml/zen_stores/migrations/versions/86fa52918b54_remove_teams_and_roles.py,sha256=HF-0PaDS6_ljZinJFwGZQldaHB8Znx9KkLPjwIl1KQI,4689
1179
1180
  zenml/zen_stores/migrations/versions/8a64fbfecda0_add_num_outputs_to_run_step.py,sha256=HyWQ-x8xvhwVHL6XFNwr1j8BynwNxzg3LJfpdPLKQ6I,1382
1180
1181
  zenml/zen_stores/migrations/versions/8ed03137cacc_polymorthic_run_metadata.py,sha256=7VvJXMPgnXYbjOnqh8EGkk_CYkBdis1rds9-JasBszo,4951
1182
+ zenml/zen_stores/migrations/versions/904464ea4041_add_pipeline_model_run_unique_constraints.py,sha256=buK-ahbcP72__xuTAb-_X1MZS4qymZaYaCsFJf4zM98,6304
1181
1183
  zenml/zen_stores/migrations/versions/909550c7c4da_remove_user_hub_token.py,sha256=q4RINS7CnY6qDg5wPV5P8Lbr8NHKHhXttTZRuHW4RdQ,989
1182
1184
  zenml/zen_stores/migrations/versions/93cbda80a732_add_service_accounts.py,sha256=XHQT_p4u0h6hfpCdrkWeLgdixDCCyGS4vA5faJW80fA,2332
1183
1185
  zenml/zen_stores/migrations/versions/979eff8fc4b1_add_code_repo_description_and_logo_url.py,sha256=RgFqiOIJEqEKFZ6Nl447ik1L929F1cv7yMd84qtFQqU,1218
@@ -1222,11 +1224,11 @@ zenml/zen_stores/schemas/device_schemas.py,sha256=m_P601TtB6thBpjf8muwI2X6INC-LC
1222
1224
  zenml/zen_stores/schemas/event_source_schemas.py,sha256=3CLt-TfJFQF-xJ6j5UnBFhNXMQTM-pLdIBazghyGmQw,6386
1223
1225
  zenml/zen_stores/schemas/flavor_schemas.py,sha256=LYAcoJeUX-Z87a0HYFwamhjf_wvMsTBcqY5z5232Jos,5049
1224
1226
  zenml/zen_stores/schemas/logs_schemas.py,sha256=qv6fs3JiVgzlmTXJqb_gG5NsU5q_50e0167JiWIxR14,3588
1225
- zenml/zen_stores/schemas/model_schemas.py,sha256=LhV3Yp-EVxbBUvDczAwJ4MRRTKLCil09kYbORW5AApw,25563
1227
+ zenml/zen_stores/schemas/model_schemas.py,sha256=_rUcVut9icxKMzwRNbBUL8gNz8JfdzOMBQX41Hu8l5E,26292
1226
1228
  zenml/zen_stores/schemas/pipeline_build_schemas.py,sha256=QK3sVPYhumUx_x-H3YZ-RfnsxGhKfkMGdP5FC9WrQgU,5718
1227
1229
  zenml/zen_stores/schemas/pipeline_deployment_schemas.py,sha256=ihJswWXvaXilyNS8RnOfnZM1Yi1B9t7PN8t7f1vOoho,10177
1228
- zenml/zen_stores/schemas/pipeline_run_schemas.py,sha256=DKfhUB0v_a6gPTdO4-fPS6ZkLqDYb_u1ziVpJMyaDIo,15881
1229
- zenml/zen_stores/schemas/pipeline_schemas.py,sha256=HjQfuH3WDpkf_gXPv5ExN6lMrzf82mHXttTqzdSitc0,5863
1230
+ zenml/zen_stores/schemas/pipeline_run_schemas.py,sha256=yUMSYwYWkHC5CG0csxYY1nO4pjmWeprv0X1G1dViZ2g,16015
1231
+ zenml/zen_stores/schemas/pipeline_schemas.py,sha256=fXqeq2U6qveP-6w46KPQ29xzDs5-GjwjemuThtnImOE,6048
1230
1232
  zenml/zen_stores/schemas/run_metadata_schemas.py,sha256=uvlb1FzGuY82gmixGAd0YAhZRjUgzgCGzA551a_YLqU,4533
1231
1233
  zenml/zen_stores/schemas/run_template_schemas.py,sha256=4uE7lHkIQROJRNpNdvATwEJMkeij6pXnHvOsT3q3VrI,8826
1232
1234
  zenml/zen_stores/schemas/schedule_schema.py,sha256=w3tAHt2mEQ7ILPz4ogRdLV4KivB7E2LtIZWkzXLzAIU,7354
@@ -1251,11 +1253,11 @@ zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py,sha256=NfW1EHIA99lseb
1251
1253
  zenml/zen_stores/secrets_stores/secrets_store_interface.py,sha256=Q2Jbnt2Pp7NGlR-u1YBfRZV2g8su2Fd0ArBMdksAE-Q,2819
1252
1254
  zenml/zen_stores/secrets_stores/service_connector_secrets_store.py,sha256=kPYX-Z_OOhZCI1CP77ncfV7IsV4e8brklnTXmKxZYNc,7078
1253
1255
  zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=Bq1djrUP9saoD7vECjS7-TlA_7sjJGgw1talri4spjU,8656
1254
- zenml/zen_stores/sql_zen_store.py,sha256=saIZxpsewtGjq1NXGb-0-9y8-dhxN67xjd15WwT4iLQ,401603
1256
+ zenml/zen_stores/sql_zen_store.py,sha256=v9aIoBght-Pjivr2OYxvANBOhSqx8cUOzZh0G_oJOnw,404327
1255
1257
  zenml/zen_stores/template_utils.py,sha256=EKYBgmDLTS_PSMWaIO5yvHPLiQvMqHcsAe6NUCrv-i4,9068
1256
1258
  zenml/zen_stores/zen_store_interface.py,sha256=vf2gKBWfUUPtcGZC35oQB6pPNVzWVyQC8nWxVLjfrxM,92692
1257
- zenml_nightly-0.68.1.dev20241111.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1258
- zenml_nightly-0.68.1.dev20241111.dist-info/METADATA,sha256=XKEwfylBPnGhqZZwVQJSozyTttLQE7joEa6Q01mA-Cs,21208
1259
- zenml_nightly-0.68.1.dev20241111.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
1260
- zenml_nightly-0.68.1.dev20241111.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1261
- zenml_nightly-0.68.1.dev20241111.dist-info/RECORD,,
1259
+ zenml_nightly-0.68.1.dev20241112.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
1260
+ zenml_nightly-0.68.1.dev20241112.dist-info/METADATA,sha256=njryqY3wwsHnI2hfY4BikEV_leS-fVXAW2LWkCtAcdE,21208
1261
+ zenml_nightly-0.68.1.dev20241112.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
1262
+ zenml_nightly-0.68.1.dev20241112.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
1263
+ zenml_nightly-0.68.1.dev20241112.dist-info/RECORD,,