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.
- zenml/VERSION +1 -1
- zenml/artifacts/external_artifact.py +2 -1
- zenml/artifacts/utils.py +133 -78
- zenml/cli/base.py +4 -4
- zenml/cli/model.py +1 -6
- zenml/cli/stack.py +1 -0
- zenml/client.py +21 -73
- zenml/constants.py +1 -0
- zenml/enums.py +12 -4
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +1 -1
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- zenml/integrations/evidently/__init__.py +1 -1
- zenml/integrations/gcp/orchestrators/vertex_orchestrator.py +1 -1
- zenml/integrations/tensorboard/visualizers/tensorboard_visualizer.py +60 -54
- zenml/integrations/vllm/services/vllm_deployment.py +16 -7
- zenml/metadata/lazy_load.py +20 -7
- zenml/model/model.py +1 -2
- zenml/models/__init__.py +0 -12
- zenml/models/v2/core/artifact_version.py +19 -7
- zenml/models/v2/core/model_version.py +3 -5
- zenml/models/v2/core/pipeline_run.py +3 -5
- zenml/models/v2/core/run_metadata.py +2 -217
- zenml/models/v2/core/step_run.py +40 -24
- zenml/orchestrators/input_utils.py +44 -19
- zenml/orchestrators/step_launcher.py +2 -2
- zenml/orchestrators/step_run_utils.py +19 -15
- zenml/orchestrators/step_runner.py +21 -13
- zenml/steps/base_step.py +1 -1
- zenml/steps/entrypoint_function_utils.py +3 -5
- zenml/steps/step_context.py +3 -2
- zenml/steps/utils.py +8 -2
- zenml/zen_server/rbac/endpoint_utils.py +43 -1
- zenml/zen_server/rbac/utils.py +0 -2
- zenml/zen_server/routers/artifact_version_endpoints.py +27 -1
- zenml/zen_server/routers/workspaces_endpoints.py +3 -4
- zenml/zen_server/zen_server_api.py +0 -2
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +99 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +33 -0
- zenml/zen_stores/rest_zen_store.py +55 -54
- zenml/zen_stores/schemas/artifact_schemas.py +8 -1
- zenml/zen_stores/schemas/model_schemas.py +2 -2
- zenml/zen_stores/schemas/pipeline_run_schemas.py +1 -1
- zenml/zen_stores/schemas/run_metadata_schemas.py +1 -48
- zenml/zen_stores/schemas/step_run_schemas.py +18 -10
- zenml/zen_stores/sql_zen_store.py +68 -98
- zenml/zen_stores/zen_store_interface.py +15 -42
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/METADATA +1 -1
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/RECORD +51 -50
- zenml/zen_server/routers/run_metadata_endpoints.py +0 -96
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.68.1.dev20241106.dist-info → zenml_nightly-0.68.1.dev20241108.dist-info}/entry_points.txt +0 -0
@@ -13,12 +13,13 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Endpoint definitions for artifact versions."""
|
15
15
|
|
16
|
+
from typing import List
|
16
17
|
from uuid import UUID
|
17
18
|
|
18
19
|
from fastapi import APIRouter, Depends, Security
|
19
20
|
|
20
21
|
from zenml.artifacts.utils import load_artifact_visualization
|
21
|
-
from zenml.constants import API, ARTIFACT_VERSIONS, VERSION_1, VISUALIZE
|
22
|
+
from zenml.constants import API, ARTIFACT_VERSIONS, BATCH, VERSION_1, VISUALIZE
|
22
23
|
from zenml.models import (
|
23
24
|
ArtifactVersionFilter,
|
24
25
|
ArtifactVersionRequest,
|
@@ -30,6 +31,7 @@ from zenml.models import (
|
|
30
31
|
from zenml.zen_server.auth import AuthContext, authorize
|
31
32
|
from zenml.zen_server.exceptions import error_response
|
32
33
|
from zenml.zen_server.rbac.endpoint_utils import (
|
34
|
+
verify_permissions_and_batch_create_entity,
|
33
35
|
verify_permissions_and_create_entity,
|
34
36
|
verify_permissions_and_delete_entity,
|
35
37
|
verify_permissions_and_get_entity,
|
@@ -118,6 +120,30 @@ def create_artifact_version(
|
|
118
120
|
)
|
119
121
|
|
120
122
|
|
123
|
+
@artifact_version_router.post(
|
124
|
+
BATCH,
|
125
|
+
responses={401: error_response, 409: error_response, 422: error_response},
|
126
|
+
)
|
127
|
+
@handle_exceptions
|
128
|
+
def batch_create_artifact_version(
|
129
|
+
artifact_versions: List[ArtifactVersionRequest],
|
130
|
+
_: AuthContext = Security(authorize),
|
131
|
+
) -> List[ArtifactVersionResponse]:
|
132
|
+
"""Create a batch of artifact versions.
|
133
|
+
|
134
|
+
Args:
|
135
|
+
artifact_versions: The artifact versions to create.
|
136
|
+
|
137
|
+
Returns:
|
138
|
+
The created artifact versions.
|
139
|
+
"""
|
140
|
+
return verify_permissions_and_batch_create_entity(
|
141
|
+
batch=artifact_versions,
|
142
|
+
resource_type=ResourceType.ARTIFACT_VERSION,
|
143
|
+
create_method=zen_store().batch_create_artifact_versions,
|
144
|
+
)
|
145
|
+
|
146
|
+
|
121
147
|
@artifact_version_router.get(
|
122
148
|
"/{artifact_version_id}",
|
123
149
|
response_model=ArtifactVersionResponse,
|
@@ -74,7 +74,6 @@ from zenml.models import (
|
|
74
74
|
PipelineRunRequest,
|
75
75
|
PipelineRunResponse,
|
76
76
|
RunMetadataRequest,
|
77
|
-
RunMetadataResponse,
|
78
77
|
RunTemplateFilter,
|
79
78
|
RunTemplateRequest,
|
80
79
|
RunTemplateResponse,
|
@@ -977,7 +976,6 @@ def get_or_create_pipeline_run(
|
|
977
976
|
|
978
977
|
@router.post(
|
979
978
|
WORKSPACES + "/{workspace_name_or_id}" + RUN_METADATA,
|
980
|
-
response_model=List[RunMetadataResponse],
|
981
979
|
responses={401: error_response, 409: error_response, 422: error_response},
|
982
980
|
)
|
983
981
|
@handle_exceptions
|
@@ -985,7 +983,7 @@ def create_run_metadata(
|
|
985
983
|
workspace_name_or_id: Union[str, UUID],
|
986
984
|
run_metadata: RunMetadataRequest,
|
987
985
|
auth_context: AuthContext = Security(authorize),
|
988
|
-
) ->
|
986
|
+
) -> None:
|
989
987
|
"""Creates run metadata.
|
990
988
|
|
991
989
|
Args:
|
@@ -1039,7 +1037,8 @@ def create_run_metadata(
|
|
1039
1037
|
resource_type=ResourceType.RUN_METADATA, action=Action.CREATE
|
1040
1038
|
)
|
1041
1039
|
|
1042
|
-
|
1040
|
+
zen_store().create_run_metadata(run_metadata)
|
1041
|
+
return None
|
1043
1042
|
|
1044
1043
|
|
1045
1044
|
@router.post(
|
@@ -70,7 +70,6 @@ from zenml.zen_server.routers import (
|
|
70
70
|
pipeline_deployments_endpoints,
|
71
71
|
pipelines_endpoints,
|
72
72
|
plugin_endpoints,
|
73
|
-
run_metadata_endpoints,
|
74
73
|
run_templates_endpoints,
|
75
74
|
runs_endpoints,
|
76
75
|
schedule_endpoints,
|
@@ -423,7 +422,6 @@ app.include_router(pipelines_endpoints.router)
|
|
423
422
|
app.include_router(pipeline_builds_endpoints.router)
|
424
423
|
app.include_router(pipeline_deployments_endpoints.router)
|
425
424
|
app.include_router(runs_endpoints.router)
|
426
|
-
app.include_router(run_metadata_endpoints.router)
|
427
425
|
app.include_router(run_templates_endpoints.router)
|
428
426
|
app.include_router(schedule_endpoints.router)
|
429
427
|
app.include_router(secrets_endpoints.router)
|
@@ -0,0 +1,99 @@
|
|
1
|
+
"""move artifact save type [1cb6477f72d6].
|
2
|
+
|
3
|
+
Revision ID: 1cb6477f72d6
|
4
|
+
Revises: c22561cbb3a9
|
5
|
+
Create Date: 2024-10-10 15:44:09.465210
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
import sqlalchemy as sa
|
10
|
+
from alembic import op
|
11
|
+
|
12
|
+
# revision identifiers, used by Alembic.
|
13
|
+
revision = "1cb6477f72d6"
|
14
|
+
down_revision = "c22561cbb3a9"
|
15
|
+
branch_labels = None
|
16
|
+
depends_on = None
|
17
|
+
|
18
|
+
|
19
|
+
def upgrade() -> None:
|
20
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
21
|
+
# Step 1: Add nullable save_type column to artifact_version
|
22
|
+
with op.batch_alter_table("artifact_version", schema=None) as batch_op:
|
23
|
+
batch_op.add_column(sa.Column("save_type", sa.TEXT(), nullable=True))
|
24
|
+
|
25
|
+
# Step 2: Move data from step_run_output_artifact.type to artifact_version.save_type
|
26
|
+
op.execute("""
|
27
|
+
UPDATE artifact_version
|
28
|
+
SET save_type = (
|
29
|
+
SELECT max(step_run_output_artifact.type)
|
30
|
+
FROM step_run_output_artifact
|
31
|
+
WHERE step_run_output_artifact.artifact_id = artifact_version.id
|
32
|
+
GROUP BY artifact_id
|
33
|
+
)
|
34
|
+
""")
|
35
|
+
op.execute("""
|
36
|
+
UPDATE artifact_version
|
37
|
+
SET save_type = 'step_output'
|
38
|
+
WHERE artifact_version.save_type = 'default'
|
39
|
+
""")
|
40
|
+
op.execute("""
|
41
|
+
UPDATE artifact_version
|
42
|
+
SET save_type = 'external'
|
43
|
+
WHERE save_type is NULL
|
44
|
+
""")
|
45
|
+
|
46
|
+
# # Step 3: Set save_type to non-nullable
|
47
|
+
with op.batch_alter_table("artifact_version", schema=None) as batch_op:
|
48
|
+
batch_op.alter_column(
|
49
|
+
"save_type",
|
50
|
+
existing_type=sa.TEXT(),
|
51
|
+
nullable=False,
|
52
|
+
)
|
53
|
+
|
54
|
+
# Step 4: Remove type column from step_run_output_artifact
|
55
|
+
with op.batch_alter_table(
|
56
|
+
"step_run_output_artifact", schema=None
|
57
|
+
) as batch_op:
|
58
|
+
batch_op.drop_column("type")
|
59
|
+
|
60
|
+
|
61
|
+
def downgrade() -> None:
|
62
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
63
|
+
# Add type column back to step_run_output_artifact
|
64
|
+
with op.batch_alter_table(
|
65
|
+
"step_run_output_artifact", schema=None
|
66
|
+
) as batch_op:
|
67
|
+
batch_op.add_column(
|
68
|
+
sa.Column("type", sa.TEXT(), nullable=True),
|
69
|
+
)
|
70
|
+
|
71
|
+
# Move data back from artifact_version.save_type to step_run_output_artifact.type
|
72
|
+
op.execute("""
|
73
|
+
UPDATE step_run_output_artifact
|
74
|
+
SET type = (
|
75
|
+
SELECT max(artifact_version.save_type)
|
76
|
+
FROM artifact_version
|
77
|
+
WHERE step_run_output_artifact.artifact_id = artifact_version.id
|
78
|
+
GROUP BY artifact_id
|
79
|
+
)
|
80
|
+
""")
|
81
|
+
op.execute("""
|
82
|
+
UPDATE step_run_output_artifact
|
83
|
+
SET type = 'default'
|
84
|
+
WHERE step_run_output_artifact.type = 'step_output'
|
85
|
+
""")
|
86
|
+
|
87
|
+
# Set type to non-nullable
|
88
|
+
with op.batch_alter_table(
|
89
|
+
"step_run_output_artifact", schema=None
|
90
|
+
) as batch_op:
|
91
|
+
batch_op.alter_column(
|
92
|
+
"type",
|
93
|
+
existing_type=sa.TEXT(),
|
94
|
+
nullable=False,
|
95
|
+
)
|
96
|
+
|
97
|
+
# Remove save_type column from artifact_version
|
98
|
+
with op.batch_alter_table("artifact_version", schema=None) as batch_op:
|
99
|
+
batch_op.drop_column("save_type")
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"""Update step run input types [b557b2871693].
|
2
|
+
|
3
|
+
Revision ID: b557b2871693
|
4
|
+
Revises: 1cb6477f72d6
|
5
|
+
Create Date: 2024-10-30 13:06:55.147202
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
from alembic import op
|
10
|
+
|
11
|
+
# revision identifiers, used by Alembic.
|
12
|
+
revision = "b557b2871693"
|
13
|
+
down_revision = "1cb6477f72d6"
|
14
|
+
branch_labels = None
|
15
|
+
depends_on = None
|
16
|
+
|
17
|
+
|
18
|
+
def upgrade() -> None:
|
19
|
+
"""Upgrade database schema and/or data, creating a new revision."""
|
20
|
+
op.execute("""
|
21
|
+
UPDATE step_run_input_artifact
|
22
|
+
SET type = 'step_output'
|
23
|
+
WHERE type = 'default'
|
24
|
+
""")
|
25
|
+
|
26
|
+
|
27
|
+
def downgrade() -> None:
|
28
|
+
"""Downgrade database schema and/or data back to the previous revision."""
|
29
|
+
op.execute("""
|
30
|
+
UPDATE step_run_input_artifact
|
31
|
+
SET type = 'default'
|
32
|
+
WHERE type = 'step_output'
|
33
|
+
""")
|
@@ -57,6 +57,7 @@ from zenml.constants import (
|
|
57
57
|
ARTIFACT_VERSIONS,
|
58
58
|
ARTIFACT_VISUALIZATIONS,
|
59
59
|
ARTIFACTS,
|
60
|
+
BATCH,
|
60
61
|
CODE_REFERENCES,
|
61
62
|
CODE_REPOSITORIES,
|
62
63
|
CONFIG,
|
@@ -200,9 +201,7 @@ from zenml.models import (
|
|
200
201
|
PipelineRunResponse,
|
201
202
|
PipelineRunUpdate,
|
202
203
|
PipelineUpdate,
|
203
|
-
RunMetadataFilter,
|
204
204
|
RunMetadataRequest,
|
205
|
-
RunMetadataResponse,
|
206
205
|
RunTemplateFilter,
|
207
206
|
RunTemplateRequest,
|
208
207
|
RunTemplateResponse,
|
@@ -991,6 +990,23 @@ class RestZenStore(BaseZenStore):
|
|
991
990
|
route=ARTIFACT_VERSIONS,
|
992
991
|
)
|
993
992
|
|
993
|
+
def batch_create_artifact_versions(
|
994
|
+
self, artifact_versions: List[ArtifactVersionRequest]
|
995
|
+
) -> List[ArtifactVersionResponse]:
|
996
|
+
"""Creates a batch of artifact versions.
|
997
|
+
|
998
|
+
Args:
|
999
|
+
artifact_versions: The artifact versions to create.
|
1000
|
+
|
1001
|
+
Returns:
|
1002
|
+
The created artifact versions.
|
1003
|
+
"""
|
1004
|
+
return self._batch_create_resources(
|
1005
|
+
resources=artifact_versions,
|
1006
|
+
response_model=ArtifactVersionResponse,
|
1007
|
+
route=ARTIFACT_VERSIONS,
|
1008
|
+
)
|
1009
|
+
|
994
1010
|
def get_artifact_version(
|
995
1011
|
self, artifact_version_id: UUID, hydrate: bool = True
|
996
1012
|
) -> ArtifactVersionResponse:
|
@@ -1996,9 +2012,7 @@ class RestZenStore(BaseZenStore):
|
|
1996
2012
|
|
1997
2013
|
# ----------------------------- Run Metadata -----------------------------
|
1998
2014
|
|
1999
|
-
def create_run_metadata(
|
2000
|
-
self, run_metadata: RunMetadataRequest
|
2001
|
-
) -> List[RunMetadataResponse]:
|
2015
|
+
def create_run_metadata(self, run_metadata: RunMetadataRequest) -> None:
|
2002
2016
|
"""Creates run metadata.
|
2003
2017
|
|
2004
2018
|
Args:
|
@@ -2008,55 +2022,8 @@ class RestZenStore(BaseZenStore):
|
|
2008
2022
|
The created run metadata.
|
2009
2023
|
"""
|
2010
2024
|
route = f"{WORKSPACES}/{str(run_metadata.workspace)}{RUN_METADATA}"
|
2011
|
-
|
2012
|
-
|
2013
|
-
if isinstance(response_body, list):
|
2014
|
-
for metadata in response_body or []:
|
2015
|
-
result.append(RunMetadataResponse.model_validate(metadata))
|
2016
|
-
return result
|
2017
|
-
|
2018
|
-
def get_run_metadata(
|
2019
|
-
self, run_metadata_id: UUID, hydrate: bool = True
|
2020
|
-
) -> RunMetadataResponse:
|
2021
|
-
"""Gets run metadata with the given ID.
|
2022
|
-
|
2023
|
-
Args:
|
2024
|
-
run_metadata_id: The ID of the run metadata to get.
|
2025
|
-
hydrate: Flag deciding whether to hydrate the output model(s)
|
2026
|
-
by including metadata fields in the response.
|
2027
|
-
|
2028
|
-
Returns:
|
2029
|
-
The run metadata.
|
2030
|
-
"""
|
2031
|
-
return self._get_resource(
|
2032
|
-
resource_id=run_metadata_id,
|
2033
|
-
route=RUN_METADATA,
|
2034
|
-
response_model=RunMetadataResponse,
|
2035
|
-
params={"hydrate": hydrate},
|
2036
|
-
)
|
2037
|
-
|
2038
|
-
def list_run_metadata(
|
2039
|
-
self,
|
2040
|
-
run_metadata_filter_model: RunMetadataFilter,
|
2041
|
-
hydrate: bool = False,
|
2042
|
-
) -> Page[RunMetadataResponse]:
|
2043
|
-
"""List run metadata.
|
2044
|
-
|
2045
|
-
Args:
|
2046
|
-
run_metadata_filter_model: All filter parameters including
|
2047
|
-
pagination params.
|
2048
|
-
hydrate: Flag deciding whether to hydrate the output model(s)
|
2049
|
-
by including metadata fields in the response.
|
2050
|
-
|
2051
|
-
Returns:
|
2052
|
-
The run metadata.
|
2053
|
-
"""
|
2054
|
-
return self._list_paginated_resources(
|
2055
|
-
route=RUN_METADATA,
|
2056
|
-
response_model=RunMetadataResponse,
|
2057
|
-
filter_model=run_metadata_filter_model,
|
2058
|
-
params={"hydrate": hydrate},
|
2059
|
-
)
|
2025
|
+
self.post(f"{route}", body=run_metadata)
|
2026
|
+
return None
|
2060
2027
|
|
2061
2028
|
# ----------------------------- Schedules -----------------------------
|
2062
2029
|
|
@@ -4518,6 +4485,40 @@ class RestZenStore(BaseZenStore):
|
|
4518
4485
|
|
4519
4486
|
return response_model.model_validate(response_body)
|
4520
4487
|
|
4488
|
+
def _batch_create_resources(
|
4489
|
+
self,
|
4490
|
+
resources: List[AnyRequest],
|
4491
|
+
response_model: Type[AnyResponse],
|
4492
|
+
route: str,
|
4493
|
+
params: Optional[Dict[str, Any]] = None,
|
4494
|
+
) -> List[AnyResponse]:
|
4495
|
+
"""Create a new batch of resources.
|
4496
|
+
|
4497
|
+
Args:
|
4498
|
+
resources: The resources to create.
|
4499
|
+
response_model: The response model of an individual resource.
|
4500
|
+
route: The resource REST route to use.
|
4501
|
+
params: Optional query parameters to pass to the endpoint.
|
4502
|
+
|
4503
|
+
Returns:
|
4504
|
+
List of response models.
|
4505
|
+
"""
|
4506
|
+
json_data = [
|
4507
|
+
resource.model_dump(mode="json") for resource in resources
|
4508
|
+
]
|
4509
|
+
response = self._request(
|
4510
|
+
"POST",
|
4511
|
+
self.url + API + VERSION_1 + route + BATCH,
|
4512
|
+
json=json_data,
|
4513
|
+
params=params,
|
4514
|
+
)
|
4515
|
+
assert isinstance(response, list)
|
4516
|
+
|
4517
|
+
return [
|
4518
|
+
response_model.model_validate(model_data)
|
4519
|
+
for model_data in response
|
4520
|
+
]
|
4521
|
+
|
4521
4522
|
def _create_workspace_scoped_resource(
|
4522
4523
|
self,
|
4523
4524
|
resource: AnyWorkspaceScopedRequest,
|
@@ -13,6 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation of artifact table."""
|
15
15
|
|
16
|
+
import json
|
16
17
|
from datetime import datetime
|
17
18
|
from typing import TYPE_CHECKING, Any, List, Optional
|
18
19
|
from uuid import UUID
|
@@ -23,6 +24,7 @@ from sqlmodel import Field, Relationship
|
|
23
24
|
|
24
25
|
from zenml.config.source import Source
|
25
26
|
from zenml.enums import (
|
27
|
+
ArtifactSaveType,
|
26
28
|
ArtifactType,
|
27
29
|
ExecutionStatus,
|
28
30
|
MetadataResourceTypes,
|
@@ -196,6 +198,7 @@ class ArtifactVersionSchema(BaseSchema, table=True):
|
|
196
198
|
overlaps="tags",
|
197
199
|
),
|
198
200
|
)
|
201
|
+
save_type: str = Field(sa_column=Column(TEXT, nullable=False))
|
199
202
|
|
200
203
|
# Foreign keys
|
201
204
|
artifact_id: UUID = build_foreign_key_field(
|
@@ -300,6 +303,7 @@ class ArtifactVersionSchema(BaseSchema, table=True):
|
|
300
303
|
uri=artifact_version_request.uri,
|
301
304
|
materializer=artifact_version_request.materializer.model_dump_json(),
|
302
305
|
data_type=artifact_version_request.data_type.model_dump_json(),
|
306
|
+
save_type=artifact_version_request.save_type.value,
|
303
307
|
)
|
304
308
|
|
305
309
|
def to_model(
|
@@ -360,6 +364,7 @@ class ArtifactVersionSchema(BaseSchema, table=True):
|
|
360
364
|
updated=self.updated,
|
361
365
|
tags=[t.tag.to_model() for t in self.tags],
|
362
366
|
producer_pipeline_run_id=producer_pipeline_run_id,
|
367
|
+
save_type=ArtifactSaveType(self.save_type),
|
363
368
|
artifact_store_id=self.artifact_store_id,
|
364
369
|
)
|
365
370
|
|
@@ -370,7 +375,9 @@ class ArtifactVersionSchema(BaseSchema, table=True):
|
|
370
375
|
workspace=self.workspace.to_model(),
|
371
376
|
producer_step_run_id=producer_step_run_id,
|
372
377
|
visualizations=[v.to_model() for v in self.visualizations],
|
373
|
-
run_metadata={
|
378
|
+
run_metadata={
|
379
|
+
m.key: json.loads(m.value) for m in self.run_metadata
|
380
|
+
},
|
374
381
|
)
|
375
382
|
|
376
383
|
resources = None
|
@@ -13,6 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation of model tables."""
|
15
15
|
|
16
|
+
import json
|
16
17
|
from datetime import datetime
|
17
18
|
from typing import TYPE_CHECKING, Any, Dict, List, Optional, cast
|
18
19
|
from uuid import UUID
|
@@ -379,8 +380,7 @@ class ModelVersionSchema(NamedSchema, table=True):
|
|
379
380
|
workspace=self.workspace.to_model(),
|
380
381
|
description=self.description,
|
381
382
|
run_metadata={
|
382
|
-
rm.key: rm.
|
383
|
-
for rm in self.run_metadata
|
383
|
+
rm.key: json.loads(rm.value) for rm in self.run_metadata
|
384
384
|
},
|
385
385
|
)
|
386
386
|
|
@@ -13,20 +13,13 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""SQLModel implementation of pipeline run metadata tables."""
|
15
15
|
|
16
|
-
import
|
17
|
-
from typing import TYPE_CHECKING, Any, List, Optional
|
16
|
+
from typing import TYPE_CHECKING, List, Optional
|
18
17
|
from uuid import UUID
|
19
18
|
|
20
19
|
from sqlalchemy import TEXT, VARCHAR, Column
|
21
20
|
from sqlmodel import Field, Relationship
|
22
21
|
|
23
22
|
from zenml.enums import MetadataResourceTypes
|
24
|
-
from zenml.metadata.metadata_types import MetadataTypeEnum
|
25
|
-
from zenml.models import (
|
26
|
-
RunMetadataResponse,
|
27
|
-
RunMetadataResponseBody,
|
28
|
-
RunMetadataResponseMetadata,
|
29
|
-
)
|
30
23
|
from zenml.zen_stores.schemas.base_schemas import BaseSchema
|
31
24
|
from zenml.zen_stores.schemas.component_schemas import StackComponentSchema
|
32
25
|
from zenml.zen_stores.schemas.schema_utils import build_foreign_key_field
|
@@ -110,43 +103,3 @@ class RunMetadataSchema(BaseSchema, table=True):
|
|
110
103
|
key: str
|
111
104
|
value: str = Field(sa_column=Column(TEXT, nullable=False))
|
112
105
|
type: str
|
113
|
-
|
114
|
-
def to_model(
|
115
|
-
self,
|
116
|
-
include_metadata: bool = False,
|
117
|
-
include_resources: bool = False,
|
118
|
-
**kwargs: Any,
|
119
|
-
) -> "RunMetadataResponse":
|
120
|
-
"""Convert a `RunMetadataSchema` to a `RunMetadataResponse`.
|
121
|
-
|
122
|
-
Args:
|
123
|
-
include_metadata: Whether the metadata will be filled.
|
124
|
-
include_resources: Whether the resources will be filled.
|
125
|
-
**kwargs: Keyword arguments to allow schema specific logic
|
126
|
-
|
127
|
-
|
128
|
-
Returns:
|
129
|
-
The created `RunMetadataResponse`.
|
130
|
-
"""
|
131
|
-
body = RunMetadataResponseBody(
|
132
|
-
user=self.user.to_model() if self.user else None,
|
133
|
-
key=self.key,
|
134
|
-
created=self.created,
|
135
|
-
updated=self.updated,
|
136
|
-
value=json.loads(self.value),
|
137
|
-
type=MetadataTypeEnum(self.type),
|
138
|
-
)
|
139
|
-
metadata = None
|
140
|
-
if include_metadata:
|
141
|
-
metadata = RunMetadataResponseMetadata(
|
142
|
-
workspace=self.workspace.to_model(),
|
143
|
-
resource_id=self.resource_id,
|
144
|
-
resource_type=MetadataResourceTypes(self.resource_type),
|
145
|
-
stack_component_id=self.stack_component_id,
|
146
|
-
)
|
147
|
-
|
148
|
-
return RunMetadataResponse(
|
149
|
-
id=self.id,
|
150
|
-
body=body,
|
151
|
-
metadata=metadata,
|
152
|
-
)
|
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
import json
|
17
17
|
from datetime import datetime
|
18
|
-
from typing import TYPE_CHECKING, Any, List, Optional
|
18
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
19
19
|
from uuid import UUID
|
20
20
|
|
21
21
|
from pydantic import ConfigDict
|
@@ -28,6 +28,7 @@ from zenml.constants import MEDIUMTEXT_MAX_LENGTH
|
|
28
28
|
from zenml.enums import (
|
29
29
|
ExecutionStatus,
|
30
30
|
MetadataResourceTypes,
|
31
|
+
StepRunInputArtifactType,
|
31
32
|
)
|
32
33
|
from zenml.models import (
|
33
34
|
StepRunRequest,
|
@@ -36,7 +37,11 @@ from zenml.models import (
|
|
36
37
|
StepRunResponseMetadata,
|
37
38
|
StepRunUpdate,
|
38
39
|
)
|
39
|
-
from zenml.models.v2.core.
|
40
|
+
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
41
|
+
from zenml.models.v2.core.step_run import (
|
42
|
+
StepRunInputResponse,
|
43
|
+
StepRunResponseResources,
|
44
|
+
)
|
40
45
|
from zenml.zen_stores.schemas.base_schemas import NamedSchema
|
41
46
|
from zenml.zen_stores.schemas.constants import MODEL_VERSION_TABLENAME
|
42
47
|
from zenml.zen_stores.schemas.pipeline_deployment_schemas import (
|
@@ -214,21 +219,25 @@ class StepRunSchema(NamedSchema, table=True):
|
|
214
219
|
or a step_configuration.
|
215
220
|
"""
|
216
221
|
run_metadata = {
|
217
|
-
metadata_schema.key: metadata_schema.
|
222
|
+
metadata_schema.key: json.loads(metadata_schema.value)
|
218
223
|
for metadata_schema in self.run_metadata
|
219
224
|
}
|
220
225
|
|
221
226
|
input_artifacts = {
|
222
|
-
artifact.name:
|
227
|
+
artifact.name: StepRunInputResponse(
|
228
|
+
input_type=StepRunInputArtifactType(artifact.type),
|
229
|
+
**artifact.artifact_version.to_model().model_dump(),
|
230
|
+
)
|
223
231
|
for artifact in self.input_artifacts
|
224
232
|
}
|
225
233
|
|
226
|
-
output_artifacts = {
|
227
|
-
|
228
|
-
|
234
|
+
output_artifacts: Dict[str, List["ArtifactVersionResponse"]] = {}
|
235
|
+
for artifact in self.output_artifacts:
|
236
|
+
if artifact.name not in output_artifacts:
|
237
|
+
output_artifacts[artifact.name] = []
|
238
|
+
output_artifacts[artifact.name].append(
|
239
|
+
artifact.artifact_version.to_model()
|
229
240
|
)
|
230
|
-
for artifact in self.output_artifacts
|
231
|
-
}
|
232
241
|
|
233
242
|
full_step_config = None
|
234
243
|
if self.deployment is not None:
|
@@ -398,7 +407,6 @@ class StepRunOutputArtifactSchema(SQLModel, table=True):
|
|
398
407
|
|
399
408
|
# Fields
|
400
409
|
name: str
|
401
|
-
type: str
|
402
410
|
|
403
411
|
# Foreign keys
|
404
412
|
step_id: UUID = build_foreign_key_field(
|