mlrun 1.7.1rc10__py3-none-any.whl → 1.8.0rc8__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 (257) 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 +1 -2
  5. mlrun/artifacts/base.py +46 -12
  6. mlrun/artifacts/dataset.py +16 -16
  7. mlrun/artifacts/document.py +334 -0
  8. mlrun/artifacts/manager.py +15 -13
  9. mlrun/artifacts/model.py +66 -53
  10. mlrun/common/constants.py +7 -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 +66 -14
  39. mlrun/common/schemas/model_monitoring/grafana.py +1 -1
  40. mlrun/common/schemas/model_monitoring/model_endpoints.py +91 -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 +67 -10
  54. mlrun/data_types/__init__.py +0 -2
  55. mlrun/data_types/infer.py +3 -1
  56. mlrun/data_types/spark.py +2 -1
  57. mlrun/datastore/__init__.py +0 -2
  58. mlrun/datastore/alibaba_oss.py +4 -1
  59. mlrun/datastore/azure_blob.py +4 -1
  60. mlrun/datastore/base.py +12 -4
  61. mlrun/datastore/datastore.py +9 -3
  62. mlrun/datastore/datastore_profile.py +79 -20
  63. mlrun/datastore/dbfs_store.py +4 -1
  64. mlrun/datastore/filestore.py +4 -1
  65. mlrun/datastore/google_cloud_storage.py +4 -1
  66. mlrun/datastore/hdfs.py +4 -1
  67. mlrun/datastore/inmem.py +4 -1
  68. mlrun/datastore/redis.py +4 -1
  69. mlrun/datastore/s3.py +4 -1
  70. mlrun/datastore/sources.py +52 -51
  71. mlrun/datastore/store_resources.py +0 -2
  72. mlrun/datastore/targets.py +21 -21
  73. mlrun/datastore/utils.py +2 -2
  74. mlrun/datastore/v3io.py +4 -1
  75. mlrun/datastore/vectorstore.py +194 -0
  76. mlrun/datastore/wasbfs/fs.py +13 -12
  77. mlrun/db/base.py +208 -82
  78. mlrun/db/factory.py +0 -3
  79. mlrun/db/httpdb.py +1237 -386
  80. mlrun/db/nopdb.py +201 -74
  81. mlrun/errors.py +2 -2
  82. mlrun/execution.py +136 -50
  83. mlrun/feature_store/__init__.py +0 -2
  84. mlrun/feature_store/api.py +41 -40
  85. mlrun/feature_store/common.py +9 -9
  86. mlrun/feature_store/feature_set.py +20 -18
  87. mlrun/feature_store/feature_vector.py +27 -24
  88. mlrun/feature_store/retrieval/base.py +14 -9
  89. mlrun/feature_store/retrieval/job.py +2 -1
  90. mlrun/feature_store/steps.py +2 -2
  91. mlrun/features.py +30 -13
  92. mlrun/frameworks/__init__.py +1 -2
  93. mlrun/frameworks/_common/__init__.py +1 -2
  94. mlrun/frameworks/_common/artifacts_library.py +2 -2
  95. mlrun/frameworks/_common/mlrun_interface.py +10 -6
  96. mlrun/frameworks/_common/model_handler.py +29 -27
  97. mlrun/frameworks/_common/producer.py +3 -1
  98. mlrun/frameworks/_dl_common/__init__.py +1 -2
  99. mlrun/frameworks/_dl_common/loggers/__init__.py +1 -2
  100. mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +4 -4
  101. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +3 -3
  102. mlrun/frameworks/_ml_common/__init__.py +1 -2
  103. mlrun/frameworks/_ml_common/loggers/__init__.py +1 -2
  104. mlrun/frameworks/_ml_common/model_handler.py +21 -21
  105. mlrun/frameworks/_ml_common/plans/__init__.py +1 -2
  106. mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +3 -1
  107. mlrun/frameworks/_ml_common/plans/dataset_plan.py +3 -3
  108. mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +4 -4
  109. mlrun/frameworks/auto_mlrun/__init__.py +1 -2
  110. mlrun/frameworks/auto_mlrun/auto_mlrun.py +22 -15
  111. mlrun/frameworks/huggingface/__init__.py +1 -2
  112. mlrun/frameworks/huggingface/model_server.py +9 -9
  113. mlrun/frameworks/lgbm/__init__.py +47 -44
  114. mlrun/frameworks/lgbm/callbacks/__init__.py +1 -2
  115. mlrun/frameworks/lgbm/callbacks/logging_callback.py +4 -2
  116. mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +4 -2
  117. mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -2
  118. mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +5 -5
  119. mlrun/frameworks/lgbm/model_handler.py +15 -11
  120. mlrun/frameworks/lgbm/model_server.py +11 -7
  121. mlrun/frameworks/lgbm/utils.py +2 -2
  122. mlrun/frameworks/onnx/__init__.py +1 -2
  123. mlrun/frameworks/onnx/dataset.py +3 -3
  124. mlrun/frameworks/onnx/mlrun_interface.py +2 -2
  125. mlrun/frameworks/onnx/model_handler.py +7 -5
  126. mlrun/frameworks/onnx/model_server.py +8 -6
  127. mlrun/frameworks/parallel_coordinates.py +11 -11
  128. mlrun/frameworks/pytorch/__init__.py +22 -23
  129. mlrun/frameworks/pytorch/callbacks/__init__.py +1 -2
  130. mlrun/frameworks/pytorch/callbacks/callback.py +2 -1
  131. mlrun/frameworks/pytorch/callbacks/logging_callback.py +15 -8
  132. mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +19 -12
  133. mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +22 -15
  134. mlrun/frameworks/pytorch/callbacks_handler.py +36 -30
  135. mlrun/frameworks/pytorch/mlrun_interface.py +17 -17
  136. mlrun/frameworks/pytorch/model_handler.py +21 -17
  137. mlrun/frameworks/pytorch/model_server.py +13 -9
  138. mlrun/frameworks/sklearn/__init__.py +19 -18
  139. mlrun/frameworks/sklearn/estimator.py +2 -2
  140. mlrun/frameworks/sklearn/metric.py +3 -3
  141. mlrun/frameworks/sklearn/metrics_library.py +8 -6
  142. mlrun/frameworks/sklearn/mlrun_interface.py +3 -2
  143. mlrun/frameworks/sklearn/model_handler.py +4 -3
  144. mlrun/frameworks/tf_keras/__init__.py +11 -12
  145. mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -2
  146. mlrun/frameworks/tf_keras/callbacks/logging_callback.py +17 -14
  147. mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +15 -12
  148. mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +21 -18
  149. mlrun/frameworks/tf_keras/model_handler.py +17 -13
  150. mlrun/frameworks/tf_keras/model_server.py +12 -8
  151. mlrun/frameworks/xgboost/__init__.py +19 -18
  152. mlrun/frameworks/xgboost/model_handler.py +13 -9
  153. mlrun/launcher/base.py +3 -4
  154. mlrun/launcher/local.py +1 -1
  155. mlrun/launcher/remote.py +1 -1
  156. mlrun/lists.py +4 -3
  157. mlrun/model.py +117 -46
  158. mlrun/model_monitoring/__init__.py +4 -4
  159. mlrun/model_monitoring/api.py +61 -59
  160. mlrun/model_monitoring/applications/_application_steps.py +17 -17
  161. mlrun/model_monitoring/applications/base.py +165 -6
  162. mlrun/model_monitoring/applications/context.py +88 -37
  163. mlrun/model_monitoring/applications/evidently_base.py +0 -1
  164. mlrun/model_monitoring/applications/histogram_data_drift.py +43 -21
  165. mlrun/model_monitoring/applications/results.py +55 -3
  166. mlrun/model_monitoring/controller.py +207 -239
  167. mlrun/model_monitoring/db/__init__.py +0 -2
  168. mlrun/model_monitoring/db/_schedules.py +156 -0
  169. mlrun/model_monitoring/db/_stats.py +189 -0
  170. mlrun/model_monitoring/db/tsdb/base.py +78 -25
  171. mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +61 -6
  172. mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +33 -0
  173. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +255 -29
  174. mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +1 -0
  175. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +78 -17
  176. mlrun/model_monitoring/helpers.py +152 -49
  177. mlrun/model_monitoring/stream_processing.py +99 -283
  178. mlrun/model_monitoring/tracking_policy.py +10 -3
  179. mlrun/model_monitoring/writer.py +48 -36
  180. mlrun/package/__init__.py +3 -6
  181. mlrun/package/context_handler.py +1 -1
  182. mlrun/package/packager.py +12 -9
  183. mlrun/package/packagers/__init__.py +0 -2
  184. mlrun/package/packagers/default_packager.py +14 -11
  185. mlrun/package/packagers/numpy_packagers.py +16 -7
  186. mlrun/package/packagers/pandas_packagers.py +18 -18
  187. mlrun/package/packagers/python_standard_library_packagers.py +25 -11
  188. mlrun/package/packagers_manager.py +31 -14
  189. mlrun/package/utils/__init__.py +0 -3
  190. mlrun/package/utils/_pickler.py +6 -6
  191. mlrun/platforms/__init__.py +47 -16
  192. mlrun/platforms/iguazio.py +4 -1
  193. mlrun/projects/operations.py +27 -27
  194. mlrun/projects/pipelines.py +71 -36
  195. mlrun/projects/project.py +865 -206
  196. mlrun/run.py +53 -10
  197. mlrun/runtimes/__init__.py +1 -3
  198. mlrun/runtimes/base.py +15 -11
  199. mlrun/runtimes/daskjob.py +9 -9
  200. mlrun/runtimes/generators.py +2 -1
  201. mlrun/runtimes/kubejob.py +4 -5
  202. mlrun/runtimes/mounts.py +572 -0
  203. mlrun/runtimes/mpijob/__init__.py +0 -2
  204. mlrun/runtimes/mpijob/abstract.py +7 -6
  205. mlrun/runtimes/nuclio/api_gateway.py +7 -7
  206. mlrun/runtimes/nuclio/application/application.py +11 -11
  207. mlrun/runtimes/nuclio/function.py +19 -17
  208. mlrun/runtimes/nuclio/serving.py +18 -11
  209. mlrun/runtimes/pod.py +154 -45
  210. mlrun/runtimes/remotesparkjob.py +3 -2
  211. mlrun/runtimes/sparkjob/__init__.py +0 -2
  212. mlrun/runtimes/sparkjob/spark3job.py +21 -11
  213. mlrun/runtimes/utils.py +6 -5
  214. mlrun/serving/merger.py +6 -4
  215. mlrun/serving/remote.py +18 -17
  216. mlrun/serving/routers.py +185 -172
  217. mlrun/serving/server.py +7 -1
  218. mlrun/serving/states.py +97 -78
  219. mlrun/serving/utils.py +13 -2
  220. mlrun/serving/v1_serving.py +3 -2
  221. mlrun/serving/v2_serving.py +74 -65
  222. mlrun/track/__init__.py +1 -1
  223. mlrun/track/tracker.py +2 -2
  224. mlrun/track/trackers/mlflow_tracker.py +6 -5
  225. mlrun/utils/async_http.py +1 -1
  226. mlrun/utils/clones.py +1 -1
  227. mlrun/utils/helpers.py +54 -16
  228. mlrun/utils/logger.py +106 -4
  229. mlrun/utils/notifications/notification/__init__.py +22 -19
  230. mlrun/utils/notifications/notification/base.py +33 -14
  231. mlrun/utils/notifications/notification/console.py +6 -6
  232. mlrun/utils/notifications/notification/git.py +11 -11
  233. mlrun/utils/notifications/notification/ipython.py +10 -9
  234. mlrun/utils/notifications/notification/mail.py +176 -0
  235. mlrun/utils/notifications/notification/slack.py +6 -6
  236. mlrun/utils/notifications/notification/webhook.py +6 -6
  237. mlrun/utils/notifications/notification_pusher.py +86 -44
  238. mlrun/utils/regex.py +3 -1
  239. mlrun/utils/version/version.json +2 -2
  240. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc8.dist-info}/METADATA +21 -16
  241. mlrun-1.8.0rc8.dist-info/RECORD +347 -0
  242. mlrun/model_monitoring/db/stores/__init__.py +0 -136
  243. mlrun/model_monitoring/db/stores/base/store.py +0 -213
  244. mlrun/model_monitoring/db/stores/sqldb/__init__.py +0 -13
  245. mlrun/model_monitoring/db/stores/sqldb/models/__init__.py +0 -71
  246. mlrun/model_monitoring/db/stores/sqldb/models/base.py +0 -190
  247. mlrun/model_monitoring/db/stores/sqldb/models/mysql.py +0 -103
  248. mlrun/model_monitoring/db/stores/sqldb/models/sqlite.py +0 -40
  249. mlrun/model_monitoring/db/stores/sqldb/sql_store.py +0 -659
  250. mlrun/model_monitoring/db/stores/v3io_kv/__init__.py +0 -13
  251. mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py +0 -726
  252. mlrun/model_monitoring/model_endpoint.py +0 -118
  253. mlrun-1.7.1rc10.dist-info/RECORD +0 -351
  254. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc8.dist-info}/LICENSE +0 -0
  255. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc8.dist-info}/WHEEL +0 -0
  256. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc8.dist-info}/entry_points.txt +0 -0
  257. {mlrun-1.7.1rc10.dist-info → mlrun-1.8.0rc8.dist-info}/top_level.txt +0 -0
