zenml-nightly 0.81.0.dev20250429__py3-none-any.whl → 0.81.0.dev20250430__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/cli/model.py +2 -7
- zenml/client.py +17 -2
- zenml/config/docker_settings.py +1 -1
- zenml/config/resource_settings.py +1 -1
- zenml/config/strict_base_model.py +1 -1
- zenml/environment.py +36 -4
- zenml/integrations/evidently/metrics.py +1 -1
- zenml/integrations/evidently/tests.py +1 -1
- zenml/integrations/pandas/materializers/pandas_materializer.py +118 -22
- zenml/models/v2/core/model_version.py +28 -33
- zenml/models/v2/core/pipeline_deployment.py +4 -4
- zenml/models/v2/core/pipeline_run.py +5 -12
- zenml/models/v2/core/user.py +1 -1
- zenml/secret/base_secret.py +1 -1
- zenml/stack/stack_component.py +1 -1
- zenml/stack/utils.py +1 -1
- zenml/zen_server/dashboard/assets/{404-o3nB5iwI.js → 404-D4aYbspS.js} +1 -1
- zenml/zen_server/dashboard/assets/{@react-router-BGgzhn5D.js → @react-router-CNP6g_RL.js} +1 -1
- zenml/zen_server/dashboard/assets/{AlertDialogDropdownItem-C_qWs-4u.js → AlertDialogDropdownItem-CRZjthRL.js} +1 -1
- zenml/zen_server/dashboard/assets/{CodeSnippet-nRnOvbOJ.js → CodeSnippet-Di-loaZu.js} +1 -1
- zenml/zen_server/dashboard/assets/CollapsibleCard-Dr5zb5T5.js +1 -0
- zenml/zen_server/dashboard/assets/{Commands-BwBzFj-5.js → Commands-CD9Y7FOE.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentBadge-CMx2DbsV.js → ComponentBadge-BgGnzcLu.js} +1 -1
- zenml/zen_server/dashboard/assets/{ComponentIcon-CSxdApv8.js → ComponentIcon-B_7Y_oV-.js} +1 -1
- zenml/zen_server/dashboard/assets/{CsvVizualization-lxB2iyEh.js → CsvVizualization-CDrjL6bW.js} +1 -1
- zenml/zen_server/dashboard/assets/{DeleteAlertDialog-Bp0o-UXZ.js → DeleteAlertDialog-9RTDnEx3.js} +1 -1
- zenml/zen_server/dashboard/assets/DialogItem-0fWTH7ki.js +1 -0
- zenml/zen_server/dashboard/assets/{Error-DRhVeVHQ.js → Error-vBjUYjb-.js} +1 -1
- zenml/zen_server/dashboard/assets/{ExecutionStatus-HnZXi9bW.js → ExecutionStatus-B-ysY113.js} +1 -1
- zenml/zen_server/dashboard/assets/{Helpbox-Dsr3ZYcL.js → Helpbox-Dt3q7NGd.js} +1 -1
- zenml/zen_server/dashboard/assets/{Infobox-C4Op55B8.js → Infobox-Bai0JtFs.js} +1 -1
- zenml/zen_server/dashboard/assets/{InlineAvatar-CrAwe7Pl.js → InlineAvatar-Cpj0lVRQ.js} +1 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-DbhKdWx-.js +1 -0
- zenml/zen_server/dashboard/assets/{Partials-DjTM0Oe-.js → Partials-BNBtCjuT.js} +1 -1
- zenml/zen_server/dashboard/assets/ProBadge-3vtouJQf.js +1 -0
- zenml/zen_server/dashboard/assets/{ProCta-BYSSivgY.js → ProCta-BoTLdAdV.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderIcon-B8W7AGNk.js → ProviderIcon-kkODO9tx.js} +1 -1
- zenml/zen_server/dashboard/assets/{ProviderRadio-BWFJPEY2.js → ProviderRadio-26EB5tY-.js} +1 -1
- zenml/zen_server/dashboard/assets/RunSelector-j0C_TPVp.js +1 -0
- zenml/zen_server/dashboard/assets/RunsBody-DexNouV4.js +1 -0
- zenml/zen_server/dashboard/assets/SearchField-DMCywawn.js +1 -0
- zenml/zen_server/dashboard/assets/{SecretTooltip-CCn9HfEh.js → SecretTooltip-LLGP7AIC.js} +1 -1
- zenml/zen_server/dashboard/assets/{SetPassword-BDFVwnNB.js → SetPassword-CBHW-Su8.js} +1 -1
- zenml/zen_server/dashboard/assets/StackList-S-9I1R4n.js +1 -0
- zenml/zen_server/dashboard/assets/Tabs-C2ufJX4t.js +1 -0
- zenml/zen_server/dashboard/assets/Tick-ay3Bgtro.js +1 -0
- zenml/zen_server/dashboard/assets/{UpdatePasswordSchemas-3gg2tC-H.js → UpdatePasswordSchemas-p3RX0P-Q.js} +1 -1
- zenml/zen_server/dashboard/assets/{UsageReason-DOMAzO02.js → UsageReason-C8sD2bOU.js} +1 -1
- zenml/zen_server/dashboard/assets/{Wizard-BSH_lIfi.js → Wizard-DIllc07n.js} +1 -1
- zenml/zen_server/dashboard/assets/{WizardFooter-CnM-50jL.js → WizardFooter-dNDpuero.js} +1 -1
- zenml/zen_server/dashboard/assets/{all-pipeline-runs-query-D9XfZpmV.js → all-pipeline-runs-query-BUT1PiTp.js} +1 -1
- zenml/zen_server/dashboard/assets/{configuration-form-Ci_QlfZC.js → configuration-form-DBZSb0FV.js} +1 -1
- zenml/zen_server/dashboard/assets/{create-stack-CoQ5SEJL.js → create-stack-BXLyjE58.js} +1 -1
- zenml/zen_server/dashboard/assets/{delete-run-B5xUZwdP.js → delete-run-DzcYxUnd.js} +1 -1
- zenml/zen_server/dashboard/assets/dots-horizontal-BGRJCPCs.js +1 -0
- zenml/zen_server/dashboard/assets/{flavor-select-DOLAl-S4.js → flavor-select-BTEwByv6.js} +1 -1
- zenml/zen_server/dashboard/assets/{form-schemas-BaEJ1z87.js → form-schemas-BJN_25Ua.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-e8udi7QT.js → index-8uhUi12k.js} +1 -1
- zenml/zen_server/dashboard/assets/{index-hsSXyS3H.js → index-BygJE88j.js} +8 -8
- zenml/zen_server/dashboard/assets/{index-ojAuWXMf.js → index-D9-ukAem.js} +1 -1
- zenml/zen_server/dashboard/assets/index-DmTFrHJm.css +1 -0
- zenml/zen_server/dashboard/assets/{index-BoWZ9rXk.js → index-wYtmKLnQ.js} +1 -1
- zenml/zen_server/dashboard/assets/{login-mutation-CwraNa5G.js → login-mutation-DywLqguW.js} +1 -1
- zenml/zen_server/dashboard/assets/{not-found-BuK1QrF2.js → not-found-BOoklIG4.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-0AIX3VK8.js → page--hSXKqyG.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CIDo1Ajk.js → page-2BsNK_sZ.js} +1 -1
- zenml/zen_server/dashboard/assets/page-4nVakAEl.js +1 -0
- zenml/zen_server/dashboard/assets/{page-CjRoKEQs.js → page-8AzB83Py.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-BQVPbNps.js → page-B0r9dBEU.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-hVng6ANV.js → page-B1Uq1S1Q.js} +1 -1
- zenml/zen_server/dashboard/assets/page-B3DscprQ.js +1 -0
- zenml/zen_server/dashboard/assets/{page-KRP_w5zH.js → page-B7Aj2XbV.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CZgeF_wQ.js → page-BE8jdyaM.js} +1 -1
- zenml/zen_server/dashboard/assets/page-BIYqUwTI.js +1 -0
- zenml/zen_server/dashboard/assets/page-BTzhAVEn.js +1 -0
- zenml/zen_server/dashboard/assets/{page-_Zt6UwiG.js → page-ByXQN8A-.js} +1 -1
- zenml/zen_server/dashboard/assets/page-CI4a9CXs.js +1 -0
- zenml/zen_server/dashboard/assets/page-CPLlVRXx.js +6 -0
- zenml/zen_server/dashboard/assets/page-CSQOpvvK.js +3 -0
- zenml/zen_server/dashboard/assets/{page-DwIlrsF0.js → page-Ccnk_5ji.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-C-6XUKSp.js → page-Ci_n_x3a.js} +1 -1
- zenml/zen_server/dashboard/assets/page-D-ry_oLs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-DbEn9V9E.js → page-D2TtSfnb.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DHnkTzqs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-B5clbTo4.js → page-DP2Ed-2m.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-C30HZCTR.js → page-D_5R6E7b.js} +1 -1
- zenml/zen_server/dashboard/assets/page-DfTsntQI.js +1 -0
- zenml/zen_server/dashboard/assets/page-DkY7AIhj.js +1 -0
- zenml/zen_server/dashboard/assets/page-DmteSSj6.js +1 -0
- zenml/zen_server/dashboard/assets/page-Dt3wHeWX.js +1 -0
- zenml/zen_server/dashboard/assets/page-EXvws1ss.js +1 -0
- zenml/zen_server/dashboard/assets/{page-Czj8fu8q.js → page-K9yjbnd4.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DHDeVaMO.js → page-RV8wpZ_4.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-DLVtrRa5.js → page-bUVHi7DE.js} +1 -1
- zenml/zen_server/dashboard/assets/page-cOEvFs_l.js +1 -0
- zenml/zen_server/dashboard/assets/page-kzSGEVUs.js +1 -0
- zenml/zen_server/dashboard/assets/{page-C7buw8xJ.js → page-uDGvpa5g.js} +2 -2
- zenml/zen_server/dashboard/assets/{page-BbygQpf-.js → page-uN0n_DE2.js} +1 -1
- zenml/zen_server/dashboard/assets/{page-CgJcperk.js → page-xa1EAPcI.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-xOAq24Bm.js → persist-CEeDYHW5.js} +1 -1
- zenml/zen_server/dashboard/assets/{persist-DLvsEXh0.js → persist-SSTTV5q0.js} +1 -1
- zenml/zen_server/dashboard/assets/{service-MHyqhRgp.js → service-BRoAA1Kq.js} +1 -1
- zenml/zen_server/dashboard/assets/sharedSchema-BACERDat.js +14 -0
- zenml/zen_server/dashboard/assets/{stack-detail-query-C1GoxBeK.js → stack-detail-query-ihiJr6nq.js} +1 -1
- zenml/zen_server/dashboard/assets/{update-server-settings-mutation-DduehrZn.js → update-server-settings-mutation-CK6COmw9.js} +1 -1
- zenml/zen_server/dashboard/index.html +4 -4
- zenml/zen_server/deploy/daemon/daemon_zen_server.py +1 -1
- zenml/zen_server/deploy/docker/docker_zen_server.py +1 -1
- zenml/zen_server/routers/model_versions_endpoints.py +10 -19
- zenml/zen_server/routers/runs_endpoints.py +7 -1
- zenml/zen_stores/schemas/pipeline_deployment_schemas.py +20 -3
- zenml/zen_stores/schemas/pipeline_run_schemas.py +21 -1
- zenml/zen_stores/secrets_stores/hashicorp_secrets_store.py +1 -1
- zenml/zen_stores/secrets_stores/sql_secrets_store.py +1 -1
- zenml/zen_stores/sql_zen_store.py +10 -34
- {zenml_nightly-0.81.0.dev20250429.dist-info → zenml_nightly-0.81.0.dev20250430.dist-info}/METADATA +1 -1
- {zenml_nightly-0.81.0.dev20250429.dist-info → zenml_nightly-0.81.0.dev20250430.dist-info}/RECORD +121 -120
- zenml/zen_server/dashboard/assets/CollapsibleCard-9sSz7n1R.js +0 -1
- zenml/zen_server/dashboard/assets/DialogItem-DHw2ihTx.js +0 -1
- zenml/zen_server/dashboard/assets/NestedCollapsible-Ce1bmT8N.js +0 -1
- zenml/zen_server/dashboard/assets/ProBadge-CDEqgzh8.js +0 -1
- zenml/zen_server/dashboard/assets/RunSelector-DoL_gMHJ.js +0 -1
- zenml/zen_server/dashboard/assets/RunsBody-B6mBjv-_.js +0 -1
- zenml/zen_server/dashboard/assets/SearchField-DHl5flXv.js +0 -1
- zenml/zen_server/dashboard/assets/StackList-dhdUtky3.js +0 -1
- zenml/zen_server/dashboard/assets/Tabs-BuZG8ft1.js +0 -1
- zenml/zen_server/dashboard/assets/Tick-C4gtED35.js +0 -1
- zenml/zen_server/dashboard/assets/index-6mLFgFwe.css +0 -1
- zenml/zen_server/dashboard/assets/page-3lW9eIer.js +0 -1
- zenml/zen_server/dashboard/assets/page-9PzQok8O.js +0 -1
- zenml/zen_server/dashboard/assets/page-BEibNYiA.js +0 -6
- zenml/zen_server/dashboard/assets/page-BOE2XBFy.js +0 -1
- zenml/zen_server/dashboard/assets/page-Bki79xdd.js +0 -1
- zenml/zen_server/dashboard/assets/page-BnKwJnOb.js +0 -1
- zenml/zen_server/dashboard/assets/page-CBGeo-7W.js +0 -2
- zenml/zen_server/dashboard/assets/page-Co-FJ5ds.js +0 -1
- zenml/zen_server/dashboard/assets/page-Cu8vuohQ.js +0 -1
- zenml/zen_server/dashboard/assets/page-D0QcEBi1.js +0 -1
- zenml/zen_server/dashboard/assets/page-DKY_U5Sz.js +0 -1
- zenml/zen_server/dashboard/assets/page-DQHU5o_C.js +0 -1
- zenml/zen_server/dashboard/assets/page-DpY1koQY.js +0 -1
- zenml/zen_server/dashboard/assets/page-DrS4WOup.js +0 -1
- zenml/zen_server/dashboard/assets/page-HIAPXq4w.js +0 -1
- zenml/zen_server/dashboard/assets/page-Jw2QAdxa.js +0 -1
- zenml/zen_server/dashboard/assets/sharedSchema-CQA5lnlU.js +0 -14
- {zenml_nightly-0.81.0.dev20250429.dist-info → zenml_nightly-0.81.0.dev20250430.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.81.0.dev20250429.dist-info → zenml_nightly-0.81.0.dev20250430.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.81.0.dev20250429.dist-info → zenml_nightly-0.81.0.dev20250430.dist-info}/entry_points.txt +0 -0
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.81.0.
|
1
|
+
0.81.0.dev20250430
|
zenml/cli/model.py
CHANGED
@@ -398,18 +398,13 @@ def version() -> None:
|
|
398
398
|
|
399
399
|
@cli_utils.list_options(ModelVersionFilter)
|
400
400
|
@version.command("list", help="List model versions with filter.")
|
401
|
-
|
402
|
-
def list_model_versions(model_name_or_id: str, **kwargs: Any) -> None:
|
401
|
+
def list_model_versions(**kwargs: Any) -> None:
|
403
402
|
"""List model versions with filter in the Model Control Plane.
|
404
403
|
|
405
404
|
Args:
|
406
|
-
model_name_or_id: The name or ID of the parent model.
|
407
405
|
**kwargs: Keyword arguments to filter models.
|
408
406
|
"""
|
409
|
-
model_versions = Client().list_model_versions(
|
410
|
-
model_name_or_id=model_name_or_id,
|
411
|
-
**kwargs,
|
412
|
-
)
|
407
|
+
model_versions = Client().list_model_versions(**kwargs)
|
413
408
|
|
414
409
|
if not model_versions:
|
415
410
|
cli_utils.declare("No model versions found.")
|
zenml/client.py
CHANGED
@@ -6504,7 +6504,8 @@ class Client(metaclass=ClientMetaClass):
|
|
6504
6504
|
|
6505
6505
|
def list_model_versions(
|
6506
6506
|
self,
|
6507
|
-
|
6507
|
+
model: Optional[Union[str, UUID]] = None,
|
6508
|
+
model_name_or_id: Optional[Union[str, UUID]] = None,
|
6508
6509
|
sort_by: str = "number",
|
6509
6510
|
page: int = PAGINATION_STARTING_PAGE,
|
6510
6511
|
size: int = PAGE_SIZE_DEFAULT,
|
@@ -6525,6 +6526,7 @@ class Client(metaclass=ClientMetaClass):
|
|
6525
6526
|
"""Get model versions by filter from Model Control Plane.
|
6526
6527
|
|
6527
6528
|
Args:
|
6529
|
+
model: The model to filter by.
|
6528
6530
|
model_name_or_id: name or id of the model containing the model
|
6529
6531
|
version.
|
6530
6532
|
sort_by: The column to sort by
|
@@ -6548,6 +6550,19 @@ class Client(metaclass=ClientMetaClass):
|
|
6548
6550
|
Returns:
|
6549
6551
|
A page object with all model versions.
|
6550
6552
|
"""
|
6553
|
+
if model_name_or_id:
|
6554
|
+
logger.warning(
|
6555
|
+
"The `model_name_or_id` argument is deprecated. "
|
6556
|
+
"Please use the `model` argument instead."
|
6557
|
+
)
|
6558
|
+
if model is None:
|
6559
|
+
model = model_name_or_id
|
6560
|
+
else:
|
6561
|
+
logger.warning(
|
6562
|
+
"Ignoring `model_name_or_id` argument as `model` argument "
|
6563
|
+
"was also provided."
|
6564
|
+
)
|
6565
|
+
|
6551
6566
|
model_version_filter_model = ModelVersionFilter(
|
6552
6567
|
page=page,
|
6553
6568
|
size=size,
|
@@ -6563,7 +6578,7 @@ class Client(metaclass=ClientMetaClass):
|
|
6563
6578
|
tag=tag,
|
6564
6579
|
tags=tags,
|
6565
6580
|
user=user,
|
6566
|
-
model=
|
6581
|
+
model=model,
|
6567
6582
|
project=project or self.active_project.id,
|
6568
6583
|
)
|
6569
6584
|
|
zenml/config/docker_settings.py
CHANGED
zenml/environment.py
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
|
16
16
|
import os
|
17
17
|
import platform
|
18
|
-
|
18
|
+
import subprocess
|
19
|
+
from typing import Any, Dict, List
|
19
20
|
|
20
21
|
import distro
|
21
22
|
|
@@ -27,7 +28,7 @@ from zenml.utils.singleton import SingletonMetaClass
|
|
27
28
|
logger = get_logger(__name__)
|
28
29
|
|
29
30
|
|
30
|
-
def get_run_environment_dict() -> Dict[str,
|
31
|
+
def get_run_environment_dict() -> Dict[str, Any]:
|
31
32
|
"""Returns a dictionary of the current run environment.
|
32
33
|
|
33
34
|
Everything that is returned here will be saved in the DB as
|
@@ -38,12 +39,24 @@ def get_run_environment_dict() -> Dict[str, str]:
|
|
38
39
|
Returns:
|
39
40
|
A dictionary of the current run environment.
|
40
41
|
"""
|
41
|
-
|
42
|
-
"environment": get_environment(),
|
42
|
+
env_dict: Dict[str, Any] = {
|
43
|
+
"environment": str(get_environment()),
|
43
44
|
**Environment.get_system_info(),
|
44
45
|
"python_version": Environment.python_version(),
|
45
46
|
}
|
46
47
|
|
48
|
+
try:
|
49
|
+
python_packages = Environment.get_python_packages()
|
50
|
+
except RuntimeError:
|
51
|
+
logger.warning("Failed to get list of installed Python packages")
|
52
|
+
else:
|
53
|
+
# TODO: We send the python packages as a string right now to keep
|
54
|
+
# backwards compatibility with old versions. We should update this to
|
55
|
+
# be a list of strings eventually.
|
56
|
+
env_dict["python_packages"] = "\n".join(python_packages)
|
57
|
+
|
58
|
+
return env_dict
|
59
|
+
|
47
60
|
|
48
61
|
def get_environment() -> str:
|
49
62
|
"""Returns a string representing the execution environment of the pipeline.
|
@@ -337,3 +350,22 @@ class Environment(metaclass=SingletonMetaClass):
|
|
337
350
|
"LIGHTNING_CLOUD_URL" in os.environ
|
338
351
|
and "LIGHTNING_CLOUDSPACE_HOST" in os.environ
|
339
352
|
)
|
353
|
+
|
354
|
+
@staticmethod
|
355
|
+
def get_python_packages() -> List[str]:
|
356
|
+
"""Returns a list of installed Python packages.
|
357
|
+
|
358
|
+
Raises:
|
359
|
+
RuntimeError: If the process to get the list of installed packages
|
360
|
+
fails.
|
361
|
+
|
362
|
+
Returns:
|
363
|
+
List of installed packages in pip freeze format.
|
364
|
+
"""
|
365
|
+
try:
|
366
|
+
output = subprocess.check_output(["pip", "freeze"]).decode()
|
367
|
+
return output.strip().split("\n")
|
368
|
+
except subprocess.CalledProcessError:
|
369
|
+
raise RuntimeError(
|
370
|
+
"Failed to get list of installed Python packages"
|
371
|
+
)
|
@@ -15,6 +15,11 @@
|
|
15
15
|
|
16
16
|
This materializer handles pandas DataFrame and Series objects.
|
17
17
|
|
18
|
+
Special features:
|
19
|
+
- Handles pandas DataFrames and Series with various data types
|
20
|
+
- Provides helpful error messages for custom data type errors
|
21
|
+
- Warns when custom data types are detected that might need additional libraries
|
22
|
+
|
18
23
|
Environment Variables:
|
19
24
|
ZENML_PANDAS_SAMPLE_ROWS: Controls the number of sample rows to include in
|
20
25
|
visualizations. Defaults to 10 if not set.
|
@@ -41,6 +46,32 @@ CSV_FILENAME = "df.csv"
|
|
41
46
|
# Default number of sample rows to display in visualizations
|
42
47
|
DEFAULT_SAMPLE_ROWS = 10
|
43
48
|
|
49
|
+
# List of standard pandas/numpy dtype prefixes for type checking
|
50
|
+
STANDARD_DTYPE_PREFIXES = [
|
51
|
+
"int",
|
52
|
+
"float",
|
53
|
+
"bool",
|
54
|
+
"datetime",
|
55
|
+
"timedelta",
|
56
|
+
"object",
|
57
|
+
"category",
|
58
|
+
"string",
|
59
|
+
"complex",
|
60
|
+
]
|
61
|
+
|
62
|
+
|
63
|
+
def is_standard_dtype(dtype_str: str) -> bool:
|
64
|
+
"""Check if a dtype string represents a standard pandas/numpy dtype.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
dtype_str: String representation of the dtype
|
68
|
+
|
69
|
+
Returns:
|
70
|
+
bool: True if it's a standard dtype, False otherwise
|
71
|
+
"""
|
72
|
+
dtype_str = dtype_str.lower()
|
73
|
+
return any(prefix in dtype_str for prefix in STANDARD_DTYPE_PREFIXES)
|
74
|
+
|
44
75
|
|
45
76
|
class PandasMaterializer(BaseMaterializer):
|
46
77
|
"""Materializer to read data to and from pandas."""
|
@@ -86,27 +117,60 @@ class PandasMaterializer(BaseMaterializer):
|
|
86
117
|
|
87
118
|
Raises:
|
88
119
|
ImportError: If pyarrow or fastparquet is not installed.
|
120
|
+
TypeError: Raised if there is an error when reading parquet files.
|
121
|
+
zenml_type_error: If the data type is a custom data type.
|
89
122
|
|
90
123
|
Returns:
|
91
124
|
The pandas dataframe or series.
|
92
125
|
"""
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
126
|
+
try:
|
127
|
+
# First try normal loading
|
128
|
+
if self.artifact_store.exists(self.parquet_path):
|
129
|
+
if self.pyarrow_exists:
|
130
|
+
with self.artifact_store.open(
|
131
|
+
self.parquet_path, mode="rb"
|
132
|
+
) as f:
|
133
|
+
df = pd.read_parquet(f)
|
134
|
+
else:
|
135
|
+
raise ImportError(
|
136
|
+
"You have an old version of a `PandasMaterializer` "
|
137
|
+
"data artifact stored in the artifact store "
|
138
|
+
"as a `.parquet` file, which requires `pyarrow` "
|
139
|
+
"for reading, You can install `pyarrow` by running "
|
140
|
+
"'`pip install pyarrow fastparquet`'."
|
141
|
+
)
|
99
142
|
else:
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
143
|
+
with self.artifact_store.open(self.csv_path, mode="rb") as f:
|
144
|
+
df = pd.read_csv(f, index_col=0, parse_dates=True)
|
145
|
+
except TypeError as e:
|
146
|
+
# Check for common data type error patterns
|
147
|
+
error_str = str(e).lower()
|
148
|
+
is_dtype_error = (
|
149
|
+
"not understood" in error_str
|
150
|
+
or "no type" in error_str
|
151
|
+
or "cannot deserialize" in error_str
|
152
|
+
or "data type" in error_str
|
153
|
+
)
|
154
|
+
|
155
|
+
if is_dtype_error:
|
156
|
+
# If the error is due to a custom data type, raise a ZenML TypeError
|
157
|
+
# This is to avoid the original error from being swallowed
|
158
|
+
# and to provide a more helpful error message
|
159
|
+
zenml_type_error = TypeError(
|
160
|
+
"Encountered an error with custom data types. This may be due to "
|
161
|
+
"missing libraries that were used when the data was originally created. "
|
162
|
+
"For example, you might need to install libraries like 'geopandas' for "
|
163
|
+
"GeoPandas data types, 'pandas-gbq' for BigQuery data types, or "
|
164
|
+
"'pyarrow' for Arrow data types. Make sure to import these libraries "
|
165
|
+
"in your step code as well as adding them to your step requirements, "
|
166
|
+
"even if you're not directly using them in your code. Pandas needs "
|
167
|
+
"these libraries to be imported to properly load the custom data types. "
|
168
|
+
"Try installing any packages that were used in previous pipeline steps "
|
169
|
+
"but might not be available in the current environment."
|
106
170
|
)
|
107
|
-
|
108
|
-
|
109
|
-
|
171
|
+
raise zenml_type_error from e
|
172
|
+
# We don't know how to handle this error, so re-raise the original error
|
173
|
+
raise e
|
110
174
|
|
111
175
|
# validate the type of the data.
|
112
176
|
def is_dataframe_or_series(
|
@@ -204,14 +268,46 @@ class PandasMaterializer(BaseMaterializer):
|
|
204
268
|
Returns:
|
205
269
|
The extracted metadata as a dictionary.
|
206
270
|
"""
|
207
|
-
|
271
|
+
# Store whether it's a Series for later reference
|
272
|
+
is_series = isinstance(df, pd.Series)
|
208
273
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
274
|
+
# Store original shape before conversion
|
275
|
+
original_shape = df.shape
|
276
|
+
|
277
|
+
# Convert Series to DataFrame for consistent handling of dtypes
|
278
|
+
if is_series:
|
279
|
+
series_obj = df # Keep original Series for some calculations
|
280
|
+
df = df.to_frame(name="series")
|
281
|
+
|
282
|
+
pandas_metadata: Dict[str, "MetadataType"] = {"shape": original_shape}
|
283
|
+
|
284
|
+
# Add information about custom data types to metadata
|
285
|
+
custom_types = {}
|
286
|
+
try:
|
287
|
+
for col, dtype in df.dtypes.items():
|
288
|
+
dtype_str = str(dtype)
|
289
|
+
if not is_standard_dtype(dtype_str):
|
290
|
+
col_name = "series" if is_series else str(col)
|
291
|
+
custom_types[col_name] = dtype_str
|
292
|
+
# Try to get module information if available
|
293
|
+
try:
|
294
|
+
module_name = dtype.type.__module__
|
295
|
+
custom_types[f"{col_name}_module"] = module_name
|
296
|
+
except (AttributeError, TypeError):
|
297
|
+
pass
|
298
|
+
|
299
|
+
if custom_types:
|
300
|
+
pandas_metadata["custom_types"] = custom_types
|
301
|
+
except Exception as e:
|
302
|
+
logger.debug(f"Error extracting custom type metadata: {e}")
|
303
|
+
|
304
|
+
if is_series:
|
305
|
+
# For Series, use the original series object for statistics
|
306
|
+
pandas_metadata["dtype"] = DType(series_obj.dtype.type)
|
307
|
+
pandas_metadata["mean"] = float(series_obj.mean().item())
|
308
|
+
pandas_metadata["std"] = float(series_obj.std().item())
|
309
|
+
pandas_metadata["min"] = float(series_obj.min().item())
|
310
|
+
pandas_metadata["max"] = float(series_obj.max().item())
|
215
311
|
|
216
312
|
else:
|
217
313
|
pandas_metadata["dtype"] = {
|
@@ -31,7 +31,6 @@ from zenml.constants import STR_FIELD_MAX_LENGTH, TEXT_FIELD_MAX_LENGTH
|
|
31
31
|
from zenml.enums import ArtifactType, ModelStages
|
32
32
|
from zenml.metadata.metadata_types import MetadataType
|
33
33
|
from zenml.models.v2.base.base import BaseUpdate
|
34
|
-
from zenml.models.v2.base.filter import AnyQuery
|
35
34
|
from zenml.models.v2.base.page import Page
|
36
35
|
from zenml.models.v2.base.scoped import (
|
37
36
|
ProjectScopedFilter,
|
@@ -47,11 +46,15 @@ from zenml.models.v2.core.service import ServiceResponse
|
|
47
46
|
from zenml.models.v2.core.tag import TagResponse
|
48
47
|
|
49
48
|
if TYPE_CHECKING:
|
49
|
+
from sqlalchemy.sql.elements import ColumnElement
|
50
|
+
|
50
51
|
from zenml.model.model import Model
|
51
52
|
from zenml.models.v2.core.artifact_version import ArtifactVersionResponse
|
52
53
|
from zenml.models.v2.core.model import ModelResponse
|
53
54
|
from zenml.models.v2.core.pipeline_run import PipelineRunResponse
|
54
|
-
from zenml.zen_stores.schemas import
|
55
|
+
from zenml.zen_stores.schemas import (
|
56
|
+
BaseSchema,
|
57
|
+
)
|
55
58
|
|
56
59
|
AnySchema = TypeVar("AnySchema", bound=BaseSchema)
|
57
60
|
|
@@ -585,7 +588,6 @@ class ModelVersionFilter(
|
|
585
588
|
*ProjectScopedFilter.CLI_EXCLUDE_FIELDS,
|
586
589
|
*TaggableFilter.CLI_EXCLUDE_FIELDS,
|
587
590
|
*RunMetadataFilterMixin.CLI_EXCLUDE_FIELDS,
|
588
|
-
"model",
|
589
591
|
]
|
590
592
|
API_MULTI_INPUT_PARAMS: ClassVar[List[str]] = [
|
591
593
|
*ProjectScopedFilter.API_MULTI_INPUT_PARAMS,
|
@@ -615,41 +617,34 @@ class ModelVersionFilter(
|
|
615
617
|
union_mode="left_to_right",
|
616
618
|
)
|
617
619
|
|
618
|
-
def
|
619
|
-
self,
|
620
|
-
|
621
|
-
|
622
|
-
) -> AnyQuery:
|
623
|
-
"""Applies the filter to a query.
|
620
|
+
def get_custom_filters(
|
621
|
+
self, table: Type["AnySchema"]
|
622
|
+
) -> List[Union["ColumnElement[bool]"]]:
|
623
|
+
"""Get custom filters.
|
624
624
|
|
625
625
|
Args:
|
626
|
-
query: The query to which to apply the filter.
|
627
626
|
table: The query table.
|
628
627
|
|
629
628
|
Returns:
|
630
|
-
|
631
|
-
|
632
|
-
Raises:
|
633
|
-
ValueError: if the filter is not scoped to a model.
|
629
|
+
A list of custom filters.
|
634
630
|
"""
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
# If not set by the client, the server will raise a ValueError.
|
642
|
-
#
|
643
|
-
# See: SqlZenStore._set_filter_model_id
|
644
|
-
|
645
|
-
if not self.model:
|
646
|
-
raise ValueError("Model scope missing from the filter.")
|
647
|
-
|
648
|
-
if not isinstance(self.model, UUID):
|
649
|
-
raise ValueError(
|
650
|
-
f"Model scope must be a UUID, got {type(self.model)}."
|
651
|
-
)
|
631
|
+
from sqlalchemy import and_
|
632
|
+
|
633
|
+
from zenml.zen_stores.schemas import (
|
634
|
+
ModelSchema,
|
635
|
+
ModelVersionSchema,
|
636
|
+
)
|
652
637
|
|
653
|
-
|
638
|
+
custom_filters = super().get_custom_filters(table)
|
639
|
+
|
640
|
+
if self.model:
|
641
|
+
value, operator = self._resolve_operator(self.model)
|
642
|
+
model_filter = and_(
|
643
|
+
ModelVersionSchema.model_id == ModelSchema.id, # type: ignore[arg-type]
|
644
|
+
self.generate_name_or_id_query_conditions(
|
645
|
+
value=self.model, table=ModelSchema
|
646
|
+
),
|
647
|
+
)
|
648
|
+
custom_filters.append(model_filter)
|
654
649
|
|
655
|
-
return
|
650
|
+
return custom_filters
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
"""Models representing pipeline deployments."""
|
15
15
|
|
16
|
-
from typing import Dict, Optional, TypeVar, Union
|
16
|
+
from typing import Any, Dict, Optional, TypeVar, Union
|
17
17
|
from uuid import UUID
|
18
18
|
|
19
19
|
from pydantic import Field
|
@@ -60,7 +60,7 @@ class PipelineDeploymentBase(BaseZenModel):
|
|
60
60
|
step_configurations: Dict[str, Step] = Field(
|
61
61
|
default={}, title="The step configurations for this deployment."
|
62
62
|
)
|
63
|
-
client_environment: Dict[str,
|
63
|
+
client_environment: Dict[str, Any] = Field(
|
64
64
|
default={}, title="The client environment for this deployment."
|
65
65
|
)
|
66
66
|
client_version: Optional[str] = Field(
|
@@ -143,7 +143,7 @@ class PipelineDeploymentResponseMetadata(ProjectScopedResponseMetadata):
|
|
143
143
|
step_configurations: Dict[str, Step] = Field(
|
144
144
|
default={}, title="The step configurations for this deployment."
|
145
145
|
)
|
146
|
-
client_environment: Dict[str,
|
146
|
+
client_environment: Dict[str, Any] = Field(
|
147
147
|
default={}, title="The client environment for this deployment."
|
148
148
|
)
|
149
149
|
client_version: Optional[str] = Field(
|
@@ -242,7 +242,7 @@ class PipelineDeploymentResponse(
|
|
242
242
|
return self.get_metadata().step_configurations
|
243
243
|
|
244
244
|
@property
|
245
|
-
def client_environment(self) -> Dict[str,
|
245
|
+
def client_environment(self) -> Dict[str, Any]:
|
246
246
|
"""The `client_environment` property.
|
247
247
|
|
248
248
|
Returns:
|
@@ -104,14 +104,7 @@ class PipelineRunRequest(ProjectScopedRequest):
|
|
104
104
|
status: ExecutionStatus = Field(
|
105
105
|
title="The status of the pipeline run.",
|
106
106
|
)
|
107
|
-
|
108
|
-
default={},
|
109
|
-
title=(
|
110
|
-
"Environment of the client that initiated this pipeline run "
|
111
|
-
"(OS, Python version, etc.)."
|
112
|
-
),
|
113
|
-
)
|
114
|
-
orchestrator_environment: Dict[str, str] = Field(
|
107
|
+
orchestrator_environment: Dict[str, Any] = Field(
|
115
108
|
default={},
|
116
109
|
title=(
|
117
110
|
"Environment of the orchestrator that executed this pipeline run "
|
@@ -214,14 +207,14 @@ class PipelineRunResponseMetadata(ProjectScopedResponseMetadata):
|
|
214
207
|
title="The end time of the pipeline run.",
|
215
208
|
default=None,
|
216
209
|
)
|
217
|
-
client_environment: Dict[str,
|
210
|
+
client_environment: Dict[str, Any] = Field(
|
218
211
|
default={},
|
219
212
|
title=(
|
220
213
|
"Environment of the client that initiated this pipeline run "
|
221
214
|
"(OS, Python version, etc.)."
|
222
215
|
),
|
223
216
|
)
|
224
|
-
orchestrator_environment: Dict[str,
|
217
|
+
orchestrator_environment: Dict[str, Any] = Field(
|
225
218
|
default={},
|
226
219
|
title=(
|
227
220
|
"Environment of the orchestrator that executed this pipeline run "
|
@@ -509,7 +502,7 @@ class PipelineRunResponse(
|
|
509
502
|
return self.get_metadata().end_time
|
510
503
|
|
511
504
|
@property
|
512
|
-
def client_environment(self) -> Dict[str,
|
505
|
+
def client_environment(self) -> Dict[str, Any]:
|
513
506
|
"""The `client_environment` property.
|
514
507
|
|
515
508
|
Returns:
|
@@ -518,7 +511,7 @@ class PipelineRunResponse(
|
|
518
511
|
return self.get_metadata().client_environment
|
519
512
|
|
520
513
|
@property
|
521
|
-
def orchestrator_environment(self) -> Dict[str,
|
514
|
+
def orchestrator_environment(self) -> Dict[str, Any]:
|
522
515
|
"""The `orchestrator_environment` property.
|
523
516
|
|
524
517
|
Returns:
|
zenml/models/v2/core/user.py
CHANGED
zenml/secret/base_secret.py
CHANGED
zenml/stack/stack_component.py
CHANGED
zenml/stack/utils.py
CHANGED
@@ -85,7 +85,7 @@ def validate_stack_component_config(
|
|
85
85
|
validation_config_class: Type[StackComponentConfig] = type(
|
86
86
|
config_class.__name__,
|
87
87
|
(config_class,),
|
88
|
-
{"model_config": {"extra": "
|
88
|
+
{"model_config": {"extra": "ignore"}},
|
89
89
|
)
|
90
90
|
configuration = validation_config_class(**configuration_dict)
|
91
91
|
|
@@ -1 +1 @@
|
|
1
|
-
import{j as e}from"./@radix-C7hRs6Kx.js";import{h as s,r as t}from"./index-
|
1
|
+
import{j as e}from"./@radix-C7hRs6Kx.js";import{h as s,r as t}from"./index-BygJE88j.js";import{E as r}from"./EmptyState-M1jafpg6.js";import{S as a}from"./help-DyMolRxD.js";import{L as o}from"./@react-router-CNP6g_RL.js";import"./@tanstack-CSxjHCME.js";import"./@reactflow-CQi1Z1Wq.js";function d(){return e.jsx("div",{className:"flex min-h-screen w-full flex-col",children:e.jsx(r,{icon:e.jsx(a,{className:"h-[120px] w-[120px] fill-neutral-300"}),children:e.jsxs("div",{className:"text-center",children:[e.jsx("h1",{className:"mb-2 text-display-xs font-semibold",children:"We can't find the page you are looking for"}),e.jsx("p",{className:"text-lg text-theme-text-secondary",children:"You can try typing a different URL or we can bring you back to your Homepage."}),e.jsx("div",{className:"mt-5 flex justify-center",children:e.jsx(s,{size:"md",asChild:!0,children:e.jsx(o,{className:"w-min self-center whitespace-nowrap",to:t.home,children:e.jsx("span",{className:"px-0.5",children:"Go to Home"})})})})]})})})}export{d as default};
|
@@ -26,4 +26,4 @@ import{r as v,R as Gr,a as Xr}from"./@radix-C7hRs6Kx.js";/**
|
|
26
26
|
* LICENSE.md file in the root directory of this source tree.
|
27
27
|
*
|
28
28
|
* @license MIT
|
29
|
-
*/function ze(){return ze=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ze.apply(this,arguments)}function Tr(e,t){if(e==null)return{};var r={},n=Object.keys(e),a,l;for(l=0;l<n.length;l++)a=n[l],!(t.indexOf(a)>=0)&&(r[a]=e[a]);return r}function ha(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function pa(e,t){return e.button===0&&(!t||t==="_self")&&!ha(e)}function Mt(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map(a=>[r,a]):[[r,n]])},[]))}function ma(e,t){let r=Mt(e);return t&&t.forEach((n,a)=>{r.has(a)||t.getAll(a).forEach(l=>{r.append(a,l)})}),r}const va=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],ga=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],ya="6";try{window.__reactRouterVersion=ya}catch{}function Aa(e,t){return Dn({basename:void 0,future:ze({},void 0,{v7_prependBasename:!0}),history:Qr({window:void 0}),hydrationData:wa(),routes:e,mapRouteProperties:fa,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function wa(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=ze({},t,{errors:ba(t.errors)})),t}function ba(e){if(!e)return null;let t=Object.entries(e),r={};for(let[n,a]of t)if(a&&a.__type==="RouteErrorResponse")r[n]=new ht(a.status,a.statusText,a.data,a.internal===!0);else if(a&&a.__type==="Error"){if(a.__subType){let l=window[a.__subType];if(typeof l=="function")try{let o=new l(a.message);o.stack="",r[n]=o}catch{}}if(r[n]==null){let l=new Error(a.message);l.stack="",r[n]=l}}else r[n]=a;return r}const Fr=v.createContext({isTransitioning:!1}),Ra=v.createContext(new Map),Ea="startTransition",hr=Gr[Ea],xa="flushSync",pr=Xr[xa];function Sa(e){hr?hr(e):e()}function Xe(e){pr?pr(e):e()}class Pa{constructor(){this.status="pending",this.promise=new Promise((t,r)=>{this.resolve=n=>{this.status==="pending"&&(this.status="resolved",t(n))},this.reject=n=>{this.status==="pending"&&(this.status="rejected",r(n))}})}}function Ba(e){let{fallbackElement:t,router:r,future:n}=e,[a,l]=v.useState(r.state),[o,c]=v.useState(),[u,f]=v.useState({isTransitioning:!1}),[h,p]=v.useState(),[y,w]=v.useState(),[P,b]=v.useState(),M=v.useRef(new Map),{v7_startTransition:I}=n||{},L=v.useCallback(U=>{I?Sa(U):U()},[I]),j=v.useCallback((U,_)=>{let{deletedFetchers:k,flushSync:Q,viewTransitionOpts:Z}=_;k.forEach(q=>M.current.delete(q)),U.fetchers.forEach((q,Fe)=>{q.data!==void 0&&M.current.set(Fe,q.data)});let ne=r.window==null||r.window.document==null||typeof r.window.document.startViewTransition!="function";if(!Z||ne){Q?Xe(()=>l(U)):L(()=>l(U));return}if(Q){Xe(()=>{y&&(h&&h.resolve(),y.skipTransition()),f({isTransitioning:!0,flushSync:!0,currentLocation:Z.currentLocation,nextLocation:Z.nextLocation})});let q=r.window.document.startViewTransition(()=>{Xe(()=>l(U))});q.finished.finally(()=>{Xe(()=>{p(void 0),w(void 0),c(void 0),f({isTransitioning:!1})})}),Xe(()=>w(q));return}y?(h&&h.resolve(),y.skipTransition(),b({state:U,currentLocation:Z.currentLocation,nextLocation:Z.nextLocation})):(c(U),f({isTransitioning:!0,flushSync:!1,currentLocation:Z.currentLocation,nextLocation:Z.nextLocation}))},[r.window,y,h,M,L]);v.useLayoutEffect(()=>r.subscribe(j),[r,j]),v.useEffect(()=>{u.isTransitioning&&!u.flushSync&&p(new Pa)},[u]),v.useEffect(()=>{if(h&&o&&r.window){let U=o,_=h.promise,k=r.window.document.startViewTransition(async()=>{L(()=>l(U)),await _});k.finished.finally(()=>{p(void 0),w(void 0),c(void 0),f({isTransitioning:!1})}),w(k)}},[L,o,h,r.window]),v.useEffect(()=>{h&&o&&a.location.key===o.location.key&&h.resolve()},[h,y,a.location,o]),v.useEffect(()=>{!u.isTransitioning&&P&&(c(P.state),f({isTransitioning:!0,flushSync:!1,currentLocation:P.currentLocation,nextLocation:P.nextLocation}),b(void 0))},[u.isTransitioning,P]),v.useEffect(()=>{},[]);let O=v.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:U=>r.navigate(U),push:(U,_,k)=>r.navigate(U,{state:_,preventScrollReset:k==null?void 0:k.preventScrollReset}),replace:(U,_,k)=>r.navigate(U,{replace:!0,state:_,preventScrollReset:k==null?void 0:k.preventScrollReset})}),[r]),G=r.basename||"/",m=v.useMemo(()=>({router:r,navigator:O,static:!1,basename:G}),[r,O,G]),X=v.useMemo(()=>({v7_relativeSplatPath:r.future.v7_relativeSplatPath}),[r.future.v7_relativeSplatPath]);return v.createElement(v.Fragment,null,v.createElement(qe.Provider,{value:m},v.createElement(_t.Provider,{value:a},v.createElement(Ra.Provider,{value:M.current},v.createElement(Fr.Provider,{value:u},v.createElement(da,{basename:G,location:a.location,navigationType:a.historyAction,navigator:O,future:X},a.initialized||r.future.v7_partialHydration?v.createElement(La,{routes:r.routes,future:r.future,state:a}):t))))),null)}const La=v.memo(Ca);function Ca(e){let{routes:t,future:r,state:n}=e;return Zn(t,void 0,n,r)}const Da=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Ma=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Ta=v.forwardRef(function(t,r){let{onClick:n,relative:a,reloadDocument:l,replace:o,state:c,target:u,to:f,preventScrollReset:h,viewTransition:p}=t,y=Tr(t,va),{basename:w}=v.useContext(me),P,b=!1;if(typeof f=="string"&&Ma.test(f)&&(P=f,Da))try{let j=new URL(window.location.href),O=f.startsWith("//")?new URL(j.protocol+f):new URL(f),G=pe(O.pathname,w);O.origin===j.origin&&G!=null?f=G+O.search+O.hash:b=!0}catch{}let M=Yn(f,{relative:a}),I=Ua(f,{replace:o,state:c,target:u,preventScrollReset:h,relative:a,viewTransition:p});function L(j){n&&n(j),j.defaultPrevented||I(j)}return v.createElement("a",ze({},y,{href:P||M,onClick:b||l?n:L,ref:r,target:u}))}),za=v.forwardRef(function(t,r){let{"aria-current":n="page",caseSensitive:a=!1,className:l="",end:o=!1,style:c,to:u,viewTransition:f,children:h}=t,p=Tr(t,ga),y=yt(u,{relative:p.relative}),w=Te(),P=v.useContext(_t),{navigator:b,basename:M}=v.useContext(me),I=P!=null&&Oa(y)&&f===!0,L=b.encodeLocation?b.encodeLocation(y).pathname:y.pathname,j=w.pathname,O=P&&P.navigation&&P.navigation.location?P.navigation.location.pathname:null;a||(j=j.toLowerCase(),O=O?O.toLowerCase():null,L=L.toLowerCase()),O&&M&&(O=pe(O,M)||O);const G=L!=="/"&&L.endsWith("/")?L.length-1:L.length;let m=j===L||!o&&j.startsWith(L)&&j.charAt(G)==="/",X=O!=null&&(O===L||!o&&O.startsWith(L)&&O.charAt(L.length)==="/"),U={isActive:m,isPending:X,isTransitioning:I},_=m?n:void 0,k;typeof l=="function"?k=l(U):k=[l,m?"active":null,X?"pending":null,I?"transitioning":null].filter(Boolean).join(" ");let Q=typeof c=="function"?c(U):c;return v.createElement(Ta,ze({},p,{"aria-current":_,className:k,ref:r,style:Q,to:u,viewTransition:f}),typeof h=="function"?h(U):h)});var Tt;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Tt||(Tt={}));var mr;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(mr||(mr={}));function Fa(e){let t=v.useContext(qe);return t||F(!1),t}function Ua(e,t){let{target:r,replace:n,state:a,preventScrollReset:l,relative:o,viewTransition:c}=t===void 0?{}:t,u=jt(),f=Te(),h=yt(e,{relative:o});return v.useCallback(p=>{if(pa(p,r)){p.preventDefault();let y=n!==void 0?n:Me(f)===Me(h);u(e,{replace:y,state:a,preventScrollReset:l,relative:o,viewTransition:c})}},[f,u,h,n,a,r,e,l,o,c])}function ka(e){let t=v.useRef(Mt(e)),r=v.useRef(!1),n=Te(),a=v.useMemo(()=>ma(n.search,r.current?null:t.current),[n.search]),l=jt(),o=v.useCallback((c,u)=>{const f=Mt(typeof c=="function"?c(a):c);r.current=!0,l("?"+f,u)},[l,a]);return[a,o]}function Oa(e,t){t===void 0&&(t={});let r=v.useContext(Fr);r==null&&F(!1);let{basename:n}=Fa(Tt.useViewTransitionState),a=yt(e,{relative:t.relative});if(!r.isTransitioning)return!1;let l=pe(r.currentLocation.pathname,n)||r.currentLocation.pathname,o=pe(r.nextLocation.pathname,n)||r.nextLocation.pathname;return ft(a.pathname,o)!=null||ft(a.pathname,l)!=null}export{Ta as L,ja as N,Ia as O,ca as R,
|
29
|
+
*/function ze(){return ze=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ze.apply(this,arguments)}function Tr(e,t){if(e==null)return{};var r={},n=Object.keys(e),a,l;for(l=0;l<n.length;l++)a=n[l],!(t.indexOf(a)>=0)&&(r[a]=e[a]);return r}function ha(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function pa(e,t){return e.button===0&&(!t||t==="_self")&&!ha(e)}function Mt(e){return e===void 0&&(e=""),new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,r)=>{let n=e[r];return t.concat(Array.isArray(n)?n.map(a=>[r,a]):[[r,n]])},[]))}function ma(e,t){let r=Mt(e);return t&&t.forEach((n,a)=>{r.has(a)||t.getAll(a).forEach(l=>{r.append(a,l)})}),r}const va=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],ga=["aria-current","caseSensitive","className","end","style","to","viewTransition","children"],ya="6";try{window.__reactRouterVersion=ya}catch{}function Aa(e,t){return Dn({basename:void 0,future:ze({},void 0,{v7_prependBasename:!0}),history:Qr({window:void 0}),hydrationData:wa(),routes:e,mapRouteProperties:fa,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function wa(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=ze({},t,{errors:ba(t.errors)})),t}function ba(e){if(!e)return null;let t=Object.entries(e),r={};for(let[n,a]of t)if(a&&a.__type==="RouteErrorResponse")r[n]=new ht(a.status,a.statusText,a.data,a.internal===!0);else if(a&&a.__type==="Error"){if(a.__subType){let l=window[a.__subType];if(typeof l=="function")try{let o=new l(a.message);o.stack="",r[n]=o}catch{}}if(r[n]==null){let l=new Error(a.message);l.stack="",r[n]=l}}else r[n]=a;return r}const Fr=v.createContext({isTransitioning:!1}),Ra=v.createContext(new Map),Ea="startTransition",hr=Gr[Ea],xa="flushSync",pr=Xr[xa];function Sa(e){hr?hr(e):e()}function Xe(e){pr?pr(e):e()}class Pa{constructor(){this.status="pending",this.promise=new Promise((t,r)=>{this.resolve=n=>{this.status==="pending"&&(this.status="resolved",t(n))},this.reject=n=>{this.status==="pending"&&(this.status="rejected",r(n))}})}}function Ba(e){let{fallbackElement:t,router:r,future:n}=e,[a,l]=v.useState(r.state),[o,c]=v.useState(),[u,f]=v.useState({isTransitioning:!1}),[h,p]=v.useState(),[y,w]=v.useState(),[P,b]=v.useState(),M=v.useRef(new Map),{v7_startTransition:I}=n||{},L=v.useCallback(U=>{I?Sa(U):U()},[I]),j=v.useCallback((U,_)=>{let{deletedFetchers:k,flushSync:Q,viewTransitionOpts:Z}=_;k.forEach(q=>M.current.delete(q)),U.fetchers.forEach((q,Fe)=>{q.data!==void 0&&M.current.set(Fe,q.data)});let ne=r.window==null||r.window.document==null||typeof r.window.document.startViewTransition!="function";if(!Z||ne){Q?Xe(()=>l(U)):L(()=>l(U));return}if(Q){Xe(()=>{y&&(h&&h.resolve(),y.skipTransition()),f({isTransitioning:!0,flushSync:!0,currentLocation:Z.currentLocation,nextLocation:Z.nextLocation})});let q=r.window.document.startViewTransition(()=>{Xe(()=>l(U))});q.finished.finally(()=>{Xe(()=>{p(void 0),w(void 0),c(void 0),f({isTransitioning:!1})})}),Xe(()=>w(q));return}y?(h&&h.resolve(),y.skipTransition(),b({state:U,currentLocation:Z.currentLocation,nextLocation:Z.nextLocation})):(c(U),f({isTransitioning:!0,flushSync:!1,currentLocation:Z.currentLocation,nextLocation:Z.nextLocation}))},[r.window,y,h,M,L]);v.useLayoutEffect(()=>r.subscribe(j),[r,j]),v.useEffect(()=>{u.isTransitioning&&!u.flushSync&&p(new Pa)},[u]),v.useEffect(()=>{if(h&&o&&r.window){let U=o,_=h.promise,k=r.window.document.startViewTransition(async()=>{L(()=>l(U)),await _});k.finished.finally(()=>{p(void 0),w(void 0),c(void 0),f({isTransitioning:!1})}),w(k)}},[L,o,h,r.window]),v.useEffect(()=>{h&&o&&a.location.key===o.location.key&&h.resolve()},[h,y,a.location,o]),v.useEffect(()=>{!u.isTransitioning&&P&&(c(P.state),f({isTransitioning:!0,flushSync:!1,currentLocation:P.currentLocation,nextLocation:P.nextLocation}),b(void 0))},[u.isTransitioning,P]),v.useEffect(()=>{},[]);let O=v.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:U=>r.navigate(U),push:(U,_,k)=>r.navigate(U,{state:_,preventScrollReset:k==null?void 0:k.preventScrollReset}),replace:(U,_,k)=>r.navigate(U,{replace:!0,state:_,preventScrollReset:k==null?void 0:k.preventScrollReset})}),[r]),G=r.basename||"/",m=v.useMemo(()=>({router:r,navigator:O,static:!1,basename:G}),[r,O,G]),X=v.useMemo(()=>({v7_relativeSplatPath:r.future.v7_relativeSplatPath}),[r.future.v7_relativeSplatPath]);return v.createElement(v.Fragment,null,v.createElement(qe.Provider,{value:m},v.createElement(_t.Provider,{value:a},v.createElement(Ra.Provider,{value:M.current},v.createElement(Fr.Provider,{value:u},v.createElement(da,{basename:G,location:a.location,navigationType:a.historyAction,navigator:O,future:X},a.initialized||r.future.v7_partialHydration?v.createElement(La,{routes:r.routes,future:r.future,state:a}):t))))),null)}const La=v.memo(Ca);function Ca(e){let{routes:t,future:r,state:n}=e;return Zn(t,void 0,n,r)}const Da=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Ma=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Ta=v.forwardRef(function(t,r){let{onClick:n,relative:a,reloadDocument:l,replace:o,state:c,target:u,to:f,preventScrollReset:h,viewTransition:p}=t,y=Tr(t,va),{basename:w}=v.useContext(me),P,b=!1;if(typeof f=="string"&&Ma.test(f)&&(P=f,Da))try{let j=new URL(window.location.href),O=f.startsWith("//")?new URL(j.protocol+f):new URL(f),G=pe(O.pathname,w);O.origin===j.origin&&G!=null?f=G+O.search+O.hash:b=!0}catch{}let M=Yn(f,{relative:a}),I=Ua(f,{replace:o,state:c,target:u,preventScrollReset:h,relative:a,viewTransition:p});function L(j){n&&n(j),j.defaultPrevented||I(j)}return v.createElement("a",ze({},y,{href:P||M,onClick:b||l?n:L,ref:r,target:u}))}),za=v.forwardRef(function(t,r){let{"aria-current":n="page",caseSensitive:a=!1,className:l="",end:o=!1,style:c,to:u,viewTransition:f,children:h}=t,p=Tr(t,ga),y=yt(u,{relative:p.relative}),w=Te(),P=v.useContext(_t),{navigator:b,basename:M}=v.useContext(me),I=P!=null&&Oa(y)&&f===!0,L=b.encodeLocation?b.encodeLocation(y).pathname:y.pathname,j=w.pathname,O=P&&P.navigation&&P.navigation.location?P.navigation.location.pathname:null;a||(j=j.toLowerCase(),O=O?O.toLowerCase():null,L=L.toLowerCase()),O&&M&&(O=pe(O,M)||O);const G=L!=="/"&&L.endsWith("/")?L.length-1:L.length;let m=j===L||!o&&j.startsWith(L)&&j.charAt(G)==="/",X=O!=null&&(O===L||!o&&O.startsWith(L)&&O.charAt(L.length)==="/"),U={isActive:m,isPending:X,isTransitioning:I},_=m?n:void 0,k;typeof l=="function"?k=l(U):k=[l,m?"active":null,X?"pending":null,I?"transitioning":null].filter(Boolean).join(" ");let Q=typeof c=="function"?c(U):c;return v.createElement(Ta,ze({},p,{"aria-current":_,className:k,ref:r,style:Q,to:u,viewTransition:f}),typeof h=="function"?h(U):h)});var Tt;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmit="useSubmit",e.UseSubmitFetcher="useSubmitFetcher",e.UseFetcher="useFetcher",e.useViewTransitionState="useViewTransitionState"})(Tt||(Tt={}));var mr;(function(e){e.UseFetcher="useFetcher",e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(mr||(mr={}));function Fa(e){let t=v.useContext(qe);return t||F(!1),t}function Ua(e,t){let{target:r,replace:n,state:a,preventScrollReset:l,relative:o,viewTransition:c}=t===void 0?{}:t,u=jt(),f=Te(),h=yt(e,{relative:o});return v.useCallback(p=>{if(pa(p,r)){p.preventDefault();let y=n!==void 0?n:Me(f)===Me(h);u(e,{replace:y,state:a,preventScrollReset:l,relative:o,viewTransition:c})}},[f,u,h,n,a,r,e,l,o,c])}function ka(e){let t=v.useRef(Mt(e)),r=v.useRef(!1),n=Te(),a=v.useMemo(()=>ma(n.search,r.current?null:t.current),[n.search]),l=jt(),o=v.useCallback((c,u)=>{const f=Mt(typeof c=="function"?c(a):c);r.current=!0,l("?"+f,u)},[l,a]);return[a,o]}function Oa(e,t){t===void 0&&(t={});let r=v.useContext(Fr);r==null&&F(!1);let{basename:n}=Fa(Tt.useViewTransitionState),a=yt(e,{relative:t.relative});if(!r.isTransitioning)return!1;let l=pe(r.currentLocation.pathname,n)||r.currentLocation.pathname,o=pe(r.nextLocation.pathname,n)||r.nextLocation.pathname;return ft(a.pathname,o)!=null||ft(a.pathname,l)!=null}export{Ta as L,ja as N,Ia as O,ca as R,Na as a,la as b,jt as c,ka as d,Aa as e,fr as f,Ba as g,za as h,ft as m,Te as u};
|
@@ -1 +1 @@
|
|
1
|
-
import{r as m,j as e}from"./@radix-C7hRs6Kx.js";import{t as g,v as p,
|
1
|
+
import{r as m,j as e}from"./@radix-C7hRs6Kx.js";import{t as g,v as p,af as d,aR as h}from"./index-BygJE88j.js";const x=m.forwardRef((r,t)=>{const{triggerChildren:a,children:i,onSelect:o,onOpenChange:l,icon:f,open:n,...s}=r;return e.jsxs(g,{open:n,onOpenChange:l,children:[e.jsx(p,{asChild:!0,children:e.jsx(d,{...s,className:"hover:cursor-pointer",icon:r.icon,ref:t,onSelect:c=>{c.preventDefault(),o&&o()},children:a})}),e.jsx(h,{children:i})]})});x.displayName="AlertDialogItem";export{x as A};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import{aK as X,g as re,r as V,j as E}from"./@radix-C7hRs6Kx.js";import{m as Y,
|
1
|
+
import{aK as X,g as re,r as V,j as E}from"./@radix-C7hRs6Kx.js";import{m as Y,a5 as ie}from"./index-BygJE88j.js";var Z={exports:{}},J;function se(){return J||(J=1,function(A){var M=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
|
2
2
|
* Prism: Lightweight, robust, elegant syntax highlighting
|
3
3
|
*
|
4
4
|
* @license MIT <https://opensource.org/licenses/MIT>
|