mlrun 1.7.1rc10__py3-none-any.whl → 1.8.0rc11__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 mlrun might be problematic. Click here for more details.

Files changed (259) hide show
  1. mlrun/__init__.py +23 -21
  2. mlrun/__main__.py +3 -3
  3. mlrun/alerts/alert.py +148 -14
  4. mlrun/artifacts/__init__.py +2 -3
  5. mlrun/artifacts/base.py +55 -12
  6. mlrun/artifacts/dataset.py +16 -16
  7. mlrun/artifacts/document.py +378 -0
  8. mlrun/artifacts/manager.py +26 -17
  9. mlrun/artifacts/model.py +66 -53
  10. mlrun/common/constants.py +8 -0
  11. mlrun/common/formatters/__init__.py +1 -0
  12. mlrun/common/formatters/feature_set.py +1 -0
  13. mlrun/common/formatters/function.py +1 -0
  14. mlrun/{model_monitoring/db/stores/base/__init__.py → common/formatters/model_endpoint.py} +16 -1
  15. mlrun/common/formatters/pipeline.py +1 -2
  16. mlrun/common/formatters/project.py +9 -0
  17. mlrun/common/model_monitoring/__init__.py +0 -5
  18. mlrun/common/model_monitoring/helpers.py +1 -29
  19. mlrun/common/runtimes/constants.py +1 -2
  20. mlrun/common/schemas/__init__.py +6 -2
  21. mlrun/common/schemas/alert.py +111 -19
  22. mlrun/common/schemas/api_gateway.py +3 -3
  23. mlrun/common/schemas/artifact.py +11 -7
  24. mlrun/common/schemas/auth.py +6 -4
  25. mlrun/common/schemas/background_task.py +7 -7
  26. mlrun/common/schemas/client_spec.py +2 -3
  27. mlrun/common/schemas/clusterization_spec.py +2 -2
  28. mlrun/common/schemas/common.py +53 -3
  29. mlrun/common/schemas/constants.py +15 -0
  30. mlrun/common/schemas/datastore_profile.py +1 -1
  31. mlrun/common/schemas/feature_store.py +9 -9
  32. mlrun/common/schemas/frontend_spec.py +4 -4
  33. mlrun/common/schemas/function.py +10 -10
  34. mlrun/common/schemas/hub.py +1 -1
  35. mlrun/common/schemas/k8s.py +3 -3
  36. mlrun/common/schemas/memory_reports.py +3 -3
  37. mlrun/common/schemas/model_monitoring/__init__.py +2 -1
  38. mlrun/common/schemas/model_monitoring/constants.py +67 -14
  39. mlrun/common/schemas/model_monitoring/grafana.py +1 -1
  40. mlrun/common/schemas/model_monitoring/model_endpoints.py +92 -147
  41. mlrun/common/schemas/notification.py +24 -3
  42. mlrun/common/schemas/object.py +1 -1
  43. mlrun/common/schemas/pagination.py +4 -4
  44. mlrun/common/schemas/partition.py +137 -0
  45. mlrun/common/schemas/pipeline.py +2 -2
  46. mlrun/common/schemas/project.py +25 -17
  47. mlrun/common/schemas/runs.py +2 -2
  48. mlrun/common/schemas/runtime_resource.py +5 -5
  49. mlrun/common/schemas/schedule.py +1 -1
  50. mlrun/common/schemas/secret.py +1 -1
  51. mlrun/common/schemas/tag.py +3 -3
  52. mlrun/common/schemas/workflow.py +5 -5
  53. mlrun/config.py +68 -10
  54. mlrun/data_types/__init__.py +0 -2
  55. mlrun/data_types/data_types.py +1 -0
  56. mlrun/data_types/infer.py +3 -1
  57. mlrun/data_types/spark.py +5 -3
  58. mlrun/data_types/to_pandas.py +11 -2
  59. mlrun/datastore/__init__.py +2 -2
  60. mlrun/datastore/alibaba_oss.py +4 -1
  61. mlrun/datastore/azure_blob.py +4 -1
  62. mlrun/datastore/base.py +12 -4
  63. mlrun/datastore/datastore.py +9 -3
  64. mlrun/datastore/datastore_profile.py +79 -20
  65. mlrun/datastore/dbfs_store.py +4 -1
  66. mlrun/datastore/filestore.py +4 -1
  67. mlrun/datastore/google_cloud_storage.py +4 -1
  68. mlrun/datastore/hdfs.py +4 -1
  69. mlrun/datastore/inmem.py +4 -1
  70. mlrun/datastore/redis.py +4 -1
  71. mlrun/datastore/s3.py +4 -1
  72. mlrun/datastore/sources.py +52 -51
  73. mlrun/datastore/store_resources.py +7 -4
  74. mlrun/datastore/targets.py +23 -22
  75. mlrun/datastore/utils.py +2 -2
  76. mlrun/datastore/v3io.py +4 -1
  77. mlrun/datastore/vectorstore.py +229 -0
  78. mlrun/datastore/wasbfs/fs.py +13 -12
  79. mlrun/db/base.py +213 -83
  80. mlrun/db/factory.py +0 -3
  81. mlrun/db/httpdb.py +1265 -387
  82. mlrun/db/nopdb.py +205 -74
  83. mlrun/errors.py +2 -2
  84. mlrun/execution.py +136 -50
  85. mlrun/feature_store/__init__.py +0 -2
  86. mlrun/feature_store/api.py +41 -40
  87. mlrun/feature_store/common.py +9 -9
  88. mlrun/feature_store/feature_set.py +20 -18
  89. mlrun/feature_store/feature_vector.py +27 -24
  90. mlrun/feature_store/retrieval/base.py +14 -9
  91. mlrun/feature_store/retrieval/job.py +2 -1
  92. mlrun/feature_store/steps.py +2 -2
  93. mlrun/features.py +30 -13
  94. mlrun/frameworks/__init__.py +1 -2
  95. mlrun/frameworks/_common/__init__.py +1 -2
  96. mlrun/frameworks/_common/artifacts_library.py +2 -2
  97. mlrun/frameworks/_common/mlrun_interface.py +10 -6
  98. mlrun/frameworks/_common/model_handler.py +29 -27
  99. mlrun/frameworks/_common/producer.py +3 -1
  100. mlrun/frameworks/_dl_common/__init__.py +1 -2
  101. mlrun/frameworks/_dl_common/loggers/__init__.py +1 -2
  102. mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +4 -4
  103. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +3 -3
  104. mlrun/frameworks/_ml_common/__init__.py +1 -2
  105. mlrun/frameworks/_ml_common/loggers/__init__.py +1 -2
  106. mlrun/frameworks/_ml_common/model_handler.py +21 -21
  107. mlrun/frameworks/_ml_common/plans/__init__.py +1 -2
  108. mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +3 -1
  109. mlrun/frameworks/_ml_common/plans/dataset_plan.py +3 -3
  110. mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +4 -4
  111. mlrun/frameworks/auto_mlrun/__init__.py +1 -2
  112. mlrun/frameworks/auto_mlrun/auto_mlrun.py +22 -15
  113. mlrun/frameworks/huggingface/__init__.py +1 -2
  114. mlrun/frameworks/huggingface/model_server.py +9 -9
  115. mlrun/frameworks/lgbm/__init__.py +47 -44
  116. mlrun/frameworks/lgbm/callbacks/__init__.py +1 -2
  117. mlrun/frameworks/lgbm/callbacks/logging_callback.py +4 -2
  118. mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +4 -2
  119. mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -2
  120. mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +5 -5
  121. mlrun/frameworks/lgbm/model_handler.py +15 -11
  122. mlrun/frameworks/lgbm/model_server.py +11 -7
  123. mlrun/frameworks/lgbm/utils.py +2 -2
  124. mlrun/frameworks/onnx/__init__.py +1 -2
  125. mlrun/frameworks/onnx/dataset.py +3 -3
  126. mlrun/frameworks/onnx/mlrun_interface.py +2 -2
  127. mlrun/frameworks/onnx/model_handler.py +7 -5
  128. mlrun/frameworks/onnx/model_server.py +8 -6
  129. mlrun/frameworks/parallel_coordinates.py +11 -11
  130. mlrun/frameworks/pytorch/__init__.py +22 -23
  131. mlrun/frameworks/pytorch/callbacks/__init__.py +1 -2
  132. mlrun/frameworks/pytorch/callbacks/callback.py +2 -1
  133. mlrun/frameworks/pytorch/callbacks/logging_callback.py +15 -8
  134. mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +19 -12
  135. mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +22 -15
  136. mlrun/frameworks/pytorch/callbacks_handler.py +36 -30
  137. mlrun/frameworks/pytorch/mlrun_interface.py +17 -17
  138. mlrun/frameworks/pytorch/model_handler.py +21 -17
  139. mlrun/frameworks/pytorch/model_server.py +13 -9
  140. mlrun/frameworks/sklearn/__init__.py +19 -18
  141. mlrun/frameworks/sklearn/estimator.py +2 -2
  142. mlrun/frameworks/sklearn/metric.py +3 -3
  143. mlrun/frameworks/sklearn/metrics_library.py +8 -6
  144. mlrun/frameworks/sklearn/mlrun_interface.py +3 -2
  145. mlrun/frameworks/sklearn/model_handler.py +4 -3
  146. mlrun/frameworks/tf_keras/__init__.py +11 -12
  147. mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -2
  148. mlrun/frameworks/tf_keras/callbacks/logging_callback.py +17 -14
  149. mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +15 -12
  150. mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +21 -18
  151. mlrun/frameworks/tf_keras/model_handler.py +17 -13
  152. mlrun/frameworks/tf_keras/model_server.py +12 -8
  153. mlrun/frameworks/xgboost/__init__.py +19 -18
  154. mlrun/frameworks/xgboost/model_handler.py +13 -9
  155. mlrun/launcher/base.py +3 -4
  156. mlrun/launcher/local.py +1 -1
  157. mlrun/launcher/remote.py +1 -1
  158. mlrun/lists.py +4 -3
  159. mlrun/model.py +117 -46
  160. mlrun/model_monitoring/__init__.py +4 -4
  161. mlrun/model_monitoring/api.py +72 -59
  162. mlrun/model_monitoring/applications/_application_steps.py +17 -17
  163. mlrun/model_monitoring/applications/base.py +165 -6
  164. mlrun/model_monitoring/applications/context.py +88 -37
  165. mlrun/model_monitoring/applications/evidently_base.py +0 -1
  166. mlrun/model_monitoring/applications/histogram_data_drift.py +43 -21
  167. mlrun/model_monitoring/applications/results.py +55 -3
  168. mlrun/model_monitoring/controller.py +207 -239
  169. mlrun/model_monitoring/db/__init__.py +0 -2
  170. mlrun/model_monitoring/db/_schedules.py +156 -0
  171. mlrun/model_monitoring/db/_stats.py +189 -0
  172. mlrun/model_monitoring/db/tsdb/base.py +78 -25
  173. mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +61 -6
  174. mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +33 -0
  175. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +255 -29
  176. mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +1 -0
  177. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +78 -17
  178. mlrun/model_monitoring/helpers.py +151 -49
  179. mlrun/model_monitoring/stream_processing.py +99 -283
  180. mlrun/model_monitoring/tracking_policy.py +10 -3
  181. mlrun/model_monitoring/writer.py +48 -36
  182. mlrun/package/__init__.py +3 -6
  183. mlrun/package/context_handler.py +1 -1
  184. mlrun/package/packager.py +12 -9
  185. mlrun/package/packagers/__init__.py +0 -2
  186. mlrun/package/packagers/default_packager.py +14 -11
  187. mlrun/package/packagers/numpy_packagers.py +16 -7
  188. mlrun/package/packagers/pandas_packagers.py +18 -18
  189. mlrun/package/packagers/python_standard_library_packagers.py +25 -11
  190. mlrun/package/packagers_manager.py +31 -14
  191. mlrun/package/utils/__init__.py +0 -3
  192. mlrun/package/utils/_pickler.py +6 -6
  193. mlrun/platforms/__init__.py +47 -16
  194. mlrun/platforms/iguazio.py +4 -1
  195. mlrun/projects/operations.py +27 -27
  196. mlrun/projects/pipelines.py +71 -36
  197. mlrun/projects/project.py +890 -220
  198. mlrun/run.py +53 -10
  199. mlrun/runtimes/__init__.py +1 -3
  200. mlrun/runtimes/base.py +15 -11
  201. mlrun/runtimes/daskjob.py +9 -9
  202. mlrun/runtimes/generators.py +2 -1
  203. mlrun/runtimes/kubejob.py +4 -5
  204. mlrun/runtimes/mounts.py +572 -0
  205. mlrun/runtimes/mpijob/__init__.py +0 -2
  206. mlrun/runtimes/mpijob/abstract.py +7 -6
  207. mlrun/runtimes/nuclio/api_gateway.py +7 -7
  208. mlrun/runtimes/nuclio/application/application.py +11 -11
  209. mlrun/runtimes/nuclio/function.py +19 -17
  210. mlrun/runtimes/nuclio/serving.py +18 -13
  211. mlrun/runtimes/pod.py +154 -45
  212. mlrun/runtimes/remotesparkjob.py +3 -2
  213. mlrun/runtimes/sparkjob/__init__.py +0 -2
  214. mlrun/runtimes/sparkjob/spark3job.py +21 -11
  215. mlrun/runtimes/utils.py +6 -5
  216. mlrun/serving/merger.py +6 -4
  217. mlrun/serving/remote.py +18 -17
  218. mlrun/serving/routers.py +185 -172
  219. mlrun/serving/server.py +7 -1
  220. mlrun/serving/states.py +97 -78
  221. mlrun/serving/utils.py +13 -2
  222. mlrun/serving/v1_serving.py +3 -2
  223. mlrun/serving/v2_serving.py +105 -72
  224. mlrun/track/__init__.py +1 -1
  225. mlrun/track/tracker.py +2 -2
  226. mlrun/track/trackers/mlflow_tracker.py +6 -5
  227. mlrun/utils/async_http.py +1 -1
  228. mlrun/utils/clones.py +1 -1
  229. mlrun/utils/helpers.py +63 -19
  230. mlrun/utils/logger.py +106 -4
  231. mlrun/utils/notifications/notification/__init__.py +22 -19
  232. mlrun/utils/notifications/notification/base.py +33 -14
  233. mlrun/utils/notifications/notification/console.py +6 -6
  234. mlrun/utils/notifications/notification/git.py +11 -11
  235. mlrun/utils/notifications/notification/ipython.py +10 -9
  236. mlrun/utils/notifications/notification/mail.py +176 -0
  237. mlrun/utils/notifications/notification/slack.py +6 -6
  238. mlrun/utils/notifications/notification/webhook.py +6 -6
  239. mlrun/utils/notifications/notification_pusher.py +86 -44
  240. mlrun/utils/regex.py +11 -2
  241. mlrun/utils/version/version.json +2 -2
  242. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc11.dist-info}/METADATA +29 -24
  243. mlrun-1.8.0rc11.dist-info/RECORD +347 -0
  244. mlrun/model_monitoring/db/stores/__init__.py +0 -136
  245. mlrun/model_monitoring/db/stores/base/store.py +0 -213
  246. mlrun/model_monitoring/db/stores/sqldb/__init__.py +0 -13
  247. mlrun/model_monitoring/db/stores/sqldb/models/__init__.py +0 -71
  248. mlrun/model_monitoring/db/stores/sqldb/models/base.py +0 -190
  249. mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +0 -103
  250. mlrun/model_monitoring/db/stores/sqldb/models/sqlite.py +0 -40
  251. mlrun/model_monitoring/db/stores/sqldb/sql_store.py +0 -659
  252. mlrun/model_monitoring/db/stores/v3io_kv/__init__.py +0 -13
  253. mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py +0 -726
  254. mlrun/model_monitoring/model_endpoint.py +0 -118
  255. mlrun-1.7.1rc10.dist-info/RECORD +0 -351
  256. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc11.dist-info}/LICENSE +0 -0
  257. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc11.dist-info}/WHEEL +0 -0
  258. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc11.dist-info}/entry_points.txt +0 -0
  259. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc11.dist-info}/top_level.txt +0 -0
