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.
Files changed (596) hide show
  1. README.md +18 -12
  2. RELEASE_NOTES.md +236 -0
  3. zenml/VERSION +1 -1
  4. zenml/__init__.py +5 -10
  5. zenml/analytics/context.py +16 -1
  6. zenml/analytics/enums.py +0 -13
  7. zenml/analytics/utils.py +18 -7
  8. zenml/artifact_stores/base_artifact_store.py +11 -0
  9. zenml/artifacts/artifact_config.py +19 -65
  10. zenml/artifacts/external_artifact.py +7 -53
  11. zenml/artifacts/external_artifact_config.py +21 -40
  12. zenml/artifacts/load_directory_materializer.py +91 -0
  13. zenml/artifacts/utils.py +204 -145
  14. zenml/cli/__init__.py +62 -127
  15. zenml/cli/base.py +8 -8
  16. zenml/cli/integration.py +0 -9
  17. zenml/cli/login.py +951 -0
  18. zenml/cli/pipeline.py +1 -1
  19. zenml/cli/served_model.py +8 -1
  20. zenml/cli/server.py +462 -577
  21. zenml/cli/service_accounts.py +4 -4
  22. zenml/cli/stack.py +78 -569
  23. zenml/cli/stack_components.py +5 -594
  24. zenml/cli/user_management.py +0 -12
  25. zenml/cli/utils.py +24 -142
  26. zenml/client.py +57 -40
  27. zenml/client_lazy_loader.py +29 -12
  28. zenml/config/compiler.py +7 -11
  29. zenml/config/global_config.py +9 -0
  30. zenml/config/pipeline_configurations.py +2 -1
  31. zenml/config/pipeline_run_configuration.py +2 -1
  32. zenml/config/server_config.py +7 -5
  33. zenml/config/step_configurations.py +2 -0
  34. zenml/constants.py +6 -42
  35. zenml/enums.py +1 -4
  36. zenml/environment.py +1 -315
  37. zenml/exceptions.py +12 -41
  38. zenml/hooks/hook_validators.py +1 -8
  39. zenml/integrations/airflow/orchestrators/airflow_orchestrator.py +2 -3
  40. zenml/integrations/argilla/__init__.py +1 -1
  41. zenml/integrations/argilla/annotators/argilla_annotator.py +234 -89
  42. zenml/integrations/argilla/flavors/argilla_annotator_flavor.py +10 -5
  43. zenml/integrations/aws/flavors/sagemaker_orchestrator_flavor.py +9 -5
  44. zenml/integrations/aws/orchestrators/sagemaker_orchestrator.py +15 -2
  45. zenml/integrations/aws/service_connectors/aws_service_connector.py +6 -0
  46. zenml/integrations/azure/flavors/azureml_orchestrator_flavor.py +5 -4
  47. zenml/integrations/azure/orchestrators/azureml_orchestrator.py +1 -1
  48. zenml/integrations/bentoml/model_deployers/bentoml_model_deployer.py +85 -19
  49. zenml/integrations/bentoml/services/__init__.py +15 -4
  50. zenml/integrations/bentoml/services/bentoml_container_deployment.py +399 -0
  51. zenml/integrations/bentoml/services/{bentoml_deployment.py → bentoml_local_deployment.py} +81 -40
  52. zenml/{steps/base_parameters.py → integrations/bentoml/services/deployment_type.py} +8 -5
  53. zenml/integrations/bentoml/steps/bento_builder.py +1 -0
  54. zenml/integrations/bentoml/steps/bentoml_deployer.py +93 -41
  55. zenml/integrations/github/code_repositories/github_code_repository.py +1 -1
  56. zenml/integrations/gitlab/code_repositories/gitlab_code_repository.py +6 -1
  57. zenml/integrations/huggingface/__init__.py +1 -6
  58. zenml/integrations/kaniko/image_builders/kaniko_image_builder.py +3 -3
  59. zenml/integrations/lightning/orchestrators/lightning_orchestrator.py +3 -3
  60. zenml/integrations/lightning/orchestrators/lightning_orchestrator_entrypoint.py +2 -2
  61. zenml/integrations/mlflow/experiment_trackers/mlflow_experiment_tracker.py +6 -3
  62. zenml/integrations/mlflow/model_registries/mlflow_model_registry.py +6 -0
  63. zenml/integrations/mlflow/services/mlflow_deployment.py +2 -2
  64. zenml/integrations/mlflow/steps/mlflow_deployer.py +1 -1
  65. zenml/integrations/mlflow/steps/mlflow_registry.py +1 -1
  66. zenml/integrations/neptune/experiment_trackers/run_state.py +2 -2
  67. zenml/integrations/pytorch/materializers/base_pytorch_materializer.py +8 -2
  68. zenml/integrations/pytorch/materializers/pytorch_module_materializer.py +4 -1
  69. zenml/integrations/s3/artifact_stores/s3_artifact_store.py +98 -0
  70. zenml/integrations/s3/flavors/s3_artifact_store_flavor.py +14 -0
  71. zenml/integrations/s3/utils.py +40 -0
  72. zenml/integrations/tensorflow/__init__.py +0 -9
  73. zenml/logging/step_logging.py +13 -15
  74. zenml/{new/pipelines → login}/__init__.py +4 -1
  75. zenml/login/credentials.py +346 -0
  76. zenml/login/credentials_store.py +603 -0
  77. zenml/{new → login/pro}/__init__.py +4 -1
  78. zenml/login/pro/client.py +496 -0
  79. zenml/login/pro/constants.py +34 -0
  80. zenml/{lineage_graph/edge.py → login/pro/models.py} +9 -8
  81. zenml/{zen_server/deploy/terraform/providers → login/pro/organization}/__init__.py +2 -2
  82. zenml/login/pro/organization/client.py +79 -0
  83. zenml/{lineage_graph/node/base_node.py → login/pro/organization/models.py} +13 -12
  84. zenml/{new/steps → login/pro/tenant}/__init__.py +2 -1
  85. zenml/login/pro/tenant/client.py +92 -0
  86. zenml/login/pro/tenant/models.py +174 -0
  87. zenml/login/pro/utils.py +121 -0
  88. zenml/{cli → login}/web_login.py +64 -28
  89. zenml/materializers/__init__.py +2 -0
  90. zenml/materializers/base_materializer.py +43 -9
  91. zenml/materializers/built_in_materializer.py +1 -1
  92. zenml/materializers/uuid_materializer.py +79 -0
  93. zenml/metadata/lazy_load.py +10 -7
  94. zenml/metadata/metadata_types.py +49 -0
  95. zenml/model/lazy_load.py +85 -4
  96. zenml/model/model.py +61 -83
  97. zenml/model/utils.py +47 -118
  98. zenml/models/__init__.py +6 -0
  99. zenml/models/v2/base/base.py +12 -8
  100. zenml/models/v2/base/filter.py +9 -0
  101. zenml/models/v2/core/artifact_version.py +53 -25
  102. zenml/models/v2/core/component.py +54 -19
  103. zenml/models/v2/core/flavor.py +13 -13
  104. zenml/models/v2/core/model.py +4 -1
  105. zenml/models/v2/core/model_version.py +4 -6
  106. zenml/models/v2/core/model_version_artifact.py +3 -1
  107. zenml/models/v2/core/model_version_pipeline_run.py +3 -1
  108. zenml/models/v2/core/pipeline.py +3 -1
  109. zenml/models/v2/core/pipeline_run.py +24 -3
  110. zenml/models/v2/core/run_metadata.py +2 -2
  111. zenml/models/v2/core/run_template.py +3 -1
  112. zenml/models/v2/core/stack.py +7 -3
  113. zenml/models/v2/core/step_run.py +58 -14
  114. zenml/models/v2/misc/auth_models.py +11 -2
  115. zenml/models/v2/misc/server_models.py +2 -4
  116. zenml/orchestrators/base_orchestrator.py +41 -4
  117. zenml/orchestrators/input_utils.py +52 -36
  118. zenml/orchestrators/step_launcher.py +50 -171
  119. zenml/orchestrators/step_run_utils.py +574 -0
  120. zenml/orchestrators/step_runner.py +83 -120
  121. zenml/orchestrators/utils.py +46 -180
  122. zenml/pipelines/__init__.py +3 -16
  123. zenml/{new/pipelines → pipelines}/pipeline_context.py +3 -18
  124. zenml/pipelines/pipeline_decorator.py +34 -60
  125. zenml/{new/pipelines/pipeline.py → pipelines/pipeline_definition.py} +210 -207
  126. zenml/{new/pipelines → pipelines}/run_utils.py +11 -10
  127. zenml/services/local/local_daemon_entrypoint.py +4 -4
  128. zenml/services/service.py +2 -2
  129. zenml/stack/stack.py +3 -108
  130. zenml/stack/stack_component.py +2 -78
  131. zenml/stack/utils.py +26 -14
  132. zenml/stack_deployments/aws_stack_deployment.py +3 -0
  133. zenml/step_operators/step_operator_entrypoint_configuration.py +1 -1
  134. zenml/steps/__init__.py +3 -9
  135. zenml/steps/base_step.py +25 -267
  136. zenml/steps/entrypoint_function_utils.py +2 -80
  137. zenml/{new/steps → steps}/step_context.py +12 -66
  138. zenml/steps/step_decorator.py +42 -89
  139. zenml/steps/step_invocation.py +16 -60
  140. zenml/steps/utils.py +4 -23
  141. zenml/utils/dashboard_utils.py +16 -51
  142. zenml/utils/materializer_utils.py +1 -1
  143. zenml/utils/requirements_utils.py +71 -0
  144. zenml/utils/singleton.py +15 -3
  145. zenml/utils/source_utils.py +39 -2
  146. zenml/utils/typing_utils.py +8 -28
  147. zenml/utils/visualization_utils.py +1 -1
  148. zenml/zen_server/auth.py +44 -39
  149. zenml/zen_server/dashboard/assets/{404-Y50hSt65.js → 404-DT4QRUqN.js} +1 -1
  150. zenml/zen_server/dashboard/assets/@radix-DP6vWzyx.js +85 -0
  151. zenml/zen_server/dashboard/assets/@react-router-BMhZulnd.js +29 -0
  152. zenml/zen_server/dashboard/assets/@reactflow-8U9qNlMR.js +17 -0
  153. zenml/zen_server/dashboard/assets/@tanstack-BUCbhJyH.js +22 -0
  154. zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-xLR9a1iw.js → AlertDialogDropdownItem-C6N2rGrB.js} +1 -1
  155. zenml/zen_server/dashboard/assets/{CodeSnippet-IxXNxUDa.js → CodeSnippet-CqybNv0k.js} +1 -1
  156. zenml/zen_server/dashboard/assets/{CollapsibleCard-BhutZbBL.js → CollapsibleCard-0r_8G2Lj.js} +1 -1
  157. zenml/zen_server/dashboard/assets/{Commands-Bf-rd1z8.js → Commands-BDjgBQKi.js} +1 -1
  158. zenml/zen_server/dashboard/assets/ComponentBadge-DUiEYJHu.js +1 -0
  159. zenml/zen_server/dashboard/assets/ComponentFallbackDialog-BFoH5K4V.js +1 -0
  160. zenml/zen_server/dashboard/assets/ComponentIcon-CAIoUis2.js +1 -0
  161. zenml/zen_server/dashboard/assets/{CopyButton-DcFHidFJ.js → CopyButton-C745BrKi.js} +1 -1
  162. zenml/zen_server/dashboard/assets/{CsvVizualization-QSbjrfxw.js → CsvVizualization-PpAq0CeZ.js} +5 -5
  163. zenml/zen_server/dashboard/assets/{DialogItem-Cd3HqST4.js → DialogItem-DcVCZEew.js} +1 -1
  164. zenml/zen_server/dashboard/assets/{DisplayDate-DkCy54Bp.js → DisplayDate-BeXgUG_C.js} +1 -1
  165. zenml/zen_server/dashboard/assets/{EmptyState-Cs3DEmso.js → EmptyState-DeK7H4pr.js} +1 -1
  166. zenml/zen_server/dashboard/assets/{Error-BhwdmqK7.js → Error-BMlzibXj.js} +1 -1
  167. zenml/zen_server/dashboard/assets/{Helpbox-0pBpTwTm.js → Helpbox-BLf40fLV.js} +1 -1
  168. zenml/zen_server/dashboard/assets/{Infobox-BTK_EUKT.js → Infobox-BwisKifi.js} +1 -1
  169. zenml/zen_server/dashboard/assets/{InlineAvatar-CA3DFMcM.js → InlineAvatar-jEgodSgX.js} +1 -1
  170. zenml/zen_server/dashboard/assets/{Lock-CmIn0szs.js → Lock-3lLt1ih0.js} +1 -1
  171. zenml/zen_server/dashboard/assets/MarkdownVisualization-8O9kTr-2.js +14 -0
  172. zenml/zen_server/dashboard/assets/{NumberBox-CrN0_kqI.js → NumberBox-T9eELfLZ.js} +1 -1
  173. zenml/zen_server/dashboard/assets/{Partials-QLOZw624.js → Partials-YPBB3V4q.js} +1 -1
  174. zenml/zen_server/dashboard/assets/{PasswordChecker-DE71J_3F.js → PasswordChecker-CW0kqY0W.js} +1 -1
  175. zenml/zen_server/dashboard/assets/{ProviderIcon-C16CCIN4.js → ProviderIcon-Bb3Xha5A.js} +1 -1
  176. zenml/zen_server/dashboard/assets/{ProviderRadio-D3FuCHf3.js → ProviderRadio-BROY1700.js} +1 -1
  177. zenml/zen_server/dashboard/assets/RunSelector-DCiL3M1c.js +1 -0
  178. zenml/zen_server/dashboard/assets/SearchField-DfUiGFVd.js +1 -0
  179. zenml/zen_server/dashboard/assets/{SecretTooltip-BaMwHF-Q.js → SecretTooltip-C_qByGWB.js} +1 -1
  180. zenml/zen_server/dashboard/assets/{SetPassword-DuIC65H9.js → SetPassword-7pRB00El.js} +1 -1
  181. zenml/zen_server/dashboard/assets/{Tick-DJTCF0Re.js → Tick-CykQFPj2.js} +1 -1
  182. zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-CUm-DMpw.js → UpdatePasswordSchemas-DckMEkFf.js} +1 -1
  183. zenml/zen_server/dashboard/assets/{UsageReason-CKw0juLF.js → UsageReason-DVceN14P.js} +1 -1
  184. zenml/zen_server/dashboard/assets/{WizardFooter-Cv9ApYWU.js → WizardFooter-CW0Cvd70.js} +1 -1
  185. zenml/zen_server/dashboard/assets/{check-circle-DOoS4yhF.js → check-circle-Dwxliy1Z.js} +1 -1
  186. zenml/zen_server/dashboard/assets/{chevron-down-Cwb-W_B_.js → chevron-down-8wLBS5pQ.js} +1 -1
  187. zenml/zen_server/dashboard/assets/{chevron-right-double-c9H46Kl8.js → chevron-right-double-DoD8iXWM.js} +1 -1
  188. zenml/zen_server/dashboard/assets/{cloud-only-BB4BVa6E.js → cloud-only-B-s_HMDm.js} +1 -1
  189. zenml/zen_server/dashboard/assets/{code-browser-BJYErIjr.js → code-browser-CZUQs3Wa.js} +1 -1
  190. zenml/zen_server/dashboard/assets/{copy-CaGlDsUy.js → copy-CaSMXwiU.js} +1 -1
  191. zenml/zen_server/dashboard/assets/{create-stack-F29xAUEx.js → create-stack-CEmaPZ4c.js} +1 -1
  192. zenml/zen_server/dashboard/assets/delete-run-D-LKbGyz.js +1 -0
  193. zenml/zen_server/dashboard/assets/{docker-BFAFXr2_.js → docker-BFNgg-z3.js} +1 -1
  194. zenml/zen_server/dashboard/assets/{dots-horizontal-C6K59vUm.js → dots-horizontal-DK5Duzx4.js} +1 -1
  195. zenml/zen_server/dashboard/assets/{form-schemas-BKXwSDK2.js → form-schemas-1AyOCx90.js} +1 -1
  196. zenml/zen_server/dashboard/assets/{gcp-Dj6ntk0L.js → gcp-7M2Yf3ZK.js} +1 -1
  197. zenml/zen_server/dashboard/assets/{help-CwN931fX.js → help-Dam461dC.js} +1 -1
  198. zenml/zen_server/dashboard/assets/{index-5GJ5ysEZ.js → index-BVJ8n2-j.js} +1 -1
  199. zenml/zen_server/dashboard/assets/index-Bpmj40BI.js +1 -0
  200. zenml/zen_server/dashboard/assets/index-CbU4Ln_E.css +1 -0
  201. zenml/zen_server/dashboard/assets/{index-D-mtoBj3.js → index-DKPhqP2B.js} +1 -1
  202. zenml/zen_server/dashboard/assets/index-QQb7wQEC.js +55 -0
  203. zenml/zen_server/dashboard/assets/index.esm-cuVep_NJ.js +1 -0
  204. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-BLGc9T1a.woff2 +0 -0
  205. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-ZzOtrSSW.woff +0 -0
  206. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-D4Vwzodn.woff2 +0 -0
  207. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DH2hs3aW.woff +0 -0
  208. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BGBWG807.woff2 +0 -0
  209. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-BuzJQFbW.woff +0 -0
  210. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-BPnxn4xp.woff +0 -0
  211. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-Dc4VJyIJ.woff2 +0 -0
  212. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-BShVwWPj.woff2 +0 -0
  213. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-CUiC4oBV.woff +0 -0
  214. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-Bt9VVOA-.woff +0 -0
  215. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-CaqZN2hq.woff2 +0 -0
  216. zenml/zen_server/dashboard/assets/inter-greek-400-normal-BZzXV7-1.woff +0 -0
  217. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DxZsaF_h.woff2 +0 -0
  218. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CeQXL5ds.woff2 +0 -0
  219. zenml/zen_server/dashboard/assets/inter-greek-500-normal-d_eO-yCQ.woff +0 -0
  220. zenml/zen_server/dashboard/assets/inter-greek-600-normal-CwicyhtI.woff +0 -0
  221. zenml/zen_server/dashboard/assets/inter-greek-600-normal-Dhlb-90d.woff2 +0 -0
  222. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-Bput3-QP.woff2 +0 -0
  223. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-DCpCPQOf.woff +0 -0
  224. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-B6guLgqG.woff2 +0 -0
  225. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-M2hEX8vc.woff +0 -0
  226. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-C9WLioJ8.woff +0 -0
  227. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-Cnui8OiR.woff2 +0 -0
  228. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BOOGhInR.woff2 +0 -0
  229. zenml/zen_server/dashboard/assets/inter-latin-400-normal-gitzw0hO.woff +0 -0
  230. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D2bGa7uu.woff2 +0 -0
  231. zenml/zen_server/dashboard/assets/inter-latin-500-normal-deR1Tlfd.woff +0 -0
  232. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B5cFAncS.woff +0 -0
  233. zenml/zen_server/dashboard/assets/inter-latin-600-normal-D273HNI0.woff2 +0 -0
  234. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-C1t-h-pH.woff +0 -0
  235. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-hnt3BR84.woff2 +0 -0
  236. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-CIS2RHJS.woff2 +0 -0
  237. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-UMdmhHu2.woff +0 -0
  238. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-BnYJhD27.woff2 +0 -0
  239. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-CAF0vJDd.woff +0 -0
  240. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-BUNmGMP1.woff +0 -0
  241. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  242. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  243. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-DQPw2Hwd.woff +0 -0
  244. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  245. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-Cm6aH8_k.woff +0 -0
  246. zenml/zen_server/dashboard/assets/{kubernetes-BjbR6D-1.js → kubernetes--g7r02Zu.js} +1 -1
  247. zenml/zen_server/dashboard/assets/{layout-Dru15_XR.js → layout-DCSYN7-C.js} +1 -1
  248. zenml/zen_server/dashboard/assets/{link-external-BT2L8hAQ.js → link-external-CBEk6kEG.js} +1 -1
  249. zenml/zen_server/dashboard/assets/{login-mutation-ax6iL2Mb.js → login-mutation-DTcAFP1l.js} +1 -1
  250. zenml/zen_server/dashboard/assets/{logs-GiDJXbLS.js → logs-D5bdJGur.js} +1 -1
  251. zenml/zen_server/dashboard/assets/not-found-Cc-JkRH2.js +1 -0
  252. zenml/zen_server/dashboard/assets/{package-DYKZ5jKW.js → package-Cs35Szwh.js} +1 -1
  253. zenml/zen_server/dashboard/assets/{page-HkVBdZl6.js → page-9yplj5JT.js} +1 -1
  254. zenml/zen_server/dashboard/assets/{page-uORspyRu.js → page-B-y2XKIc.js} +1 -1
  255. zenml/zen_server/dashboard/assets/page-BBpOxVcY.js +1 -0
  256. zenml/zen_server/dashboard/assets/{page-BDg1F-Ug.js → page-BQQKaabe.js} +2 -2
  257. zenml/zen_server/dashboard/assets/page-BRInM1Lg.js +1 -0
  258. zenml/zen_server/dashboard/assets/{page-CvKnNK1S.js → page-BjjlMk7s.js} +1 -1
  259. zenml/zen_server/dashboard/assets/{page-BukXK1Aa.js → page-Bvd7YH2A.js} +1 -1
  260. zenml/zen_server/dashboard/assets/{page-DcTjHmYZ.js → page-C0N5q3l7.js} +1 -1
  261. zenml/zen_server/dashboard/assets/page-CT3Nep8W.js +1 -0
  262. zenml/zen_server/dashboard/assets/{page-DuqYMYmH.js → page-C_f47pBf.js} +1 -1
  263. zenml/zen_server/dashboard/assets/{page-DRfcRK1w.js → page-ClUVkl-O.js} +1 -1
  264. zenml/zen_server/dashboard/assets/page-Cmv8C_yM.js +3 -0
  265. zenml/zen_server/dashboard/assets/{page-p0BhSAWx.js → page-CyN2bdWG.js} +1 -1
  266. zenml/zen_server/dashboard/assets/page-CzzXH4fs.js +1 -0
  267. zenml/zen_server/dashboard/assets/{page-6mfzecin.js → page-DH_Z7iW1.js} +1 -1
  268. zenml/zen_server/dashboard/assets/{page-8kYmrh0B.js → page-DIOXwhiD.js} +1 -1
  269. zenml/zen_server/dashboard/assets/{page-BXarY9K2.js → page-DLixvR-7.js} +1 -1
  270. zenml/zen_server/dashboard/assets/page-DTlGjgnG.js +1 -0
  271. zenml/zen_server/dashboard/assets/page-Dbpl86h0.js +1 -0
  272. zenml/zen_server/dashboard/assets/{page-MAXyfXBq.js → page-Ddgy6kDS.js} +1 -1
  273. zenml/zen_server/dashboard/assets/page-DtCAfBLy.js +9 -0
  274. zenml/zen_server/dashboard/assets/{page-CKHNAq7z.js → page-Dx16z7nA.js} +1 -1
  275. zenml/zen_server/dashboard/assets/{page-DMSLXKGT.js → page-DzpVUZ8f.js} +1 -1
  276. zenml/zen_server/dashboard/assets/page-McUyYbo1.js +1 -0
  277. zenml/zen_server/dashboard/assets/{page-miU2rhYG.js → page-N4qoPHKb.js} +1 -1
  278. zenml/zen_server/dashboard/assets/page-T1P3RyAR.js +1 -0
  279. zenml/zen_server/dashboard/assets/{page-3qPX9WYH.js → page-bKaULTGG.js} +1 -1
  280. zenml/zen_server/dashboard/assets/page-sbXUJy9t.js +1 -0
  281. zenml/zen_server/dashboard/assets/{persist-CfJMar_k.js → persist-CP0JmYZ4.js} +1 -1
  282. zenml/zen_server/dashboard/assets/{persist-BxIR2XZs.js → persist-DNb5cdrU.js} +1 -1
  283. zenml/zen_server/dashboard/assets/{plus-Bc8eLSDM.js → plus-C9IxgN2M.js} +1 -1
  284. zenml/zen_server/dashboard/assets/{refresh-hfgWPeto.js → refresh-BVu22P_C.js} +1 -1
  285. zenml/zen_server/dashboard/assets/{rocket-SESCGQXm.js → rocket-CONEmRmB.js} +1 -1
  286. zenml/zen_server/dashboard/assets/{sharedSchema-vub0rii3.js → sharedSchema-TMLu-nYQ.js} +1 -1
  287. zenml/zen_server/dashboard/assets/stack-detail-query-xmYxSsUY.js +1 -0
  288. zenml/zen_server/dashboard/assets/{tick-circle-m-hJG8i9.js → tick-circle-CM1ZScbQ.js} +1 -1
  289. zenml/zen_server/dashboard/assets/{trash-DUWZWzse.js → trash-DkJHMOg7.js} +1 -1
  290. zenml/zen_server/dashboard/assets/{update-server-settings-mutation-FGVP7X2U.js → update-server-settings-mutation-DsU8cNVl.js} +1 -1
  291. zenml/zen_server/dashboard/assets/{url-CbAPzsmT.js → url-D5le3J4q.js} +1 -1
  292. zenml/zen_server/dashboard/assets/zod-D89GC_vc.js +1 -0
  293. zenml/zen_server/dashboard/index.html +7 -7
  294. zenml/zen_server/deploy/__init__.py +7 -16
  295. zenml/zen_server/deploy/base_provider.py +46 -73
  296. zenml/zen_server/deploy/{local → daemon}/__init__.py +3 -3
  297. zenml/zen_server/deploy/{local/local_provider.py → daemon/daemon_provider.py} +44 -63
  298. zenml/zen_server/deploy/{local/local_zen_server.py → daemon/daemon_zen_server.py} +50 -28
  299. zenml/zen_server/deploy/deployer.py +90 -171
  300. zenml/zen_server/deploy/deployment.py +20 -12
  301. zenml/zen_server/deploy/docker/docker_provider.py +9 -28
  302. zenml/zen_server/deploy/docker/docker_zen_server.py +19 -9
  303. zenml/zen_server/deploy/helm/Chart.yaml +1 -1
  304. zenml/zen_server/deploy/helm/README.md +2 -2
  305. zenml/zen_server/exceptions.py +11 -0
  306. zenml/zen_server/feature_gate/zenml_cloud_feature_gate.py +1 -1
  307. zenml/zen_server/jwt.py +9 -9
  308. zenml/zen_server/routers/artifact_version_endpoints.py +1 -1
  309. zenml/zen_server/routers/auth_endpoints.py +30 -8
  310. zenml/zen_server/routers/runs_endpoints.py +0 -28
  311. zenml/zen_server/routers/stack_components_endpoints.py +1 -1
  312. zenml/zen_server/routers/workspaces_endpoints.py +1 -1
  313. zenml/zen_server/template_execution/runner_entrypoint_configuration.py +7 -4
  314. zenml/zen_server/template_execution/utils.py +8 -63
  315. zenml/zen_server/utils.py +67 -69
  316. zenml/zen_server/zen_server_api.py +107 -17
  317. zenml/zen_stores/base_zen_store.py +4 -51
  318. zenml/zen_stores/migrations/versions/0.67.0_release.py +23 -0
  319. zenml/zen_stores/migrations/versions/0.68.0_release.py +23 -0
  320. zenml/zen_stores/migrations/versions/0.68.1_release.py +23 -0
  321. zenml/zen_stores/migrations/versions/1d8f30c54477_migrate_to_new_.py +124 -0
  322. zenml/zen_stores/migrations/versions/c22561cbb3a9_add_artifact_unique_constraints.py +86 -0
  323. zenml/zen_stores/rest_zen_store.py +325 -147
  324. zenml/zen_stores/schemas/api_key_schemas.py +9 -4
  325. zenml/zen_stores/schemas/artifact_schemas.py +21 -2
  326. zenml/zen_stores/schemas/artifact_visualization_schemas.py +1 -1
  327. zenml/zen_stores/schemas/component_schemas.py +49 -6
  328. zenml/zen_stores/schemas/device_schemas.py +9 -4
  329. zenml/zen_stores/schemas/flavor_schemas.py +1 -1
  330. zenml/zen_stores/schemas/model_schemas.py +1 -1
  331. zenml/zen_stores/schemas/pipeline_run_schemas.py +12 -4
  332. zenml/zen_stores/schemas/service_schemas.py +1 -1
  333. zenml/zen_stores/schemas/step_run_schemas.py +3 -3
  334. zenml/zen_stores/schemas/trigger_schemas.py +1 -1
  335. zenml/zen_stores/sql_zen_store.py +422 -145
  336. zenml/zen_stores/template_utils.py +3 -1
  337. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/METADATA +20 -18
  338. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/RECORD +343 -505
  339. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/WHEEL +1 -1
  340. zenml/api.py +0 -60
  341. zenml/cli/stack_recipes.py +0 -469
  342. zenml/lineage_graph/__init__.py +0 -34
  343. zenml/lineage_graph/lineage_graph.py +0 -244
  344. zenml/lineage_graph/node/__init__.py +0 -32
  345. zenml/lineage_graph/node/artifact_node.py +0 -51
  346. zenml/lineage_graph/node/step_node.py +0 -41
  347. zenml/model/model_version.py +0 -38
  348. zenml/new/pipelines/code_archive.py +0 -157
  349. zenml/new/pipelines/pipeline_decorator.py +0 -118
  350. zenml/new/steps/step_decorator.py +0 -176
  351. zenml/pipelines/base_pipeline.py +0 -273
  352. zenml/post_execution/__init__.py +0 -30
  353. zenml/post_execution/pipeline.py +0 -55
  354. zenml/post_execution/pipeline_run.py +0 -55
  355. zenml/services/terraform/__init__.py +0 -14
  356. zenml/services/terraform/terraform_service.py +0 -441
  357. zenml/steps/external_artifact.py +0 -26
  358. zenml/steps/step_environment.py +0 -108
  359. zenml/steps/step_output.py +0 -36
  360. zenml/utils/mlstacks_utils.py +0 -635
  361. zenml/utils/terraform_utils.py +0 -43
  362. zenml/zen_server/dashboard/assets/@radix-DnFH_oo1.js +0 -85
  363. zenml/zen_server/dashboard/assets/@react-router-APVeuk-U.js +0 -29
  364. zenml/zen_server/dashboard/assets/@reactflow-ytavUpwh.js +0 -17
  365. zenml/zen_server/dashboard/assets/@tanstack-QbMbTrh5.js +0 -22
  366. zenml/zen_server/dashboard/assets/ComponentBadge-gKR1OIwG.js +0 -1
  367. zenml/zen_server/dashboard/assets/ExecutionStatus-D6r6aK8J.js +0 -1
  368. zenml/zen_server/dashboard/assets/MarkdownVisualization-DS05sfBm.js +0 -14
  369. zenml/zen_server/dashboard/assets/SearchField-BzmfxS0L.js +0 -1
  370. zenml/zen_server/dashboard/assets/all-pipeline-runs-query-BA3R2Sey.js +0 -1
  371. zenml/zen_server/dashboard/assets/delete-run-CP0pcJ3U.js +0 -1
  372. zenml/zen_server/dashboard/assets/index-BhJ6ZJxv.css +0 -1
  373. zenml/zen_server/dashboard/assets/index-Ci0nJ8EZ.js +0 -55
  374. zenml/zen_server/dashboard/assets/index.esm-BE1uqCX5.js +0 -1
  375. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-Df6ckaLK.woff2 +0 -0
  376. zenml/zen_server/dashboard/assets/inter-cyrillic-400-normal-JrS_4yms.woff +0 -0
  377. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-BRrLR67x.woff2 +0 -0
  378. zenml/zen_server/dashboard/assets/inter-cyrillic-500-normal-DskEQOpE.woff +0 -0
  379. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-DDpWG8g5.woff2 +0 -0
  380. zenml/zen_server/dashboard/assets/inter-cyrillic-600-normal-iz1--dBq.woff +0 -0
  381. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-CzG7Kr3z.woff +0 -0
  382. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-400-normal-tyfMZHQw.woff2 +0 -0
  383. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-DOnSzjnx.woff2 +0 -0
  384. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-500-normal-Xebo2OyJ.woff +0 -0
  385. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-DpA2xaRd.woff2 +0 -0
  386. zenml/zen_server/dashboard/assets/inter-cyrillic-ext-600-normal-KAwcVx6H.woff +0 -0
  387. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DQXyrmoy.woff2 +0 -0
  388. zenml/zen_server/dashboard/assets/inter-greek-400-normal-DvIPHDQ7.woff +0 -0
  389. zenml/zen_server/dashboard/assets/inter-greek-500-normal-BjpBGs91.woff +0 -0
  390. zenml/zen_server/dashboard/assets/inter-greek-500-normal-CmOavsDc.woff2 +0 -0
  391. zenml/zen_server/dashboard/assets/inter-greek-600-normal-B-l8Lzzd.woff2 +0 -0
  392. zenml/zen_server/dashboard/assets/inter-greek-600-normal-BLZsI-P3.woff +0 -0
  393. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-CIdlr5YK.woff2 +0 -0
  394. zenml/zen_server/dashboard/assets/inter-greek-ext-400-normal-_Rr29XE2.woff +0 -0
  395. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-2pdUafRD.woff2 +0 -0
  396. zenml/zen_server/dashboard/assets/inter-greek-ext-500-normal-Dtavx3qw.woff +0 -0
  397. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-BmtRFZgT.woff +0 -0
  398. zenml/zen_server/dashboard/assets/inter-greek-ext-600-normal-CkBLDEl_.woff2 +0 -0
  399. zenml/zen_server/dashboard/assets/inter-latin-400-normal-BT1H-PT_.woff2 +0 -0
  400. zenml/zen_server/dashboard/assets/inter-latin-400-normal-Cdi8t5Mu.woff +0 -0
  401. zenml/zen_server/dashboard/assets/inter-latin-500-normal-D4I8BKCx.woff +0 -0
  402. zenml/zen_server/dashboard/assets/inter-latin-500-normal-kWhwEdDH.woff2 +0 -0
  403. zenml/zen_server/dashboard/assets/inter-latin-600-normal-B2Ssfs8e.woff2 +0 -0
  404. zenml/zen_server/dashboard/assets/inter-latin-600-normal-Dbvh0wvx.woff +0 -0
  405. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-8tIzm-yw.woff +0 -0
  406. zenml/zen_server/dashboard/assets/inter-latin-ext-400-normal-D3W-OpO-.woff2 +0 -0
  407. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-B9u8Q_zH.woff2 +0 -0
  408. zenml/zen_server/dashboard/assets/inter-latin-ext-500-normal-SuUkSNTU.woff +0 -0
  409. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-Dg0Bk0Yr.woff +0 -0
  410. zenml/zen_server/dashboard/assets/inter-latin-ext-600-normal-ao35dkSb.woff2 +0 -0
  411. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-Cnt0N5Vm.woff2 +0 -0
  412. zenml/zen_server/dashboard/assets/inter-vietnamese-400-normal-DIOGfGLL.woff +0 -0
  413. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-0i6yoQMg.woff +0 -0
  414. zenml/zen_server/dashboard/assets/inter-vietnamese-500-normal-5IkPJ6Nk.woff2 +0 -0
  415. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-BQ_dbMbg.woff +0 -0
  416. zenml/zen_server/dashboard/assets/inter-vietnamese-600-normal-DjnxGF-L.woff2 +0 -0
  417. zenml/zen_server/dashboard/assets/not-found-DbjllLY_.js +0 -1
  418. zenml/zen_server/dashboard/assets/page-B1n7_W7z.js +0 -1
  419. zenml/zen_server/dashboard/assets/page-BZZhLo2u.js +0 -1
  420. zenml/zen_server/dashboard/assets/page-Bbf_oBjn.js +0 -1
  421. zenml/zen_server/dashboard/assets/page-BjjuBvZG.js +0 -9
  422. zenml/zen_server/dashboard/assets/page-CHaQkFK5.js +0 -1
  423. zenml/zen_server/dashboard/assets/page-CS0SYFK8.js +0 -1
  424. zenml/zen_server/dashboard/assets/page-DGM1CbYT.js +0 -2
  425. zenml/zen_server/dashboard/assets/page-DOmIZ2ra.js +0 -1
  426. zenml/zen_server/dashboard/assets/page-DYVmJ9_w.js +0 -3
  427. zenml/zen_server/dashboard/assets/page-Dwow2doB.js +0 -1
  428. zenml/zen_server/dashboard/assets/stack-detail-query-DQcyzG-2.js +0 -1
  429. zenml/zen_server/dashboard/assets/zod-uFd1wBcd.js +0 -1
  430. zenml/zen_server/dashboard_legacy/_redirects +0 -1
  431. zenml/zen_server/dashboard_legacy/asset-manifest.json +0 -131
  432. zenml/zen_server/dashboard_legacy/favicon.ico +0 -0
  433. zenml/zen_server/dashboard_legacy/index.html +0 -1
  434. zenml/zen_server/dashboard_legacy/manifest.json +0 -25
  435. zenml/zen_server/dashboard_legacy/precache-manifest.6d320abb70db612019dda6c4948e7a90.js +0 -462
  436. zenml/zen_server/dashboard_legacy/robots.txt +0 -2
  437. zenml/zen_server/dashboard_legacy/service-worker.js +0 -39
  438. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css +0 -16
  439. zenml/zen_server/dashboard_legacy/static/css/2.5b37d44a.chunk.css.map +0 -1
  440. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css +0 -2
  441. zenml/zen_server/dashboard_legacy/static/css/main.e79dff04.chunk.css.map +0 -1
  442. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js +0 -3
  443. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.LICENSE.txt +0 -95
  444. zenml/zen_server/dashboard_legacy/static/js/2.7934458d.chunk.js.map +0 -1
  445. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js +0 -2
  446. zenml/zen_server/dashboard_legacy/static/js/main.fa9299d5.chunk.js.map +0 -1
  447. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js +0 -2
  448. zenml/zen_server/dashboard_legacy/static/js/runtime-main.bfca2edd.js.map +0 -1
  449. zenml/zen_server/dashboard_legacy/static/media/AlertTriangle.28aee535.svg +0 -5
  450. zenml/zen_server/dashboard_legacy/static/media/ArrowSquareOut.abfb9bc7.svg +0 -5
  451. zenml/zen_server/dashboard_legacy/static/media/Back.86c23a22.svg +0 -4
  452. zenml/zen_server/dashboard_legacy/static/media/BookOpen.5cb101ff.svg +0 -4
  453. zenml/zen_server/dashboard_legacy/static/media/BoundingBox.1eb98717.svg +0 -10
  454. zenml/zen_server/dashboard_legacy/static/media/Burger.9b1c67d7.svg +0 -3
  455. zenml/zen_server/dashboard_legacy/static/media/Cached.2381fb8d.svg +0 -1
  456. zenml/zen_server/dashboard_legacy/static/media/Calendar.356e11c7.svg +0 -3
  457. zenml/zen_server/dashboard_legacy/static/media/ChartBarHorizontal.0247447b.svg +0 -6
  458. zenml/zen_server/dashboard_legacy/static/media/ChartLine.0d79e18d.svg +0 -4
  459. zenml/zen_server/dashboard_legacy/static/media/ChatDots.2e1c9211.svg +0 -6
  460. zenml/zen_server/dashboard_legacy/static/media/Check.dad6beb2.svg +0 -3
  461. zenml/zen_server/dashboard_legacy/static/media/CheckCircleFilled.c19566d0.svg +0 -3
  462. zenml/zen_server/dashboard_legacy/static/media/Checkbox.af50e31e.svg +0 -3
  463. zenml/zen_server/dashboard_legacy/static/media/ChevronDown.f860ce32.svg +0 -3
  464. zenml/zen_server/dashboard_legacy/static/media/ChevronDownLight.6642d756.svg +0 -3
  465. zenml/zen_server/dashboard_legacy/static/media/ChevronLeft.f6edfcdb.svg +0 -3
  466. zenml/zen_server/dashboard_legacy/static/media/CircleCheck.f98fd6ca.svg +0 -1
  467. zenml/zen_server/dashboard_legacy/static/media/Clock.ffc9de95.svg +0 -3
  468. zenml/zen_server/dashboard_legacy/static/media/Close.74e9efbc.svg +0 -5
  469. zenml/zen_server/dashboard_legacy/static/media/CloseWithBorder.6960930a.svg +0 -3
  470. zenml/zen_server/dashboard_legacy/static/media/CloseWithoutBorder.cd6f71df.svg +0 -3
  471. zenml/zen_server/dashboard_legacy/static/media/CloudArrowUp.0aecb235.svg +0 -6
  472. zenml/zen_server/dashboard_legacy/static/media/Code.ef0f33b5.svg +0 -3
  473. zenml/zen_server/dashboard_legacy/static/media/Config.0be63f8a.svg +0 -1
  474. zenml/zen_server/dashboard_legacy/static/media/Connector.9fd46ef1.svg +0 -10
  475. zenml/zen_server/dashboard_legacy/static/media/Copy.36e2112a.svg +0 -1
  476. zenml/zen_server/dashboard_legacy/static/media/Dashboard.d05787e0.svg +0 -3
  477. zenml/zen_server/dashboard_legacy/static/media/Data.b1c3b5f8.svg +0 -3
  478. zenml/zen_server/dashboard_legacy/static/media/Delete.3c361b28.svg +0 -8
  479. zenml/zen_server/dashboard_legacy/static/media/Docs.7541d478.svg +0 -7
  480. zenml/zen_server/dashboard_legacy/static/media/Download.fba04d87.svg +0 -5
  481. zenml/zen_server/dashboard_legacy/static/media/Edit.490eb294.svg +0 -6
  482. zenml/zen_server/dashboard_legacy/static/media/EmptyRightArrow.23749d01.svg +0 -3
  483. zenml/zen_server/dashboard_legacy/static/media/Example.6396cd37.svg +0 -5
  484. zenml/zen_server/dashboard_legacy/static/media/Extension.1394cd4a.svg +0 -3
  485. zenml/zen_server/dashboard_legacy/static/media/Eye.d9e4ee62.svg +0 -4
  486. zenml/zen_server/dashboard_legacy/static/media/Failed.0213c1a0.svg +0 -1
  487. zenml/zen_server/dashboard_legacy/static/media/FileText.1f15bacd.svg +0 -7
  488. zenml/zen_server/dashboard_legacy/static/media/Filter.ab6b9c0d.svg +0 -3
  489. zenml/zen_server/dashboard_legacy/static/media/Folders.12b29887.svg +0 -5
  490. zenml/zen_server/dashboard_legacy/static/media/FunnelFill.6df4c143.svg +0 -3
  491. zenml/zen_server/dashboard_legacy/static/media/GitCommit.7dd9c2aa.svg +0 -5
  492. zenml/zen_server/dashboard_legacy/static/media/GitHub_Logo.cefc2023.png +0 -0
  493. zenml/zen_server/dashboard_legacy/static/media/Graph.2c63a892.svg +0 -11
  494. zenml/zen_server/dashboard_legacy/static/media/History.08329240.svg +0 -3
  495. zenml/zen_server/dashboard_legacy/static/media/Home.0843b0d5.svg +0 -3
  496. zenml/zen_server/dashboard_legacy/static/media/ImageBuilder.ea762d9c.svg +0 -6
  497. zenml/zen_server/dashboard_legacy/static/media/InProgress.304a0edc.svg +0 -1
  498. zenml/zen_server/dashboard_legacy/static/media/Info.9fe10c5c.svg +0 -3
  499. zenml/zen_server/dashboard_legacy/static/media/KeyboardReturn.491afbe3.svg +0 -3
  500. zenml/zen_server/dashboard_legacy/static/media/Link.72bbb55d.svg +0 -4
  501. zenml/zen_server/dashboard_legacy/static/media/Lock.30f5e1fe.svg +0 -5
  502. zenml/zen_server/dashboard_legacy/static/media/Lock2.a769ea52.svg +0 -3
  503. zenml/zen_server/dashboard_legacy/static/media/LockKey.92f21621.svg +0 -6
  504. zenml/zen_server/dashboard_legacy/static/media/Logs.8bf4d005.svg +0 -5
  505. zenml/zen_server/dashboard_legacy/static/media/MinusCircle.4188f418.svg +0 -4
  506. zenml/zen_server/dashboard_legacy/static/media/ModelRegistry.f0de050a.svg +0 -6
  507. zenml/zen_server/dashboard_legacy/static/media/MultiUser.a2ba7c67.svg +0 -10
  508. zenml/zen_server/dashboard_legacy/static/media/PaginationFirst.92628634.svg +0 -4
  509. zenml/zen_server/dashboard_legacy/static/media/PaginationLast.00d3c732.svg +0 -4
  510. zenml/zen_server/dashboard_legacy/static/media/PaginationNext.86158845.svg +0 -3
  511. zenml/zen_server/dashboard_legacy/static/media/PaginationPrev.60c18a88.svg +0 -3
  512. zenml/zen_server/dashboard_legacy/static/media/Pen.f2d831d4.svg +0 -6
  513. zenml/zen_server/dashboard_legacy/static/media/PhotoCamera.179d6d4c.svg +0 -3
  514. zenml/zen_server/dashboard_legacy/static/media/Pipeline.30d298b0.svg +0 -7
  515. zenml/zen_server/dashboard_legacy/static/media/Plus.5aa1c16b.svg +0 -3
  516. zenml/zen_server/dashboard_legacy/static/media/PlusCircle.92d860dd.svg +0 -5
  517. zenml/zen_server/dashboard_legacy/static/media/Repositories.71a36b8c.svg +0 -3
  518. zenml/zen_server/dashboard_legacy/static/media/RightArrow.f30d3871.svg +0 -29
  519. zenml/zen_server/dashboard_legacy/static/media/Rocket.63bf7b9d.svg +0 -3
  520. zenml/zen_server/dashboard_legacy/static/media/RocketLaunch.1bff2b59.svg +0 -6
  521. zenml/zen_server/dashboard_legacy/static/media/Rubik-Medium.c87313aa.ttf +0 -0
  522. zenml/zen_server/dashboard_legacy/static/media/Rubik-Regular.b3d0902b.ttf +0 -0
  523. zenml/zen_server/dashboard_legacy/static/media/Run.daec4fb2.svg +0 -6
  524. zenml/zen_server/dashboard_legacy/static/media/Search.d1afcce5.svg +0 -4
  525. zenml/zen_server/dashboard_legacy/static/media/Settings.59ca73ae.svg +0 -4
  526. zenml/zen_server/dashboard_legacy/static/media/Share2.46c3ff66.svg +0 -3
  527. zenml/zen_server/dashboard_legacy/static/media/SignOut.6aa718c5.svg +0 -3
  528. zenml/zen_server/dashboard_legacy/static/media/SimplePlus.5cf7ec20.svg +0 -3
  529. zenml/zen_server/dashboard_legacy/static/media/SingleUser.bef3a095.svg +0 -4
  530. zenml/zen_server/dashboard_legacy/static/media/SourceCodePro-Regular.b484b32f.ttf +0 -0
  531. zenml/zen_server/dashboard_legacy/static/media/Stack.19b604ac.svg +0 -5
  532. zenml/zen_server/dashboard_legacy/static/media/StackComponent.b1ba90b5.svg +0 -4
  533. zenml/zen_server/dashboard_legacy/static/media/Star.f0c25022.svg +0 -9
  534. zenml/zen_server/dashboard_legacy/static/media/StarOutline.94ca8cd9.svg +0 -3
  535. zenml/zen_server/dashboard_legacy/static/media/Storefront.4b4796fe.svg +0 -3
  536. zenml/zen_server/dashboard_legacy/static/media/Stream.543e3039.svg +0 -3
  537. zenml/zen_server/dashboard_legacy/static/media/SupportAgent.510ddf1f.svg +0 -8
  538. zenml/zen_server/dashboard_legacy/static/media/Table.77033750.svg +0 -6
  539. zenml/zen_server/dashboard_legacy/static/media/Tool.d5785486.svg +0 -3
  540. zenml/zen_server/dashboard_legacy/static/media/UserPlus.741a99d7.svg +0 -6
  541. zenml/zen_server/dashboard_legacy/static/media/Verified.0625b2a0.svg +0 -3
  542. zenml/zen_server/dashboard_legacy/static/media/addNew.4fb6c939.svg +0 -8
  543. zenml/zen_server/dashboard_legacy/static/media/arrowClose.cbd53f3f.svg +0 -3
  544. zenml/zen_server/dashboard_legacy/static/media/arrowOpen.6ceef0af.svg +0 -3
  545. zenml/zen_server/dashboard_legacy/static/media/check_small.30bc0138.svg +0 -3
  546. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideClose.98d6013e.svg +0 -18
  547. zenml/zen_server/dashboard_legacy/static/media/circleArrowSideOpen.63653df6.svg +0 -18
  548. zenml/zen_server/dashboard_legacy/static/media/image.104fd14b.png +0 -0
  549. zenml/zen_server/dashboard_legacy/static/media/imageAddIcon.e83004a9.svg +0 -7
  550. zenml/zen_server/dashboard_legacy/static/media/logo.93333e5c.svg +0 -1
  551. zenml/zen_server/dashboard_legacy/static/media/logo_small.4204397d.svg +0 -3
  552. zenml/zen_server/dashboard_legacy/static/media/logo_white.d4b4414e.svg +0 -20
  553. zenml/zen_server/dashboard_legacy/static/media/notConnected.5e2c8ea7.svg +0 -8
  554. zenml/zen_server/dashboard_legacy/static/media/plugin-fallback.72c294e6.svg +0 -6
  555. zenml/zen_server/dashboard_legacy/static/media/share.bcd998b0.svg +0 -5
  556. zenml/zen_server/dashboard_legacy/static/media/stars.08a9b19a.svg +0 -8
  557. zenml/zen_server/deploy/terraform/__init__.py +0 -41
  558. zenml/zen_server/deploy/terraform/providers/aws_provider.py +0 -61
  559. zenml/zen_server/deploy/terraform/providers/azure_provider.py +0 -59
  560. zenml/zen_server/deploy/terraform/providers/gcp_provider.py +0 -59
  561. zenml/zen_server/deploy/terraform/providers/terraform_provider.py +0 -331
  562. zenml/zen_server/deploy/terraform/recipes/aws/.gitignore +0 -8
  563. zenml/zen_server/deploy/terraform/recipes/aws/helm.tf +0 -20
  564. zenml/zen_server/deploy/terraform/recipes/aws/ingress.tf +0 -30
  565. zenml/zen_server/deploy/terraform/recipes/aws/outputs.tf +0 -7
  566. zenml/zen_server/deploy/terraform/recipes/aws/printf.cmd +0 -2
  567. zenml/zen_server/deploy/terraform/recipes/aws/sql.tf +0 -62
  568. zenml/zen_server/deploy/terraform/recipes/aws/terraform.tf +0 -44
  569. zenml/zen_server/deploy/terraform/recipes/aws/variables.tf +0 -167
  570. zenml/zen_server/deploy/terraform/recipes/aws/vpc.tf +0 -47
  571. zenml/zen_server/deploy/terraform/recipes/aws/zen_server.tf +0 -103
  572. zenml/zen_server/deploy/terraform/recipes/azure/.gitignore +0 -8
  573. zenml/zen_server/deploy/terraform/recipes/azure/helm.tf +0 -20
  574. zenml/zen_server/deploy/terraform/recipes/azure/ingress.tf +0 -30
  575. zenml/zen_server/deploy/terraform/recipes/azure/key_vault.tf +0 -73
  576. zenml/zen_server/deploy/terraform/recipes/azure/outputs.tf +0 -7
  577. zenml/zen_server/deploy/terraform/recipes/azure/printf.cmd +0 -2
  578. zenml/zen_server/deploy/terraform/recipes/azure/rg.tf +0 -36
  579. zenml/zen_server/deploy/terraform/recipes/azure/sql.tf +0 -65
  580. zenml/zen_server/deploy/terraform/recipes/azure/terraform.tf +0 -52
  581. zenml/zen_server/deploy/terraform/recipes/azure/variables.tf +0 -176
  582. zenml/zen_server/deploy/terraform/recipes/azure/zen_server.tf +0 -103
  583. zenml/zen_server/deploy/terraform/recipes/gcp/.gitignore +0 -8
  584. zenml/zen_server/deploy/terraform/recipes/gcp/helm.tf +0 -20
  585. zenml/zen_server/deploy/terraform/recipes/gcp/ingress.tf +0 -30
  586. zenml/zen_server/deploy/terraform/recipes/gcp/outputs.tf +0 -7
  587. zenml/zen_server/deploy/terraform/recipes/gcp/printf.cmd +0 -2
  588. zenml/zen_server/deploy/terraform/recipes/gcp/sql.tf +0 -64
  589. zenml/zen_server/deploy/terraform/recipes/gcp/terraform.tf +0 -44
  590. zenml/zen_server/deploy/terraform/recipes/gcp/variables.tf +0 -171
  591. zenml/zen_server/deploy/terraform/recipes/gcp/zen_server.tf +0 -114
  592. zenml/zen_server/deploy/terraform/terraform_zen_server.py +0 -246
  593. /zenml/{new/pipelines → pipelines}/build_utils.py +0 -0
  594. /zenml/{new/steps → steps}/decorated_step.py +0 -0
  595. {zenml_nightly-0.66.0.dev20240928.dist-info → zenml_nightly-0.68.1.dev20241102.dist-info}/LICENSE +0 -0
  596. {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
- from typing import Any, List, Tuple, Type, cast
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.client.client import Argilla as ArgillaClient
21
- from argilla.client.sdk.commons.errors import BaseClientError, NotFoundApiError
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
- # set the API key from the secret or using settings
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.workspace is not None:
96
- init_kwargs["workspace"] = config.workspace
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.active_client()
106
- except BaseClientError:
107
- rg.init(**init_kwargs)
108
- return rg.active_client()
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
- dataset_id = self.get_dataset(dataset_name=dataset_name).id
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
- old_datasets = self._get_client().list_datasets()
129
- new_datasets = rg.FeedbackDataset.list()
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
- # Deduplicate datasets based on their names
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 deduplicated_datasets
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(self, dataset_name: str) -> Tuple[int, int]:
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
- dataset = self.get_dataset(dataset_name=dataset_name)
211
+ workspace = kwargs.get("workspace")
212
+
152
213
  labeled_task_count = len(
153
- dataset.filter_by(response_status="submitted")
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
- dataset.filter_by(response_status="pending")
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 add_dataset(self, **kwargs: Any) -> Any:
161
- """Registers a dataset for annotation.
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
- You must pass a `dataset_name` and a `dataset` object to this method.
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
- client.
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 'dataset_name' and 'dataset' aren't provided.
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
- dataset = kwargs.get("dataset")
264
+ settings = kwargs.get("settings")
265
+ workspace = kwargs.get("workspace")
177
266
 
178
- if not dataset_name:
179
- raise ValueError("`dataset_name` keyword argument is required.")
180
- elif dataset is None:
181
- raise ValueError("`dataset` keyword argument is required.")
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
- logger.info(f"Pushing dataset '{dataset_name}' to Argilla...")
185
- dataset.push_to_argilla(name=dataset_name)
186
- logger.info(f"Dataset '{dataset_name}' pushed successfully.")
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 push dataset '{dataset_name}' to Argilla: {str(e)}"
293
+ f"Failed to create dataset '{dataset_name}' in Argilla: {str(e)}"
190
294
  )
191
- raise ValueError(
192
- f"Failed to push dataset to Argilla: {str(e)}"
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 delete_dataset(self, **kwargs: Any) -> None:
197
- """Deletes a dataset from the annotation interface.
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
- **kwargs: Additional keyword arguments to pass to the Argilla
201
- client.
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
- ValueError: If the dataset name is not provided.
315
+ RuntimeError: If the records cannot be loaded to Argilla.
205
316
  """
206
- dataset_name = kwargs.get("dataset_name")
207
- if not dataset_name:
208
- raise ValueError("`dataset_name` keyword argument is required.")
317
+ dataset = self.get_dataset(
318
+ dataset_name=dataset_name, workspace=workspace
319
+ )
209
320
 
210
321
  try:
211
- self._get_client().delete(name=dataset_name)
212
- self.get_dataset(dataset_name=dataset_name).delete()
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 DatasetModel object for the given name.
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
- if rg.FeedbackDataset.from_argilla(name=dataset_name) is not None:
238
- return rg.FeedbackDataset.from_argilla(name=dataset_name)
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 self._get_client().get_dataset(name=dataset_name)
241
- except (NotFoundApiError, ValueError) as e:
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 get_data_by_status(self, dataset_name: str, status: str) -> Any:
246
- """Gets the dataset containing the data with the specified status.
370
+ def delete_dataset(self, **kwargs: Any) -> None:
371
+ """Deletes a dataset from the annotation interface.
247
372
 
248
373
  Args:
249
- dataset_name: The name of the dataset.
250
- status: The response status to filter by ('submitted' for labeled,
251
- 'pending' for unlabeled).
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
- return self.get_dataset(dataset_name=dataset_name).filter_by(
263
- response_status=status
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 dataset containing the labeled data.
408
+ The list of annotated records.
274
409
 
275
410
  Raises:
276
411
  ValueError: If the dataset name is not provided.
277
412
  """
278
- if dataset_name := kwargs.get("dataset_name"):
279
- return self.get_data_by_status(dataset_name, status="submitted")
280
- else:
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 dataset containing the unlabeled data.
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
- if dataset_name := kwargs.get("dataset_name"):
296
- return self.get_data_by_status(dataset_name, status="pending")
297
- else:
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
- extra_headers: Extra headers to include in the request.
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
- workspace: Optional[str] = "admin"
55
- port: Optional[int]
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
- pipeline.create(role_arn=self.config.execution_role)
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 self.config.synchronous:
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 self.config.synchronous:
402
+ if settings.synchronous:
403
403
  logger.info("Waiting for pipeline to finish...")
404
404
  ml_client.jobs.stream(job.name)
405
405