zenml-nightly 0.68.1.dev20241106__py3-none-any.whl → 0.68.1.dev20241108__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 (52) hide show
  1. zenml/VERSION +1 -1
  2. zenml/artifacts/external_artifact.py +2 -1
  3. zenml/artifacts/utils.py +133 -78
  4. zenml/cli/base.py +4 -4
  5. zenml/cli/model.py +1 -6
  6. zenml/cli/stack.py +1 -0
  7. zenml/client.py +21 -73
  8. zenml/constants.py +1 -0
  9. zenml/enums.py +12 -4
  10. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +1 -1
  11. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  12. zenml/integrations/evidently/__init__.py +1 -1
  13. zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
  14. zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
  15. zenml/integrations/vllm/services/vllm_deployment.py +16 -7
  16. zenml/metadata/lazy_load.py +20 -7
  17. zenml/model/model.py +1 -2
  18. zenml/models/__init__.py +0 -12
  19. zenml/models/v2/core/artifact_version.py +19 -7
  20. zenml/models/v2/core/model_version.py +3 -5
  21. zenml/models/v2/core/pipeline_run.py +3 -5
  22. zenml/models/v2/core/run_metadata.py +2 -217
  23. zenml/models/v2/core/step_run.py +40 -24
  24. zenml/orchestrators/input_utils.py +44 -19
  25. zenml/orchestrators/step_launcher.py +2 -2
  26. zenml/orchestrators/step_run_utils.py +19 -15
  27. zenml/orchestrators/step_runner.py +21 -13
  28. zenml/steps/base_step.py +1 -1
  29. zenml/steps/entrypoint_function_utils.py +3 -5
  30. zenml/steps/step_context.py +3 -2
  31. zenml/steps/utils.py +8 -2
  32. zenml/zen_server/rbac/endpoint_utils.py +43 -1
  33. zenml/zen_server/rbac/utils.py +0 -2
  34. zenml/zen_server/routers/artifact_version_endpoints.py +27 -1
  35. zenml/zen_server/routers/workspaces_endpoints.py +3 -4
  36. zenml/zen_server/zen_server_api.py +0 -2
  37. zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
  38. zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
  39. zenml/zen_stores/rest_zen_store.py +55 -54
  40. zenml/zen_stores/schemas/artifact_schemas.py +8 -1
  41. zenml/zen_stores/schemas/model_schemas.py +2 -2
  42. zenml/zen_stores/schemas/pipeline_run_schemas.py +1 -1
  43. zenml/zen_stores/schemas/run_metadata_schemas.py +1 -48
  44. zenml/zen_stores/schemas/step_run_schemas.py +18 -10
  45. zenml/zen_stores/sql_zen_store.py +68 -98
  46. zenml/zen_stores/zen_store_interface.py +15 -42
  47. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/METADATA +1 -1
  48. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/RECORD +51 -50
  49. zenml/zen_server/routers/run_metadata_endpoints.py +0 -96
  50. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/LICENSE +0 -0
  51. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/WHEEL +0 -0
  52. {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/entry_points.txt +0 -0
@@ -86,6 +86,7 @@ from zenml.config.global_config import GlobalConfiguration
86
86
  from zenml.config.pipeline_run_configuration import PipelineRunConfiguration
87
87
  from zenml.config.secrets_store_config import SecretsStoreConfiguration
88
88
  from zenml.config.server_config import ServerConfiguration
89
+ from zenml.config.step_configurations import StepConfiguration, StepSpec
89
90
  from zenml.config.store_config import StoreConfiguration
90
91
  from zenml.constants import (
91
92
  DEFAULT_PASSWORD,
@@ -118,7 +119,6 @@ from zenml.enums import (
118
119
  StackComponentType,
119
120
  StackDeploymentProvider,
120
121
  StepRunInputArtifactType,
121
- StepRunOutputArtifactType,
122
122
  StoreType,
123
123
  TaggableResourceTypes,
124
124
  )
@@ -216,9 +216,7 @@ from zenml.models import (
216
216
  PipelineRunResponse,
217
217
  PipelineRunUpdate,
218
218
  PipelineUpdate,
219
- RunMetadataFilter,
220
219
  RunMetadataRequest,
221
- RunMetadataResponse,
222
220
  RunTemplateFilter,
223
221
  RunTemplateRequest,
224
222
  RunTemplateResponse,
@@ -2915,6 +2913,22 @@ class SqlZenStore(BaseZenStore):
2915
2913
  include_metadata=True, include_resources=True
2916
2914
  )
2917
2915
 
2916
+ def batch_create_artifact_versions(
2917
+ self, artifact_versions: List[ArtifactVersionRequest]
2918
+ ) -> List[ArtifactVersionResponse]:
2919
+ """Creates a batch of artifact versions.
2920
+
2921
+ Args:
2922
+ artifact_versions: The artifact versions to create.
2923
+
2924
+ Returns:
2925
+ The created artifact versions.
2926
+ """
2927
+ return [
2928
+ self.create_artifact_version(artifact_version)
2929
+ for artifact_version in artifact_versions
2930
+ ]
2931
+
2918
2932
  def get_artifact_version(
2919
2933
  self, artifact_version_id: UUID, hydrate: bool = True
2920
2934
  ) -> ArtifactVersionResponse:
@@ -5465,9 +5479,7 @@ class SqlZenStore(BaseZenStore):
5465
5479
 
5466
5480
  # ----------------------------- Run Metadata -----------------------------
5467
5481
 
5468
- def create_run_metadata(
5469
- self, run_metadata: RunMetadataRequest
5470
- ) -> List[RunMetadataResponse]:
5482
+ def create_run_metadata(self, run_metadata: RunMetadataRequest) -> None:
5471
5483
  """Creates run metadata.
5472
5484
 
5473
5485
  Args:
@@ -5476,7 +5488,6 @@ class SqlZenStore(BaseZenStore):
5476
5488
  Returns:
5477
5489
  The created run metadata.
5478
5490
  """
5479
- return_value: List[RunMetadataResponse] = []
5480
5491
  with Session(self.engine) as session:
5481
5492
  for key, value in run_metadata.values.items():
5482
5493
  type_ = run_metadata.types[key]
@@ -5492,70 +5503,7 @@ class SqlZenStore(BaseZenStore):
5492
5503
  )
5493
5504
  session.add(run_metadata_schema)
5494
5505
  session.commit()
5495
- return_value.append(
5496
- run_metadata_schema.to_model(
5497
- include_metadata=True, include_resources=True
5498
- )
5499
- )
5500
- return return_value
5501
-
5502
- def get_run_metadata(
5503
- self, run_metadata_id: UUID, hydrate: bool = True
5504
- ) -> RunMetadataResponse:
5505
- """Gets run metadata with the given ID.
5506
-
5507
- Args:
5508
- run_metadata_id: The ID of the run metadata to get.
5509
- hydrate: Flag deciding whether to hydrate the output model(s)
5510
- by including metadata fields in the response.
5511
-
5512
- Returns:
5513
- The run metadata.
5514
-
5515
- Raises:
5516
- KeyError: if the run metadata doesn't exist.
5517
- """
5518
- with Session(self.engine) as session:
5519
- run_metadata = session.exec(
5520
- select(RunMetadataSchema).where(
5521
- RunMetadataSchema.id == run_metadata_id
5522
- )
5523
- ).first()
5524
- if run_metadata is None:
5525
- raise KeyError(
5526
- f"Unable to get run metadata with ID "
5527
- f"{run_metadata_id}: "
5528
- f"No run metadata with this ID found."
5529
- )
5530
- return run_metadata.to_model(
5531
- include_metadata=hydrate, include_resources=True
5532
- )
5533
-
5534
- def list_run_metadata(
5535
- self,
5536
- run_metadata_filter_model: RunMetadataFilter,
5537
- hydrate: bool = False,
5538
- ) -> Page[RunMetadataResponse]:
5539
- """List run metadata.
5540
-
5541
- Args:
5542
- run_metadata_filter_model: All filter parameters including
5543
- pagination params.
5544
- hydrate: Flag deciding whether to hydrate the output model(s)
5545
- by including metadata fields in the response.
5546
-
5547
- Returns:
5548
- The run metadata.
5549
- """
5550
- with Session(self.engine) as session:
5551
- query = select(RunMetadataSchema)
5552
- return self.filter_and_paginate(
5553
- session=session,
5554
- query=query,
5555
- table=RunMetadataSchema,
5556
- filter_model=run_metadata_filter_model,
5557
- hydrate=hydrate,
5558
- )
5506
+ return None
5559
5507
 
5560
5508
  # ----------------------------- Schedules -----------------------------
5561
5509
 
@@ -8173,25 +8121,35 @@ class SqlZenStore(BaseZenStore):
8173
8121
  session=session,
8174
8122
  )
