zenml-nightly 0.70.0.dev20241122__py3-none-any.whl → 0.70.0.dev20241201__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.
- zenml/VERSION +1 -1
- zenml/artifact_stores/base_artifact_store.py +2 -2
- zenml/artifacts/artifact_config.py +7 -1
- zenml/artifacts/utils.py +56 -31
- zenml/cli/__init__.py +18 -0
- zenml/cli/base.py +4 -4
- zenml/cli/login.py +26 -0
- zenml/cli/pipeline.py +80 -0
- zenml/cli/server.py +1 -1
- zenml/cli/service_connectors.py +3 -3
- zenml/cli/stack.py +0 -3
- zenml/cli/stack_components.py +0 -1
- zenml/cli/utils.py +0 -5
- zenml/client.py +8 -18
- zenml/config/compiler.py +12 -3
- zenml/config/pipeline_configurations.py +20 -0
- zenml/config/pipeline_run_configuration.py +1 -0
- zenml/config/step_configurations.py +21 -0
- zenml/constants.py +1 -0
- zenml/enums.py +1 -0
- zenml/image_builders/local_image_builder.py +13 -3
- zenml/integrations/__init__.py +1 -0
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +14 -6
- zenml/integrations/constants.py +1 -0
- zenml/integrations/feast/__init__.py +1 -1
- zenml/integrations/feast/feature_stores/feast_feature_store.py +13 -9
- zenml/integrations/kubernetes/orchestrators/kube_utils.py +54 -9
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator.py +65 -3
- zenml/integrations/kubernetes/orchestrators/kubernetes_orchestrator_entrypoint.py +14 -2
- zenml/integrations/kubernetes/orchestrators/manifest_utils.py +6 -5
- zenml/integrations/kubernetes/service_connectors/kubernetes_service_connector.py +2 -1
- zenml/integrations/kubernetes/step_operators/kubernetes_step_operator.py +3 -1
- zenml/integrations/modal/__init__.py +46 -0
- zenml/integrations/modal/flavors/__init__.py +26 -0
- zenml/integrations/modal/flavors/modal_step_operator_flavor.py +125 -0
- zenml/integrations/modal/step_operators/__init__.py +22 -0
- zenml/integrations/modal/step_operators/modal_step_operator.py +242 -0
- zenml/io/filesystem.py +2 -2
- zenml/io/local_filesystem.py +3 -3
- zenml/materializers/built_in_materializer.py +18 -1
- zenml/materializers/structured_string_materializer.py +8 -3
- zenml/model/model.py +11 -85
- zenml/model/utils.py +18 -16
- zenml/models/__init__.py +12 -1
- zenml/models/v2/core/artifact_version.py +6 -3
- zenml/models/v2/core/component.py +0 -22
- zenml/models/v2/core/model_version.py +6 -3
- zenml/models/v2/core/pipeline_run.py +19 -3
- zenml/models/v2/core/run_metadata.py +30 -9
- zenml/models/v2/core/service_connector.py +4 -0
- zenml/models/v2/core/step_run.py +6 -4
- zenml/models/v2/misc/run_metadata.py +38 -0
- zenml/models/v2/misc/server_models.py +23 -0
- zenml/orchestrators/input_utils.py +19 -6
- zenml/orchestrators/publish_utils.py +12 -5
- zenml/orchestrators/step_launcher.py +7 -3
- zenml/orchestrators/step_run_utils.py +26 -9
- zenml/orchestrators/step_runner.py +40 -3
- zenml/orchestrators/utils.py +24 -23
- zenml/pipelines/pipeline_decorator.py +4 -0
- zenml/pipelines/pipeline_definition.py +26 -8
- zenml/pipelines/run_utils.py +9 -5
- zenml/steps/base_step.py +11 -1
- zenml/steps/entrypoint_function_utils.py +7 -3
- zenml/steps/step_decorator.py +4 -0
- zenml/steps/utils.py +23 -7
- zenml/types.py +4 -0
- zenml/utils/metadata_utils.py +186 -153
- zenml/utils/string_utils.py +41 -16
- zenml/utils/visualization_utils.py +4 -1
- zenml/zen_server/cloud_utils.py +3 -1
- zenml/zen_server/deploy/helm/templates/_environment.tpl +117 -0
- zenml/zen_server/deploy/helm/templates/server-db-job.yaml +3 -14
- zenml/zen_server/deploy/helm/templates/server-deployment.yaml +16 -4
- zenml/zen_server/deploy/helm/templates/server-secret.yaml +2 -17
- zenml/zen_server/rbac/endpoint_utils.py +6 -4
- zenml/zen_server/rbac/models.py +3 -2
- zenml/zen_server/rbac/utils.py +4 -7
- zenml/zen_server/routers/server_endpoints.py +47 -0
- zenml/zen_server/routers/users_endpoints.py +35 -37
- zenml/zen_server/routers/workspaces_endpoints.py +44 -55
- zenml/zen_server/template_execution/utils.py +1 -0
- zenml/zen_server/zen_server_api.py +45 -6
- zenml/zen_stores/migrations/utils.py +40 -24
- zenml/zen_stores/migrations/versions/b73bc71f1106_remove_component_spec_path.py +36 -0
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +135 -0
- zenml/zen_stores/migrations/versions/ec6307720f92_simplify_model_version_links.py +7 -6
- zenml/zen_stores/rest_zen_store.py +38 -1
- zenml/zen_stores/schemas/__init__.py +5 -1
- zenml/zen_stores/schemas/artifact_schemas.py +12 -11
- zenml/zen_stores/schemas/component_schemas.py +0 -3
- zenml/zen_stores/schemas/model_schemas.py +13 -11
- zenml/zen_stores/schemas/pipeline_run_schemas.py +44 -16
- zenml/zen_stores/schemas/run_metadata_schemas.py +66 -31
- zenml/zen_stores/schemas/step_run_schemas.py +32 -12
- zenml/zen_stores/schemas/utils.py +47 -3
- zenml/zen_stores/sql_zen_store.py +130 -34
- {zenml_nightly-0.70.0.dev20241122.dist-info → zenml_nightly-0.70.0.dev20241201.dist-info}/METADATA +1 -1
- {zenml_nightly-0.70.0.dev20241122.dist-info → zenml_nightly-0.70.0.dev20241201.dist-info}/RECORD +102 -95
- zenml/utils/cloud_utils.py +0 -40
- {zenml_nightly-0.70.0.dev20241122.dist-info → zenml_nightly-0.70.0.dev20241201.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.70.0.dev20241122.dist-info → zenml_nightly-0.70.0.dev20241201.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.70.0.dev20241122.dist-info → zenml_nightly-0.70.0.dev20241201.dist-info}/entry_points.txt +0 -0
@@ -26,6 +26,7 @@ from datetime import datetime, timezone
|
|
26
26
|
from functools import lru_cache
|
27
27
|
from pathlib import Path
|
28
28
|
from typing import (
|
29
|
+
TYPE_CHECKING,
|
29
30
|
Any,
|
30
31
|
Callable,
|
31
32
|
ClassVar,
|
@@ -219,6 +220,7 @@ from zenml.models import (
|
|
219
220
|
PipelineRunUpdate,
|
220
221
|
PipelineUpdate,
|
221
222
|
RunMetadataRequest,
|
223
|
+
RunMetadataResource,
|
222
224
|
RunTemplateFilter,
|
223
225
|
RunTemplateRequest,
|
224
226
|
RunTemplateResponse,
|
@@ -325,6 +327,7 @@ from zenml.zen_stores.schemas import (
|
|
325
327
|
PipelineDeploymentSchema,
|
326
328
|
PipelineRunSchema,
|
327
329
|
PipelineSchema,
|
330
|
+
RunMetadataResourceSchema,
|
328
331
|
RunMetadataSchema,
|
329
332
|
RunTemplateSchema,
|
330
333
|
ScheduleSchema,
|
@@ -354,6 +357,9 @@ from zenml.zen_stores.secrets_stores.sql_secrets_store import (
|
|
354
357
|
SqlSecretsStoreConfiguration,
|
355
358
|
)
|
356
359
|
|
360
|
+
if TYPE_CHECKING:
|
361
|
+
from zenml.metadata.metadata_types import MetadataType, MetadataTypeEnum
|
362
|
+
|
357
363
|
AnyNamedSchema = TypeVar("AnyNamedSchema", bound=NamedSchema)
|
358
364
|
AnySchema = TypeVar("AnySchema", bound=BaseSchema)
|
359
365
|
|
@@ -2726,7 +2732,9 @@ class SqlZenStore(BaseZenStore):
|
|
2726
2732
|
# -------------------- Artifact Versions --------------------
|
2727
2733
|
|
2728
2734
|
def _get_or_create_artifact_for_name(
|
2729
|
-
self,
|
2735
|
+
self,
|
2736
|
+
name: str,
|
2737
|
+
has_custom_name: bool,
|
2730
2738
|
) -> ArtifactSchema:
|
2731
2739
|
"""Get or create an artifact with a specific name.
|
2732
2740
|
|
@@ -2747,7 +2755,8 @@ class SqlZenStore(BaseZenStore):
|
|
2747
2755
|
try:
|
2748
2756
|
with session.begin_nested():
|
2749
2757
|
artifact_request = ArtifactRequest(
|
2750
|
-
name=name,
|
2758
|
+
name=name,
|
2759
|
+
has_custom_name=has_custom_name,
|
2751
2760
|
)
|
2752
2761
|
artifact = ArtifactSchema.from_request(
|
2753
2762
|
artifact_request
|
@@ -2915,17 +2924,41 @@ class SqlZenStore(BaseZenStore):
|
|
2915
2924
|
|
2916
2925
|
# Save metadata of the artifact
|
2917
2926
|
if artifact_version.metadata:
|
2927
|
+
values: Dict[str, "MetadataType"] = {}
|
2928
|
+
types: Dict[str, "MetadataTypeEnum"] = {}
|
2918
2929
|
for key, value in artifact_version.metadata.items():
|
2919
|
-
|
2920
|
-
|
2921
|
-
|
2922
|
-
|
2923
|
-
|
2924
|
-
|
2925
|
-
|
2926
|
-
|
2930
|
+
# Skip metadata that is too large to be stored in the DB.
|
2931
|
+
if len(json.dumps(value)) > TEXT_FIELD_MAX_LENGTH:
|
2932
|
+
logger.warning(
|
2933
|
+
f"Metadata value for key '{key}' is too large to be "
|
2934
|
+
"stored in the database. Skipping."
|
2935
|
+
)
|
2936
|
+
continue
|
2937
|
+
# Skip metadata that is not of a supported type.
|
2938
|
+
try:
|
2939
|
+
metadata_type = get_metadata_type(value)
|
2940
|
+
except ValueError as e:
|
2941
|
+
logger.warning(
|
2942
|
+
f"Metadata value for key '{key}' is not of a "
|
2943
|
+
f"supported type. Skipping. Full error: {e}"
|
2944
|
+
)
|
2945
|
+
continue
|
2946
|
+
values[key] = value
|
2947
|
+
types[key] = metadata_type
|
2948
|
+
self.create_run_metadata(
|
2949
|
+
RunMetadataRequest(
|
2950
|
+
workspace=artifact_version.workspace,
|
2951
|
+
user=artifact_version.user,
|
2952
|
+
resources=[
|
2953
|
+
RunMetadataResource(
|
2954
|
+
id=artifact_version_id,
|
2955
|
+
type=MetadataResourceTypes.ARTIFACT_VERSION,
|
2956
|
+
)
|
2957
|
+
],
|
2958
|
+
values=values,
|
2959
|
+
types=types,
|
2927
2960
|
)
|
2928
|
-
|
2961
|
+
)
|
2929
2962
|
|
2930
2963
|
session.commit()
|
2931
2964
|
artifact_version_schema = session.exec(
|
@@ -5329,6 +5362,19 @@ class SqlZenStore(BaseZenStore):
|
|
5329
5362
|
"orchestrator run ID."
|
5330
5363
|
)
|
5331
5364
|
|
5365
|
+
try:
|
5366
|
+
# We first try the most likely case that the run was already
|
5367
|
+
# created by a previous step in the same pipeline run.
|
5368
|
+
return (
|
5369
|
+
self._get_run_by_orchestrator_run_id(
|
5370
|
+
orchestrator_run_id=pipeline_run.orchestrator_run_id,
|
5371
|
+
deployment_id=pipeline_run.deployment,
|
5372
|
+
),
|
5373
|
+
False,
|
5374
|
+
)
|
5375
|
+
except KeyError:
|
5376
|
+
pass
|
5377
|
+
|
5332
5378
|
try:
|
5333
5379
|
return (
|
5334
5380
|
self._replace_placeholder_run(
|
@@ -5516,20 +5562,29 @@ class SqlZenStore(BaseZenStore):
|
|
5516
5562
|
The created run metadata.
|
5517
5563
|
"""
|
5518
5564
|
with Session(self.engine) as session:
|
5519
|
-
|
5520
|
-
|
5521
|
-
|
5522
|
-
|
5523
|
-
|
5524
|
-
|
5525
|
-
|
5526
|
-
|
5527
|
-
|
5528
|
-
|
5529
|
-
|
5530
|
-
|
5531
|
-
|
5532
|
-
|
5565
|
+
if run_metadata.resources:
|
5566
|
+
for key, value in run_metadata.values.items():
|
5567
|
+
type_ = run_metadata.types[key]
|
5568
|
+
run_metadata_schema = RunMetadataSchema(
|
5569
|
+
workspace_id=run_metadata.workspace,
|
5570
|
+
user_id=run_metadata.user,
|
5571
|
+
stack_component_id=run_metadata.stack_component_id,
|
5572
|
+
key=key,
|
5573
|
+
value=json.dumps(value),
|
5574
|
+
type=type_,
|
5575
|
+
publisher_step_id=run_metadata.publisher_step_id,
|
5576
|
+
)
|
5577
|
+
session.add(run_metadata_schema)
|
5578
|
+
session.commit()
|
5579
|
+
|
5580
|
+
for resource in run_metadata.resources:
|
5581
|
+
rm_resource_link = RunMetadataResourceSchema(
|
5582
|
+
resource_id=resource.id,
|
5583
|
+
resource_type=resource.type.value,
|
5584
|
+
run_metadata_id=run_metadata_schema.id,
|
5585
|
+
)
|
5586
|
+
session.add(rm_resource_link)
|
5587
|
+
session.commit()
|
5533
5588
|
return None
|
5534
5589
|
|
5535
5590
|
# ----------------------------- Schedules -----------------------------
|
@@ -8140,6 +8195,46 @@ class SqlZenStore(BaseZenStore):
|
|
8140
8195
|
)
|
8141
8196
|
session.add(log_entry)
|
8142
8197
|
|
8198
|
+
# If cached, attach metadata of the original step
|
8199
|
+
if (
|
8200
|
+
step_run.status == ExecutionStatus.CACHED
|
8201
|
+
and step_run.original_step_run_id is not None
|
8202
|
+
):
|
8203
|
+
original_metadata_links = session.exec(
|
8204
|
+
select(RunMetadataResourceSchema)
|
8205
|
+
.where(
|
8206
|
+
RunMetadataResourceSchema.run_metadata_id
|
8207
|
+
== RunMetadataSchema.id
|
8208
|
+
)
|
8209
|
+
.where(
|
8210
|
+
RunMetadataResourceSchema.resource_id
|
8211
|
+
== step_run.original_step_run_id
|
8212
|
+
)
|
8213
|
+
.where(
|
8214
|
+
RunMetadataResourceSchema.resource_type
|
8215
|
+
== MetadataResourceTypes.STEP_RUN
|
8216
|
+
)
|
8217
|
+
.where(
|
8218
|
+
RunMetadataSchema.publisher_step_id
|
8219
|
+
== step_run.original_step_run_id
|
8220
|
+
)
|
8221
|
+
).all()
|
8222
|
+
|
8223
|
+
# Create new links in a batch
|
8224
|
+
new_links = [
|
8225
|
+
RunMetadataResourceSchema(
|
8226
|
+
resource_id=step_schema.id,
|
8227
|
+
resource_type=link.resource_type,
|
8228
|
+
run_metadata_id=link.run_metadata_id,
|
8229
|
+
)
|
8230
|
+
for link in original_metadata_links
|
8231
|
+
]
|
8232
|
+
# Add all new links in a single operation
|
8233
|
+
session.add_all(new_links)
|
8234
|
+
# Commit the changes
|
8235
|
+
session.commit()
|
8236
|
+
session.refresh(step_schema)
|
8237
|
+
|
8143
8238
|
# Save parent step IDs into the database.
|
8144
8239
|
for parent_step_id in step_run.parent_step_ids:
|
8145
8240
|
self._set_run_step_parent_step(
|
@@ -8169,12 +8264,12 @@ class SqlZenStore(BaseZenStore):
|
|
8169
8264
|
)
|
8170
8265
|
|
8171
8266
|
# Save output artifact IDs into the database.
|
8172
|
-
for
|
8267
|
+
for name, artifact_version_ids in step_run.outputs.items():
|
8173
8268
|
for artifact_version_id in artifact_version_ids:
|
8174
8269
|
self._set_run_step_output_artifact(
|
8175
8270
|
step_run_id=step_schema.id,
|
8176
8271
|
artifact_version_id=artifact_version_id,
|
8177
|
-
name=
|
8272
|
+
name=name,
|
8178
8273
|
session=session,
|
8179
8274
|
)
|
8180
8275
|
|
@@ -8278,13 +8373,14 @@ class SqlZenStore(BaseZenStore):
|
|
8278
8373
|
session.add(existing_step_run)
|
8279
8374
|
|
8280
8375
|
# Update the artifacts.
|
8281
|
-
for name,
|
8282
|
-
|
8283
|
-
|
8284
|
-
|
8285
|
-
|
8286
|
-
|
8287
|
-
|
8376
|
+
for name, artifact_version_ids in step_run_update.outputs.items():
|
8377
|
+
for artifact_version_id in artifact_version_ids:
|
8378
|
+
self._set_run_step_output_artifact(
|
8379
|
+
step_run_id=step_run_id,
|
8380
|
+
artifact_version_id=artifact_version_id,
|
8381
|
+
name=name,
|
8382
|
+
session=session,
|
8383
|
+
)
|
8288
8384
|
|
8289
8385
|
# Update loaded artifacts.
|
8290
8386
|
for (
|