@@ -14,10 +14,12 @@
14
14
 
15
15
  import typing
16
16
 
17
- import pydantic
17
+ import pydantic.v1
18
18
 
19
+ import mlrun.errors
19
20
 
20
- class ImageBuilder(pydantic.BaseModel):
21
+
22
+ class ImageBuilder(pydantic.v1.BaseModel):
21
23
  functionSourceCode: typing.Optional[str] = None # noqa: N815
22
24
  codeEntryType: typing.Optional[str] = None # noqa: N815
23
25
  codeEntryAttributes: typing.Optional[str] = None # noqa: N815
@@ -40,4 +42,52 @@ class ImageBuilder(pydantic.BaseModel):
40
42
  source_code_target_dir: typing.Optional[str] = None
41
43
 
42
44
  class Config:
43
- extra = pydantic.Extra.allow
45
+ extra = pydantic.v1.Extra.allow
46
+
47
+
48
+ class LabelsModel(pydantic.v1.BaseModel):
49
+ """
50
+ This class accepts either a dictionary, a list, or a string for filtering by labels.
51
+
52
+ :param labels:
53
+ - If a dictionary is provided, it should be in the format {'label_name': 'value'}.
54
+ The values can also be `None`, which will result in the format 'label_name' (without a value).
55
+ This will be converted to a list of strings in the format 'label_name=value'.
56
+ - If a list is provided, all items must be strings. Each string can either
57
+ be a simple label name (e.g., 'label1') or a key-value pair in the format
58
+ 'label=value'.
59
+ - If a string is provided, it should be a comma-separated list of labels
60
+ (e.g., 'label1,label2').
61
+ - If no labels are specified, the default is an empty list.
62
+ """
63
+
64
+ labels: typing.Optional[
65
+ typing.Union[str, dict[str, typing.Optional[str]], list[str]]
66
+ ]
67
+
68
+ @pydantic.v1.validator("labels")
69
+ @classmethod
70
+ def validate(cls, labels) -> list[str]:
71
+ if labels is None:
72
+ return []
73
+
74
+ # If labels is a string, split it by commas
75
+ if isinstance(labels, str):
76
+ return [label.strip() for label in labels.split(",") if label.strip()]
77
+
78
+ if isinstance(labels, list):
79
+ if not all(isinstance(item, str) for item in labels):
80
+ raise mlrun.errors.MLRunValueError(
81
+ "All items in the list must be strings."
82
+ )
83
+ return labels
84
+
85
+ if isinstance(labels, dict):
86
+ return [
87
+ f"{key}={value}" if value is not None else key
88
+ for key, value in labels.items()
89
+ ]
90
+
91
+ raise mlrun.errors.MLRunValueError(
92
+ "Invalid labels format. Must be a string, dictionary of strings, or a list of strings."
93
+ )
@@ -133,6 +133,21 @@ class RunPartitionByField(mlrun.common.types.StrEnum):
133
133
  )
