zenml-nightly 0.66.0.dev20240928__py3-none-any.whl → 0.68.1.dev20241102__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.
- README.md +18 -12
- RELEASE_NOTES.md +236 -0
- zenml/VERSION +1 -1
- zenml/__init__.py +5 -10
- zenml/analytics/context.py +16 -1
- zenml/analytics/enums.py +0 -13
- zenml/analytics/utils.py +18 -7
- zenml/artifact_stores/base_artifact_store.py +11 -0
- zenml/artifacts/artifact_config.py +19 -65
- zenml/artifacts/external_artifact.py +7 -53
- zenml/artifacts/external_artifact_config.py +21 -40
- zenml/artifacts/load_directory_materializer.py +91 -0
- zenml/artifacts/utils.py +204 -145
- zenml/cli/__init__.py +62 -127
- zenml/cli/base.py +8 -8
- zenml/cli/integration.py +0 -9
- zenml/cli/login.py +951 -0
- zenml/cli/pipeline.py +1 -1
- zenml/cli/served_model.py +8 -1
- zenml/cli/server.py +462 -577
- zenml/cli/service_accounts.py +4 -4
- zenml/cli/stack.py +78 -569
- zenml/cli/stack_components.py +5 -594
- zenml/cli/user_management.py +0 -12
- zenml/cli/utils.py +24 -142
- zenml/client.py +57 -40
- zenml/client_lazy_loader.py +29 -12
- zenml/config/compiler.py +7 -11
- zenml/config/global_config.py +9 -0
- zenml/config/pipeline_configurations.py +2 -1
- zenml/config/pipeline_run_configuration.py +2 -1
- zenml/config/server_config.py +7 -5
- zenml/config/step_configurations.py +2 -0
- zenml/constants.py +6 -42
- zenml/enums.py +1 -4
- zenml/environment.py +1 -315
- zenml/exceptions.py +12 -41
- zenml/hooks/hook_validators.py +1 -8
- zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
- zenml/integrations/argilla/__init__.py +1 -1
- zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
- zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
- zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
- zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
- zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
- zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
- zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
- zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
- zenml/integrations/bentoml/services/__init__.py +15 -4
- zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
- zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
- zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
- zenml/integrations/bentoml/steps/bento_builder.py +1 -0
- zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
- zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
- zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
- zenml/integrations/huggingface/__init__.py +1 -6
- zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
- zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
- zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
- zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
- zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
- zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
- zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
- zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
- zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
- zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
- zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
- zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
- zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
- zenml/integrations/s3/utils.py +40 -0
- zenml/integrations/tensorflow/__init__.py +0 -9
- zenml/logging/step_logging.py +13 -15
- zenml/{new/pipelines → login}/__init__.py +4 -1
- zenml/login/credentials.py +346 -0
- zenml/login/credentials_store.py +603 -0
- zenml/{new → login/pro}/__init__.py +4 -1
- zenml/login/pro/client.py +496 -0
- zenml/login/pro/constants.py +34 -0
- zenml/{lineage_graph/edge.py → login/pro/models.py} +9 -8
- zenml/{zen_server/deploy/terraform/providers → login/pro/organization}/__init__.py +2 -2
- zenml/login/pro/organization/client.py +79 -0
- zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
- zenml/{new/steps → login/pro/tenant}/__init__.py +2 -1
- zenml/login/pro/tenant/client.py +92 -0
- zenml/login/pro/tenant/models.py +174 -0
- zenml/login/pro/utils.py +121 -0
- zenml/{cli → login}/web_login.py +64 -28
- zenml/materializers/__init__.py +2 -0
- zenml/materializers/base_materializer.py +43 -9
- zenml/materializers/built_in_materializer.py +1 -1
- zenml/materializers/uuid_materializer.py +79 -0
- zenml/metadata/lazy_load.py +10 -7
- zenml/metadata/metadata_types.py +49 -0
- zenml/model/lazy_load.py +85 -4
- zenml/model/model.py +61 -83
- zenml/model/utils.py +47 -118
- zenml/models/__init__.py +6 -0
- zenml/models/v2/base/base.py +12 -8
- zenml/models/v2/base/filter.py +9 -0
- zenml/models/v2/core/artifact_version.py +53 -25
- zenml/models/v2/core/component.py +54 -19
- zenml/models/v2/core/flavor.py +13 -13
- zenml/models/v2/core/model.py +4 -1
- zenml/models/v2/core/model_version.py +4 -6
- zenml/models/v2/core/model_version_artifact.py +3 -1
- zenml/models/v2/core/model_version_pipeline_run.py +3 -1
- zenml/models/v2/core/pipeline.py +3 -1
- zenml/models/v2/core/pipeline_run.py +24 -3
- zenml/models/v2/core/run_metadata.py +2 -2
- zenml/models/v2/core/run_template.py +3 -1
- zenml/models/v2/core/stack.py +7 -3
- zenml/models/v2/core/step_run.py +58 -14
- zenml/models/v2/misc/auth_models.py +11 -2
- zenml/models/v2/misc/server_models.py +2 -4
- zenml/orchestrators/base_orchestrator.py +41 -4
- zenml/orchestrators/input_utils.py +52 -36
- zenml/orchestrators/step_launcher.py +50 -171
- zenml/orchestrators/step_run_utils.py +574 -0
- zenml/orchestrators/step_runner.py +83 -120
- zenml/orchestrators/utils.py +46 -180
- zenml/pipelines/__init__.py +3 -16
- zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
- zenml/pipelines/pipeline_decorator.py +34 -60
- zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +210 -207
- zenml/{new/pipelines → pipelines}/run_utils.py +11 -10
- zenml/services/local/local_daemon_entrypoint.py +4 -4
- zenml/services/service.py +2 -2
- zenml/stack/stack.py +3 -108
- zenml/stack/stack_component.py +2 -78
- zenml/stack/utils.py +26 -14
- zenml/stack_deployments/aws_stack_deployment.py +3 -0
- zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
- zenml/steps/__init__.py +3 -9
- zenml/steps/base_step.py +25 -267
- zenml/steps/entrypoint_function_utils.py +2 -80
- zenml/{new/steps → steps}/step_context.py +12 -66
- zenml/steps/step_decorator.py +42 -89
- zenml/steps/step_invocation.py +16 -60
- zenml/steps/utils.py +4 -23
- zenml/utils/dashboard_utils.py +16 -51
- zenml/utils/materializer_utils.py +1 -1
- zenml/utils/requirements_utils.py +71 -0
- zenml/utils/singleton.py +15 -3
- zenml/utils/source_utils.py +39 -2
- zenml/utils/typing_utils.py +8 -28
- zenml/utils/visualization_utils.py +1 -1
- zenml/zen_server/auth.py +44 -39
- zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
- zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
- zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
- zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
- zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
- zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
- zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
- zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
- zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
- zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
- zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
- zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
- zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
- zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
- zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
- zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
- zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
- zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
- zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
- zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
- zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
- zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
- zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
- zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
- zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
- zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
- zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
- zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
- zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
- zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
- zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
- zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
- zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
- zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
- zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
- zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
- zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
- zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
- zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
- zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
- zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
- zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
- zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
- zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
- zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
- zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
- zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
- zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
- zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
- zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
- zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
- zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
- zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
- zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
- zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
- zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
- zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
- zenml/zen_server/dashboard/index.html +7 -7
- zenml/zen_server/deploy/__init__.py +7 -16
- zenml/zen_server/deploy/base_provider.py +46 -73
- zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
- zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +44 -63
- zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +50 -28
- zenml/zen_server/deploy/deployer.py +90 -171
- zenml/zen_server/deploy/deployment.py +20 -12
- zenml/zen_server/deploy/docker/docker_provider.py +9 -28
- zenml/zen_server/deploy/docker/docker_zen_server.py +19 -9
- zenml/zen_server/deploy/helm/Chart.yaml +1 -1
- zenml/zen_server/deploy/helm/README.md +2 -2
- zenml/zen_server/exceptions.py +11 -0
- zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
- zenml/zen_server/jwt.py +9 -9
- zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
- zenml/zen_server/routers/auth_endpoints.py +30 -8
- zenml/zen_server/routers/runs_endpoints.py +0 -28
- zenml/zen_server/routers/stack_components_endpoints.py +1 -1
- zenml/zen_server/routers/workspaces_endpoints.py +1 -1
- zenml/zen_server/template_execution/runner_entrypoint_configuration.py +7 -4
- zenml/zen_server/template_execution/utils.py +8 -63
- zenml/zen_server/utils.py +67 -69
- zenml/zen_server/zen_server_api.py +107 -17
- zenml/zen_stores/base_zen_store.py +4 -51
- zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
- zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
- zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
- zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
- zenml/zen_stores/rest_zen_store.py +325 -147
- zenml/zen_stores/schemas/api_key_schemas.py +9 -4
- zenml/zen_stores/schemas/artifact_schemas.py +21 -2
- zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
- zenml/zen_stores/schemas/component_schemas.py +49 -6
- zenml/zen_stores/schemas/device_schemas.py +9 -4
- zenml/zen_stores/schemas/flavor_schemas.py +1 -1
- zenml/zen_stores/schemas/model_schemas.py +1 -1
- zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
- zenml/zen_stores/schemas/service_schemas.py +1 -1
- zenml/zen_stores/schemas/step_run_schemas.py +3 -3
- zenml/zen_stores/schemas/trigger_schemas.py +1 -1
- zenml/zen_stores/sql_zen_store.py +422 -145
- zenml/zen_stores/template_utils.py +3 -1
- {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/METADATA +20 -18
- {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/RECORD +343 -505
- {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/WHEEL +1 -1
- zenml/api.py +0 -60
- zenml/cli/stack_recipes.py +0 -469
- zenml/lineage_graph/__init__.py +0 -34
- zenml/lineage_graph/lineage_graph.py +0 -244
- zenml/lineage_graph/node/__init__.py +0 -32
- zenml/lineage_graph/node/artifact_node.py +0 -51
- zenml/lineage_graph/node/step_node.py +0 -41
- zenml/model/model_version.py +0 -38
- zenml/new/pipelines/code_archive.py +0 -157
- zenml/new/pipelines/pipeline_decorator.py +0 -118
- zenml/new/steps/step_decorator.py +0 -176
- zenml/pipelines/base_pipeline.py +0 -273
- zenml/post_execution/__init__.py +0 -30
- zenml/post_execution/pipeline.py +0 -55
- zenml/post_execution/pipeline_run.py +0 -55
- zenml/services/terraform/__init__.py +0 -14
- zenml/services/terraform/terraform_service.py +0 -441
- zenml/steps/external_artifact.py +0 -26
- zenml/steps/step_environment.py +0 -108
- zenml/steps/step_output.py +0 -36
- zenml/utils/mlstacks_utils.py +0 -635
- zenml/utils/terraform_utils.py +0 -43
- zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
- zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
- zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
- zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
- zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
- zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
- zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
- zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
- zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
- zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
- zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
- zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
- zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
- zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
- zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
- zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
- zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
- zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
- zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
- zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
- zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
- zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
- zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
- zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
- zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
- zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
- zenml/zen_server/dashboard_legacy/_redirects +0 -1
- zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
- zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
- zenml/zen_server/dashboard_legacy/index.html +0 -1
- zenml/zen_server/dashboard_legacy/manifest.json +0 -25
- zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
- zenml/zen_server/dashboard_legacy/robots.txt +0 -2
- zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
- zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
- zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
- zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
- zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
- zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
- zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
- zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
- zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
- zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
- zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
- zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
- zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
- zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
- zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
- zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
- zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
- zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
- zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
- zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
- zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
- zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
- zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
- zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
- zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
- zenml/zen_server/deploy/terraform/__init__.py +0 -41
- zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
- zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
- zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
- zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
- zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
- zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
- zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
- zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
- zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
- zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
- zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
- zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
- zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
- zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
- zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
- zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
- zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
- zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
- zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
- zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
- zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
- zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
- zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
- /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
- /zenml/{new/steps → steps}/decorated_step.py +0 -0
- {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/entry_points.txt +0 -0
@@ -14,11 +14,12 @@
|
|
14
14
|
"""Implementation of the Argilla annotation integration."""
|
15
15
|
|
16
16
|
import json
|
17
|
-
|
17
|
+
import webbrowser
|
18
|
+
from typing import Any, Dict, List, Optional, Tuple, Type, Union, cast
|
18
19
|
|
19
20
|
import argilla as rg
|
20
|
-
from argilla.
|
21
|
-
from argilla.client
|
21
|
+
from argilla._exceptions._api import ArgillaAPIError
|
22
|
+
from argilla.client import Argilla as ArgillaClient
|
22
23
|
|
23
24
|
from zenml.annotators.base_annotator import BaseAnnotator
|
24
25
|
from zenml.integrations.argilla.flavors import (
|
@@ -67,7 +68,7 @@ class ArgillaAnnotator(BaseAnnotator, AuthenticationMixin):
|
|
67
68
|
)
|
68
69
|
|
69
70
|
def _get_client(self) -> ArgillaClient:
|
70
|
-
"""Gets Argilla client.
|
71
|
+
"""Gets the Argilla client.
|
71
72
|
|
72
73
|
Returns:
|
73
74
|
Argilla client.
|
@@ -75,7 +76,7 @@ class ArgillaAnnotator(BaseAnnotator, AuthenticationMixin):
|
|
75
76
|
config = self.config
|
76
77
|
init_kwargs = {"api_url": self.get_url()}
|
77
78
|
|
78
|
-
#
|
79
|
+
# Set the API key from the secret or using settings
|
79
80
|
authentication_secret = self.get_authentication_secret()
|
80
81
|
if config.api_key and authentication_secret:
|
81
82
|
api_key = config.api_key
|
@@ -92,194 +93,333 @@ class ArgillaAnnotator(BaseAnnotator, AuthenticationMixin):
|
|
92
93
|
if api_key:
|
93
94
|
init_kwargs["api_key"] = api_key
|
94
95
|
|
95
|
-
if config.
|
96
|
-
init_kwargs["
|
97
|
-
if config.extra_headers is not None:
|
98
|
-
init_kwargs["extra_headers"] = json.loads(config.extra_headers)
|
96
|
+
if config.headers is not None:
|
97
|
+
init_kwargs["headers"] = json.loads(config.headers)
|
99
98
|
if config.httpx_extra_kwargs is not None:
|
100
99
|
init_kwargs["httpx_extra_kwargs"] = json.loads(
|
101
100
|
config.httpx_extra_kwargs
|
102
101
|
)
|
103
102
|
|
104
103
|
try:
|
105
|
-
_ = rg.
|
106
|
-
except
|
107
|
-
|
108
|
-
return rg.
|
104
|
+
_ = rg.Argilla(**init_kwargs).me
|
105
|
+
except ArgillaAPIError as e:
|
106
|
+
logger.error(f"Failed to verify the Argilla instance: {str(e)}")
|
107
|
+
return rg.Argilla(**init_kwargs)
|
109
108
|
|
110
|
-
def get_url_for_dataset(self, dataset_name: str) -> str:
|
109
|
+
def get_url_for_dataset(self, dataset_name: str, **kwargs: Any) -> str:
|
111
110
|
"""Gets the URL of the annotation interface for the given dataset.
|
112
111
|
|
113
112
|
Args:
|
114
113
|
dataset_name: The name of the dataset.
|
114
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
115
|
+
-workspace: The name of the workspace. By default, the first available.
|
115
116
|
|
116
117
|
Returns:
|
117
|
-
The URL of the annotation interface.
|
118
|
+
The URL of of the dataset annotation interface.
|
118
119
|
"""
|
119
|
-
|
120
|
+
workspace = kwargs.get("workspace")
|
121
|
+
|
122
|
+
dataset_id = self.get_dataset(
|
123
|
+
dataset_name=dataset_name, workspace=workspace
|
124
|
+
).id
|
120
125
|
return f"{self.get_url()}/dataset/{dataset_id}/annotation-mode"
|
121
126
|
|
122
|
-
def get_datasets(self) -> List[Any]:
|
127
|
+
def get_datasets(self, **kwargs: Any) -> List[Any]:
|
123
128
|
"""Gets the datasets currently available for annotation.
|
124
129
|
|
130
|
+
Args:
|
131
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
132
|
+
-workspace: The name of the workspace. By default, the first available.
|
133
|
+
If set, only the datasets in the workspace will be returned.
|
134
|
+
|
125
135
|
Returns:
|
126
136
|
A list of datasets.
|
127
137
|
"""
|
128
|
-
|
129
|
-
|
138
|
+
workspace = kwargs.get("workspace")
|
139
|
+
|
140
|
+
if workspace is None:
|
141
|
+
datasets = list(self._get_client().datasets)
|
142
|
+
else:
|
143
|
+
datasets = list(self._get_client().workspaces(workspace).datasets)
|
144
|
+
|
145
|
+
return datasets
|
146
|
+
|
147
|
+
def get_dataset_names(self, **kwargs: Any) -> List[str]:
|
148
|
+
"""Gets the names of the datasets.
|
149
|
+
|
150
|
+
Args:
|
151
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
152
|
+
-workspace: The name of the workspace. By default, the first available.
|
153
|
+
If set, only the dataset names in the workspace will be returned.
|
154
|
+
|
155
|
+
Returns:
|
156
|
+
A list of dataset names.
|
157
|
+
"""
|
158
|
+
workspace = kwargs.get("workspace")
|
159
|
+
|
160
|
+
if workspace is None:
|
161
|
+
dataset_names = [dataset.name for dataset in self.get_datasets()]
|
162
|
+
else:
|
163
|
+
dataset_names = [
|
164
|
+
dataset.name
|
165
|
+
for dataset in self.get_datasets(workspace=workspace)
|
166
|
+
]
|
167
|
+
|
168
|
+
return dataset_names
|
169
|
+
|
170
|
+
def _get_data_by_status(
|
171
|
+
self, dataset_name: str, status: str, workspace: Optional[str]
|
172
|
+
) -> Any:
|
173
|
+
"""Gets the dataset containing the data with the specified status.
|
174
|
+
|
175
|
+
Args:
|
176
|
+
dataset_name: The name of the dataset.
|
177
|
+
status: The response status to filter by ('completed' for labeled,
|
178
|
+
'pending' for unlabeled).
|
179
|
+
workspace: The name of the workspace. By default, the first available.
|
180
|
+
|
181
|
+
Returns:
|
182
|
+
The list of records with the specified status.
|
183
|
+
"""
|
184
|
+
dataset = self.get_dataset(
|
185
|
+
dataset_name=dataset_name, workspace=workspace
|
186
|
+
)
|
130
187
|
|
131
|
-
|
132
|
-
dataset_names = set()
|
133
|
-
deduplicated_datasets = []
|
134
|
-
for dataset in new_datasets + old_datasets:
|
135
|
-
if dataset.name not in dataset_names:
|
136
|
-
dataset_names.add(dataset.name)
|
137
|
-
deduplicated_datasets.append(dataset)
|
188
|
+
query = rg.Query(filter=rg.Filter([("status", "==", status)]))
|
138
189
|
|
139
|
-
return
|
190
|
+
return dataset.records(
|
191
|
+
query=query,
|
192
|
+
with_suggestions=True,
|
193
|
+
with_vectors=True,
|
194
|
+
with_responses=True,
|
195
|
+
).to_list()
|
140
196
|
|
141
|
-
def get_dataset_stats(
|
197
|
+
def get_dataset_stats(
|
198
|
+
self, dataset_name: str, **kwargs: Any
|
199
|
+
) -> Tuple[int, int]:
|
142
200
|
"""Gets the statistics of the given dataset.
|
143
201
|
|
144
202
|
Args:
|
145
203
|
dataset_name: The name of the dataset.
|
204
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
205
|
+
-workspace: The name of the workspace. By default, the first available.
|
146
206
|
|
147
207
|
Returns:
|
148
208
|
A tuple containing (labeled_task_count, unlabeled_task_count) for
|
149
209
|
the dataset.
|
150
210
|
"""
|
151
|
-
|
211
|
+
workspace = kwargs.get("workspace")
|
212
|
+
|
152
213
|
labeled_task_count = len(
|
153
|
-
|
214
|
+
self._get_data_by_status(
|
215
|
+
dataset_name=dataset_name,
|
216
|
+
status="completed",
|
217
|
+
workspace=workspace,
|
218
|
+
)
|
154
219
|
)
|
155
220
|
unlabeled_task_count = len(
|
156
|
-
|
221
|
+
self._get_data_by_status(
|
222
|
+
dataset_name=dataset_name,
|
223
|
+
status="pending",
|
224
|
+
workspace=workspace,
|
225
|
+
)
|
157
226
|
)
|
227
|
+
|
158
228
|
return (labeled_task_count, unlabeled_task_count)
|
159
229
|
|
160
|
-
def
|
161
|
-
"""
|
230
|
+
def launch(self, **kwargs: Any) -> None:
|
231
|
+
"""Launches the annotation interface.
|
232
|
+
|
233
|
+
Args:
|
234
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
235
|
+
"""
|
236
|
+
url = kwargs.get("api_url") or self.get_url()
|
162
237
|
|
163
|
-
|
238
|
+
if self._get_client():
|
239
|
+
webbrowser.open(url, new=1, autoraise=True)
|
240
|
+
else:
|
241
|
+
logger.warning(
|
242
|
+
"Could not launch annotation interface"
|
243
|
+
"because the connection could not be established."
|
244
|
+
)
|
245
|
+
|
246
|
+
def add_dataset(self, **kwargs: Any) -> Any:
|
247
|
+
"""Create a dataset for annotation.
|
164
248
|
|
165
249
|
Args:
|
166
|
-
**kwargs: Additional keyword arguments to pass to the Argilla
|
167
|
-
|
250
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
251
|
+
-dataset_name: The name of the dataset.
|
252
|
+
-settings: The settings for the dataset.
|
253
|
+
-workspace: The name of the workspace. By default, the first available.
|
168
254
|
|
169
255
|
Returns:
|
170
256
|
An Argilla dataset object.
|
171
257
|
|
172
258
|
Raises:
|
173
|
-
ValueError: if
|
259
|
+
ValueError: if `dataset_name` or `settings` aren't provided.
|
260
|
+
RuntimeError: if the workspace creation fails.
|
261
|
+
RuntimeError: if the dataset creation fails.
|
174
262
|
"""
|
175
263
|
dataset_name = kwargs.get("dataset_name")
|
176
|
-
|
264
|
+
settings = kwargs.get("settings")
|
265
|
+
workspace = kwargs.get("workspace")
|
177
266
|
|
178
|
-
if
|
179
|
-
raise ValueError(
|
180
|
-
|
181
|
-
|
267
|
+
if dataset_name is None or settings is None:
|
268
|
+
raise ValueError(
|
269
|
+
"`dataset_name` and `settings` keyword arguments are required."
|
270
|
+
)
|
271
|
+
|
272
|
+
if workspace is None and not self._get_client().workspaces:
|
273
|
+
workspace_to_create = rg.Workspace(name="argilla")
|
274
|
+
try:
|
275
|
+
workspace = workspace_to_create.create()
|
276
|
+
except Exception as e:
|
277
|
+
raise RuntimeError(
|
278
|
+
"Failed to create the `argilla` workspace."
|
279
|
+
) from e
|
182
280
|
|
183
281
|
try:
|
184
|
-
|
185
|
-
|
186
|
-
|
282
|
+
dataset = rg.Dataset(
|
283
|
+
name=dataset_name, workspace=workspace, settings=settings
|
284
|
+
)
|
285
|
+
logger.info(f"Creating the dataset '{dataset_name}' in Argilla...")
|
286
|
+
dataset.create()
|
287
|
+
logger.info(f"Dataset '{dataset_name}' successfully created.")
|
288
|
+
return self.get_dataset(
|
289
|
+
dataset_name=dataset_name, workspace=workspace
|
290
|
+
)
|
187
291
|
except Exception as e:
|
188
292
|
logger.error(
|
189
|
-
f"Failed to
|
293
|
+
f"Failed to create dataset '{dataset_name}' in Argilla: {str(e)}"
|
190
294
|
)
|
191
|
-
raise
|
192
|
-
f"Failed to
|
295
|
+
raise RuntimeError(
|
296
|
+
f"Failed to create the dataset '{dataset_name}' in Argilla: {str(e)}"
|
193
297
|
) from e
|
194
|
-
return self.get_dataset(dataset_name=dataset_name)
|
195
298
|
|
196
|
-
def
|
197
|
-
|
299
|
+
def add_records(
|
300
|
+
self,
|
301
|
+
dataset_name: str,
|
302
|
+
records: Union[Any, List[Dict[str, Any]]],
|
303
|
+
workspace: Optional[str] = None,
|
304
|
+
mapping: Optional[Dict[str, str]] = None,
|
305
|
+
) -> Any:
|
306
|
+
"""Add records to an Argilla dataset for annotation.
|
198
307
|
|
199
308
|
Args:
|
200
|
-
|
201
|
-
|
309
|
+
dataset_name: The name of the dataset.
|
310
|
+
records: The records to add to the dataset.
|
311
|
+
workspace: The name of the workspace. By default, the first available.
|
312
|
+
mapping: The mapping of the records to the dataset fields. By default, None.
|
202
313
|
|
203
314
|
Raises:
|
204
|
-
|
315
|
+
RuntimeError: If the records cannot be loaded to Argilla.
|
205
316
|
"""
|
206
|
-
|
207
|
-
|
208
|
-
|
317
|
+
dataset = self.get_dataset(
|
318
|
+
dataset_name=dataset_name, workspace=workspace
|
319
|
+
)
|
209
320
|
|
210
321
|
try:
|
211
|
-
|
212
|
-
|
213
|
-
logger.info(f"Dataset '{dataset_name}' deleted successfully.")
|
214
|
-
except ValueError:
|
215
|
-
logger.warning(
|
216
|
-
f"Dataset '{dataset_name}' not found. Skipping deletion."
|
322
|
+
logger.info(
|
323
|
+
f"Loading the records to '{dataset_name}' in Argilla..."
|
217
324
|
)
|
325
|
+
dataset.records.log(records=records, mapping=mapping)
|
326
|
+
logger.info(
|
327
|
+
f"Records loaded successfully to Argilla for '{dataset_name}'."
|
328
|
+
)
|
329
|
+
except Exception as e:
|
330
|
+
logger.error(
|
331
|
+
f"Failed to load the records to Argilla for '{dataset_name}': {str(e)}"
|
332
|
+
)
|
333
|
+
raise RuntimeError(
|
334
|
+
f"Failed to load the records to Argilla: {str(e)}"
|
335
|
+
) from e
|
218
336
|
|
219
337
|
def get_dataset(self, **kwargs: Any) -> Any:
|
220
338
|
"""Gets the dataset with the given name.
|
221
339
|
|
222
340
|
Args:
|
223
341
|
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
342
|
+
-dataset_name: The name of the dataset.
|
343
|
+
-workspace: The name of the workspace. By default, the first available.
|
224
344
|
|
225
345
|
Returns:
|
226
|
-
The Argilla
|
346
|
+
The Argilla Dataset for the given name and workspace, if specified.
|
227
347
|
|
228
348
|
Raises:
|
229
349
|
ValueError: If the dataset name is not provided or if the dataset
|
230
350
|
does not exist.
|
231
351
|
"""
|
232
352
|
dataset_name = kwargs.get("dataset_name")
|
353
|
+
workspace = kwargs.get("workspace")
|
354
|
+
|
233
355
|
if not dataset_name:
|
234
356
|
raise ValueError("`dataset_name` keyword argument is required.")
|
235
357
|
|
236
358
|
try:
|
237
|
-
|
238
|
-
|
359
|
+
dataset = self._get_client().datasets(
|
360
|
+
name=dataset_name, workspace=workspace
|
361
|
+
)
|
362
|
+
if dataset is None:
|
363
|
+
logger.error(f"Dataset '{dataset_name}' not found.")
|
239
364
|
else:
|
240
|
-
return
|
241
|
-
except
|
365
|
+
return dataset
|
366
|
+
except ValueError as e:
|
242
367
|
logger.error(f"Dataset '{dataset_name}' not found.")
|
243
368
|
raise ValueError(f"Dataset '{dataset_name}' not found.") from e
|
244
369
|
|
245
|
-
def
|
246
|
-
"""
|
370
|
+
def delete_dataset(self, **kwargs: Any) -> None:
|
371
|
+
"""Deletes a dataset from the annotation interface.
|
247
372
|
|
248
373
|
Args:
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
Returns:
|
254
|
-
The dataset containing the data with the specified status.
|
374
|
+
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
375
|
+
-dataset_name: The name of the dataset.
|
376
|
+
-workspace: The name of the workspace. By default, the first available
|
255
377
|
|
256
378
|
Raises:
|
257
|
-
ValueError: If the dataset name is not provided
|
379
|
+
ValueError: If the dataset name is not provided or if the datasets
|
380
|
+
is not found.
|
258
381
|
"""
|
382
|
+
dataset_name = kwargs.get("dataset_name")
|
383
|
+
workspace = kwargs.get("workspace")
|
384
|
+
|
259
385
|
if not dataset_name:
|
260
|
-
raise ValueError("`dataset_name` argument is required.")
|
386
|
+
raise ValueError("`dataset_name` keyword argument is required.")
|
261
387
|
|
262
|
-
|
263
|
-
|
264
|
-
|
388
|
+
try:
|
389
|
+
dataset = self.get_dataset(
|
390
|
+
dataset_name=dataset_name, workspace=workspace
|
391
|
+
)
|
392
|
+
dataset.delete()
|
393
|
+
logger.info(f"Dataset '{dataset_name}' deleted successfully.")
|
394
|
+
except ValueError:
|
395
|
+
logger.warning(
|
396
|
+
f"Dataset '{dataset_name}' not found. Skipping deletion."
|
397
|
+
)
|
265
398
|
|
266
399
|
def get_labeled_data(self, **kwargs: Any) -> Any:
|
267
400
|
"""Gets the dataset containing the labeled data.
|
268
401
|
|
269
402
|
Args:
|
270
403
|
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
404
|
+
-dataset_name: The name of the dataset.
|
405
|
+
-workspace: The name of the workspace. By default, the first available.
|
271
406
|
|
272
407
|
Returns:
|
273
|
-
The
|
408
|
+
The list of annotated records.
|
274
409
|
|
275
410
|
Raises:
|
276
411
|
ValueError: If the dataset name is not provided.
|
277
412
|
"""
|
278
|
-
|
279
|
-
|
280
|
-
|
413
|
+
dataset_name = kwargs.get("dataset_name")
|
414
|
+
workspace = kwargs.get("workspace")
|
415
|
+
|
416
|
+
if not dataset_name:
|
281
417
|
raise ValueError("`dataset_name` keyword argument is required.")
|
282
418
|
|
419
|
+
return self._get_data_by_status(
|
420
|
+
dataset_name, workspace=workspace, status="completed"
|
421
|
+
)
|
422
|
+
|
283
423
|
def get_unlabeled_data(self, **kwargs: str) -> Any:
|
284
424
|
"""Gets the dataset containing the unlabeled data.
|
285
425
|
|
@@ -287,12 +427,17 @@ class ArgillaAnnotator(BaseAnnotator, AuthenticationMixin):
|
|
287
427
|
**kwargs: Additional keyword arguments to pass to the Argilla client.
|
288
428
|
|
289
429
|
Returns:
|
290
|
-
The
|
430
|
+
The list of pending records for annotation.
|
291
431
|
|
292
432
|
Raises:
|
293
433
|
ValueError: If the dataset name is not provided.
|
294
434
|
"""
|
295
|
-
|
296
|
-
|
297
|
-
|
435
|
+
dataset_name = kwargs.get("dataset_name")
|
436
|
+
workspace = kwargs.get("workspace")
|
437
|
+
|
438
|
+
if not dataset_name:
|
298
439
|
raise ValueError("`dataset_name` keyword argument is required.")
|
440
|
+
|
441
|
+
return self._get_data_by_status(
|
442
|
+
dataset_name, workspace=workspace, status="pending"
|
443
|
+
)
|
@@ -24,6 +24,7 @@ from zenml.annotators.base_annotator import (
|
|
24
24
|
from zenml.config.base_settings import BaseSettings
|
25
25
|
from zenml.integrations.argilla import ARGILLA_ANNOTATOR_FLAVOR
|
26
26
|
from zenml.stack.authentication_mixin import AuthenticationConfigMixin
|
27
|
+
from zenml.utils import deprecation_utils
|
27
28
|
from zenml.utils.secret_utils import SecretField
|
28
29
|
|
29
30
|
if TYPE_CHECKING:
|
@@ -43,19 +44,23 @@ class ArgillaAnnotatorSettings(BaseSettings):
|
|
43
44
|
Attributes:
|
44
45
|
instance_url: URL of the Argilla instance.
|
45
46
|
api_key: The api_key for Argilla
|
46
|
-
workspace: The workspace to use for the annotation interface.
|
47
47
|
port: The port to use for the annotation interface.
|
48
|
-
|
48
|
+
headers: Extra headers to include in the request.
|
49
49
|
httpx_extra_kwargs: Extra kwargs to pass to the client.
|
50
50
|
"""
|
51
51
|
|
52
52
|
instance_url: str = DEFAULT_LOCAL_INSTANCE_URL
|
53
53
|
api_key: Optional[str] = SecretField(default=None)
|
54
|
-
|
55
|
-
|
56
|
-
extra_headers: Optional[str] = None
|
54
|
+
port: Optional[int] = DEFAULT_LOCAL_ARGILLA_PORT
|
55
|
+
headers: Optional[str] = None
|
57
56
|
httpx_extra_kwargs: Optional[str] = None
|
58
57
|
|
58
|
+
extra_headers: Optional[str] = None
|
59
|
+
|
60
|
+
_deprecation_validator = deprecation_utils.deprecate_pydantic_attributes(
|
61
|
+
("extra_headers", "headers"),
|
62
|
+
)
|
63
|
+
|
59
64
|
@field_validator("instance_url")
|
60
65
|
@classmethod
|
61
66
|
def ensure_instance_url_ends_without_slash(cls, instance_url: str) -> str:
|
@@ -40,6 +40,10 @@ class SagemakerOrchestratorSettings(BaseSettings):
|
|
40
40
|
"""Settings for the Sagemaker orchestrator.
|
41
41
|
|
42
42
|
Attributes:
|
43
|
+
synchronous: If `True`, the client running a pipeline using this
|
44
|
+
orchestrator waits until all steps finish running. If `False`,
|
45
|
+
the client returns immediately and the pipeline is executed
|
46
|
+
asynchronously. Defaults to `True`.
|
43
47
|
instance_type: The instance type to use for the processing job.
|
44
48
|
execution_role: The IAM role to use for the step execution.
|
45
49
|
processor_role: DEPRECATED: use `execution_role` instead.
|
@@ -48,6 +52,8 @@ class SagemakerOrchestratorSettings(BaseSettings):
|
|
48
52
|
max_runtime_in_seconds: The maximum runtime in seconds for the
|
49
53
|
processing job.
|
50
54
|
tags: Tags to apply to the Processor/Estimator assigned to the step.
|
55
|
+
pipeline_tags: Tags to apply to the pipeline via the
|
56
|
+
sagemaker.workflow.pipeline.Pipeline.create method.
|
51
57
|
processor_tags: DEPRECATED: use `tags` instead.
|
52
58
|
keep_alive_period_in_seconds: The time in seconds after which the
|
53
59
|
provisioned instance will be terminated if not used. This is only
|
@@ -96,11 +102,14 @@ class SagemakerOrchestratorSettings(BaseSettings):
|
|
96
102
|
Data must be available locally in /opt/ml/processing/output/data/<ChannelName>.
|
97
103
|
"""
|
98
104
|
|
105
|
+
synchronous: bool = True
|
106
|
+
|
99
107
|
instance_type: Optional[str] = None
|
100
108
|
execution_role: Optional[str] = None
|
101
109
|
volume_size_in_gb: int = 30
|
102
110
|
max_runtime_in_seconds: int = 86400
|
103
111
|
tags: Dict[str, str] = {}
|
112
|
+
pipeline_tags: Dict[str, str] = {}
|
104
113
|
keep_alive_period_in_seconds: Optional[int] = 300 # 5 minutes
|
105
114
|
use_training_step: Optional[bool] = None
|
106
115
|
|
@@ -174,10 +183,6 @@ class SagemakerOrchestratorConfig(
|
|
174
183
|
loaded from the default AWS config.
|
175
184
|
|
176
185
|
Attributes:
|
177
|
-
synchronous: If `True`, the client running a pipeline using this
|
178
|
-
orchestrator waits until all steps finish running. If `False`,
|
179
|
-
the client returns immediately and the pipeline is executed
|
180
|
-
asynchronously. Defaults to `True`.
|
181
186
|
execution_role: The IAM role ARN to use for the pipeline.
|
182
187
|
aws_access_key_id: The AWS access key ID to use to authenticate to AWS.
|
183
188
|
If not provided, the value from the default AWS config will be used.
|
@@ -197,7 +202,6 @@ class SagemakerOrchestratorConfig(
|
|
197
202
|
"sagemaker-{region}-{aws-account-id}".
|
198
203
|
"""
|
199
204
|
|
200
|
-
synchronous: bool = True
|
201
205
|
execution_role: str
|
202
206
|
aws_access_key_id: Optional[str] = SecretField(default=None)
|
203
207
|
aws_secret_access_key: Optional[str] = SecretField(default=None)
|
@@ -332,6 +332,7 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
|
|
332
332
|
else None
|
333
333
|
),
|
334
334
|
)
|
335
|
+
|
335
336
|
args_for_step_executor.setdefault(
|
336
337
|
"instance_type", step_settings.instance_type
|
337
338
|
)
|
@@ -457,7 +458,19 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
|
|
457
458
|
sagemaker_session=session,
|
458
459
|
)
|
459
460
|
|
460
|
-
|
461
|
+
settings = cast(
|
462
|
+
SagemakerOrchestratorSettings, self.get_settings(deployment)
|
463
|
+
)
|
464
|
+
|
465
|
+
pipeline.create(
|
466
|
+
role_arn=self.config.execution_role,
|
467
|
+
tags=[
|
468
|
+
{"Key": key, "Value": value}
|
469
|
+
for key, value in settings.pipeline_tags.items()
|
470
|
+
]
|
471
|
+
if settings.pipeline_tags
|
472
|
+
else None,
|
473
|
+
)
|
461
474
|
execution = pipeline.start()
|
462
475
|
logger.warning(
|
463
476
|
"Steps can take 5-15 minutes to start running "
|
@@ -468,7 +481,7 @@ class SagemakerOrchestrator(ContainerizedOrchestrator):
|
|
468
481
|
yield from self.compute_metadata(execution=execution)
|
469
482
|
|
470
483
|
# mainly for testing purposes, we wait for the pipeline to finish
|
471
|
-
if
|
484
|
+
if settings.synchronous:
|
472
485
|
logger.info(
|
473
486
|
"Executing synchronously. Waiting for pipeline to finish... \n"
|
474
487
|
"At this point you can `Ctrl-C` out without cancelling the "
|
@@ -522,6 +522,9 @@ that the connector will be allowed to access (e.g. `arn:aws:s3:::*` and
|
|
522
522
|
- `s3:PutObject`
|
523
523
|
- `s3:DeleteObject`
|
524
524
|
- `s3:ListAllMyBuckets`
|
525
|
+
- `s3:GetBucketVersioning`
|
526
|
+
- `s3:ListBucketVersions`
|
527
|
+
- `s3:DeleteObjectVersion`
|
525
528
|
|
526
529
|
If set, the resource name must identify an S3 bucket using one of the following
|
527
530
|
formats:
|
@@ -795,6 +798,9 @@ class AWSServiceConnector(ServiceConnector):
|
|
795
798
|
"s3:PutObject",
|
796
799
|
"s3:DeleteObject",
|
797
800
|
"s3:ListAllMyBuckets",
|
801
|
+
"s3:GetBucketVersioning",
|
802
|
+
"s3:ListBucketVersions",
|
803
|
+
"s3:DeleteObjectVersion",
|
798
804
|
],
|
799
805
|
"Resource": resource,
|
800
806
|
},
|
@@ -38,6 +38,11 @@ logger = get_logger(__name__)
|
|
38
38
|
class AzureMLOrchestratorSettings(AzureMLComputeSettings):
|
39
39
|
"""Settings for the AzureML orchestrator."""
|
40
40
|
|
41
|
+
synchronous: bool = Field(
|
42
|
+
default=True,
|
43
|
+
description="Whether the orchestrator runs synchronously or not.",
|
44
|
+
)
|
45
|
+
|
41
46
|
|
42
47
|
class AzureMLOrchestratorConfig(
|
43
48
|
BaseOrchestratorConfig, AzureMLOrchestratorSettings
|
@@ -53,10 +58,6 @@ class AzureMLOrchestratorConfig(
|
|
53
58
|
workspace: str = Field(
|
54
59
|
description="Name of the workspace that AzureML is running on."
|
55
60
|
)
|
56
|
-
synchronous: bool = Field(
|
57
|
-
default=True,
|
58
|
-
description="Whether the orchestrator runs synchronously or not.",
|
59
|
-
)
|
60
61
|
|
61
62
|
@property
|
62
63
|
def is_remote(self) -> bool:
|
@@ -399,7 +399,7 @@ class AzureMLOrchestrator(ContainerizedOrchestrator):
|
|
399
399
|
f"{job.services['Studio'].endpoint}"
|
400
400
|
)
|
401
401
|
|
402
|
-
if
|
402
|
+
if settings.synchronous:
|
403
403
|
logger.info("Waiting for pipeline to finish...")
|
404
404
|
ml_client.jobs.stream(job.name)
|
405
405
|
|