zenml-nightly 0.75.0.dev20250311__py3-none-any.whl → 0.75.0.dev20250313__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/__init__.py +2 -0
- zenml/analytics/context.py +7 -0
- zenml/artifacts/utils.py +0 -2
- zenml/cli/login.py +6 -0
- zenml/cli/model.py +7 -15
- zenml/cli/secret.py +47 -44
- zenml/cli/service_connectors.py +0 -1
- zenml/cli/stack.py +0 -1
- zenml/cli/tag.py +3 -5
- zenml/cli/utils.py +25 -23
- zenml/cli/workspace.py +79 -5
- zenml/client.py +618 -348
- zenml/config/global_config.py +16 -3
- zenml/config/pipeline_configurations.py +3 -2
- zenml/config/pipeline_run_configuration.py +2 -1
- zenml/config/secret_reference_mixin.py +1 -1
- zenml/constants.py +1 -3
- zenml/enums.py +0 -7
- zenml/event_hub/event_hub.py +3 -1
- zenml/exceptions.py +0 -24
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +5 -3
- zenml/integrations/bitbucket/plugins/event_sources/bitbucket_webhook_event_source.py +1 -4
- zenml/integrations/github/plugins/event_sources/github_webhook_event_source.py +1 -4
- zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
- zenml/integrations/seldon/model_deployers/seldon_model_deployer.py +1 -1
- zenml/integrations/wandb/flavors/wandb_experiment_tracker_flavor.py +3 -3
- zenml/model/model.py +8 -8
- zenml/models/__init__.py +18 -1
- zenml/models/v2/base/base.py +0 -5
- zenml/models/v2/base/filter.py +1 -1
- zenml/models/v2/base/scoped.py +104 -121
- zenml/models/v2/core/api_key.py +1 -1
- zenml/models/v2/core/artifact.py +31 -18
- zenml/models/v2/core/artifact_version.py +42 -25
- zenml/models/v2/core/component.py +22 -33
- zenml/models/v2/core/device.py +3 -2
- zenml/models/v2/core/event_source.py +2 -2
- zenml/models/v2/core/flavor.py +19 -47
- zenml/models/v2/core/logs.py +1 -2
- zenml/models/v2/core/model.py +7 -4
- zenml/models/v2/core/model_version.py +36 -27
- zenml/models/v2/core/pipeline.py +1 -1
- zenml/models/v2/core/pipeline_build.py +18 -0
- zenml/models/v2/core/pipeline_run.py +5 -13
- zenml/models/v2/core/run_template.py +1 -2
- zenml/models/v2/core/schedule.py +0 -9
- zenml/models/v2/core/secret.py +93 -127
- zenml/models/v2/core/server_settings.py +2 -2
- zenml/models/v2/core/service.py +43 -12
- zenml/models/v2/core/service_connector.py +14 -16
- zenml/models/v2/core/stack.py +24 -26
- zenml/models/v2/core/step_run.py +3 -15
- zenml/models/v2/core/tag.py +41 -15
- zenml/models/v2/core/user.py +19 -2
- zenml/models/v2/misc/statistics.py +45 -0
- zenml/models/v2/misc/tag.py +27 -0
- zenml/orchestrators/cache_utils.py +1 -1
- zenml/orchestrators/input_utils.py +1 -0
- zenml/orchestrators/step_launcher.py +0 -1
- zenml/orchestrators/step_run_utils.py +0 -2
- zenml/orchestrators/step_runner.py +10 -1
- zenml/pipelines/build_utils.py +4 -2
- zenml/pipelines/pipeline_decorator.py +3 -2
- zenml/pipelines/pipeline_definition.py +4 -5
- zenml/pipelines/run_utils.py +3 -3
- zenml/service_connectors/service_connector.py +0 -7
- zenml/service_connectors/service_connector_utils.py +0 -1
- zenml/stack/authentication_mixin.py +1 -1
- zenml/stack/flavor.py +3 -14
- zenml/stack/stack_component.py +1 -5
- zenml/steps/step_context.py +19 -0
- zenml/utils/string_utils.py +1 -1
- zenml/utils/tag_utils.py +642 -0
- zenml/zen_server/cloud_utils.py +21 -0
- zenml/zen_server/exceptions.py +0 -6
- zenml/zen_server/rbac/endpoint_utils.py +134 -46
- zenml/zen_server/rbac/models.py +65 -3
- zenml/zen_server/rbac/rbac_interface.py +9 -0
- zenml/zen_server/rbac/rbac_sql_zen_store.py +15 -7
- zenml/zen_server/rbac/utils.py +156 -29
- zenml/zen_server/rbac/zenml_cloud_rbac.py +43 -11
- zenml/zen_server/routers/actions_endpoints.py +3 -5
- zenml/zen_server/routers/artifact_endpoint.py +0 -5
- zenml/zen_server/routers/artifact_version_endpoints.py +15 -9
- zenml/zen_server/routers/auth_endpoints.py +22 -7
- zenml/zen_server/routers/code_repositories_endpoints.py +56 -3
- zenml/zen_server/routers/devices_endpoints.py +0 -4
- zenml/zen_server/routers/event_source_endpoints.py +0 -5
- zenml/zen_server/routers/flavors_endpoints.py +0 -5
- zenml/zen_server/routers/logs_endpoints.py +0 -1
- zenml/zen_server/routers/model_versions_endpoints.py +102 -23
- zenml/zen_server/routers/models_endpoints.py +51 -68
- zenml/zen_server/routers/pipeline_builds_endpoints.py +58 -4
- zenml/zen_server/routers/pipeline_deployments_endpoints.py +58 -4
- zenml/zen_server/routers/pipelines_endpoints.py +73 -4
- zenml/zen_server/routers/plugin_endpoints.py +0 -1
- zenml/zen_server/routers/run_metadata_endpoints.py +99 -0
- zenml/zen_server/routers/run_templates_endpoints.py +66 -3
- zenml/zen_server/routers/runs_endpoints.py +60 -8
- zenml/zen_server/routers/schedule_endpoints.py +69 -6
- zenml/zen_server/routers/secrets_endpoints.py +40 -4
- zenml/zen_server/routers/server_endpoints.py +53 -1
- zenml/zen_server/routers/service_accounts_endpoints.py +14 -15
- zenml/zen_server/routers/service_connectors_endpoints.py +96 -14
- zenml/zen_server/routers/service_endpoints.py +20 -7
- zenml/zen_server/routers/stack_components_endpoints.py +68 -7
- zenml/zen_server/routers/stacks_endpoints.py +98 -7
- zenml/zen_server/routers/steps_endpoints.py +17 -11
- zenml/zen_server/routers/tag_resource_endpoints.py +115 -0
- zenml/zen_server/routers/tags_endpoints.py +6 -17
- zenml/zen_server/routers/triggers_endpoints.py +5 -8
- zenml/zen_server/routers/users_endpoints.py +47 -12
- zenml/zen_server/routers/workspaces_endpoints.py +56 -1285
- zenml/zen_server/template_execution/utils.py +5 -4
- zenml/zen_server/utils.py +21 -0
- zenml/zen_server/zen_server_api.py +4 -0
- zenml/zen_stores/base_zen_store.py +29 -44
- zenml/zen_stores/migrations/versions/0392807467dc_add_build_duration.py +34 -0
- zenml/zen_stores/migrations/versions/1cb6477f72d6_move_artifact_save_type.py +20 -10
- zenml/zen_stores/migrations/versions/1f9d1cd00b90_add_unique_name_constraints.py +231 -0
- zenml/zen_stores/migrations/versions/288f4fb6e112_make_tags_user_scoped.py +74 -0
- zenml/zen_stores/migrations/versions/2e695a26fe7a_add_user_default_workspace.py +45 -0
- zenml/zen_stores/migrations/versions/3b1776345020_remove_workspace_from_globals.py +81 -0
- zenml/zen_stores/migrations/versions/41b28cae31ce_make_artifacts_workspace_scoped.py +136 -0
- zenml/zen_stores/migrations/versions/9e7bf0970266_adding_exclusive_attribute_to_tags.py +47 -0
- zenml/zen_stores/migrations/versions/b557b2871693_update_step_run_input_types.py +8 -4
- zenml/zen_stores/migrations/versions/cc269488e5a9_separate_run_metadata.py +12 -6
- zenml/zen_stores/migrations/versions/f1d723fd723b_add_secret_private_attr.py +61 -0
- zenml/zen_stores/migrations/versions/f76a368a25a5_add_stack_description.py +35 -0
- zenml/zen_stores/rest_zen_store.py +172 -171
- zenml/zen_stores/schemas/action_schemas.py +8 -1
- zenml/zen_stores/schemas/api_key_schemas.py +8 -1
- zenml/zen_stores/schemas/artifact_schemas.py +28 -1
- zenml/zen_stores/schemas/code_repository_schemas.py +8 -1
- zenml/zen_stores/schemas/component_schemas.py +9 -14
- zenml/zen_stores/schemas/event_source_schemas.py +8 -1
- zenml/zen_stores/schemas/flavor_schemas.py +14 -20
- zenml/zen_stores/schemas/model_schemas.py +3 -0
- zenml/zen_stores/schemas/pipeline_build_schemas.py +4 -0
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +3 -1
- zenml/zen_stores/schemas/pipeline_run_schemas.py +0 -3
- zenml/zen_stores/schemas/run_template_schemas.py +8 -4
- zenml/zen_stores/schemas/schedule_schema.py +9 -14
- zenml/zen_stores/schemas/secret_schemas.py +15 -25
- zenml/zen_stores/schemas/service_connector_schemas.py +8 -17
- zenml/zen_stores/schemas/service_schemas.py +0 -1
- zenml/zen_stores/schemas/stack_schemas.py +12 -15
- zenml/zen_stores/schemas/step_run_schemas.py +7 -8
- zenml/zen_stores/schemas/tag_schemas.py +30 -2
- zenml/zen_stores/schemas/trigger_schemas.py +8 -1
- zenml/zen_stores/schemas/user_schemas.py +24 -2
- zenml/zen_stores/schemas/utils.py +16 -0
- zenml/zen_stores/schemas/workspace_schemas.py +7 -25
- zenml/zen_stores/secrets_stores/service_connector_secrets_store.py +0 -3
- zenml/zen_stores/sql_zen_store.py +2905 -2280
- zenml/zen_stores/template_utils.py +1 -1
- zenml/zen_stores/zen_store_interface.py +82 -58
- {zenml_nightly-0.75.0.dev20250311.dist-info → zenml_nightly-0.75.0.dev20250313.dist-info}/METADATA +1 -1
- {zenml_nightly-0.75.0.dev20250311.dist-info → zenml_nightly-0.75.0.dev20250313.dist-info}/RECORD +163 -149
- {zenml_nightly-0.75.0.dev20250311.dist-info → zenml_nightly-0.75.0.dev20250313.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.75.0.dev20250311.dist-info → zenml_nightly-0.75.0.dev20250313.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.75.0.dev20250311.dist-info → zenml_nightly-0.75.0.dev20250313.dist-info}/entry_points.txt +0 -0
zenml/config/global_config.py
CHANGED
@@ -397,8 +397,13 @@ class GlobalConfiguration(BaseModel, metaclass=GlobalConfigMetaClass):
|
|
397
397
|
self.active_stack_id,
|
398
398
|
config_name="global",
|
399
399
|
)
|
400
|
-
|
401
|
-
|
400
|
+
if active_workspace:
|
401
|
+
self.active_workspace_name = active_workspace.name
|
402
|
+
self._active_workspace = active_workspace
|
403
|
+
else:
|
404
|
+
self.active_workspace_name = None
|
405
|
+
self._active_workspace = None
|
406
|
+
|
402
407
|
self.set_active_stack(active_stack)
|
403
408
|
|
404
409
|
@property
|
@@ -763,10 +768,18 @@ class GlobalConfiguration(BaseModel, metaclass=GlobalConfigMetaClass):
|
|
763
768
|
|
764
769
|
Returns:
|
765
770
|
The name of the active workspace.
|
771
|
+
|
772
|
+
Raises:
|
773
|
+
RuntimeError: If the active workspace is not set.
|
766
774
|
"""
|
767
775
|
if self.active_workspace_name is None:
|
768
776
|
_ = self.zen_store
|
769
|
-
|
777
|
+
if self.active_workspace_name is None:
|
778
|
+
raise RuntimeError(
|
779
|
+
"No workspace is currently set as active. Please set the "
|
780
|
+
"active workspace using the `zenml workspace set` CLI "
|
781
|
+
"command."
|
782
|
+
)
|
770
783
|
|
771
784
|
return self.active_workspace_name
|
772
785
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
"""Pipeline configuration classes."""
|
15
15
|
|
16
16
|
from datetime import datetime
|
17
|
-
from typing import TYPE_CHECKING, Any, Dict, List, Optional
|
17
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
18
18
|
|
19
19
|
from pydantic import SerializeAsAny, field_validator
|
20
20
|
|
@@ -23,6 +23,7 @@ from zenml.config.retry_config import StepRetryConfig
|
|
23
23
|
from zenml.config.source import SourceWithValidator
|
24
24
|
from zenml.config.strict_base_model import StrictBaseModel
|
25
25
|
from zenml.model.model import Model
|
26
|
+
from zenml.utils.tag_utils import Tag
|
26
27
|
from zenml.utils.time_utils import utc_now
|
27
28
|
|
28
29
|
if TYPE_CHECKING:
|
@@ -41,7 +42,7 @@ class PipelineConfigurationUpdate(StrictBaseModel):
|
|
41
42
|
enable_artifact_visualization: Optional[bool] = None
|
42
43
|
enable_step_logs: Optional[bool] = None
|
43
44
|
settings: Dict[str, SerializeAsAny[BaseSettings]] = {}
|
44
|
-
tags: Optional[List[str]] = None
|
45
|
+
tags: Optional[List[Union[str, "Tag"]]] = None
|
45
46
|
extra: Dict[str, Any] = {}
|
46
47
|
failure_hook_source: Optional[SourceWithValidator] = None
|
47
48
|
success_hook_source: Optional[SourceWithValidator] = None
|
@@ -27,6 +27,7 @@ from zenml.config.strict_base_model import StrictBaseModel
|
|
27
27
|
from zenml.model.model import Model
|
28
28
|
from zenml.models import PipelineBuildBase
|
29
29
|
from zenml.utils import pydantic_utils
|
30
|
+
from zenml.utils.tag_utils import Tag
|
30
31
|
|
31
32
|
|
32
33
|
class PipelineRunConfiguration(
|
@@ -45,7 +46,7 @@ class PipelineRunConfiguration(
|
|
45
46
|
)
|
46
47
|
steps: Dict[str, StepConfigurationUpdate] = {}
|
47
48
|
settings: Dict[str, SerializeAsAny[BaseSettings]] = {}
|
48
|
-
tags: Optional[List[str]] = None
|
49
|
+
tags: Optional[List[Union[str, Tag]]] = None
|
49
50
|
extra: Dict[str, Any] = {}
|
50
51
|
model: Optional[Model] = None
|
51
52
|
parameters: Optional[Dict[str, Any]] = None
|
@@ -115,7 +115,7 @@ class SecretReferenceMixin(BaseModel):
|
|
115
115
|
|
116
116
|
# Try to resolve the secret using the secret store
|
117
117
|
try:
|
118
|
-
secret = Client().
|
118
|
+
secret = Client().get_secret_by_name_and_private_status(
|
119
119
|
name=secret_ref.name,
|
120
120
|
)
|
121
121
|
except (KeyError, NotImplementedError):
|
zenml/constants.py
CHANGED
@@ -163,7 +163,6 @@ ENV_ZENML_PAGINATION_DEFAULT_LIMIT = "ZENML_PAGINATION_DEFAULT_LIMIT"
|
|
163
163
|
ENV_ZENML_DISABLE_CLIENT_SERVER_MISMATCH_WARNING = (
|
164
164
|
"ZENML_DISABLE_CLIENT_SERVER_MISMATCH_WARNING"
|
165
165
|
)
|
166
|
-
ENV_ZENML_DISABLE_WORKSPACE_WARNINGS = "ZENML_DISABLE_WORKSPACE_WARNINGS"
|
167
166
|
ENV_ZENML_SKIP_IMAGE_BUILDER_DEFAULT = "ZENML_SKIP_IMAGE_BUILDER_DEFAULT"
|
168
167
|
ENV_ZENML_SKIP_STACK_VALIDATION = "ZENML_SKIP_STACK_VALIDATION"
|
169
168
|
ENV_ZENML_SERVER = "ZENML_SERVER"
|
@@ -331,7 +330,6 @@ DEFAULT_ZENML_SERVER_REPORT_USER_ACTIVITY_TO_DB_SECONDS = 30
|
|
331
330
|
DEFAULT_ZENML_SERVER_MAX_REQUEST_BODY_SIZE_IN_BYTES = 256 * 1024 * 1024
|
332
331
|
|
333
332
|
DEFAULT_REPORTABLE_RESOURCES = ["pipeline", "pipeline_run", "model"]
|
334
|
-
REQUIRES_CUSTOM_RESOURCE_REPORTING = ["pipeline", "pipeline_run"]
|
335
333
|
|
336
334
|
# API Endpoint paths:
|
337
335
|
ACTIVATE = "/activate"
|
@@ -358,7 +356,6 @@ EMAIL_ANALYTICS = "/email-opt-in"
|
|
358
356
|
EVENT_FLAVORS = "/event-flavors"
|
359
357
|
EVENT_SOURCES = "/event-sources"
|
360
358
|
FLAVORS = "/flavors"
|
361
|
-
GET_OR_CREATE = "/get-or-create"
|
362
359
|
HEALTH = "/health"
|
363
360
|
INFO = "/info"
|
364
361
|
LOAD_INFO = "/load-info"
|
@@ -402,6 +399,7 @@ STATUS = "/status"
|
|
402
399
|
STEP_CONFIGURATION = "/step-configuration"
|
403
400
|
STEPS = "/steps"
|
404
401
|
TAGS = "/tags"
|
402
|
+
TAG_RESOURCES = "/tag_resources"
|
405
403
|
TRIGGERS = "/triggers"
|
406
404
|
TRIGGER_EXECUTIONS = "/trigger_executions"
|
407
405
|
ONBOARDING_STATE = "/onboarding_state"
|
zenml/enums.py
CHANGED
@@ -135,13 +135,6 @@ class StackComponentType(StrEnum):
|
|
135
135
|
return f"{self.value}s"
|
136
136
|
|
137
137
|
|
138
|
-
class SecretScope(StrEnum):
|
139
|
-
"""Enum for the scope of a secret."""
|
140
|
-
|
141
|
-
WORKSPACE = "workspace"
|
142
|
-
USER = "user"
|
143
|
-
|
144
|
-
|
145
138
|
class StoreType(StrEnum):
|
146
139
|
"""Zen Store Backend Types."""
|
147
140
|
|
zenml/event_hub/event_hub.py
CHANGED
@@ -126,7 +126,9 @@ class InternalEventHub(BaseEventHub):
|
|
126
126
|
triggers: List[TriggerResponse] = depaginate(
|
127
127
|
self.zen_store.list_triggers,
|
128
128
|
trigger_filter_model=TriggerFilter(
|
129
|
-
|
129
|
+
workspace=event_source.workspace.id,
|
130
|
+
event_source_id=event_source.id,
|
131
|
+
is_active=True,
|
130
132
|
),
|
131
133
|
hydrate=True,
|
132
134
|
)
|
zenml/exceptions.py
CHANGED
@@ -172,34 +172,10 @@ class EntityCreationError(ZenMLBaseException, RuntimeError):
|
|
172
172
|
"""Raised when failing to create an entity."""
|
173
173
|
|
174
174
|
|
175
|
-
class ActionExistsError(EntityExistsError):
|
176
|
-
"""Raised when registering an action with a name that already exists."""
|
177
|
-
|
178
|
-
|
179
|
-
class TriggerExistsError(EntityExistsError):
|
180
|
-
"""Raised when registering a trigger with name that already exists."""
|
181
|
-
|
182
|
-
|
183
175
|
class WebhookInactiveError(ZenMLBaseException):
|
184
176
|
"""Raised when source is inactive."""
|
185
177
|
|
186
178
|
|
187
|
-
class StackExistsError(EntityExistsError):
|
188
|
-
"""Raised when trying to register a stack with name that already exists."""
|
189
|
-
|
190
|
-
|
191
|
-
class StackComponentExistsError(EntityExistsError):
|
192
|
-
"""Raised when trying to register a stack component with existing name."""
|
193
|
-
|
194
|
-
|
195
|
-
class EventSourceExistsError(EntityExistsError):
|
196
|
-
"""Raised when trying to register an event source with existing name."""
|
197
|
-
|
198
|
-
|
199
|
-
class SecretExistsError(EntityExistsError):
|
200
|
-
"""Raised when trying to register a secret with existing name."""
|
201
|
-
|
202
|
-
|
203
179
|
class StackValidationError(ZenMLBaseException):
|
204
180
|
"""Raised when a stack configuration is not valid."""
|
205
181
|
|
@@ -870,9 +870,11 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
|
|
870
870
|
the URL to the dashboard view in SageMaker.
|
871
871
|
"""
|
872
872
|
try:
|
873
|
-
|
874
|
-
|
875
|
-
|
873
|
+
(
|
874
|
+
region_name,
|
875
|
+
pipeline_name,
|
876
|
+
execution_id,
|
877
|
+
) = dissect_pipeline_execution_arn(execution_arn)
|
876
878
|
|
877
879
|
# Get the Sagemaker session
|
878
880
|
session = self._get_sagemaker_session()
|
@@ -18,7 +18,6 @@ from uuid import UUID
|
|
18
18
|
|
19
19
|
from pydantic import BaseModel, ConfigDict, Field
|
20
20
|
|
21
|
-
from zenml.enums import SecretScope
|
22
21
|
from zenml.event_sources.base_event import (
|
23
22
|
BaseEvent,
|
24
23
|
)
|
@@ -335,9 +334,7 @@ class BitbucketWebhookEventSourceHandler(BaseWebhookEventSourceHandler):
|
|
335
334
|
webhook_secret = SecretRequest(
|
336
335
|
name=f"event_source-{str(event_source.id)}-{random_str(4)}".lower(),
|
337
336
|
values={"webhook_secret": secret_key_value},
|
338
|
-
|
339
|
-
user=event_source.user.id,
|
340
|
-
scope=SecretScope.WORKSPACE,
|
337
|
+
private=False,
|
341
338
|
)
|
342
339
|
secret = self.zen_store.create_secret(webhook_secret)
|
343
340
|
|
@@ -19,7 +19,6 @@ from uuid import UUID
|
|
19
19
|
|
20
20
|
from pydantic import BaseModel, ConfigDict, Field
|
21
21
|
|
22
|
-
from zenml.enums import SecretScope
|
23
22
|
from zenml.event_sources.base_event import (
|
24
23
|
BaseEvent,
|
25
24
|
)
|
@@ -361,9 +360,7 @@ class GithubWebhookEventSourceHandler(BaseWebhookEventSourceHandler):
|
|
361
360
|
webhook_secret = SecretRequest(
|
362
361
|
name=f"event_source-{str(event_source.id)}-{random_str(4)}".lower(),
|
363
362
|
values={"webhook_secret": secret_key_value},
|
364
|
-
|
365
|
-
user=event_source.user.id,
|
366
|
-
scope=SecretScope.WORKSPACE,
|
363
|
+
private=False,
|
367
364
|
)
|
368
365
|
secret = self.zen_store.create_secret(webhook_secret)
|
369
366
|
|
@@ -92,7 +92,7 @@ def mlflow_register_model_step(
|
|
92
92
|
pipeline_name = step_context.pipeline.name
|
93
93
|
current_run_name = step_context.pipeline_run.name
|
94
94
|
pipeline_run_uuid = str(step_context.pipeline_run.id)
|
95
|
-
zenml_workspace = str(
|
95
|
+
zenml_workspace = str(step_context.pipeline.workspace.name)
|
96
96
|
|
97
97
|
# Get MLflow run ID either from params or from experiment tracker using
|
98
98
|
# pipeline name and run name
|
@@ -23,7 +23,7 @@ from typing import (
|
|
23
23
|
cast,
|
24
24
|
)
|
25
25
|
|
26
|
-
from pydantic import
|
26
|
+
from pydantic import BaseModel, field_validator
|
27
27
|
|
28
28
|
from zenml.config.base_settings import BaseSettings
|
29
29
|
from zenml.experiment_trackers.base_experiment_tracker import (
|
@@ -69,8 +69,8 @@ class WandbExperimentTrackerSettings(BaseSettings):
|
|
69
69
|
import wandb
|
70
70
|
|
71
71
|
if isinstance(value, wandb.Settings):
|
72
|
-
# Depending on the wandb version, either `model_dump`,
|
73
|
-
# `make_static` or `to_dict` is available to convert the settings
|
72
|
+
# Depending on the wandb version, either `model_dump`,
|
73
|
+
# `make_static` or `to_dict` is available to convert the settings
|
74
74
|
# to a dictionary
|
75
75
|
if isinstance(value, BaseModel):
|
76
76
|
return value.model_dump()
|
zenml/model/model.py
CHANGED
@@ -532,9 +532,11 @@ class Model(BaseModel):
|
|
532
532
|
)
|
533
533
|
model = mv.model
|
534
534
|
else:
|
535
|
+
# TODO: This whole thing needs to be refactored as a get_or_create
|
536
|
+
# REST API call.
|
535
537
|
try:
|
536
|
-
model = zenml_client.
|
537
|
-
model_name_or_id=self.name
|
538
|
+
model = zenml_client.get_model(
|
539
|
+
model_name_or_id=self.name, bypass_lazy_loader=True
|
538
540
|
)
|
539
541
|
except KeyError:
|
540
542
|
model_request = ModelRequest(
|
@@ -546,7 +548,6 @@ class Model(BaseModel):
|
|
546
548
|
limitations=self.limitations,
|
547
549
|
trade_offs=self.trade_offs,
|
548
550
|
ethics=self.ethics,
|
549
|
-
user=zenml_client.active_user.id,
|
550
551
|
workspace=zenml_client.active_workspace.id,
|
551
552
|
save_models_to_registry=self.save_models_to_registry,
|
552
553
|
)
|
@@ -559,8 +560,8 @@ class Model(BaseModel):
|
|
559
560
|
f"New model `{self.name}` was created implicitly."
|
560
561
|
)
|
561
562
|
except EntityExistsError:
|
562
|
-
model = zenml_client.
|
563
|
-
model_name_or_id=self.name
|
563
|
+
model = zenml_client.get_model(
|
564
|
+
model_name_or_id=self.name, bypass_lazy_loader=True
|
564
565
|
)
|
565
566
|
|
566
567
|
self._model_id = model.id
|
@@ -686,7 +687,7 @@ class Model(BaseModel):
|
|
686
687
|
"model version in given stage exists. It might be missing, if "
|
687
688
|
"the pipeline promoting model version to this stage failed,"
|
688
689
|
" as an example. You can explore model versions using "
|
689
|
-
f"`zenml model version list
|
690
|
+
f"`zenml model version list {self.name}` CLI command."
|
690
691
|
)
|
691
692
|
if str(self.version).isnumeric():
|
692
693
|
raise RuntimeError(
|
@@ -696,12 +697,11 @@ class Model(BaseModel):
|
|
696
697
|
"model version with given number exists. It might be missing, if "
|
697
698
|
"the pipeline creating model version failed,"
|
698
699
|
" as an example. You can explore model versions using "
|
699
|
-
f"`zenml model version list
|
700
|
+
f"`zenml model version list {self.name}` CLI command."
|
700
701
|
)
|
701
702
|
|
702
703
|
client = Client()
|
703
704
|
model_version_request = ModelVersionRequest(
|
704
|
-
user=client.active_user.id,
|
705
705
|
workspace=client.active_workspace.id,
|
706
706
|
name=str(self.version) if self.version else None,
|
707
707
|
description=self.description,
|
zenml/models/__init__.py
CHANGED
@@ -133,7 +133,8 @@ from zenml.models.v2.core.component import (
|
|
133
133
|
ComponentResponse,
|
134
134
|
ComponentResponseBody,
|
135
135
|
ComponentResponseMetadata,
|
136
|
-
ComponentResponseResources
|
136
|
+
ComponentResponseResources,
|
137
|
+
DefaultComponentRequest,
|
137
138
|
)
|
138
139
|
from zenml.models.v2.core.event_source_flavor import (
|
139
140
|
EventSourceFlavorResponse,
|
@@ -275,6 +276,7 @@ from zenml.models.v2.core.service_connector import (
|
|
275
276
|
ServiceConnectorResponseMetadata,
|
276
277
|
)
|
277
278
|
from zenml.models.v2.core.stack import (
|
279
|
+
DefaultStackRequest,
|
278
280
|
StackRequest,
|
279
281
|
StackUpdate,
|
280
282
|
StackFilter,
|
@@ -282,6 +284,10 @@ from zenml.models.v2.core.stack import (
|
|
282
284
|
StackResponseBody,
|
283
285
|
StackResponseMetadata,
|
284
286
|
)
|
287
|
+
from zenml.models.v2.misc.statistics import (
|
288
|
+
WorkspaceStatistics,
|
289
|
+
ServerStatistics,
|
290
|
+
)
|
285
291
|
from zenml.models.v2.core.step_run import (
|
286
292
|
StepRunRequest,
|
287
293
|
StepRunUpdate,
|
@@ -295,6 +301,7 @@ from zenml.models.v2.core.tag import (
|
|
295
301
|
TagFilter,
|
296
302
|
TagResponse,
|
297
303
|
TagResponseBody,
|
304
|
+
TagResponseMetadata,
|
298
305
|
TagRequest,
|
299
306
|
TagUpdate,
|
300
307
|
)
|
@@ -395,6 +402,9 @@ from zenml.models.v2.misc.stack_deployment import (
|
|
395
402
|
StackDeploymentConfig,
|
396
403
|
StackDeploymentInfo,
|
397
404
|
)
|
405
|
+
from zenml.models.v2.misc.tag import (
|
406
|
+
TagResource,
|
407
|
+
)
|
398
408
|
from zenml.models.v2.misc.info_models import (
|
399
409
|
ComponentInfo,
|
400
410
|
ServiceConnectorInfo,
|
@@ -440,6 +450,7 @@ PipelineDeploymentRequest.model_rebuild()
|
|
440
450
|
PipelineDeploymentResponseBody.model_rebuild()
|
441
451
|
PipelineDeploymentResponseMetadata.model_rebuild()
|
442
452
|
PipelineDeploymentResponseResources.model_rebuild()
|
453
|
+
PipelineRunRequest.model_rebuild()
|
443
454
|
PipelineRunResponseBody.model_rebuild()
|
444
455
|
PipelineRunResponseMetadata.model_rebuild()
|
445
456
|
PipelineRunResponseResources.model_rebuild()
|
@@ -562,6 +573,8 @@ __all__ = [
|
|
562
573
|
"ComponentResponseBody",
|
563
574
|
"ComponentResponseMetadata",
|
564
575
|
"ComponentResponseResources",
|
576
|
+
"DefaultComponentRequest",
|
577
|
+
"DefaultStackRequest",
|
565
578
|
"EventSourceFlavorResponse",
|
566
579
|
"EventSourceFlavorResponseBody",
|
567
580
|
"EventSourceFlavorResponseMetadata",
|
@@ -695,6 +708,7 @@ __all__ = [
|
|
695
708
|
"TagResourceRequest",
|
696
709
|
"TagResponse",
|
697
710
|
"TagResponseBody",
|
711
|
+
"TagResponseMetadata",
|
698
712
|
"TagRequest",
|
699
713
|
"TagUpdate",
|
700
714
|
"TriggerResponse",
|
@@ -745,6 +759,7 @@ __all__ = [
|
|
745
759
|
"ServerModel",
|
746
760
|
"ServerDatabaseType",
|
747
761
|
"ServerDeploymentType",
|
762
|
+
"ServerStatistics",
|
748
763
|
"StackDeploymentConfig",
|
749
764
|
"StackDeploymentInfo",
|
750
765
|
"OAuthDeviceAuthorizationRequest",
|
@@ -757,7 +772,9 @@ __all__ = [
|
|
757
772
|
"ComponentInfo",
|
758
773
|
"ServiceConnectorInfo",
|
759
774
|
"ServiceConnectorResourcesInfo",
|
775
|
+
"TagResource",
|
760
776
|
"ResourcesInfo",
|
761
777
|
"RunMetadataEntry",
|
762
778
|
"RunMetadataResource",
|
779
|
+
"WorkspaceStatistics",
|
763
780
|
]
|
zenml/models/v2/base/base.py
CHANGED
@@ -65,11 +65,6 @@ class BaseUpdate(BaseZenModel):
|
|
65
65
|
Used as a base class for all update models.
|
66
66
|
"""
|
67
67
|
|
68
|
-
model_config = ConfigDict(
|
69
|
-
# Ignore extras on all update models.
|
70
|
-
extra="ignore",
|
71
|
-
)
|
72
|
-
|
73
68
|
|
74
69
|
# -------------------- Response Model --------------------
|
75
70
|
|
zenml/models/v2/base/filter.py
CHANGED
@@ -716,7 +716,7 @@ class BaseFilter(BaseModel):
|
|
716
716
|
value: The filter value.
|
717
717
|
table: The table to filter.
|
718
718
|
additional_columns: Additional table columns that should also
|
719
|
-
|
719
|
+
filter for the given value as part of the or condition.
|
720
720
|
|
721
721
|
Returns:
|
722
722
|
The query conditions.
|