digitalhub 0.8.0__py3-none-any.whl → 0.8.0b1__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 (248) hide show
  1. digitalhub/__init__.py +4 -5
  2. digitalhub/client/builder.py +58 -3
  3. digitalhub/client/{dhcore/client.py → objects/dhcore.py} +60 -48
  4. digitalhub/client/{local/client.py → objects/local.py} +2 -2
  5. digitalhub/context/builder.py +85 -1
  6. digitalhub/context/context.py +1 -1
  7. digitalhub/datastores/builder.py +37 -13
  8. digitalhub/datastores/{_base/datastore.py → objects/base.py} +3 -3
  9. digitalhub/datastores/{local/datastore.py → objects/local.py} +2 -10
  10. digitalhub/datastores/{remote/datastore.py → objects/remote.py} +1 -9
  11. digitalhub/datastores/{s3/datastore.py → objects/s3.py} +2 -10
  12. digitalhub/datastores/{sql/datastore.py → objects/sql.py} +2 -10
  13. digitalhub/entities/_base/{_base/entity.py → base.py} +1 -1
  14. digitalhub/entities/_base/crud.py +389 -247
  15. digitalhub/entities/_base/entity/{entity.py → base.py} +34 -8
  16. digitalhub/entities/_base/{context/entity.py → entity/context.py} +6 -6
  17. digitalhub/entities/_base/{executable/entity.py → entity/executable.py} +36 -61
  18. digitalhub/entities/_base/{material/entity.py → entity/material.py} +6 -6
  19. digitalhub/entities/_base/entity/unversioned.py +87 -0
  20. digitalhub/entities/_base/entity/versioned.py +94 -0
  21. digitalhub/entities/_base/{entity/metadata.py → metadata.py} +2 -2
  22. digitalhub/entities/_base/{entity/spec.py → spec/base.py} +11 -11
  23. digitalhub/entities/_base/{material/spec.py → spec/material.py} +3 -3
  24. digitalhub/entities/_base/{entity/status.py → status/base.py} +3 -14
  25. digitalhub/entities/_base/{material/status.py → status/material.py} +1 -1
  26. digitalhub/entities/_builders/metadata.py +60 -0
  27. digitalhub/entities/_builders/spec.py +43 -0
  28. digitalhub/entities/_builders/status.py +62 -0
  29. digitalhub/entities/{_base/entity/_constructors → _builders}/uuid.py +11 -4
  30. digitalhub/entities/artifact/builder.py +133 -0
  31. digitalhub/entities/artifact/crud.py +48 -22
  32. digitalhub/entities/artifact/{_base/entity.py → entity/_base.py} +5 -5
  33. digitalhub/entities/artifact/entity/artifact.py +9 -0
  34. digitalhub/entities/artifact/{artifact/spec.py → spec.py} +16 -4
  35. digitalhub/entities/artifact/{artifact/status.py → status.py} +1 -1
  36. digitalhub/entities/dataitem/builder.py +144 -0
  37. digitalhub/entities/dataitem/crud.py +52 -29
  38. digitalhub/entities/dataitem/{_base/entity.py → entity/_base.py} +5 -5
  39. digitalhub/entities/dataitem/entity/dataitem.py +9 -0
  40. digitalhub/entities/dataitem/entity/iceberg.py +7 -0
  41. digitalhub/entities/dataitem/{table/entity.py → entity/table.py} +4 -25
  42. digitalhub/entities/dataitem/spec.py +61 -0
  43. digitalhub/entities/dataitem/status.py +38 -0
  44. digitalhub/entities/function/builder.py +86 -0
  45. digitalhub/entities/function/crud.py +43 -17
  46. digitalhub/entities/function/{_base/entity.py → entity.py} +12 -9
  47. digitalhub/entities/function/{_base/models.py → models.py} +1 -1
  48. digitalhub/entities/function/spec.py +81 -0
  49. digitalhub/entities/function/status.py +9 -0
  50. digitalhub/entities/model/builder.py +152 -0
  51. digitalhub/entities/model/crud.py +48 -21
  52. digitalhub/entities/model/{_base/entity.py → entity/_base.py} +5 -5
  53. digitalhub/entities/model/entity/huggingface.py +9 -0
  54. digitalhub/entities/model/{mlflow/utils.py → entity/mlflow.py} +10 -1
  55. digitalhub/entities/model/entity/model.py +9 -0
  56. digitalhub/entities/model/entity/sklearn.py +9 -0
  57. digitalhub/entities/model/spec.py +146 -0
  58. digitalhub/entities/model/status.py +33 -0
  59. digitalhub/entities/project/builder.py +82 -0
  60. digitalhub/entities/project/crud.py +12 -19
  61. digitalhub/entities/project/{_base/entity.py → entity.py} +102 -120
  62. digitalhub/entities/project/{_base/spec.py → spec.py} +4 -4
  63. digitalhub/entities/project/status.py +9 -0
  64. digitalhub/entities/registries.py +48 -0
  65. digitalhub/entities/run/builder.py +77 -0
  66. digitalhub/entities/run/crud.py +33 -20
  67. digitalhub/entities/run/{_base/entity.py → entity.py} +189 -35
  68. digitalhub/entities/run/spec.py +153 -0
  69. digitalhub/entities/run/status.py +114 -0
  70. digitalhub/entities/secret/builder.py +93 -0
  71. digitalhub/entities/secret/crud.py +31 -27
  72. digitalhub/entities/secret/{_base/entity.py → entity.py} +7 -8
  73. digitalhub/entities/secret/{_base/spec.py → spec.py} +4 -4
  74. digitalhub/entities/secret/status.py +9 -0
  75. digitalhub/entities/task/builder.py +74 -0
  76. digitalhub/entities/task/crud.py +33 -20
  77. digitalhub/entities/task/{_base/entity.py → entity.py} +8 -9
  78. digitalhub/entities/task/{_base/models.py → models.py} +0 -9
  79. digitalhub/entities/task/{_base/spec.py → spec.py} +7 -9
  80. digitalhub/entities/task/status.py +9 -0
  81. digitalhub/entities/{utils/utils.py → utils.py} +2 -20
  82. digitalhub/entities/workflow/builder.py +91 -0
  83. digitalhub/entities/workflow/crud.py +43 -17
  84. digitalhub/entities/workflow/{_base/entity.py → entity.py} +12 -9
  85. digitalhub/entities/workflow/spec.py +15 -0
  86. digitalhub/entities/workflow/status.py +9 -0
  87. digitalhub/readers/builder.py +54 -0
  88. digitalhub/readers/{pandas/reader.py → objects/pandas.py} +1 -1
  89. digitalhub/readers/registry.py +15 -0
  90. digitalhub/registry/models.py +87 -0
  91. digitalhub/registry/registry.py +74 -0
  92. digitalhub/registry/utils.py +150 -0
  93. digitalhub/runtimes/{_base.py → base.py} +65 -3
  94. digitalhub/runtimes/builder.py +40 -19
  95. digitalhub/runtimes/kind_registry.py +170 -0
  96. digitalhub/stores/builder.py +52 -6
  97. digitalhub/stores/{local/store.py → objects/local.py} +1 -1
  98. digitalhub/stores/{remote/store.py → objects/remote.py} +1 -1
  99. digitalhub/stores/{s3/store.py → objects/s3.py} +1 -1
  100. digitalhub/stores/{sql/store.py → objects/sql.py} +1 -1
  101. digitalhub/{client/dhcore/utils.py → utils/env_utils.py} +14 -2
  102. digitalhub/utils/exceptions.py +0 -12
  103. digitalhub/utils/generic_utils.py +42 -18
  104. digitalhub/utils/io_utils.py +2 -39
  105. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/METADATA +2 -3
  106. digitalhub-0.8.0b1.dist-info/RECORD +161 -0
  107. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/WHEEL +1 -1
  108. test/test_crud_artifacts.py +96 -0
  109. test/test_crud_dataitems.py +96 -0
  110. test/test_crud_functions.py +1 -1
  111. test/test_crud_runs.py +1 -1
  112. test/test_crud_tasks.py +1 -1
  113. digitalhub/client/api.py +0 -63
  114. digitalhub/client/dhcore/env.py +0 -21
  115. digitalhub/client/dhcore/models.py +0 -46
  116. digitalhub/context/api.py +0 -93
  117. digitalhub/datastores/api.py +0 -37
  118. digitalhub/entities/_base/api_utils.py +0 -620
  119. digitalhub/entities/_base/entity/_constructors/metadata.py +0 -44
  120. digitalhub/entities/_base/entity/_constructors/spec.py +0 -33
  121. digitalhub/entities/_base/entity/_constructors/status.py +0 -52
  122. digitalhub/entities/_base/entity/builder.py +0 -175
  123. digitalhub/entities/_base/executable/__init__.py +0 -0
  124. digitalhub/entities/_base/material/__init__.py +0 -0
  125. digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
  126. digitalhub/entities/_base/runtime_entity/builder.py +0 -106
  127. digitalhub/entities/_base/unversioned/__init__.py +0 -0
  128. digitalhub/entities/_base/unversioned/builder.py +0 -66
  129. digitalhub/entities/_base/unversioned/entity.py +0 -49
  130. digitalhub/entities/_base/versioned/__init__.py +0 -0
  131. digitalhub/entities/_base/versioned/builder.py +0 -68
  132. digitalhub/entities/_base/versioned/entity.py +0 -53
  133. digitalhub/entities/artifact/_base/__init__.py +0 -0
  134. digitalhub/entities/artifact/_base/builder.py +0 -86
  135. digitalhub/entities/artifact/_base/spec.py +0 -15
  136. digitalhub/entities/artifact/_base/status.py +0 -9
  137. digitalhub/entities/artifact/artifact/__init__.py +0 -0
  138. digitalhub/entities/artifact/artifact/builder.py +0 -18
  139. digitalhub/entities/artifact/artifact/entity.py +0 -32
  140. digitalhub/entities/builders.py +0 -63
  141. digitalhub/entities/dataitem/_base/__init__.py +0 -0
  142. digitalhub/entities/dataitem/_base/builder.py +0 -86
  143. digitalhub/entities/dataitem/_base/spec.py +0 -15
  144. digitalhub/entities/dataitem/_base/status.py +0 -20
  145. digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
  146. digitalhub/entities/dataitem/dataitem/builder.py +0 -18
  147. digitalhub/entities/dataitem/dataitem/entity.py +0 -32
  148. digitalhub/entities/dataitem/dataitem/spec.py +0 -15
  149. digitalhub/entities/dataitem/dataitem/status.py +0 -9
  150. digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
  151. digitalhub/entities/dataitem/iceberg/builder.py +0 -18
  152. digitalhub/entities/dataitem/iceberg/entity.py +0 -32
  153. digitalhub/entities/dataitem/iceberg/spec.py +0 -15
  154. digitalhub/entities/dataitem/iceberg/status.py +0 -9
  155. digitalhub/entities/dataitem/table/__init__.py +0 -0
  156. digitalhub/entities/dataitem/table/builder.py +0 -18
  157. digitalhub/entities/dataitem/table/spec.py +0 -25
  158. digitalhub/entities/dataitem/table/status.py +0 -9
  159. digitalhub/entities/function/_base/__init__.py +0 -0
  160. digitalhub/entities/function/_base/builder.py +0 -79
  161. digitalhub/entities/function/_base/spec.py +0 -15
  162. digitalhub/entities/function/_base/status.py +0 -9
  163. digitalhub/entities/model/_base/__init__.py +0 -0
  164. digitalhub/entities/model/_base/builder.py +0 -86
  165. digitalhub/entities/model/_base/spec.py +0 -49
  166. digitalhub/entities/model/_base/status.py +0 -9
  167. digitalhub/entities/model/huggingface/__init__.py +0 -0
  168. digitalhub/entities/model/huggingface/builder.py +0 -18
  169. digitalhub/entities/model/huggingface/entity.py +0 -32
  170. digitalhub/entities/model/huggingface/spec.py +0 -36
  171. digitalhub/entities/model/huggingface/status.py +0 -9
  172. digitalhub/entities/model/mlflow/__init__.py +0 -0
  173. digitalhub/entities/model/mlflow/builder.py +0 -18
  174. digitalhub/entities/model/mlflow/entity.py +0 -32
  175. digitalhub/entities/model/mlflow/spec.py +0 -44
  176. digitalhub/entities/model/mlflow/status.py +0 -9
  177. digitalhub/entities/model/model/__init__.py +0 -0
  178. digitalhub/entities/model/model/builder.py +0 -18
  179. digitalhub/entities/model/model/entity.py +0 -32
  180. digitalhub/entities/model/model/spec.py +0 -15
  181. digitalhub/entities/model/model/status.py +0 -9
  182. digitalhub/entities/model/sklearn/__init__.py +0 -0
  183. digitalhub/entities/model/sklearn/builder.py +0 -18
  184. digitalhub/entities/model/sklearn/entity.py +0 -32
  185. digitalhub/entities/model/sklearn/spec.py +0 -15
  186. digitalhub/entities/model/sklearn/status.py +0 -9
  187. digitalhub/entities/project/_base/__init__.py +0 -0
  188. digitalhub/entities/project/_base/builder.py +0 -128
  189. digitalhub/entities/project/_base/status.py +0 -9
  190. digitalhub/entities/run/_base/__init__.py +0 -0
  191. digitalhub/entities/run/_base/builder.py +0 -94
  192. digitalhub/entities/run/_base/spec.py +0 -50
  193. digitalhub/entities/run/_base/status.py +0 -9
  194. digitalhub/entities/secret/_base/__init__.py +0 -0
  195. digitalhub/entities/secret/_base/builder.py +0 -81
  196. digitalhub/entities/secret/_base/status.py +0 -9
  197. digitalhub/entities/task/_base/__init__.py +0 -0
  198. digitalhub/entities/task/_base/builder.py +0 -91
  199. digitalhub/entities/task/_base/status.py +0 -9
  200. digitalhub/entities/utils/__init__.py +0 -0
  201. digitalhub/entities/workflow/_base/__init__.py +0 -0
  202. digitalhub/entities/workflow/_base/builder.py +0 -79
  203. digitalhub/entities/workflow/_base/spec.py +0 -15
  204. digitalhub/entities/workflow/_base/status.py +0 -9
  205. digitalhub/factory/__init__.py +0 -0
  206. digitalhub/factory/api.py +0 -277
  207. digitalhub/factory/factory.py +0 -268
  208. digitalhub/factory/utils.py +0 -90
  209. digitalhub/readers/_base/__init__.py +0 -0
  210. digitalhub/readers/_base/builder.py +0 -26
  211. digitalhub/readers/api.py +0 -80
  212. digitalhub/readers/factory.py +0 -133
  213. digitalhub/readers/pandas/__init__.py +0 -0
  214. digitalhub/readers/pandas/builder.py +0 -29
  215. digitalhub/stores/_base/__init__.py +0 -0
  216. digitalhub/stores/api.py +0 -54
  217. digitalhub/stores/local/__init__.py +0 -0
  218. digitalhub/stores/remote/__init__.py +0 -0
  219. digitalhub/stores/s3/__init__.py +0 -0
  220. digitalhub/stores/sql/__init__.py +0 -0
  221. digitalhub/utils/s3_utils.py +0 -58
  222. digitalhub-0.8.0.dist-info/RECORD +0 -231
  223. test/local/CRUD/test_artifacts.py +0 -96
  224. test/local/CRUD/test_dataitems.py +0 -96
  225. test/local/CRUD/test_models.py +0 -95
  226. /digitalhub/client/{_base → objects}/__init__.py +0 -0
  227. /digitalhub/client/{_base/client.py → objects/base.py} +0 -0
  228. /digitalhub/{client/dhcore → datastores/objects}/__init__.py +0 -0
  229. /digitalhub/entities/{utils → _base}/api.py +0 -0
  230. /digitalhub/{client/local → entities/_base/spec}/__init__.py +0 -0
  231. /digitalhub/entities/{utils → _base}/state.py +0 -0
  232. /digitalhub/{datastores/_base → entities/_base/status}/__init__.py +0 -0
  233. /digitalhub/{datastores/local → entities/_builders}/__init__.py +0 -0
  234. /digitalhub/entities/{_base/entity/_constructors → _builders}/name.py +0 -0
  235. /digitalhub/{datastores/remote → entities/artifact/entity}/__init__.py +0 -0
  236. /digitalhub/{datastores/s3 → entities/dataitem/entity}/__init__.py +0 -0
  237. /digitalhub/entities/dataitem/{table/models.py → models.py} +0 -0
  238. /digitalhub/entities/{utils/entity_types.py → entity_types.py} +0 -0
  239. /digitalhub/{datastores/sql → entities/model/entity}/__init__.py +0 -0
  240. /digitalhub/entities/model/{mlflow/models.py → models.py} +0 -0
  241. /digitalhub/{entities/_base/_base → readers/objects}/__init__.py +0 -0
  242. /digitalhub/readers/{_base/reader.py → objects/base.py} +0 -0
  243. /digitalhub/{entities/_base/context → registry}/__init__.py +0 -0
  244. /digitalhub/{entities/_base/entity/_constructors → stores/objects}/__init__.py +0 -0
  245. /digitalhub/stores/{_base/store.py → objects/base.py} +0 -0
  246. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/LICENSE.txt +0 -0
  247. {digitalhub-0.8.0.dist-info → digitalhub-0.8.0b1.dist-info}/top_level.txt +0 -0
  248. /test/{local/imports/test_imports.py → test_imports.py} +0 -0