8175
8123
 
8124
+ session.commit()
8125
+ session.refresh(step_schema)
8126
+
8127
+ step_model = step_schema.to_model(include_metadata=True)
8128
+
8176
8129
  # Save input artifact IDs into the database.
8177
8130
  for input_name, artifact_version_id in step_run.inputs.items():
8131
+ input_type = self._get_step_run_input_type(
8132
+ input_name=input_name,
8133
+ step_config=step_model.config,
8134
+ step_spec=step_model.spec,
8135
+ )
8178
8136
  self._set_run_step_input_artifact(
8179
8137
  run_step_id=step_schema.id,
8180
8138
  artifact_version_id=artifact_version_id,
8181
8139
  name=input_name,
8182
- input_type=StepRunInputArtifactType.DEFAULT,
8140
+ input_type=input_type,
8183
8141
  session=session,
8184
8142
  )
8185
8143
 
8186
8144
  # Save output artifact IDs into the database.
8187
- for output_name, artifact_version_id in step_run.outputs.items():
8188
- self._set_run_step_output_artifact(
8189
- step_run_id=step_schema.id,
8190
- artifact_version_id=artifact_version_id,
8191
- name=output_name,
8192
- output_type=StepRunOutputArtifactType.DEFAULT,
8193
- session=session,
8194
- )
8145
+ for output_name, artifact_version_ids in step_run.outputs.items():
8146
+ for artifact_version_id in artifact_version_ids:
8147
+ self._set_run_step_output_artifact(
8148
+ step_run_id=step_schema.id,
8149
+ artifact_version_id=artifact_version_id,
8150
+ name=output_name,
8151
+ session=session,
8152
+ )
8195
8153
 