mlrun/datastore/v3io.py CHANGED
@@ -14,6 +14,7 @@
14
14
 
15
15
  import time
16
16
  from datetime import datetime
17
+ from typing import Optional
17
18
 
18
19
  import fsspec
19
20
  import v3io
@@ -33,7 +34,9 @@ V3IO_DEFAULT_UPLOAD_CHUNK_SIZE = 1024 * 1024 * 10
33
34
 
34
35
 
35
36
  class V3ioStore(DataStore):
36
- def __init__(self, parent, schema, name, endpoint="", secrets: dict = None):
37
+ def __init__(
38
+ self, parent, schema, name, endpoint="", secrets: Optional[dict] = None
39
+ ):
37
40
  super().__init__(parent, name, schema, endpoint, secrets=secrets)
38
41
  self.endpoint = self.endpoint or mlrun.mlconf.v3io_api
39
42
 
@@ -0,0 +1,194 @@
1
+ # Copyright 2024 Iguazio
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import inspect
16
+ from collections.abc import Iterable
17
+ from typing import Union
18
+
19
+ from mlrun.artifacts import DocumentArtifact
20
+
21
+
22
+ class VectorStoreCollection:
23
+ """
24
+ A wrapper class for vector store collections with MLRun integration.
25
+
26
+ This class wraps a vector store implementation (like Milvus, Chroma) and provides
27
+ integration with MLRun context for document and artifact management. It delegates
28
+ most operations to the underlying vector store while handling MLRun-specific
29
+ functionality.
30
+
31
+ The class implements attribute delegation through __getattr__ and __setattr__,
32
+ allowing direct access to the underlying vector store's methods and attributes
33
+ while maintaining MLRun integration.
34
+ """
35
+
36
+ def __init__(
37
+ self,
38
+ mlrun_context: Union["MlrunProject", "MLClientCtx"], # noqa: F821
39
+ collection_name: str,
40
+ vector_store: "VectorStore", # noqa: F821
41
+ ):
42
+ self._collection_impl = vector_store
43
+ self._mlrun_context = mlrun_context
44
+ self.collection_name = collection_name
45
+
46
+ def __getattr__(self, name):
47
+ # This method is called when an attribute is not found in the usual places
48
+ # Forward the attribute access to _collection_impl
49
+ return getattr(self._collection_impl, name)
50
+
51
+ def __setattr__(self, name, value):
52
+ if name in ["_collection_impl", "_mlrun_context"] or name in self.__dict__:
53
+ # Use the base class method to avoid recursion
54
+ super().__setattr__(name, value)
55
+ else:
56
+ # Forward the attribute setting to _collection_impl
57
+ setattr(self._collection_impl, name, value)
58
+
59
+ def add_documents(
60
+ self,
61
+ documents: list["Document"], # noqa: F821
62
+ **kwargs,
63
+ ):
64
+ """
65
+ Add a list of documents to the collection.
66
+
67
+ If the instance has an MLRun context, it will update the MLRun artifacts
68
+ associated with the documents.
69
+
70
+ Args:
71
+ documents (list[Document]): A list of Document objects to be added.
72
+ **kwargs: Additional keyword arguments to be passed to the underlying
73
+ collection implementation.
74
+
75
+ Returns:
76
+ The result of the underlying collection implementation's add_documents method.
77
+ """
78
+ if self._mlrun_context:
79
+ for document in documents:
80
+ mlrun_uri = document.metadata.get(
81
+ DocumentArtifact.METADATA_ARTIFACT_URI_KEY
82
+ )
83
+ if mlrun_uri:
84
+ artifact = self._mlrun_context.get_store_resource(mlrun_uri)
85
+ artifact.collection_add(self.collection_name)
86
+ self._mlrun_context.update_artifact(artifact)
87
+
88
+ return self._collection_impl.add_documents(documents, **kwargs)
89
+
90
+ def add_artifacts(self, artifacts: list[DocumentArtifact], splitter=None, **kwargs):
91
+ """
92
+ Add a list of DocumentArtifact objects to the vector store collection.
93
+
94
+ Converts artifacts to LangChain documents, adds them to the vector store, and
95
+ updates the MLRun context. If documents are split, the IDs are handled appropriately.
96
+
97
+ Args:
98
+ artifacts (list[DocumentArtifact]): List of DocumentArtifact objects to add
99
+ splitter (optional): Document splitter to break artifacts into smaller chunks.
100
+ If None, each artifact becomes a single document.
101
+ **kwargs: Additional arguments passed to the underlying add_documents method.
102
+ Special handling for 'ids' kwarg:
103
+ - If provided and document is split, IDs are generated as "{original_id}_{i}"
104
+ where i starts from 1 (e.g., "doc1_1", "doc1_2", etc.)
105
+ - If provided and document isn't split, original IDs are used as-is
106
+
107
+ Returns:
108
+ list: List of IDs for all added documents. When no custom IDs are provided:
109
+ - Without splitting: Vector store generates IDs automatically
110
+ - With splitting: Vector store generates separate IDs for each chunk
111
+ When custom IDs are provided:
112
+ - Without splitting: Uses provided IDs directly
113
+ - With splitting: Generates sequential IDs as "{original_id}_{i}" for each chunk
114
+ """
115
+ all_ids = []
116
+ user_ids = kwargs.pop("ids", None)
117
+
118
+ if user_ids:
119
+ if not isinstance(user_ids, Iterable):
120
+ raise ValueError("IDs must be an iterable collection")
121
+ if len(user_ids) != len(artifacts):
122
+ raise ValueError(
123
+ "The number of IDs should match the number of artifacts"
124
+ )
125
+ for index, artifact in enumerate(artifacts):
126
+ documents = artifact.to_langchain_documents(splitter)
127
+ artifact.collection_add(self.collection_name)
128
+ if self._mlrun_context:
129
+ self._mlrun_context.update_artifact(artifact)
130
+ if user_ids:
131
+ num_of_documents = len(documents)
132
+ if num_of_documents > 1:
133
+ ids_to_pass = [
134
+ f"{user_ids[index]}_{i}" for i in range(1, num_of_documents + 1)
135
+ ]
136
+ else:
137
+ ids_to_pass = [user_ids[index]]
138
+ kwargs["ids"] = ids_to_pass
139
+ ids = self._collection_impl.add_documents(documents, **kwargs)
140
+ all_ids.extend(ids)
141
+ return all_ids
142
+
143
+ def remove_from_artifact(self, artifact: DocumentArtifact):
144
+ """
145
+ Remove the current object from the given artifact's collection and update the artifact.
146
+
147
+ Args:
148
+ artifact (DocumentArtifact): The artifact from which the current object should be removed.
149
+ """
150
+ artifact.collection_remove(self.collection_name)
151
+ if self._mlrun_context:
152
+ self._mlrun_context.update_artifact(artifact)
153
+
154
+ def delete_artifacts(self, artifacts: list[DocumentArtifact]):
155
+ """
156
+ Delete a list of DocumentArtifact objects from the collection.
157
+
158
+ This method removes the specified artifacts from the collection and updates the MLRun context.
159
+ The deletion process varies depending on the type of the underlying collection implementation.
160
+
161
+ Args:
162
+ artifacts (list[DocumentArtifact]): A list of DocumentArtifact objects to be deleted.
163
+
164
+ Raises:
165
+ NotImplementedError: If the delete operation is not supported for the collection implementation.
166
+ """
167
+ store_class = self._collection_impl.__class__.__name__.lower()
168
+ for artifact in artifacts:
169
+ artifact.collection_remove(self.collection_name)
170
+ if self._mlrun_context:
171
+ self._mlrun_context.update_artifact(artifact)
172
+
173
+ if store_class == "milvus":
174
+ expr = f"{DocumentArtifact.METADATA_SOURCE_KEY} == '{artifact.get_source()}'"
175
+ return self._collection_impl.delete(expr=expr)
176
+ elif store_class == "chroma":
177
+ where = {DocumentArtifact.METADATA_SOURCE_KEY: artifact.get_source()}
178
+ return self._collection_impl.delete(where=where)
179
+
180
+ elif (
181
+ hasattr(self._collection_impl, "delete")
182
+ and "filter"
183
+ in inspect.signature(self._collection_impl.delete).parameters
184
+ ):
185
+ filter = {
186
+ "metadata": {
187
+ DocumentArtifact.METADATA_SOURCE_KEY: artifact.get_source()
188
+ }
189
+ }
190
+ return self._collection_impl.delete(filter=filter)
191
+ else:
192
+ raise NotImplementedError(
193
+ f"delete_artifacts() operation not supported for {store_class}"
194
+ )
@@ -12,6 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from typing import Optional
15
16
  from urllib.parse import urlparse