@@ -0,0 +1,81 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.spec.base import Spec, SpecParams
4
+
5
+
6
+ class FunctionSpec(Spec):
7
+ """
8
+ Specification for a Function.
9
+ """
10
+
11
+
12
+ class FunctionParams(SpecParams):
13
+ """
14
+ Function parameters model.
15
+ """
16
+
17
+
18
+ class SourceCodeStruct:
19
+ """
20
+ Source code struct.
21
+ """
22
+
23
+ def __init__(
24
+ self,
25
+ source: str | None = None,
26
+ handler: str | None = None,
27
+ code: str | None = None,
28
+ base64: str | None = None,
29
+ init_function: str | None = None,
30
+ lang: str | None = None,
31
+ ) -> None:
32
+ """
33
+ Constructor.
34
+
35
+ Parameters
36
+ ----------
37
+ source : str
38
+ Source reference.
39
+ handler : str
40
+ Function entrypoint.
41
+ code : str
42
+ Source code (plain).
43
+ base64 : str
44
+ Source code (base64 encoded).
45
+ init_function : str
46
+ Init function for remote execution.
47
+ lang : str
48
+ Source code language (hint).
49
+ """
50
+ self.source = source
51
+ self.handler = handler
52
+ self.code = code
53
+ self.base64 = base64
54
+ self.init_function = init_function
55
+ self.lang = lang
56
+
57
+ def to_dict(self) -> dict:
58
+ """
59
+ Convert to dictionary.
60
+
61
+ Returns
62
+ -------
63
+ dict
64
+ Dictionary representation of the object.
65
+ """
66
+ dict_ = {}
67
+ if self.source is not None:
68
+ dict_["source"] = self.source
69
+ if self.handler is not None:
70
+ dict_["handler"] = self.handler
71
+ if self.base64 is not None:
72
+ dict_["base64"] = self.base64
73
+ if self.init_function is not None:
74
+ dict_["init_function"] = self.init_function
75
+ if self.lang is not None:
76
+ dict_["lang"] = self.lang
77
+
78
+ return dict_
79
+
80
+ def __repr__(self) -> str:
81
+ return str(self.to_dict())
@@ -0,0 +1,9 @@
1
+ from __future__ import annotations
2
+
3
+ from digitalhub.entities._base.status.base import Status
4
+
5
+
6
+ class FunctionStatus(Status):
7
+ """
8
+ Status class for function entities.
9
+ """
@@ -0,0 +1,152 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from digitalhub.entities._builders.metadata import build_metadata
6
+ from digitalhub.entities._builders.name import build_name
7
+ from digitalhub.entities._builders.spec import build_spec
8
+ from digitalhub.entities._builders.status import build_status
9
+ from digitalhub.entities._builders.uuid import build_uuid
10
+ from digitalhub.utils.exceptions import EntityError
11
+
12
+ if typing.TYPE_CHECKING:
13
+ from digitalhub.entities.model.entity._base import Model
14
+
15
+ # Manage class mapper
16
+ cls_mapper = {}
17
+
18
+ try:
19
+ from digitalhub.entities.model.entity.model import ModelModel
20
+
21
+ cls_mapper["model"] = ModelModel
22
+ except ImportError:
23
+ ...
24
+
25
+ try:
26
+ from digitalhub.entities.model.entity.mlflow import ModelMlflow
27
+
28
+ cls_mapper["mlflow"] = ModelMlflow
29
+ except ImportError:
30
+ ...
31
+ try:
32
+ from digitalhub.entities.model.entity.sklearn import ModelSklearn
33
+
34
+ cls_mapper["sklearn"] = ModelSklearn
35
+ except ImportError:
36
+ ...
37
+ try:
38
+ from digitalhub.entities.model.entity.huggingface import ModelHuggingface
39
+
40
+ cls_mapper["huggingface"] = ModelHuggingface
41
+ except ImportError:
42
+ pass
43
+
44
+
45
+ def _choose_model_type(kind: str) -> type[Model]:
46
+ """
47
+ Choose class based on kind.
48
+
49
+ Parameters
50
+ ----------
51
+ kind : str
52
+ Kind the object.
53
+
54
+ Returns
55
+ -------
56
+ type[Model]
57
+ Class of the model.
58
+ """
59
+ try:
60
+ return cls_mapper[kind]
61
+ except KeyError:
62
+ raise EntityError(f"Unknown model kind: {kind}")
63
+
64
+
65
+ def model_from_parameters(
66
+ project: str,
67
+ name: str,
68
+ kind: str,
69
+ uuid: str | None = None,
70
+ description: str | None = None,
71
+ labels: list[str] | None = None,
72
+ embedded: bool = True,
73
+ path: str | None = None,
74
+ **kwargs,
75
+ ) -> Model:
76
+ """
77
+ Create a new object.
78
+
79
+ Parameters
80
+ ----------
81
+ project : str
82
+ Project name.
83
+ name : str
84
+ Object name.
85
+ kind : str
86
+ Kind the object.
87
+ uuid : str
88
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
89
+ labels : list[str]
90
+ List of labels.
91
+ description : str
92
+ Description of the object (human readable).
93
+ embedded : bool
94
+ Flag to determine if object spec must be embedded in project spec.
95
+ path : str
96
+ Object path on local file system or remote storage. It is also the destination path of upload() method.
97
+ **kwargs : dict
98
+ Spec keyword arguments.
99
+
100
+ Returns
101
+ -------
102
+ Model
103
+ Object instance.
104
+ """
105
+ if path is None:
106
+ raise EntityError("Path must be provided.")
107
+ name = build_name(name)
108
+ uuid = build_uuid(uuid)
109
+ metadata = build_metadata(
110
+ kind,
111
+ project=project,
112
+ name=name,
113
+ version=uuid,
114
+ description=description,
115
+ labels=labels,
116
+ embedded=embedded,
117
+ )
118
+ spec = build_spec(
119
+ kind,
120
+ path=path,
121
+ **kwargs,
122
+ )
123
+ status = build_status(kind)
124
+ cls = _choose_model_type(kind)
125
+ return cls(
126
+ project=project,
127
+ name=name,
128
+ uuid=uuid,
129
+ kind=kind,
130
+ metadata=metadata,
131
+ spec=spec,
132
+ status=status,
133
+ )
134
+
135
+
136
+ def model_from_dict(obj: dict) -> Model:
137
+ """
138
+ Create a new object from dictionary.
139
+
140
+ Parameters
141
+ ----------
142
+ obj : dict
143
+ Dictionary to create object from.
144
+
145
+ Returns
146
+ -------
147
+ Model
148
+ Object instance.
149
+ """
150
+ kind = obj.get("kind")
151
+ cls = _choose_model_type(kind)
152
+ return cls.from_dict(obj)
@@ -2,20 +2,22 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
+ from digitalhub.context.builder import check_context
5
6
  from digitalhub.entities._base.crud import (
6
- delete_entity,
7
- get_material_entity,
8
- get_material_entity_versions,
9
- import_context_entity,
10
- list_material_entities,
11
- new_context_entity,
7
+ delete_entity_api_ctx,
8
+ list_entity_api_ctx,
9
+ read_entity_api_ctx,
10
+ read_entity_api_ctx_versions,
12
11
  )