134
134
 
135
135
 
136
+ class ArtifactPartitionByField(mlrun.common.types.StrEnum):
137
+ name = "name" # Supported for artifacts objects
138
+ project_and_name = "project_and_name" # Supported for artifacts objects
139
+
140
+ def to_partition_by_db_field(self, db_cls):
141
+ if self.value == ArtifactPartitionByField.name:
142
+ return db_cls.key
143
+ elif self.value == ArtifactPartitionByField.project_and_name:
144
+ return db_cls.project, db_cls.key
145
+ else:
146
+ raise mlrun.errors.MLRunInvalidArgumentError(
147
+ f"Unknown group by field: {self.value}"
148
+ )
149
+
150
+
136
151
  class SortField(mlrun.common.types.StrEnum):
137
152
  created = "created"
138
153
  updated = "updated"
@@ -15,7 +15,7 @@
15
15
 
16
16
  import typing
17
17
 
18
- from pydantic import BaseModel
18
+ from pydantic.v1 import BaseModel
19
19
 
20
20
 
21
21
  class DatastoreProfile(BaseModel):
@@ -14,7 +14,7 @@
14
14
  #
15
15
  from typing import Optional
16
16
 
17
- import pydantic
17
+ import pydantic.v1
18
18
 
19
19
  from .auth import AuthorizationResourceTypes, Credentials