16
17
 
17
18
  from fsspec import AbstractFileSystem
@@ -22,23 +23,23 @@ class WasbFS(AbstractFileSystem):
22
23
 
23
24
  def __init__(
24
25
  self,
25
- account_name: str = None,
26
- account_key: str = None,
27
- connection_string: str = None,
28
- credential: str = None,
29
- sas_token: str = None,
26
+ account_name: Optional[str] = None,
27
+ account_key: Optional[str] = None,
28
+ connection_string: Optional[str] = None,
29
+ credential: Optional[str] = None,
30
+ sas_token: Optional[str] = None,
30
31
  request_session=None,
31
- socket_timeout: int = None,
32
- blocksize: int = None,
33
- client_id: str = None,
34
- client_secret: str = None,
35
- tenant_id: str = None,
32
+ socket_timeout: Optional[int] = None,
33
+ blocksize: Optional[int] = None,
34
+ client_id: Optional[str] = None,
35
+ client_secret: Optional[str] = None,
36
+ tenant_id: Optional[str] = None,
36
37
  anon: bool = True,
37
- location_mode: str = None,
38
+ location_mode: Optional[str] = None,
38
39
  loop=None,
39
40
  asynchronous: bool = False,
40
41
  default_fill_cache: bool = True,
41
- default_cache_type: str = None,
42
+ default_cache_type: Optional[str] = None,
42
43
  **kwargs,
43
44
  ):
44
45
  from adlfs import AzureBlobFileSystem