13
- from digitalhub.entities._base.entity._constructors.uuid import build_uuid
14
- from digitalhub.entities.utils.entity_types import EntityTypes
15
- from digitalhub.entities.utils.utils import build_log_path_from_source, eval_local_source
12
+ from digitalhub.entities._builders.uuid import build_uuid
13
+ from digitalhub.entities.entity_types import EntityTypes
14
+ from digitalhub.entities.model.builder import model_from_dict, model_from_parameters
15
+ from digitalhub.entities.utils import build_log_path_from_source, eval_local_source
16
+ from digitalhub.utils.exceptions import EntityAlreadyExistsError
17
+ from digitalhub.utils.io_utils import read_yaml
16
18
 
17
19
  if typing.TYPE_CHECKING:
18
- from digitalhub.entities.model._base.entity import Model
20
+ from digitalhub.entities.model.entity._base import Model
19
21
 
20
22
 
21
23
  ENTITY_TYPE = EntityTypes.MODEL.value
@@ -28,7 +30,7 @@ def new_model(
28
30
  uuid: str | None = None,
29
31
  description: str | None = None,
30
32
  labels: list[str] | None = None,
31
- embedded: bool = False,
33
+ embedded: bool = True,
32
34
  path: str | None = None,
33
35
  **kwargs,
34
36
  ) -> Model:
@@ -44,7 +46,7 @@ def new_model(
44
46
  kind : str
45
47
  Kind the object.
46
48
  uuid : str
47
- ID of the object.
49
+ ID of the object (UUID4, e.g. 40f25c4b-d26b-4221-b048-9527aff291e2).
48
50
  description : str
49
51
  Description of the object (human readable).
50
52
  labels : list[str]
@@ -68,7 +70,8 @@ def new_model(
68
70
  >>> kind="model",
69
71
  >>> path="s3://my-bucket/my-key")
70
72
  """
71
- return new_context_entity(
73
+ check_context(project)
74
+ obj = model_from_parameters(
72
75
  project=project,
73
76
  name=name,
74
77
  kind=kind,
@@ -79,6 +82,8 @@ def new_model(
79
82
  path=path,
80
83
  **kwargs,
81
84
  )
85
+ obj.save()
86
+ return obj
82
87
 
83
88
 
84
89
  def log_model(
@@ -166,13 +171,16 @@ def get_model(
166
171
  >>> project="my-project",
167
172
  >>> entity_id="my-model-id")
168
173
  """
169
- return get_material_entity(
170
- identifier=identifier,
171
- entity_type=ENTITY_TYPE,
174
+ obj = read_entity_api_ctx(
175
+ identifier,
176
+ ENTITY_TYPE,
172
177
  project=project,
173
178
  entity_id=entity_id,
174
179
  **kwargs,
175
180
  )
181
+ entity = model_from_dict(obj)
182
+ entity._get_files_info()
183
+ return entity
176
184
 
177
185
 
178
186
  def get_model_versions(
@@ -206,12 +214,18 @@ def get_model_versions(
206
214
  >>> objs = get_model_versions("my-model-name",
207
215
  >>> project="my-project")
208
216
  """
209
- return get_material_entity_versions(
210
- identifier=identifier,
217
+ objs = read_entity_api_ctx_versions(
218
+ identifier,
211
219
  entity_type=ENTITY_TYPE,
212
220
  project=project,
213
221
  **kwargs,
214
222
  )
223
+ objects = []
224
+ for o in objs:
225
+ entity = model_from_dict(o)
226
+ entity._get_files_info()
227
+ objects.append(entity)
228
+ return objects
215
229
 
216
230
 
217
231
  def list_models(project: str, **kwargs) -> list[Model]:
@@ -234,11 +248,17 @@ def list_models(project: str, **kwargs) -> list[Model]:
234
248
  --------
235
249
  >>> objs = list_models(project="my-project")
236
250
  """
237
- return list_material_entities(
251
+ objs = list_entity_api_ctx(
238
252
  project=project,
239
253
  entity_type=ENTITY_TYPE,
240
254
  **kwargs,
241
255
  )
256
+ objects = []
257
+ for o in objs:
258
+ entity = model_from_dict(o)
259
+ entity._get_files_info()
260
+ objects.append(entity)
261
+ return objects
242
262
 
243
263
 
244
264
  def import_model(file: str) -> Model:
@@ -259,7 +279,14 @@ def import_model(file: str) -> Model:
259
279
  --------
260
280
  >>> obj = import_model("my-model.yaml")
261
281
  """
262
- return import_context_entity(file)
282
+ dict_obj: dict = read_yaml(file)
283
+ obj = model_from_dict(dict_obj)
284
+ try:
285
+ obj.save()
286
+ except EntityAlreadyExistsError:
287
+ pass
288
+ finally:
289
+ return obj
263
290
 
264
291
 
265
292
  def update_model(entity: Model) -> Model:
@@ -321,7 +348,7 @@ def delete_model(
321
348
  >>> project="my-project",
322
349
  >>> delete_all_versions=True)
323
350
  """
324
- return delete_entity(
351
+ return delete_entity_api_ctx(
325
352
  identifier=identifier,
326
353
  entity_type=ENTITY_TYPE,
327
354
  project=project,
@@ -2,13 +2,13 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.material.entity import MaterialEntity
6
- from digitalhub.entities.utils.entity_types import EntityTypes
5
+ from digitalhub.entities._base.entity.material import MaterialEntity
6
+ from digitalhub.entities.entity_types import EntityTypes
7
7
 
8
8
  if typing.TYPE_CHECKING:
9
- from digitalhub.entities._base.entity.metadata import Metadata
10
- from digitalhub.entities.model._base.spec import ModelSpec
11
- from digitalhub.entities.model._base.status import ModelStatus
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
12
 
13
13
 
14
14
  class Model(MaterialEntity):
@@ -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
+ """
@@ -1,8 +1,17 @@
1
+ from __future__ import annotations
2
+
1
3
  from urllib.parse import urlparse
2
4
 
3
5
  import mlflow
4
6
 
5
- from digitalhub.entities.model.mlflow.models import Dataset, Signature
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
+ """
6
15
 
7
16
 
8
17
  def from_mlflow_run(run_id: str) -> dict:
@@ -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,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
+ """