20
20
  from .object import (
@@ -27,7 +27,7 @@ from .object import (
27
27
  )
28
28
 
29
29
 
30
- class FeatureStoreBaseModel(pydantic.BaseModel):
30
+ class FeatureStoreBaseModel(pydantic.v1.BaseModel):
31
31
  """
32
32
  Intermediate base class, in order to override pydantic's configuration, as per
33
33
  https://docs.pydantic.dev/1.10/usage/model_config/#change-behaviour-globally
@@ -43,7 +43,7 @@ class Feature(FeatureStoreBaseModel):
43
43
  labels: Optional[dict] = {}
44
44
 
45
45
  class Config:
46
- extra = pydantic.Extra.allow
46
+ extra = pydantic.v1.Extra.allow
47
47
 
48
48
 
49
49
  class Entity(FeatureStoreBaseModel):
@@ -52,17 +52,17 @@ class Entity(FeatureStoreBaseModel):
52
52
  labels: Optional[dict] = {}
53
53
 
54
54
  class Config:
55
- extra = pydantic.Extra.allow
55
+ extra = pydantic.v1.Extra.allow
56
56
 
57
57
 
58
58
  class FeatureSetSpec(ObjectSpec):
59
59
  entities: list[Entity] = []
60
60
  features: list[Feature] = []
61
- engine: Optional[str] = pydantic.Field(default="storey")
61
+ engine: Optional[str] = pydantic.v1.Field(default="storey")
62
62
 
63
63
 
64
64
  class FeatureSet(FeatureStoreBaseModel):
65
- kind: ObjectKind = pydantic.Field(ObjectKind.feature_set, const=True)
65
+ kind: ObjectKind = pydantic.v1.Field(ObjectKind.feature_set, const=True)
66
66
  metadata: ObjectMetadata
67
67
  spec: FeatureSetSpec
68
68
  status: ObjectStatus
@@ -155,7 +155,7 @@ class EntitiesOutput(FeatureStoreBaseModel):
155
155
 
156
156
 
157
157
  class FeatureVector(FeatureStoreBaseModel):
158
- kind: ObjectKind = pydantic.Field(ObjectKind.feature_vector, const=True)
158
+ kind: ObjectKind = pydantic.v1.Field(ObjectKind.feature_vector, const=True)
159
159
  metadata: ObjectMetadata
160
160
  spec: ObjectSpec
161
161
  status: ObjectStatus
@@ -183,7 +183,7 @@ class DataSource(FeatureStoreBaseModel):
183
183
  path: str
184
184
 
185
185
  class Config:
186
- extra = pydantic.Extra.allow
186
+ extra = pydantic.v1.Extra.allow
187
187
 
188
188
 
189
189
  class DataTarget(FeatureStoreBaseModel):
@@ -192,7 +192,7 @@ class DataTarget(FeatureStoreBaseModel):
192
192
  path: Optional[str]
193
193
 
194
194
  class Config:
195
- extra = pydantic.Extra.allow
195
+ extra = pydantic.v1.Extra.allow
196
196
 
197
197
 
198
198
  class FeatureSetIngestInput(FeatureStoreBaseModel):
@@ -14,7 +14,7 @@
14
14
  #
15
15
  import typing
16
16
 
17
- import pydantic
17
+ import pydantic.v1
18
18
 
19
19
  import mlrun.common.types
20
20
 
@@ -43,20 +43,20 @@ class NuclioStreamsFeatureFlag(mlrun.common.types.StrEnum):
43
43
  disabled = "disabled"
44
44
 
45
45
 
46
- class FeatureFlags(pydantic.BaseModel):
46
+ class FeatureFlags(pydantic.v1.BaseModel):
47
47
  project_membership: ProjectMembershipFeatureFlag
48
48
  authentication: AuthenticationFeatureFlag
49
49
  nuclio_streams: NuclioStreamsFeatureFlag
50
50
  preemption_nodes: PreemptionNodesFeatureFlag
51
51
 
52
52
 
53
- class ArtifactLimits(pydantic.BaseModel):
53
+ class ArtifactLimits(pydantic.v1.BaseModel):
54
54
  max_chunk_size: int
55
55
  max_preview_size: int
56
56
  max_download_size: int
57
57
 
58
58
 
59
- class FrontendSpec(pydantic.BaseModel):
59
+ class FrontendSpec(pydantic.v1.BaseModel):
60
60
  jobs_dashboard_url: typing.Optional[str]
61
61
  model_monitoring_dashboard_url: typing.Optional[str]
62
62
  abortable_function_kinds: list[str] = []
@@ -14,7 +14,7 @@
14
14
  #
15
15
  import typing
16
16
 
17
- import pydantic
17
+ import pydantic.v1
18
18
 
19
19
  import mlrun.common.types
20
20
 
@@ -90,42 +90,42 @@ class SecurityContextEnrichmentModes(mlrun.common.types.StrEnum):
90
90
  disabled = "disabled"
91
91
 
92
92
 
93
- class ImagePullSecret(pydantic.BaseModel):
93
+ class ImagePullSecret(pydantic.v1.BaseModel):
94
94
  default: typing.Optional[str]
95
95
 
96
96
 
97
- class Pipelines(pydantic.BaseModel):
97
+ class Pipelines(pydantic.v1.BaseModel):
98
98
  kfp_pod_user_unix_id: typing.Optional[int]
99
99
 
100
100
 
101
- class SecurityContext(pydantic.BaseModel):
101
+ class SecurityContext(pydantic.v1.BaseModel):
102
102
  default: typing.Optional[str]
103
103
  enrichment_mode: typing.Optional[SecurityContextEnrichmentModes]
104
104
  enrichment_group_id: typing.Optional[int]
105
105
  pipelines: typing.Optional[Pipelines]
106
106
 
107
107
 
108
- class ServiceAccount(pydantic.BaseModel):
108
+ class ServiceAccount(pydantic.v1.BaseModel):
109
109
  default: typing.Optional[str]
110
110
 
111
111
 
112
- class StateThresholds(pydantic.BaseModel):
112
+ class StateThresholds(pydantic.v1.BaseModel):
113
113
  default: typing.Optional[dict[str, str]]
114
114
 
115
115
 
116
- class FunctionSpec(pydantic.BaseModel):
116
+ class FunctionSpec(pydantic.v1.BaseModel):
117
117
  image_pull_secret: typing.Optional[ImagePullSecret]
118
118
  security_context: typing.Optional[SecurityContext]
119
119
  service_account: typing.Optional[ServiceAccount]
120
120
  state_thresholds: typing.Optional[StateThresholds]
121
121
 
122
122
  class Config:
123
- extra = pydantic.Extra.allow
123
+ extra = pydantic.v1.Extra.allow
124
124
 
125
125
 
126
- class Function(pydantic.BaseModel):
126
+ class Function(pydantic.v1.BaseModel):
127
127
  spec: typing.Optional[FunctionSpec]
128
128
  application: typing.Optional[dict[str, typing.Any]]
129
129
 
130
130
  class Config:
131
- extra = pydantic.Extra.allow
131
+ extra = pydantic.v1.Extra.allow
@@ -15,7 +15,7 @@
15
15
  from datetime import datetime, timezone
16
16
  from typing import Optional
17
17
 
18
- from pydantic import BaseModel, Extra, Field
18
+ from pydantic.v1 import BaseModel, Extra, Field
19
19
 
20
20
  import mlrun.common.types
21
21
  import mlrun.config
@@ -14,18 +14,18 @@
14
14
  #
15
15
  import typing
16
16
 
17
- import pydantic
17
+ import pydantic.v1
18
18
 
19
19
  import mlrun.common.types
20
20
 
21
21
 
22
- class ResourceSpec(pydantic.BaseModel):
22
+ class ResourceSpec(pydantic.v1.BaseModel):
23
23
  cpu: typing.Optional[str]
24
24
  memory: typing.Optional[str]
25
25
  gpu: typing.Optional[str]
26
26
 
27
27
 
28
- class Resources(pydantic.BaseModel):
28
+ class Resources(pydantic.v1.BaseModel):
29
29
  requests: ResourceSpec = ResourceSpec()
30
30
  limits: ResourceSpec = ResourceSpec()
31
31
 
@@ -15,14 +15,14 @@
15
15
 
16
16
  import typing
17
17
 
18
- import pydantic
18
+ import pydantic.v1
19
19
 
20
20
 
21
- class MostCommonObjectTypesReport(pydantic.BaseModel):
21
+ class MostCommonObjectTypesReport(pydantic.v1.BaseModel):
22
22
  object_types: list[tuple[str, int]]
23
23
 
24
24
 
25
- class ObjectTypeReport(pydantic.BaseModel):
25
+ class ObjectTypeReport(pydantic.v1.BaseModel):
26
26
  object_type: str
27
27
  sample_size: int
28
28
  start_index: typing.Optional[int]
@@ -14,6 +14,7 @@
14
14
 
15
15
  from .constants import (
16
16
  V3IO_MODEL_MONITORING_DB,
17
+ ApplicationEvent,
17
18
  ControllerPolicy,
18
19
  DriftStatus,
19
20
  EndpointType,
@@ -26,6 +27,7 @@ from .constants import (
26
27
  FunctionURI,
27
28
  MetricData,
28
29
  ModelEndpointMonitoringMetricType,
30
+ ModelEndpointSchema,
29
31
  ModelEndpointTarget,
30
32
  ModelEndpointTargetSchemas,
31
33
  ModelMonitoringMode,
@@ -36,7 +38,6 @@ from .constants import (
36
38
  ResultData,
37
39
  ResultKindApp,
38
40
  ResultStatusApp,
39
- SchedulingKeys,
40
41
  SpecialApps,
41
42
  TDEngineSuperTables,
42
43
  TSDBTarget,
@@ -29,6 +29,48 @@ class MonitoringStrEnum(StrEnum):
29
29
  return list(map(lambda c: c.value, cls))
30
30
 
31
31
 
32
+ class ModelEndpointSchema(MonitoringStrEnum):
33
+ # metadata
34
+ UID = "uid"
35
+ PROJECT = "project"
36
+ ENDPOINT_TYPE = "endpoint_type"
37
+ NAME = "name"
38
+ CREATED = "created"
39
+ UPDATED = "updated"
40
+ LABELS = "labels"
41
+
42
+ # spec
43
+ FUNCTION_NAME = "function_name"
44
+ FUNCTION_TAG = "function_tag"
45
+ FUNCTION_UID = "function_uid"
46
+ MODEL_NAME = "model_name"
47
+ MODEL_DB_KEY = "model_db_key"
48
+ MODEL_TAG = "model_tag"
49
+ MODEL_CLASS = "model_class"
50
+ MODEL_UID = "model_uid"
51
+ FEATURE_NAMES = "feature_names"
52
+ LABEL_NAMES = "label_names"
53
+ FEATURE_STATS = "feature_stats"
54
+ MONITORING_FEATURE_SET_URI = "monitoring_feature_set_uri"
55
+ CHILDREN = "children"
56
+ CHILDREN_UIDS = "children_uids"
57
+ FUNCTION_URI = "function_uri"
58
+ MODEL_URI = "model_uri"
59
+
60
+ # status
61
+ STATE = "state"
62
+ MONITORING_MODE = "monitoring_mode"
63
+ FIRST_REQUEST = "first_request"
64
+
65
+ # status - operative
66
+ LAST_REQUEST = "last_request"
67
+ RESULT_STATUS = "result_status"
68
+ AVG_LATENCY = "avg_latency"
69
+ ERROR_COUNT = "error_count"
70
+ CURRENT_STATS = "current_stats"
71
+ DRIFT_MEASURES = "drift_measures"
72
+
73
+
32
74
  class EventFieldType:
33
75
  FUNCTION_URI = "function_uri"
34
76
  FUNCTION = "function"
@@ -40,6 +82,7 @@ class EventFieldType:
40
82
  TIMESTAMP = "timestamp"
41
83
  # `endpoint_id` is deprecated as a field in the model endpoint schema since 1.3.1, replaced by `uid`.
42
84
  ENDPOINT_ID = "endpoint_id"
85
+ ENDPOINT_NAME = "endpoint_name"
43
86
  UID = "uid"
44
87
  ENDPOINT_TYPE = "endpoint_type"
45
88
  REQUEST_ID = "request_id"
@@ -55,6 +98,8 @@ class EventFieldType:
55
98
  NAMED_PREDICTIONS = "named_predictions"
56
99
  ERROR_COUNT = "error_count"
57
100
  MODEL_ERROR = "model_error"
101
+ ERROR_TYPE = "error_type"
102
+ INFER_ERROR = "infer_error"
58
103
  ENTITIES = "entities"
59
104
  FIRST_REQUEST = "first_request"
60
105
  LAST_REQUEST = "last_request"
@@ -106,21 +151,24 @@ class ApplicationEvent:
106
151
  START_INFER_TIME = "start_infer_time"
107
152
  END_INFER_TIME = "end_infer_time"
108
153
  ENDPOINT_ID = "endpoint_id"
154
+ ENDPOINT_NAME = "endpoint_name"
109
155
  OUTPUT_STREAM_URI = "output_stream_uri"
110
156
 
111
157
 
112
158
  class WriterEvent(MonitoringStrEnum):
159
+ ENDPOINT_NAME = "endpoint_name"
113
160
  APPLICATION_NAME = "application_name"
114
161
  ENDPOINT_ID = "endpoint_id"
115
162
  START_INFER_TIME = "start_infer_time"
116
163
  END_INFER_TIME = "end_infer_time"
117
- EVENT_KIND = "event_kind" # metric or result
164
+ EVENT_KIND = "event_kind" # metric or result or stats
118
165
  DATA = "data"
119
166
 
120
167
 
121
168
  class WriterEventKind(MonitoringStrEnum):
122
169
  METRIC = "metric"
123
170
  RESULT = "result"
171
+ STATS = "stats"
124
172
 
125
173
 
126
174
  class MetricData(MonitoringStrEnum):
@@ -134,7 +182,17 @@ class ResultData(MonitoringStrEnum):
134
182
  RESULT_KIND = "result_kind"
135
183
  RESULT_STATUS = "result_status"
136
184
  RESULT_EXTRA_DATA = "result_extra_data"
185
+
186
+
187
+ class StatsData(MonitoringStrEnum):
188
+ STATS_NAME = "stats_name"
189
+ STATS = "stats"
190
+ TIMESTAMP = "timestamp"
191
+
192
+
193
+ class StatsKind(MonitoringStrEnum):
137
194
  CURRENT_STATS = "current_stats"
195
+ DRIFT_MEASURES = "drift_measures"
138
196
 
139
197
 
140
198
  class EventLiveStats:
@@ -169,7 +227,6 @@ class TSDBTarget(MonitoringStrEnum):
169
227
 
170
228
 
171
229
  class ProjectSecretKeys:
172
- ENDPOINT_STORE_CONNECTION = "MODEL_MONITORING_ENDPOINT_STORE_CONNECTION"
173
230
  ACCESS_KEY = "MODEL_MONITORING_ACCESS_KEY"
174
231
  STREAM_PATH = "STREAM_PATH"
175
232
  TSDB_CONNECTION = "TSDB_CONNECTION"
@@ -177,7 +234,6 @@ class ProjectSecretKeys:
177
234
  @classmethod
178
235
  def mandatory_secrets(cls):
179
236
  return [
180
- cls.ENDPOINT_STORE_CONNECTION,
181
237
  cls.STREAM_PATH,
182
238
  cls.TSDB_CONNECTION,
183
239
  ]
@@ -194,13 +250,6 @@ class ModelMonitoringStoreKinds:
194
250
  EVENTS = "events"
195
251
 
196
252
 
197
- class SchedulingKeys:
198
- LAST_ANALYZED = "last_analyzed"
199
- ENDPOINT_ID = "endpoint_id"
200
- APPLICATION_NAME = "application_name"
201
- UID = "uid"
202
-
203
-
204
253
  class FileTargetKind:
205
254
  ENDPOINTS = "endpoints"
206
255
  EVENTS = "events"
@@ -209,14 +258,13 @@ class FileTargetKind:
209
258
  PARQUET = "parquet"
210
259
  APPS_PARQUET = "apps_parquet"
211
260
  LOG_STREAM = "log_stream"
212
- APP_RESULTS = "app_results"
213
- APP_METRICS = "app_metrics"
214
261
  MONITORING_SCHEDULES = "monitoring_schedules"
215
262
  MONITORING_APPLICATION = "monitoring_application"
216
263
  ERRORS = "errors"
264
+ STATS = "stats"
217
265
 
218
266
 
219
- class ModelMonitoringMode(str, Enum):
267
+ class ModelMonitoringMode(StrEnum):
220
268
  enabled = "enabled"
221
269
  disabled = "disabled"
222
270
 
@@ -225,6 +273,11 @@ class EndpointType(IntEnum):
225
273
  NODE_EP = 1 # end point that is not a child of a router
226
274
  ROUTER = 2 # endpoint that is router
227
275
  LEAF_EP = 3 # end point that is a child of a router
276
+ BATCH_EP = 4 # endpoint that is representing an offline batch endpoint
277
+
278
+ @classmethod
279
+ def top_level_list(cls):
280
+ return [cls.NODE_EP, cls.ROUTER, cls.BATCH_EP]
228
281
 
229
282
 
230
283
  class MonitoringFunctionNames(MonitoringStrEnum):
@@ -244,6 +297,7 @@ class TDEngineSuperTables(MonitoringStrEnum):
244
297
  APP_RESULTS = "app_results"
245
298
  METRICS = "metrics"
246
299
  PREDICTIONS = "predictions"
300
+ ERRORS = "errors"
247
301
 
248
302
 
249
303
  @dataclass
@@ -364,7 +418,6 @@ class SpecialApps:
364
418
 
365
419
  _RESERVED_FUNCTION_NAMES = MonitoringFunctionNames.list() + [SpecialApps.MLRUN_INFRA]
366
420
 
367
-
368
421
  V3IO_MODEL_MONITORING_DB = "v3io"
369
422
 
370
423
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  from typing import Optional, Union
16
16
 
17
- from pydantic import BaseModel
17
+ from pydantic.v1 import BaseModel
18
18
 
19
19
  import mlrun.common.types
20
20