8196
8154
  if step_run.status != ExecutionStatus.RUNNING:
8197
8155
  self._update_pipeline_run_status(
@@ -8199,6 +8157,7 @@ class SqlZenStore(BaseZenStore):
8199
8157
  )
8200
8158
 
8201
8159
  session.commit()
8160
+ session.refresh(step_schema)
8202
8161
 
8203
8162
  return step_schema.to_model(
8204
8163
  include_metadata=True, include_resources=True
@@ -8291,26 +8250,12 @@ class SqlZenStore(BaseZenStore):
8291
8250
  existing_step_run.update(step_run_update)
8292
8251
  session.add(existing_step_run)
8293
8252
 
8294
- # Update the output artifacts.
8253
+ # Update the artifacts.
8295
8254
  for name, artifact_version_id in step_run_update.outputs.items():
8296
8255
  self._set_run_step_output_artifact(
8297
8256
  step_run_id=step_run_id,
8298
8257
  artifact_version_id=artifact_version_id,
8299
8258
  name=name,
8300
- output_type=StepRunOutputArtifactType.DEFAULT,
8301
- session=session,
8302
- )
8303
-
8304
- # Update saved artifacts
8305
- for (
8306
- artifact_name,
8307
- artifact_version_id,
8308
- ) in step_run_update.saved_artifact_versions.items():
8309
- self._set_run_step_output_artifact(
8310
- step_run_id=step_run_id,
8311
- artifact_version_id=artifact_version_id,
8312
- name=artifact_name,
8313
- output_type=StepRunOutputArtifactType.MANUAL,
8314
8259
  session=session,
8315
8260
  )
8316
8261
 
@@ -8339,6 +8284,34 @@ class SqlZenStore(BaseZenStore):
8339
8284
  include_metadata=True, include_resources=True
8340
8285
  )
8341
8286
 
8287
+ def _get_step_run_input_type(
8288
+ self,
8289
+ input_name: str,
8290
+ step_config: StepConfiguration,
8291
+ step_spec: StepSpec,
8292
+ ) -> StepRunInputArtifactType:
8293
+ """Get the input type of an artifact.
8294
+
8295
+ Args:
8296
+ input_name: The name of the input artifact.
8297
+ step_config: The step config.
8298
+ step_spec: The step spec.
8299
+
8300
+ Returns:
8301
+ The input type of the artifact.
8302
+ """
8303
+ if input_name in step_spec.inputs:
8304
+ return StepRunInputArtifactType.STEP_OUTPUT
8305
+ if input_name in step_config.external_input_artifacts:
8306
+ return StepRunInputArtifactType.EXTERNAL
8307
+ elif (
8308
+ input_name in step_config.model_artifacts_or_metadata
8309
+ or input_name in step_config.client_lazy_loaders
8310
+ ):
8311
+ return StepRunInputArtifactType.LAZY_LOADED
8312
+ else:
8313
+ return StepRunInputArtifactType.MANUAL
8314
+
8342
8315
  @staticmethod
