digitalhub 0.8.0b0__py3-none-any.whl → 0.8.0b2__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.

Potentially problematic release.


This version of digitalhub might be problematic. Click here for more details.

Files changed (159) hide show
  1. digitalhub/__init__.py +62 -94
  2. digitalhub/client/__init__.py +0 -0
  3. digitalhub/client/builder.py +105 -0
  4. digitalhub/client/objects/__init__.py +0 -0
  5. digitalhub/client/objects/base.py +56 -0
  6. digitalhub/client/objects/dhcore.py +681 -0
  7. digitalhub/client/objects/local.py +533 -0
  8. digitalhub/context/__init__.py +0 -0
  9. digitalhub/context/builder.py +178 -0
  10. digitalhub/context/context.py +136 -0
  11. digitalhub/datastores/__init__.py +0 -0
  12. digitalhub/datastores/builder.py +134 -0
  13. digitalhub/datastores/objects/__init__.py +0 -0
  14. digitalhub/datastores/objects/base.py +85 -0
  15. digitalhub/datastores/objects/local.py +42 -0
  16. digitalhub/datastores/objects/remote.py +23 -0
  17. digitalhub/datastores/objects/s3.py +38 -0
  18. digitalhub/datastores/objects/sql.py +60 -0
  19. digitalhub/entities/__init__.py +0 -0
  20. digitalhub/entities/_base/__init__.py +0 -0
  21. digitalhub/entities/_base/api.py +346 -0
  22. digitalhub/entities/_base/base.py +82 -0
  23. digitalhub/entities/_base/crud.py +610 -0
  24. digitalhub/entities/_base/entity/__init__.py +0 -0
  25. digitalhub/entities/_base/entity/base.py +132 -0
  26. digitalhub/entities/_base/entity/context.py +118 -0
  27. digitalhub/entities/_base/entity/executable.py +380 -0
  28. digitalhub/entities/_base/entity/material.py +214 -0
  29. digitalhub/entities/_base/entity/unversioned.py +87 -0
  30. digitalhub/entities/_base/entity/versioned.py +94 -0
  31. digitalhub/entities/_base/metadata.py +59 -0
  32. digitalhub/entities/_base/spec/__init__.py +0 -0
  33. digitalhub/entities/_base/spec/base.py +58 -0
  34. digitalhub/entities/_base/spec/material.py +22 -0
  35. digitalhub/entities/_base/state.py +31 -0
  36. digitalhub/entities/_base/status/__init__.py +0 -0
  37. digitalhub/entities/_base/status/base.py +32 -0
  38. digitalhub/entities/_base/status/material.py +49 -0
  39. digitalhub/entities/_builders/__init__.py +0 -0
  40. digitalhub/entities/_builders/metadata.py +60 -0
  41. digitalhub/entities/_builders/name.py +31 -0
  42. digitalhub/entities/_builders/spec.py +43 -0
  43. digitalhub/entities/_builders/status.py +62 -0
  44. digitalhub/entities/_builders/uuid.py +33 -0
  45. digitalhub/entities/artifact/__init__.py +0 -0
  46. digitalhub/entities/artifact/builder.py +133 -0
  47. digitalhub/entities/artifact/crud.py +358 -0
  48. digitalhub/entities/artifact/entity/__init__.py +0 -0
  49. digitalhub/entities/artifact/entity/_base.py +39 -0
  50. digitalhub/entities/artifact/entity/artifact.py +9 -0
  51. digitalhub/entities/artifact/spec.py +39 -0
  52. digitalhub/entities/artifact/status.py +15 -0
  53. digitalhub/entities/dataitem/__init__.py +0 -0
  54. digitalhub/entities/dataitem/builder.py +144 -0
  55. digitalhub/entities/dataitem/crud.py +395 -0
  56. digitalhub/entities/dataitem/entity/__init__.py +0 -0
  57. digitalhub/entities/dataitem/entity/_base.py +75 -0
  58. digitalhub/entities/dataitem/entity/dataitem.py +9 -0
  59. digitalhub/entities/dataitem/entity/iceberg.py +7 -0
  60. digitalhub/entities/dataitem/entity/table.py +125 -0
  61. digitalhub/entities/dataitem/models.py +62 -0
  62. digitalhub/entities/dataitem/spec.py +61 -0
  63. digitalhub/entities/dataitem/status.py +38 -0
  64. digitalhub/entities/entity_types.py +19 -0
  65. digitalhub/entities/function/__init__.py +0 -0
  66. digitalhub/entities/function/builder.py +86 -0
  67. digitalhub/entities/function/crud.py +305 -0
  68. digitalhub/entities/function/entity.py +101 -0
  69. digitalhub/entities/function/models.py +118 -0
  70. digitalhub/entities/function/spec.py +81 -0
  71. digitalhub/entities/function/status.py +9 -0
  72. digitalhub/entities/model/__init__.py +0 -0
  73. digitalhub/entities/model/builder.py +152 -0
  74. digitalhub/entities/model/crud.py +358 -0
  75. digitalhub/entities/model/entity/__init__.py +0 -0
  76. digitalhub/entities/model/entity/_base.py +34 -0
  77. digitalhub/entities/model/entity/huggingface.py +9 -0
  78. digitalhub/entities/model/entity/mlflow.py +90 -0
  79. digitalhub/entities/model/entity/model.py +9 -0
  80. digitalhub/entities/model/entity/sklearn.py +9 -0
  81. digitalhub/entities/model/models.py +26 -0
  82. digitalhub/entities/model/spec.py +146 -0
  83. digitalhub/entities/model/status.py +33 -0
  84. digitalhub/entities/project/__init__.py +0 -0
  85. digitalhub/entities/project/builder.py +82 -0
  86. digitalhub/entities/project/crud.py +350 -0
  87. digitalhub/entities/project/entity.py +2060 -0
  88. digitalhub/entities/project/spec.py +50 -0
  89. digitalhub/entities/project/status.py +9 -0
  90. digitalhub/entities/registries.py +48 -0
  91. digitalhub/entities/run/__init__.py +0 -0
  92. digitalhub/entities/run/builder.py +77 -0
  93. digitalhub/entities/run/crud.py +232 -0
  94. digitalhub/entities/run/entity.py +461 -0
  95. digitalhub/entities/run/spec.py +153 -0
  96. digitalhub/entities/run/status.py +114 -0
  97. digitalhub/entities/secret/__init__.py +0 -0
  98. digitalhub/entities/secret/builder.py +93 -0
  99. digitalhub/entities/secret/crud.py +294 -0
  100. digitalhub/entities/secret/entity.py +73 -0
  101. digitalhub/entities/secret/spec.py +35 -0
  102. digitalhub/entities/secret/status.py +9 -0
  103. digitalhub/entities/task/__init__.py +0 -0
  104. digitalhub/entities/task/builder.py +74 -0
  105. digitalhub/entities/task/crud.py +241 -0
  106. digitalhub/entities/task/entity.py +135 -0
  107. digitalhub/entities/task/models.py +199 -0
  108. digitalhub/entities/task/spec.py +51 -0
  109. digitalhub/entities/task/status.py +9 -0
  110. digitalhub/entities/utils.py +184 -0
  111. digitalhub/entities/workflow/__init__.py +0 -0
  112. digitalhub/entities/workflow/builder.py +91 -0
  113. digitalhub/entities/workflow/crud.py +304 -0
  114. digitalhub/entities/workflow/entity.py +77 -0
  115. digitalhub/entities/workflow/spec.py +15 -0
  116. digitalhub/entities/workflow/status.py +9 -0
  117. digitalhub/readers/__init__.py +0 -0
  118. digitalhub/readers/builder.py +54 -0
  119. digitalhub/readers/objects/__init__.py +0 -0
  120. digitalhub/readers/objects/base.py +70 -0
  121. digitalhub/readers/objects/pandas.py +207 -0
  122. digitalhub/readers/registry.py +15 -0
  123. digitalhub/registry/__init__.py +0 -0
  124. digitalhub/registry/models.py +87 -0
  125. digitalhub/registry/registry.py +74 -0
  126. digitalhub/registry/utils.py +150 -0
  127. digitalhub/runtimes/__init__.py +0 -0
  128. digitalhub/runtimes/base.py +164 -0
  129. digitalhub/runtimes/builder.py +53 -0
  130. digitalhub/runtimes/kind_registry.py +170 -0
  131. digitalhub/stores/__init__.py +0 -0
  132. digitalhub/stores/builder.py +257 -0
  133. digitalhub/stores/objects/__init__.py +0 -0
  134. digitalhub/stores/objects/base.py +189 -0
  135. digitalhub/stores/objects/local.py +230 -0
  136. digitalhub/stores/objects/remote.py +143 -0
  137. digitalhub/stores/objects/s3.py +563 -0
  138. digitalhub/stores/objects/sql.py +328 -0
  139. digitalhub/utils/__init__.py +0 -0
  140. digitalhub/utils/data_utils.py +127 -0
  141. digitalhub/utils/env_utils.py +123 -0
  142. digitalhub/utils/exceptions.py +55 -0
  143. digitalhub/utils/file_utils.py +204 -0
  144. digitalhub/utils/generic_utils.py +207 -0
  145. digitalhub/utils/git_utils.py +148 -0
  146. digitalhub/utils/io_utils.py +79 -0
  147. digitalhub/utils/logger.py +17 -0
  148. digitalhub/utils/uri_utils.py +56 -0
  149. {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/METADATA +27 -12
  150. digitalhub-0.8.0b2.dist-info/RECORD +161 -0
  151. test/test_crud_artifacts.py +1 -1
  152. test/test_crud_dataitems.py +1 -1
  153. test/test_crud_functions.py +1 -1
  154. test/test_crud_runs.py +1 -1
  155. test/test_crud_tasks.py +1 -1
  156. digitalhub-0.8.0b0.dist-info/RECORD +0 -14
  157. {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/LICENSE.txt +0 -0
  158. {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/WHEEL +0 -0
  159. {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._base.entity.material import MaterialEntity
6
+ from digitalhub.entities.entity_types import EntityTypes
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from digitalhub.entities._base.metadata import Metadata
10
+ from digitalhub.entities.model.spec import ModelSpec
11
+ from digitalhub.entities.model.status import ModelStatus
12
+
13
+
14
+ class Model(MaterialEntity):
15
+ """
16
+ A class representing a model.
17
+ """
18
+
19
+ ENTITY_TYPE = EntityTypes.MODEL.value
20
+
21
+ def __init__(
22
+ self,
23
+ project: str,
24
+ name: str,
25
+ uuid: str,
26
+ kind: str,
27
+ metadata: Metadata,
28
+ spec: ModelSpec,
29
+ status: ModelStatus,
30
+ user: str | None = None,
31
+ ) -> None:
32
+ super().__init__(project, name, uuid, kind, metadata, spec, status, user)
33
+ self.spec: ModelSpec
34
+ self.status: ModelStatus
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.model.entity._base import Model
4
+
5
+
6
+ class ModelHuggingface(Model):
7
+ """
8
+ Huggingface model.
9
+ """
@@ -0,0 +1,90 @@
1
+ from __future__ import annotations
2
+
3
+ from urllib.parse import urlparse
4
+
5
+ import mlflow
6
+
7
+ from digitalhub.entities.model.entity._base import Model
8
+ from digitalhub.entities.model.models import Dataset, Signature
9
+
10
+
11
+ class ModelMlflow(Model):
12
+ """
13
+ Mlflow model.
14
+ """
15
+
16
+
17
+ def from_mlflow_run(run_id: str) -> dict:
18
+ """
19
+ Extract from mlflow run spec for Digitalhub Model.
20
+
21
+ Parameters
22
+ ----------
23
+ run_id : str
24
+ The id of the mlflow run.
25
+
26
+ Returns
27
+ -------
28
+ dict
29
+ The extracted spec.
30
+ """
31
+
32
+ # Get MLFlow run
33
+ client = mlflow.MlflowClient()
34
+ run = client.get_run(run_id)
35
+
36
+ # Extract spec
37
+ data = run.data
38
+ parameters = data.params
39
+ metrics = data.metrics
40
+ source_path = urlparse(run.info.artifact_uri).path
41
+ model_uri = f"runs:/{run_id}/model"
42
+ model = mlflow.pyfunc.load_model(model_uri=model_uri)
43
+ model_config = model.model_config
44
+ flavor = None
45
+ for f in model.metadata.flavors:
46
+ if f != "python_function":
47
+ flavor = f
48
+ break
49
+
50
+ # Extract signature
51
+ mlflow_signature = model.metadata.signature
52
+ signature = Signature(
53
+ inputs=mlflow_signature.inputs.to_json() if mlflow_signature.inputs else None,
54
+ outputs=mlflow_signature.outputs.to_json() if mlflow_signature.outputs else None,
55
+ params=mlflow_signature.params.to_json() if mlflow_signature.params else None,
56
+ ).dict()
57
+
58
+ # Extract datasets
59
+ datasets = []
60
+ if run.inputs and run.inputs.dataset_inputs:
61
+ datasets = [
62
+ Dataset(
63
+ name=d.dataset.name,
64
+ digest=d.dataset.digest,
65
+ profile=d.dataset.profile,
66
+ schema=d.dataset.schema,
67
+ source=d.dataset.source,
68
+ source_type=d.dataset.source_type,
69
+ ).dict()
70
+ for d in run.inputs.dataset_inputs
71
+ ]
72
+
73
+ # Create model params
74
+ model_params = {}
75
+
76
+ # source path
77
+ model_params["source"] = source_path
78
+
79
+ # common properties
80
+ model_params["framework"] = flavor
81
+ model_params["parameters"] = parameters
82
+ model_params["metrics"] = metrics
83
+
84
+ # specific to MLFlow
85
+ model_params["flavor"] = flavor
86
+ model_params["model_config"] = model_config
87
+ model_params["input_datasets"] = datasets
88
+ model_params["signature"] = signature
89
+
90
+ return model_params
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.model.entity._base import Model
4
+
5
+
6
+ class ModelModel(Model):
7
+ """
8
+ Model model.
9
+ """
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities.model.entity._base import Model
4
+
5
+
6
+ class ModelSklearn(Model):
7
+ """
8
+ SKLearn model.
9
+ """
@@ -0,0 +1,26 @@
1
+ from __future__ import annotations
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+
6
+ class Signature(BaseModel):
7
+ """
8
+ MLFlow model signature.
9
+ """
10
+
11
+ inputs: str = None
12
+ outputs: str = None
13
+ params: str = None
14
+
15
+
16
+ class Dataset(BaseModel):
17
+ """
18
+ MLFlow model dataset.
19
+ """
20
+
21
+ name: str = None
22
+ digest: str = None
23
+ profile: str = None
24
+ schema_: str = Field(default=None, alias="schema")
25
+ source: str = None
26
+ source_type: str = None
@@ -0,0 +1,146 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.spec.material import MaterialParams, MaterialSpec
4
+ from digitalhub.entities.model.models import Dataset, Signature
5
+
6
+
7
+ class ModelSpec(MaterialSpec):
8
+ """
9
+ Model specifications.
10
+ """
11
+
12
+ def __init__(
13
+ self,
14
+ path: str,
15
+ framework: str | None = None,
16
+ algorithm: str | None = None,
17
+ base_model: str | None = None,
18
+ parameters: dict | None = None,
19
+ metrics: dict | None = None,
20
+ ) -> None:
21
+ self.path = path
22
+ self.framework = framework
23
+ self.algorithm = algorithm
24
+ self.base_model = base_model
25
+ self.parameters = parameters
26
+ self.metrics = metrics
27
+
28
+
29
+ class ModelParams(MaterialParams):
30
+ """
31
+ Model parameters.
32
+ """
33
+
34
+ path: str
35
+ """Path to the model."""
36
+
37
+ framework: str = None
38
+ """Model framework (e.g. 'pytorch')."""
39
+
40
+ algorithm: str = None
41
+ """Model algorithm (e.g. 'resnet')."""
42
+
43
+ base_model: str = None
44
+ """Base model."""
45
+
46
+ parameters: dict = None
47
+ """Model parameters."""
48
+
49
+ metrics: dict = None
50
+ """Model metrics."""
51
+
52
+
53
+ class ModelSpecModel(ModelSpec):
54
+ """
55
+ Model specifications.
56
+ """
57
+
58
+
59
+ class ModelParamsModel(ModelParams):
60
+ """
61
+ Model parameters.
62
+ """
63
+
64
+
65
+ class ModelSpecMlflow(ModelSpec):
66
+ """
67
+ Mlflow model specifications.
68
+ """
69
+
70
+ def __init__(
71
+ self,
72
+ path: str,
73
+ framework: str | None = None,
74
+ algorithm: str | None = None,
75
+ base_model: str | None = None,
76
+ parameters: dict | None = None,
77
+ metrics: dict | None = None,
78
+ flavor: str | None = None,
79
+ model_config: dict | None = None,
80
+ input_datasets: list[Dataset] | None = None,
81
+ signature: Signature = None,
82
+ ) -> None:
83
+ super().__init__(path, framework, algorithm, base_model, parameters, metrics)
84
+ self.flavor = flavor
85
+ self.model_config = model_config
86
+ self.input_datasets = input_datasets
87
+ self.signature = signature
88
+
89
+
90
+ class ModelParamsMlflow(ModelParams):
91
+ """
92
+ Mlflow model parameters.
93
+ """
94
+
95
+ flavor: str = None
96
+ """Mlflow model flavor."""
97
+ model_config: dict = None
98
+ """Mlflow model config."""
99
+ input_datasets: list[Dataset] = None
100
+ """Mlflow input datasets."""
101
+ signature: Signature = None
102
+ """Mlflow model signature."""
103
+
104
+
105
+ class ModelSpecSklearn(ModelSpec):
106
+ """
107
+ SKLearn model specifications.
108
+ """
109
+
110
+
111
+ class ModelParamsSklearn(ModelParams):
112
+ """
113
+ SKLearn model parameters.
114
+ """
115
+
116
+
117
+ class ModelSpecHuggingface(ModelSpec):
118
+ """
119
+ Huggingface model specifications.
120
+ """
121
+
122
+ def __init__(
123
+ self,
124
+ path: str,
125
+ framework: str | None = None,
126
+ algorithm: str | None = None,
127
+ base_model: str | None = None,
128
+ parameters: dict | None = None,
129
+ metrics: dict | None = None,
130
+ model_id: str | None = None,
131
+ model_revision: str = None,
132
+ ) -> None:
133
+ super().__init__(path, framework, algorithm, base_model, parameters, metrics)
134
+ self.model_id = model_id
135
+ self.model_revision = model_revision
136
+
137
+
138
+ class ModelParamsHuggingface(ModelParams):
139
+ """
140
+ Huggingface model parameters.
141
+ """
142
+
143
+ model_id: str = None
144
+ """Huggingface model id. Optional. If not specified, the model is loaded from the model path"""
145
+ model_revision: str = None
146
+ """Huggingface model revision. Optional."""
@@ -0,0 +1,33 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.status.material import MaterialStatus
4
+
5
+
6
+ class ModelStatus(MaterialStatus):
7
+ """
8
+ Status class for model entities.
9
+ """
10
+
11
+
12
+ class ModelStatusModel(ModelStatus):
13
+ """
14
+ Status class for model entities.
15
+ """
16
+
17
+
18
+ class ModelStatusMlflow(ModelStatus):
19
+ """
20
+ Status class for model entities.
21
+ """
22
+
23
+
24
+ class ModelStatusSklearn(ModelStatus):
25
+ """
26
+ Status class for model entities.
27
+ """
28
+
29
+
30
+ class ModelStatusHuggingface(ModelStatus):
31
+ """
32
+ Status class for model entities.
33
+ """
File without changes
@@ -0,0 +1,82 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._builders.metadata import build_metadata
4
+ from digitalhub.entities._builders.name import build_name
5
+ from digitalhub.entities._builders.spec import build_spec
6
+ from digitalhub.entities._builders.status import build_status
7
+ from digitalhub.entities.project.entity import Project
8
+
9
+
10
+ def project_from_parameters(
11
+ name: str,
12
+ kind: str,
13
+ description: str | None = None,
14
+ labels: list[str] | None = None,
15
+ local: bool = False,
16
+ context: str | None = None,
17
+ **kwargs,
18
+ ) -> Project:
19
+ """
20
+ Create a new object.
21
+
22
+ Parameters
23
+ ----------
24
+ name : str
25
+ Object name.
26
+ kind : str
27
+ Kind the object.
28
+ description : str
29
+ Description of the object (human readable).
30
+ labels : list[str]
31
+ List of labels.
32
+ local : bool
33
+ If True, use local backend, if False use DHCore backend. Default to False.
34
+ context : str
35
+ The context local folder of the project.
36
+ **kwargs : dict
37
+ Spec keyword arguments.
38
+
39
+ Returns
40
+ -------
41
+ Project
42
+ Object instance.
43
+ """
44
+ name = build_name(name)
45
+ spec = build_spec(
46
+ kind,
47
+ context=context,
48
+ **kwargs,
49
+ )
50
+ metadata = build_metadata(
51
+ kind,
52
+ project=name,
53
+ name=name,
54
+ description=description,
55
+ labels=labels,
56
+ )
57
+ status = build_status(kind)
58
+ return Project(
59
+ name=name,
60
+ kind=kind,
61
+ metadata=metadata,
62
+ spec=spec,
63
+ status=status,
64
+ local=local,
65
+ )
66
+
67
+
68
+ def project_from_dict(obj: dict) -> Project:
69
+ """
70
+ Create a new object from dictionary.
71
+
72
+ Parameters
73
+ ----------
74
+ obj : dict
75
+ Dictionary to create object from.
76
+
77
+ Returns
78
+ -------
79
+ Project
80
+ Object instance.
81
+ """
82
+ return Project.from_dict(obj)