8343
8316
  def _set_run_step_parent_step(
8344
8317
  child_id: UUID, parent_id: UUID, session: Session
@@ -8457,7 +8430,6 @@ class SqlZenStore(BaseZenStore):
8457
8430
  step_run_id: UUID,
8458
8431
  artifact_version_id: UUID,
8459
8432
  name: str,
8460
- output_type: StepRunOutputArtifactType,
8461
8433
  session: Session,
8462
8434
  ) -> None:
8463
8435
  """Sets an artifact as an output of a step run.
@@ -8466,7 +8438,6 @@ class SqlZenStore(BaseZenStore):
8466
8438
  step_run_id: The ID of the step run.
8467
8439
  artifact_version_id: The ID of the artifact version.
8468
8440
  name: The name of the output in the step run.
8469
- output_type: In which way the artifact was saved by the step.
8470
8441
  session: The database session to use.
8471
8442
 
8472
8443
  Raises:
@@ -8510,7 +8481,6 @@ class SqlZenStore(BaseZenStore):
8510
8481
  step_id=step_run_id,
8511
8482
  artifact_id=artifact_version_id,
8512
8483
  name=name,
8513
- type=output_type.value,
8514
8484
  )
8515
8485
  session.add(assignment)
8516
8486
 
@@ -90,9 +90,7 @@ from zenml.models import (
90
90
  PipelineRunResponse,
91
91
  PipelineRunUpdate,
92
92
  PipelineUpdate,
93
- RunMetadataFilter,
94
93
  RunMetadataRequest,
95
- RunMetadataResponse,
96
94
  RunTemplateFilter,
97
95
  RunTemplateRequest,
98
96
  RunTemplateResponse,
@@ -663,6 +661,19 @@ class ZenStoreInterface(ABC):
663
661
  The created artifact version.
664
662
  """
665
663
 
664
+ @abstractmethod
665
+ def batch_create_artifact_versions(
666
+ self, artifact_versions: List[ArtifactVersionRequest]
667
+ ) -> List[ArtifactVersionResponse]:
668
+ """Creates a batch of artifact versions.
669
+
670
+ Args:
671
+ artifact_versions: The artifact versions to create.
672
+
673
+ Returns:
674
+ The created artifact versions.
675
+ """
676
+
666
677
  @abstractmethod
667
678
  def get_artifact_version(
668
679
  self, artifact_version_id: UUID, hydrate: bool = True
@@ -1620,52 +1631,14 @@ class ZenStoreInterface(ABC):
1620
1631
  # -------------------- Run metadata --------------------
1621
1632
 
1622
1633
  @abstractmethod
1623
- def create_run_metadata(
1624
- self, run_metadata: RunMetadataRequest
1625
- ) -> List[RunMetadataResponse]:
1634
+ def create_run_metadata(self, run_metadata: RunMetadataRequest) -> None:
1626
1635
  """Creates run metadata.
1627
1636
 
1628
1637
  Args:
1629
1638
  run_metadata: The run metadata to create.
1630
1639
 
1631
1640
  Returns:
1632
- The created run metadata.
1633
- """
1634
-
1635
- @abstractmethod
1636
- def get_run_metadata(
1637
- self, run_metadata_id: UUID, hydrate: bool = True
1638
- ) -> RunMetadataResponse:
1639
- """Get run metadata by its unique ID.
1640
-
1641
- Args:
1642
- run_metadata_id: The ID of the run metadata to get.
1643
- hydrate: Flag deciding whether to hydrate the output model(s)
1644
- by including metadata fields in the response.
1645
-
1646
- Returns:
1647
- The run metadata with the given ID.
1648
-
1649
- Raises:
1650
- KeyError: if the run metadata doesn't exist.
1651
- """
1652
-
1653
- @abstractmethod
1654
- def list_run_metadata(
1655
- self,
1656
- run_metadata_filter_model: RunMetadataFilter,
1657
- hydrate: bool = False,
1658
- ) -> Page[RunMetadataResponse]:
1659
- """List run metadata.
1660
-
1661
- Args:
1662
- run_metadata_filter_model: All filter parameters including
1663
- pagination params.
1664
- hydrate: Flag deciding whether to hydrate the output model(s)
1665
- by including metadata fields in the response.
1666
-
1667
- Returns:
1668
- The run metadata.
1641
+ None
1669
1642
  """
1670
1643
 
1671
1644
  # -------------------- Schedules --------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zenml-nightly
3
- Version: 0.68.1.dev20241106
3
+ Version: 0.68.1.dev20241108
4
4
  Summary: ZenML: Write production-ready ML code.
5
5
  Home-page: https://zenml.io
6
6
  License: Apache-2.0