mlrun 1.7.0rc34__py3-none-any.whl → 1.7.0rc36__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 (47) hide show
  1. mlrun/artifacts/base.py +1 -0
  2. mlrun/common/schemas/__init__.py +0 -1
  3. mlrun/common/schemas/api_gateway.py +1 -1
  4. mlrun/common/schemas/model_monitoring/__init__.py +1 -2
  5. mlrun/common/schemas/model_monitoring/constants.py +3 -16
  6. mlrun/common/schemas/notification.py +1 -1
  7. mlrun/common/types.py +1 -0
  8. mlrun/config.py +7 -7
  9. mlrun/datastore/sources.py +8 -4
  10. mlrun/datastore/spark_utils.py +30 -0
  11. mlrun/db/base.py +2 -3
  12. mlrun/db/httpdb.py +3 -3
  13. mlrun/feature_store/api.py +19 -1
  14. mlrun/feature_store/steps.py +8 -0
  15. mlrun/model.py +1 -1
  16. mlrun/model_monitoring/api.py +23 -6
  17. mlrun/model_monitoring/applications/_application_steps.py +4 -0
  18. mlrun/model_monitoring/applications/base.py +8 -0
  19. mlrun/model_monitoring/applications/evidently_base.py +27 -27
  20. mlrun/model_monitoring/controller.py +5 -1
  21. mlrun/model_monitoring/db/stores/sqldb/sql_store.py +5 -0
  22. mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py +2 -2
  23. mlrun/model_monitoring/db/tsdb/base.py +6 -3
  24. mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -3
  25. mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +22 -3
  26. mlrun/model_monitoring/stream_processing.py +25 -153
  27. mlrun/projects/pipelines.py +76 -73
  28. mlrun/run.py +4 -0
  29. mlrun/runtimes/nuclio/api_gateway.py +1 -1
  30. mlrun/runtimes/nuclio/application/application.py +25 -2
  31. mlrun/runtimes/nuclio/function.py +5 -0
  32. mlrun/runtimes/nuclio/serving.py +1 -1
  33. mlrun/runtimes/pod.py +2 -4
  34. mlrun/runtimes/utils.py +18 -0
  35. mlrun/serving/states.py +10 -3
  36. mlrun/serving/v2_serving.py +5 -2
  37. mlrun/utils/db.py +15 -0
  38. mlrun/utils/helpers.py +27 -14
  39. mlrun/utils/http.py +1 -1
  40. mlrun/utils/version/version.json +2 -2
  41. {mlrun-1.7.0rc34.dist-info → mlrun-1.7.0rc36.dist-info}/METADATA +3 -1
  42. {mlrun-1.7.0rc34.dist-info → mlrun-1.7.0rc36.dist-info}/RECORD +46 -47
  43. {mlrun-1.7.0rc34.dist-info → mlrun-1.7.0rc36.dist-info}/WHEEL +1 -1
  44. mlrun/model_monitoring/prometheus.py +0 -216
  45. {mlrun-1.7.0rc34.dist-info → mlrun-1.7.0rc36.dist-info}/LICENSE +0 -0
  46. {mlrun-1.7.0rc34.dist-info → mlrun-1.7.0rc36.dist-info}/entry_points.txt +0 -0
  47. {mlrun-1.7.0rc34.dist-info → mlrun-1.7.0rc36.dist-info}/top_level.txt +0 -0
@@ -335,6 +335,7 @@ class V2ModelServer(StepToDict):
335
335
  else:
336
336
  track_request = {"id": event_id, "inputs": inputs or []}
337
337
  track_response = {"outputs": outputs or []}
338
+ # TODO : check dict/list
338
339
  self._model_logger.push(start, track_request, track_response, op)
339
340
  event.body = _update_result_body(self._result_path, original_body, response)
340
341
  return event
@@ -376,8 +377,10 @@ class V2ModelServer(StepToDict):
376
377
  """postprocess, before returning response"""
377
378
  return request
378
379
 
379
- def predict(self, request: dict) -> dict:
380
- """model prediction operation"""
380
+ def predict(self, request: dict) -> list:
381
+ """model prediction operation
382
+ :return: list with the model prediction results (can be multi-port) or list of lists for multiple predictions
383
+ """
381
384
  raise NotImplementedError()
382
385
 
383
386
  def explain(self, request: dict) -> dict:
mlrun/utils/db.py CHANGED
@@ -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
+ import abc
15
16
  import pickle
16
17
  from datetime import datetime
17
18
 
@@ -37,6 +38,13 @@ class BaseModel:
37
38
 
38
39
  return dict(map(get_key_value, columns))
39
40
 
41
+ @abc.abstractmethod
42
+ def get_identifier_string(self):
43
+ """
44
+ This method must be implemented by any subclass.
45
+ """
46
+ pass
47
+
40
48
 
41
49
  class HasStruct(BaseModel):
42
50
  @property
@@ -54,3 +62,10 @@ class HasStruct(BaseModel):
54
62
  exclude = exclude or []
55
63
  exclude.append("body")
56
64
  return super().to_dict(exclude, strip=strip)
65
+
66
+ @abc.abstractmethod
67
+ def get_identifier_string(self):
68
+ """
69
+ This method must be implemented by any subclass.
70
+ """
71
+ pass
mlrun/utils/helpers.py CHANGED
@@ -1618,28 +1618,25 @@ def additional_filters_warning(additional_filters, class_name):
1618
1618
  )
1619
1619
 
1620
1620
 
1621
- def merge_with_precedence(first_dict: dict, second_dict: dict) -> dict:
1621
+ def merge_dicts_with_precedence(*dicts: dict) -> dict:
1622
1622
  """
1623
- Merge two dictionaries with precedence given to keys from the second dictionary.
1623
+ Merge multiple dictionaries with precedence given to keys from later dictionaries.
1624
1624
 
1625
- This function merges two dictionaries, `first_dict` and `second_dict`, where keys from `second_dict`
1626
- take precedence in case of conflicts. If both dictionaries contain the same key,
1627
- the value from `second_dict` will overwrite the value from `first_dict`.
1625
+ This function merges an arbitrary number of dictionaries, where keys from dictionaries later
1626
+ in the argument list take precedence over keys from dictionaries earlier in the list. If all
1627
+ dictionaries contain the same key, the value from the last dictionary with that key will
1628
+ overwrite the values from earlier dictionaries.
1628
1629
 
1629
1630
  Example:
1630
1631
  >>> first_dict = {"key1": "value1", "key2": "value2"}
1631
1632
  >>> second_dict = {"key2": "new_value2", "key3": "value3"}
1632
- >>> merge_with_precedence(first_dict, second_dict)
1633
- {'key1': 'value1', 'key2': 'new_value2', 'key3': 'value3'}
1633
+ >>> third_dict = {"key3": "new_value3", "key4": "value4"}
1634
+ >>> merge_dicts_with_precedence(first_dict, second_dict, third_dict)
1635
+ {'key1': 'value1', 'key2': 'new_value2', 'key3': 'new_value3', 'key4': 'value4'}
1634
1636
 
1635
- Note:
1636
- - The merge operation uses the ** operator in Python, which combines key-value pairs
1637
- from each dictionary. Later dictionaries take precedence when there are conflicting keys.
1637
+ - If no dictionaries are provided, the function returns an empty dictionary.
1638
1638
  """
1639
- return {
1640
- **(first_dict or {}),
1641
- **(second_dict or {}),
1642
- }
1639
+ return {k: v for d in dicts if d for k, v in d.items()}
1643
1640
 
1644
1641
 
1645
1642
  def validate_component_version_compatibility(
@@ -1705,6 +1702,22 @@ def is_parquet_file(file_path, format_=None):
1705
1702
  )
1706
1703
 
1707
1704
 
1705
+ def validate_single_def_handler(function_kind: str, code: str):
1706
+ # The name of MLRun's wrapper is 'handler', which is why the handler function name cannot be 'handler'
1707
+ # it would override MLRun's wrapper
1708
+ if function_kind == "mlrun":
1709
+ # Find all lines that start with "def handler("
1710
+ pattern = re.compile(r"^def handler\(", re.MULTILINE)
1711
+ matches = pattern.findall(code)
1712
+
1713
+ # Only MLRun's wrapper handler (footer) can be in the code
1714
+ if len(matches) > 1:
1715
+ raise mlrun.errors.MLRunInvalidArgumentError(
1716
+ "The code file contains a function named “handler“, which is reserved. "
1717
+ + "Use a different name for your function."
1718
+ )
1719
+
1720
+
1708
1721
  def _reload(module, max_recursion_depth):
1709
1722
  """Recursively reload modules."""
1710
1723
  if max_recursion_depth <= 0:
mlrun/utils/http.py CHANGED
@@ -95,7 +95,7 @@ class HTTPSessionWithRetry(requests.Session):
95
95
  total=self.max_retries,
96
96
  backoff_factor=self.retry_backoff_factor,
97
97
  status_forcelist=config.http_retry_defaults.status_codes,
98
- method_whitelist=self._retry_methods,
98
+ allowed_methods=self._retry_methods,
99
99
  # we want to retry but not to raise since we do want that last response (to parse details on the
100
100
  # error from response body) we'll handle raising ourselves
101
101
  raise_on_status=False,
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "4542af29f22f596b4e09be897f728a6e8f676b55",
3
- "version": "1.7.0-rc34"
2
+ "git_commit": "30aadb6f3d83b27db15c5704d6c0be0d7503032d",
3
+ "version": "1.7.0-rc36"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.7.0rc34
3
+ Version: 1.7.0rc36
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -68,6 +68,7 @@ Requires-Dist: dask ~=2023.9.0 ; extra == 'all'
68
68
  Requires-Dist: databricks-sdk ~=0.13.0 ; extra == 'all'
69
69
  Requires-Dist: distributed ~=2023.9.0 ; extra == 'all'
70
70
  Requires-Dist: gcsfs <2024.4,>=2023.9.2 ; extra == 'all'
71
+ Requires-Dist: google-cloud-bigquery-storage ~=2.17 ; extra == 'all'
71
72
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas] ==3.14.1 ; extra == 'all'
72
73
  Requires-Dist: google-cloud-storage ==2.14.0 ; extra == 'all'
73
74
  Requires-Dist: google-cloud ==0.34 ; extra == 'all'
@@ -179,6 +180,7 @@ Requires-Dist: databricks-sdk ~=0.13.0 ; extra == 'databricks-sdk'
179
180
  Provides-Extra: google-cloud
180
181
  Requires-Dist: google-cloud-storage ==2.14.0 ; extra == 'google-cloud'
181
182
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas] ==3.14.1 ; extra == 'google-cloud'
183
+ Requires-Dist: google-cloud-bigquery-storage ~=2.17 ; extra == 'google-cloud'
182
184
  Requires-Dist: google-cloud ==0.34 ; extra == 'google-cloud'
183
185
  Provides-Extra: google-cloud-bigquery
184
186
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas] ==3.14.1 ; extra == 'google-cloud-bigquery'
@@ -1,20 +1,20 @@
1
1
  mlrun/__init__.py,sha256=y08M1JcKXy5-9_5WaI9fn5aV5BxIQ5QkbduJK0OxWbA,7470
2
2
  mlrun/__main__.py,sha256=iAifncsrQQx6ozXXmz7GH1OiNl8PA7KS3TnwlxnHGeo,45890
3
- mlrun/config.py,sha256=5QrlkkUosFwziSFTtApeB2obpS-gW126lB8y5za7rhM,66103
3
+ mlrun/config.py,sha256=F8lKjS57FlodLbZawg2eyGjRjzDRR-K53n_bIbq9aD8,66129
4
4
  mlrun/errors.py,sha256=VpC_imeSz2twRMZZb7u90Zj29z6aO-tCxUHD3ZA_Axw,7465
5
5
  mlrun/execution.py,sha256=Gv7mzzaf5y8fIEF0VVu8dSJYQp2uCezXDUiE60cGxWU,41970
6
6
  mlrun/features.py,sha256=m17K_3l9Jktwb9dOwlHLTAPTlemsWrRF7dJhXUX0iJU,15429
7
7
  mlrun/k8s_utils.py,sha256=WdUajadvAhTR7sAMQdwFqKeJMimuTyqm02VdwK1A4xU,7023
8
8
  mlrun/lists.py,sha256=3PqBdcajdwhTe1XuFsAaHTuFVM2kjwepf31qqE82apg,8384
9
- mlrun/model.py,sha256=QA-Wi3Po5OB9Y7aR-vEFjLT4dkU-597QM4qAEmv-UvI,79092
9
+ mlrun/model.py,sha256=ymGFzkTmxDb40UJPfOEEyC3Uffe7vDXQNguDCfaZfWo,79091
10
10
  mlrun/render.py,sha256=n8SeY3ogVrsV02-7-H0lt1RmpkxGpbI-11RQx61Vq9E,13267
11
- mlrun/run.py,sha256=uIHNQ-OSrviNwkZ54cQy27SIO62WIaFHdwz08K5NwK0,43410
11
+ mlrun/run.py,sha256=5Tz7OPDKkbaRLzLOmEjVBYecZR_BKd0gqtkKt_v4SbE,43524
12
12
  mlrun/secrets.py,sha256=ibtCK79u7JVBZF6F0SP1-xXXF5MyrLEUs_TCWiJAnlc,7798
13
13
  mlrun/alerts/__init__.py,sha256=0gtG1BG0DXxFrXegIkjbM1XEN4sP9ODo0ucXrNld1hU,601
14
14
  mlrun/alerts/alert.py,sha256=JJfMFF-o0j8oTAIkyXAQG0YbU-kZlIDl0A8ILQi8vfA,6510
15
15
  mlrun/api/schemas/__init__.py,sha256=fEWH4I8hr5AdRJ7yoW44RlFB6NHkYDxyomP5J6ct1z4,14248
16
16
  mlrun/artifacts/__init__.py,sha256=daGrLqltI1nE3ES30nm-tanUnxReRzfyxyaxNRx2zbc,1168
17
- mlrun/artifacts/base.py,sha256=azVkiHaJq9JNFKlb91R1vwkdR2QEqF-rIn7bQIL6rf0,29148
17
+ mlrun/artifacts/base.py,sha256=EystjLta4XVdZP2x4nz1ZNlDUYKTIcFNfMVfBVseCHw,29168
18
18
  mlrun/artifacts/dataset.py,sha256=O_2g2RFHYEAXIBX86mgyc0wBNOhWLT7NlYvxFeLNTuw,16505
19
19
  mlrun/artifacts/manager.py,sha256=I_1mgQ0M8j9JgryFJsB2yN3Pv47oQM6Jfg1fotTPDX0,15323
20
20
  mlrun/artifacts/model.py,sha256=ObUkqFMejYOtq0CDFdpYwzwhQ5bsHv0dHTysuVPJnbs,21102
@@ -23,7 +23,7 @@ mlrun/common/__init__.py,sha256=xY3wHC4TEJgez7qtnn1pQvHosi8-5UJOCtyGBS7FcGE,571
23
23
  mlrun/common/constants.py,sha256=MdXxRPquVguW98WCnEUcJ9A46MOo-MrafFTk7QOK8BA,3052
24
24
  mlrun/common/helpers.py,sha256=LRIULbCg8afKkPnzsZ99-B-JPVjcwR1G9vO--1rzRrQ,1387
25
25
  mlrun/common/secrets.py,sha256=vc8WV82EZsCB5ENjUkObFOzZP59aZ1w8F82PTnqwBnc,5181
26
- mlrun/common/types.py,sha256=cs8AtoI6LSuf2LF5Hg2ZSQ0QTex5_KqVSmNAU8_rnlk,1037
26
+ mlrun/common/types.py,sha256=APVFvumnHpCG-yXlt6OSioMfkyT-DADPiW3dGG3dUFQ,1057
27
27
  mlrun/common/db/__init__.py,sha256=xY3wHC4TEJgez7qtnn1pQvHosi8-5UJOCtyGBS7FcGE,571
28
28
  mlrun/common/db/sql_session.py,sha256=Znc8KE2oLy4lg3_vRki1sVlNx59TgDSOTCXfU561hBU,2659
29
29
  mlrun/common/formatters/__init__.py,sha256=91yPb5xoLK7fTIOC5C7ndJMvyEBlQY6f0CjenLYbsZw,785
@@ -36,9 +36,9 @@ mlrun/common/formatters/run.py,sha256=eEBy1NEwGT9b98TWS2OetEbDnDrnHBIBVMrlXsxveo
36
36
  mlrun/common/model_monitoring/__init__.py,sha256=x0EMEvxVjHsm858J1t6IEA9dtKTdFpJ9sKhss10ld8A,721
37
37
  mlrun/common/model_monitoring/helpers.py,sha256=1CpxIDQPumFnpUB1eqcvCpLlyPFVeW2sL6prM-N5A1A,4405
38
38
  mlrun/common/runtimes/constants.py,sha256=Rl0Sd8n_L7Imo-uF1LL9CJ5Szi0W1gUm36yrF8PXfSc,10989
39
- mlrun/common/schemas/__init__.py,sha256=txPKk2yW6vpyIc6ri48JD0vBwFpZfSdW3CFjVp7XDl0,5252
39
+ mlrun/common/schemas/__init__.py,sha256=CUX4F6VeowqX5PzakB7xgGs2lJZAN42RMm1asB-kf1c,5227
40
40
  mlrun/common/schemas/alert.py,sha256=Gb2eSjZLTkm-lGy_rQ_D4crEjCTdyf1N90bnIJmQ1H8,6574
41
- mlrun/common/schemas/api_gateway.py,sha256=_1JyCFNP89dAcFxQE-C8Tj8o6TvPgV13aBzU3wRcM4g,6908
41
+ mlrun/common/schemas/api_gateway.py,sha256=aEQ4rO5WyjAGIH7QJohctpftJi_SP4cTAfbmRi1ATwE,6920
42
42
  mlrun/common/schemas/artifact.py,sha256=V3ngobnzI1v2eoOroWBEedjAZu0ntCSIQ-LzsOK1Z9k,3570
43
43
  mlrun/common/schemas/auth.py,sha256=5c4WSn3KdX1v04ttSQblkF_gyjdjuJSHG7BTCx4_LWM,6336
44
44
  mlrun/common/schemas/background_task.py,sha256=2qZxib2qrF_nPZj0ncitCG-2jxz2hg1qj0hFc8eswWQ,1707
@@ -55,7 +55,7 @@ mlrun/common/schemas/http.py,sha256=1PtYFhF6sqLSBRcuPMtYcUGmroBhaleqLmYidSdL9LM,
55
55
  mlrun/common/schemas/hub.py,sha256=cuv_vpkO27XNCZzfytnUyi0k0ZA4wf_QRn5B0ZPoK-Y,4116
56
56
  mlrun/common/schemas/k8s.py,sha256=nmMnhgjVMLem5jyumoG2eQKioGK9eUVhQnOSb3hG7yw,1395
57
57
  mlrun/common/schemas/memory_reports.py,sha256=tpS3fpvxa6VcBpzCRzcZTt0fCF0h6ReUetYs7j6kdps,892
58
- mlrun/common/schemas/notification.py,sha256=Ge7eWNGf_XUFkjOnUkyUOubdEbmXh9z_OSGcSturt4w,1768
58
+ mlrun/common/schemas/notification.py,sha256=vEYaz5wfTo3zGLkvf36uNdVdCExfmmGwoDWm3CUjUW8,1775
59
59
  mlrun/common/schemas/object.py,sha256=VleJSUmDJMl92knLgaDE8SWCi3ky0UaHcwcwOIapPQ8,1980
60
60
  mlrun/common/schemas/pagination.py,sha256=q7nk6bipkDiE7HExIVqhy5ANl-zv0x8QC9Kg6AkLtDA,887
61
61
  mlrun/common/schemas/pipeline.py,sha256=MhH07_fAQXNAnmf5j6oXZp8qh9cxGcZlReMdt-ZJf40,1429
@@ -67,8 +67,8 @@ mlrun/common/schemas/schedule.py,sha256=nD9kxH2KjXkbGZPNfzVNlNSxbyFZmZUlwtT04_z2
67
67
  mlrun/common/schemas/secret.py,sha256=51tCN1F8DFTq4y_XdHIMDy3I1TnMEBX8kO8BHKavYF4,1484
68
68
  mlrun/common/schemas/tag.py,sha256=OAn9Qt6z8ibqw8uU8WQSvuwY8irUv45Dhx2Ko5FzUss,884
69
69
  mlrun/common/schemas/workflow.py,sha256=eRoaOBFiWbvP0iwZ6Aof5JmheV81A0-0PGi8L4vuXmI,1823
70
- mlrun/common/schemas/model_monitoring/__init__.py,sha256=Z_tv5dO-tT_oHMSk98AnDQW0XM-fXqNKduFxkW3jO_E,1809
71
- mlrun/common/schemas/model_monitoring/constants.py,sha256=izIN1HUF_rWpbxVR2AYXGww-Noq9rnx2k7zOvrRt7Js,9921
70
+ mlrun/common/schemas/model_monitoring/__init__.py,sha256=uCnHhhVZkWbbtsawIjOa3ub9ShDJK2md-s2fbx46crg,1792
71
+ mlrun/common/schemas/model_monitoring/constants.py,sha256=sknS628AliiJzrOfDImTIxwBiHTgWNBxH2A7eiGnAMo,9438
72
72
  mlrun/common/schemas/model_monitoring/grafana.py,sha256=SG13MFUUz_tk6-mWeSx17qcdEW4ekicxqNtnMSwRTCY,1559
73
73
  mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=3wPlCFNoBsHlCMgyJlXfNP-ZqIRsBXzyBX79O2PHkeg,13799
74
74
  mlrun/data_types/__init__.py,sha256=EkxfkFoHb91zz3Aymq-KZfCHlPMzEc3bBqgzPUwmHWY,1087
@@ -90,9 +90,9 @@ mlrun/datastore/inmem.py,sha256=d2dIvHlOQylhc-i4B5Kk9e9ayXnF7DICc5yUlHcNwqs,2873
90
90
  mlrun/datastore/redis.py,sha256=OKMkDCU3APhxfo65SyJq605u1DsfOYH0fODnCXZRqEU,5575
91
91
  mlrun/datastore/s3.py,sha256=YXLIcsODJJuIuTTp4MTPjJqbvxzPRMeXpbImV9_q8Y8,8449
92
92
  mlrun/datastore/snowflake_utils.py,sha256=Wohvnlmq8j1d98RCaknll-iWdZZpSlCrKhUOEy0_-CA,1483
93
- mlrun/datastore/sources.py,sha256=RDa-QFJD95m3ClgHJogjcJK1HEPGZopxG4BTDUEuTQ4,46506
93
+ mlrun/datastore/sources.py,sha256=Mxn2aS42kSv7I6GrNixUHMjE8taEvs6-YQZE2L4Lsxg,46564
94
94
  mlrun/datastore/spark_udf.py,sha256=NnnB3DZxZb-rqpRy7b-NC7QWXuuqFn3XkBDc86tU4mQ,1498
95
- mlrun/datastore/spark_utils.py,sha256=50rllp6xXpXY__1LbU7aTXUU5ca8dKAfoskPre3npZo,1611
95
+ mlrun/datastore/spark_utils.py,sha256=_AsVoU5Ix_-W7Gyq8io8V-2GTk0m8THJNDP3WGGaWJY,2865
96
96
  mlrun/datastore/store_resources.py,sha256=rcLoG506AMmR8qPJU_gE-G5d34VJVV_vNlZ3VHqho6c,6869
97
97
  mlrun/datastore/targets.py,sha256=JbffgF3yct9FSJ2LaKR--iUNCDq5Qzbd5mYqq1yPmeg,81178
98
98
  mlrun/datastore/utils.py,sha256=l9dLZb_VCbHs_htqMFRv4qiestZ8z8K-4eY1MxHS8wE,7720
@@ -101,17 +101,17 @@ mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev
101
101
  mlrun/datastore/wasbfs/fs.py,sha256=MnSj7Q4OKA2L55ihCmUnj2t3GA3B77oLMdAw-yxvN9w,6151
102
102
  mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
103
103
  mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
104
- mlrun/db/base.py,sha256=cHMkIJW1cnhIH8dxVjZTusUDsFirtKaEjDuF7he0VWM,24185
104
+ mlrun/db/base.py,sha256=VztBik6tUYFKGRVXIsXZE7HrALx0hO_sgpCcE2O0cLU,24156
105
105
  mlrun/db/factory.py,sha256=ibIrE5QkIIyzDU1FXKrfbc31cZiRLYKDZb8dqCpQwyU,2397
106
- mlrun/db/httpdb.py,sha256=ivOg9Sy5HVT62nhIis365KhNrsWS5sS-rgLZ33Tc-7I,183980
106
+ mlrun/db/httpdb.py,sha256=UW-vVFS5xAavHtZi1GmiEhGr9P2s3O8b9OkqgpcY7-o,183981
107
107
  mlrun/db/nopdb.py,sha256=d7vSk_2sfwZGY24w7ucSkoq88fLPDLF137IXabongXU,20791
108
108
  mlrun/feature_store/__init__.py,sha256=FhHRc8NdqL_HWpCs7A8dKruxJS5wEm55Gs3dcgBiRUg,1522
109
- mlrun/feature_store/api.py,sha256=uYheyPkJOVCrz1jivvpGatgy_JBAq0It0XZqPpNVQkE,48699
109
+ mlrun/feature_store/api.py,sha256=czYTgN3zUx7j6n57z-T0btW0-PI1OxegL0o3kUUqMa8,49664
110
110
  mlrun/feature_store/common.py,sha256=DKmoRk04NCS1gv7qZuEUa2-g8WsfR6IWjYctcrqKVlg,12853
111
111
  mlrun/feature_store/feature_set.py,sha256=qD8RqkeoJFbJMMK5-zjs-27DC4UXQiQSokkt4pdMzkw,56027
112
112
  mlrun/feature_store/feature_vector.py,sha256=A29-yCsFgvFU_Qw53CgDjn8t_okh7Nm6FZuvcEaKci0,44134
113
113
  mlrun/feature_store/ingestion.py,sha256=kT3Hbz1PBjsJd-GPBm2ap0sg9-fiXxaSXoEIo-dOXpU,11361
114
- mlrun/feature_store/steps.py,sha256=EAOJvcnKNiFxSXlJuRxEEZU3q2a6GpMH9KffTfXeWKo,28860
114
+ mlrun/feature_store/steps.py,sha256=kdOrYh3fAdamV-RYNr86cFg445h_pgSWlb1EHOsAZUM,29297
115
115
  mlrun/feature_store/retrieval/__init__.py,sha256=bwA4copPpLQi8fyoUAYtOyrlw0-6f3-Knct8GbJSvRg,1282
116
116
  mlrun/feature_store/retrieval/base.py,sha256=zgDsRsYQz8eqReKBEeTP0O4UoLoVYjWpO1o1gtvbjRA,30230
117
117
  mlrun/feature_store/retrieval/dask_merger.py,sha256=t60xciYp6StUQLEyFyI4JK5NpWkdBy2MGCs6beimaWU,5575
@@ -210,22 +210,21 @@ mlrun/launcher/factory.py,sha256=RW7mfzEFi8fR0M-4W1JQg1iq3_muUU6OTqT_3l4Ubrk,233
210
210
  mlrun/launcher/local.py,sha256=pP9-ZrNL8OnNDEiXTAKAZQnmLpS_mCc2v-mJw329eks,11269
211
211
  mlrun/launcher/remote.py,sha256=tGICSfWtvUHeR31mbzy6gqHejmDxjPUgjtxXTWhRubg,7699
212
212
  mlrun/model_monitoring/__init__.py,sha256=dm5_j0_pwqrdzFwTaEtGnKfv2nVpNaM56nBI-oqLbNU,879
213
- mlrun/model_monitoring/api.py,sha256=WMxB4MMrsturFwyr1G1CHOddt0d_VSYcNEobjuxkjHg,27815
213
+ mlrun/model_monitoring/api.py,sha256=nLfDFWgitVpdt2nCY1FGFp4nc4szO5OGFQXPFE7PRJU,28440
214
214
  mlrun/model_monitoring/application.py,sha256=RJ8HeAPfGO3P2A_dEZYNg60c1wKTADh2YSv8BQ5embg,745
215
- mlrun/model_monitoring/controller.py,sha256=V0hJCcL4N5fQwsE286gUfMyFS8EKUVeg0pOIIHRSthI,27604
215
+ mlrun/model_monitoring/controller.py,sha256=kIwWgmUqVvh1qPWalibzIf0crYsDYYDEEYyagIEYqms,27890
216
216
  mlrun/model_monitoring/evidently_application.py,sha256=iOc42IVjj8m6PDBmVcKIMWm46Bu0EdO9SDcH40Eqhyo,769
217
217
  mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
218
218
  mlrun/model_monitoring/helpers.py,sha256=jD9m_Dte16kDZc1GCXvv-0z-MCel1LRg_6Pn1nwqk7A,11599
219
219
  mlrun/model_monitoring/model_endpoint.py,sha256=7VX0cBATqLsA4sSinDzouf41ndxqh2mf5bO9BW0G5Z4,4017
220
- mlrun/model_monitoring/prometheus.py,sha256=cUR4y73GutJB_pA_VCBDl9YtK4PcIJp2wj2rnLVmYi4,7578
221
- mlrun/model_monitoring/stream_processing.py,sha256=KJXvmVbAQsgLLLxd6kM_KZCInjWzJUSGiss4dMHuSTU,42545
220
+ mlrun/model_monitoring/stream_processing.py,sha256=QLnqVgPWNJT_ydZU1yhwIiEl1gtNASqG4B_c5xCFbm4,37916
222
221
  mlrun/model_monitoring/tracking_policy.py,sha256=sQq956akAQpntkrJwIgFWcEq-JpyVcg0FxgNa4h3V70,5502
223
222
  mlrun/model_monitoring/writer.py,sha256=aQ1DAi5XUi1WXXfcSgBQGKiTANT6E61I74abiu_5s8s,9824
224
223
  mlrun/model_monitoring/applications/__init__.py,sha256=i793GqYee01mRh_KD6GShvX7UbPBgdJDO4qf9Z3BXEQ,970
225
- mlrun/model_monitoring/applications/_application_steps.py,sha256=-g9jxIAFM5f22iJaUAQVlM8QRSv6KFT92I4WHmZe_f0,6028
226
- mlrun/model_monitoring/applications/base.py,sha256=buVKyghH4AB3chZ5py1vyMIFnTF-deY8YDf_fPC9BnQ,11307
224
+ mlrun/model_monitoring/applications/_application_steps.py,sha256=diQ4RGWFx3gX-TfWopVP0LFB5Ofg09ZfOxu3gaUgL1Q,6169
225
+ mlrun/model_monitoring/applications/base.py,sha256=snr3xYdqv6Po19yS0Z1VktyoLrbl88lljSFQyjnKjR0,11616
227
226
  mlrun/model_monitoring/applications/context.py,sha256=LGRJdI1eyyssFzjE4W_rk2VAUV8KpOkUZUX3xCmnC9g,8537
228
- mlrun/model_monitoring/applications/evidently_base.py,sha256=AE_eIz-GEYm3AZTrMCiqF9bcSMlvYk08LJb6bKWAQLg,8057
227
+ mlrun/model_monitoring/applications/evidently_base.py,sha256=6hzfO6s0jEVHj4R_pujcn_p6LvdkKUDb9S4B6j2XEUY,8024
229
228
  mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=TE6995h2PyO4lytVngH2HidhXFY7reLupWi4cHmdZdw,13163
230
229
  mlrun/model_monitoring/applications/results.py,sha256=VVlu9Si7Tj2LNJzPQrp4_Qeyh9mxOVMu1Jwb5K2LfvY,3577
231
230
  mlrun/model_monitoring/db/__init__.py,sha256=6Ic-X3Fh9XLPYMytmevGNSs-Hii1rAjLLoFTSPwTguw,736
@@ -233,22 +232,22 @@ mlrun/model_monitoring/db/stores/__init__.py,sha256=ZScmxeZZ3yZ84MocdDGRtvVIixSo
233
232
  mlrun/model_monitoring/db/stores/base/__init__.py,sha256=JufJETW3BXzPhFwbRa8dMf7BFGGZKceIWIMgr5x9n9c,599
234
233
  mlrun/model_monitoring/db/stores/base/store.py,sha256=xaiaUwXDYYV1z6e17Ny9IiE3a7pSiEFg8nffdWHSq0A,7517
235
234
  mlrun/model_monitoring/db/stores/sqldb/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
236
- mlrun/model_monitoring/db/stores/sqldb/sql_store.py,sha256=0RApL8I9YWBU7-U6D5_WaWwkrUbqixIJjV6iggeAIuA,25198
235
+ mlrun/model_monitoring/db/stores/sqldb/sql_store.py,sha256=yyrmOR34usE0ig1zVqXw6s9XWcDGtHpOVOi8fbtN4bY,25415
237
236
  mlrun/model_monitoring/db/stores/sqldb/models/__init__.py,sha256=lCiGw9WKPtHAIgrtNS2jyvM5OZvZvogBh76iurNYblg,2453
238
237
  mlrun/model_monitoring/db/stores/sqldb/models/base.py,sha256=V2B5WdQM0KHKq0FNDq61q7tkNJ9fNRbxfnxrholKgjk,5352
239
238
  mlrun/model_monitoring/db/stores/sqldb/models/mysql.py,sha256=tCzc5ANPxZw7tIPsn9p30woK0_s2HU_FsNzA3hL2wQs,2666
240
239
  mlrun/model_monitoring/db/stores/sqldb/models/sqlite.py,sha256=yJJZppbKj3PsOANS_DXAQFFHKX4cQcm6Pz2DoxRiXMk,1104
241
240
  mlrun/model_monitoring/db/stores/v3io_kv/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
242
- mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py,sha256=ACBpi_MTa6ByOheSPM6X_tsG4AAyqd65SNcnl3lRrYc,26290
241
+ mlrun/model_monitoring/db/stores/v3io_kv/kv_store.py,sha256=t1rF9nNENOn9Yi6ujfMknTaNX4-7Ty6hSUJZITGEk6I,26298
243
242
  mlrun/model_monitoring/db/tsdb/__init__.py,sha256=_Mfa4gguX86OS1fQCxnt_QSaNh603-zPYAK8NjYk7t8,4040
244
- mlrun/model_monitoring/db/tsdb/base.py,sha256=sESs5U71a-iJKI-999sAloYH-mjOR3uSEQG7BxRs6No,13134
243
+ mlrun/model_monitoring/db/tsdb/base.py,sha256=LWjiqUQqf7PqbXxwXnrImcBY85ChrjmwxWkNEkgmI3E,13240
245
244
  mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
246
245
  mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
247
246
  mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=94u886UtyK40YNtdOX8WiJUImDytygdaqIzFwo_ExzI,8881
248
- mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=x1cWM2ystghHUeDZNgnaN4kI_XjFOnh1FRBRJAX-tsw,1620
247
+ mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=Hb0vcCBP-o0ET78mU4P32fnhUL65QZv-pMuv2lnCby4,1586
249
248
  mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=oplt9s-C-OGa__V456nkHwvyBe5YHxcuIJcYV9GFQHY,15521
250
249
  mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
251
- mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=qbiyBzrdWLJAKLmJV4K8jUxsAMbKGZ1vip7WNfRcpXM,4764
250
+ mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=NdiqMBERfAmIdOWKiXvZTfmICsjnSAT4-8-b6ZDKiiE,5440
252
251
  mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=hroUaoxbvKHDqM5L01p4EuYNuFjzaUQyT-HWt47LJCY,26362
253
252
  mlrun/model_monitoring/metrics/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
254
253
  mlrun/model_monitoring/metrics/histogram_distance.py,sha256=E9_WIl2vd6qNvoHVHoFcnuQk3ekbFWOdi8aU7sHrfk4,4724
@@ -273,7 +272,7 @@ mlrun/platforms/__init__.py,sha256=ggSGF7inITs6S-vj9u4S9X_5psgbA0G3GVqf7zu8qYc,2
273
272
  mlrun/platforms/iguazio.py,sha256=1h5BpdAEQJBg2vIt7ySjUADU0ip5OkaMYr0_VREi9ys,13084
274
273
  mlrun/projects/__init__.py,sha256=Lv5rfxyXJrw6WGOWJKhBz66M6t3_zsNMCfUD6waPwx4,1153
275
274
  mlrun/projects/operations.py,sha256=Y-NwrIFXpltUXcDLDQ9b33NY_r4TOPvJgO4F-xSuzoM,19252
276
- mlrun/projects/pipelines.py,sha256=Xc9tQSBBPEg1Yxn-b4RseFdfO7SvrYC-ekdw_hAcPH8,40006
275
+ mlrun/projects/pipelines.py,sha256=_589S5rtZUV6cne1yPvOVhh3oB83fIwdQqNg47R2e6I,40608
277
276
  mlrun/projects/project.py,sha256=ROcuNkjV6kA8oGrnk4-MFj_0h5D04af9oWmXqVq7-lg,184688
278
277
  mlrun/runtimes/__init__.py,sha256=0-tYDkew-Cr4DM-wztvMbzDA5xq385Jjo-GrtO_84Sc,8741
279
278
  mlrun/runtimes/base.py,sha256=g716uF0BpL6vLe75bNqpJ2SjtYW_tQqICl46d_4ljHs,37633
@@ -283,9 +282,9 @@ mlrun/runtimes/function_reference.py,sha256=iWKRe4r2GTc5S8FOIASYUNLwwne8NqIui51P
283
282
  mlrun/runtimes/generators.py,sha256=v28HdNgxdHvj888G1dTnUeQZz-D9iTO0hoGeZbCdiuQ,7241
284
283
  mlrun/runtimes/kubejob.py,sha256=ptBnMTIjukbEznkdixmbGvBqzujXrRzqNfP7ze6M76M,8660
285
284
  mlrun/runtimes/local.py,sha256=h_w0tzCfF1_tZZEjw-FJHqYmoxK-AhN2skpK7cdU1JI,22611
286
- mlrun/runtimes/pod.py,sha256=XeV6CMlCxPb776bWNESkh0ImwHeia65KL_tvCSdNzlo,63249
285
+ mlrun/runtimes/pod.py,sha256=j0zsnbZq1p_RuK5u9re7iAX-E-UVnhm3Nx9JFfHFy9U,63184
287
286
  mlrun/runtimes/remotesparkjob.py,sha256=9DPxDK8x08t9nReMo083TBxJiiqA83mHCbdtxrjj7AU,7426
288
- mlrun/runtimes/utils.py,sha256=OFATL8d0c5vKN9N2enAu2oS3b4H71RfeG776ZnfZ0J4,14332
287
+ mlrun/runtimes/utils.py,sha256=kX4SpO3zymxa8bXPJg5eSb0tfPi5NlZRl1IJCahTQuc,15004
289
288
  mlrun/runtimes/databricks_job/__init__.py,sha256=kXGBqhLN0rlAx0kTXhozGzFsIdSqW0uTSKMmsLgq_is,569
290
289
  mlrun/runtimes/databricks_job/databricks_cancel_task.py,sha256=sIqIg5DQAf4j0wCPA-G0GoxY6vacRddxCy5KDUZszek,2245
291
290
  mlrun/runtimes/databricks_job/databricks_runtime.py,sha256=p80j2_jHzlH20dHT-avjfcbaDBTY2re1WjlJjbg5uSQ,12794
@@ -294,12 +293,12 @@ mlrun/runtimes/mpijob/__init__.py,sha256=V_1gQD1VHa0Qvjqgyv8RLouH27Sy9YTwj2ZG62o
294
293
  mlrun/runtimes/mpijob/abstract.py,sha256=kDWo-IY1FKLZhI30j38Xx9HMhlUvHezfd1DT2ShoxZY,9161
295
294
  mlrun/runtimes/mpijob/v1.py,sha256=1XQZC7AIMGX_AQCbApcwpH8I7y39-v0v2O35MvxjXoo,3213
296
295
  mlrun/runtimes/nuclio/__init__.py,sha256=gx1kizzKv8pGT5TNloN1js1hdbxqDw3rM90sLVYVffY,794
297
- mlrun/runtimes/nuclio/api_gateway.py,sha256=TsEZFv-Ene2WZCS9jKReVmuMil_kIbcr9eFmmLxgsYU,25781
298
- mlrun/runtimes/nuclio/function.py,sha256=Y-lNSQJXzsYXu4wCVOB69fv_X9ZvB-uwS1UZhbQPucE,50411
296
+ mlrun/runtimes/nuclio/api_gateway.py,sha256=lSqHspGhXuf53_JiEg_vBgWo-Ykkh2jUzzFqJ_Gd_lQ,25793
297
+ mlrun/runtimes/nuclio/function.py,sha256=Eor5qem-nn64JFynwg-BShFkNRpleQWamjIY0_70Pdg,50538
299
298
  mlrun/runtimes/nuclio/nuclio.py,sha256=sLK8KdGO1LbftlL3HqPZlFOFTAAuxJACZCVl1c0Ha6E,2942
300
- mlrun/runtimes/nuclio/serving.py,sha256=qefcNtvAETt5otI4NymZnY_5Su6MTHmI35WHZsrCqww,29746
299
+ mlrun/runtimes/nuclio/serving.py,sha256=eUMqtIU6NYIVgKtxfxKN7pd9_QCo_V0aurrjUSU3s08,29754
301
300
  mlrun/runtimes/nuclio/application/__init__.py,sha256=rRs5vasy_G9IyoTpYIjYDafGoL6ifFBKgBtsXn31Atw,614
302
- mlrun/runtimes/nuclio/application/application.py,sha256=EO0hY86ZX4XWf7F5mnEX-VTbii1Q_UtVyeoCSEJa0XE,20817
301
+ mlrun/runtimes/nuclio/application/application.py,sha256=v-AqrHfp_nL3orVWzxBWTY-alW7tks6dfEEWRlKcbYE,21665
303
302
  mlrun/runtimes/nuclio/application/reverse_proxy.go,sha256=JIIYae6bXzCLf3jXuu49KWPQYoXr_FDQ2Rbo1OWKAd0,3150
304
303
  mlrun/runtimes/sparkjob/__init__.py,sha256=_KPvk0qefeLtHO6lxQE_AMOGiMTG_OT48eRCE4Z2ldw,709
305
304
  mlrun/runtimes/sparkjob/spark3job.py,sha256=1bNRy72Migrh_ZASQOx7UlSZTbB-xpNc76sz4kfc9UM,41191
@@ -309,10 +308,10 @@ mlrun/serving/remote.py,sha256=MrFByphQWmIsKXqw-MOwl2Q1hbtWReYVRKvlcKj9pfw,17980
309
308
  mlrun/serving/routers.py,sha256=tjTAiLkV-BcRnUfbTqfrKB0j2LMTMygG_2oV_eQ26bs,55470
310
309
  mlrun/serving/server.py,sha256=LUf38ArOvs1cUbqxr3ZT015DTr4G5GIlToRaKqbhamc,21512
311
310
  mlrun/serving/serving_wrapper.py,sha256=R670-S6PX_d5ER6jiHtRvacuPyFzQH0mEf2K0sBIIOM,836
312
- mlrun/serving/states.py,sha256=VuRqrZG-Vhhy8Nfi0IiYG2Adn4kAIDZsWgRDfcOKibo,59641
311
+ mlrun/serving/states.py,sha256=UX0rn1QR3YsO-KbHCnPRoO_y4RvsGSjenNMauV_1iPg,59975
313
312
  mlrun/serving/utils.py,sha256=lej7XcUPX1MmHkEOi_0KZRGSpfbmpnE0GK_Sn4zLkHY,4025
314
313
  mlrun/serving/v1_serving.py,sha256=by4myxlnwyZ0ijQ5fURilGCK1sUpdQL2Il1VR3Xqpxg,11805
315
- mlrun/serving/v2_serving.py,sha256=ARsAU0xaQqZoYWdtTLauMPlIX33Nus-BFQOTPZBYda8,24496
314
+ mlrun/serving/v2_serving.py,sha256=5h24wa_S4akkoPQvdN4yz_KJpr_-zU9JoKPTafZGZ60,24664
316
315
  mlrun/track/__init__.py,sha256=LWRUHJt8JyFW17FyNPOVyWd-NXTf1iptzsK9KFj5fuY,765
317
316
  mlrun/track/tracker.py,sha256=hSi9sMxB7hhZalt6Q8GXDnK4UoCbXHzKTrpUPC9hZv4,3555
318
317
  mlrun/track/tracker_manager.py,sha256=IYBl99I62IC6VCCmG1yt6JoHNOQXa53C4DURJ2sWgio,5726
@@ -323,9 +322,9 @@ mlrun/utils/async_http.py,sha256=CZY8hNBMQaWrT6PLplyocCFbzaKrJnknFUP0e6kcDBw,117
323
322
  mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,3450
324
323
  mlrun/utils/clones.py,sha256=mJpx4nyFiY6jlBCvFABsNuyi_mr1mvfPWn81vlafpOU,7361
325
324
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
326
- mlrun/utils/db.py,sha256=2TydIZzJJs9Rf8Qid6ze-Odb1HIzSPAT-Jr-HuHAris,1863
327
- mlrun/utils/helpers.py,sha256=TUADKuE5d9jDpjiykNbQ9fV2G3e0StaZIsAcIX12VoI,56948
328
- mlrun/utils/http.py,sha256=l_JCPrCq8bfYUcUcAFWUPvb9Xu-93bLGIhV-H-XCU9s,8707
325
+ mlrun/utils/db.py,sha256=blQgkWMfFH9lcN4sgJQcPQgEETz2Dl_zwbVA0SslpFg,2186
326
+ mlrun/utils/helpers.py,sha256=ZBLxZ0rJV-rRsM3lwmIG92KT2rFLpkJyPS9-8Loh3Lg,57703
327
+ mlrun/utils/http.py,sha256=t6FrXQstZm9xVVjxqIGiLzrwZNCR4CSienSOuVgNIcI,8706
329
328
  mlrun/utils/logger.py,sha256=cag2J30-jynIHmHZ2J8RYmVMNhYBGgAoimc5sbk-A1U,10016
330
329
  mlrun/utils/regex.py,sha256=b0AUa2THS-ELzJj0grl5b8Stq609F2XomTZkD9SB1fQ,4900
331
330
  mlrun/utils/retryer.py,sha256=GzDMeATklqxcKSLYaFYcqioh8e5cbWRxA1_XKrGR1A4,7570
@@ -342,11 +341,11 @@ mlrun/utils/notifications/notification/ipython.py,sha256=ZtVL30B_Ha0VGoo4LxO-voT
342
341
  mlrun/utils/notifications/notification/slack.py,sha256=wqpFGr5BTvFO5KuUSzFfxsgmyU1Ohq7fbrGeNe9TXOk,7006
343
342
  mlrun/utils/notifications/notification/webhook.py,sha256=cb9w1Mc8ENfJBdgan7iiVHK9eVls4-R3tUxmXM-P-8I,4746
344
343
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
345
- mlrun/utils/version/version.json,sha256=zEtEwyoNa009X90xhQ4jFOfgdeXH8KwRfsHjXy_i7-I,89
344
+ mlrun/utils/version/version.json,sha256=6htdTGo6dQazUoYgASl4PFqjC8v3k5-ECiUpEzlpoLc,89
346
345
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
347
- mlrun-1.7.0rc34.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
348
- mlrun-1.7.0rc34.dist-info/METADATA,sha256=nAG6_6ocnS0VmLAyKlqb_EiEAGlCqylo-aMGixGAB8o,19534
349
- mlrun-1.7.0rc34.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
350
- mlrun-1.7.0rc34.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
351
- mlrun-1.7.0rc34.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
352
- mlrun-1.7.0rc34.dist-info/RECORD,,
346
+ mlrun-1.7.0rc36.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
347
+ mlrun-1.7.0rc36.dist-info/METADATA,sha256=3aVlqA_qRr9Q5Va5XKUvMuk24tZp8D67sk1oR_zG0-Q,19681
348
+ mlrun-1.7.0rc36.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
349
+ mlrun-1.7.0rc36.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
350
+ mlrun-1.7.0rc36.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
351
+ mlrun-1.7.0rc36.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.1.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,216 +0,0 @@
1
- # Copyright 2023 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
-
16
- import prometheus_client
17
-
18
- from mlrun.common.schemas.model_monitoring import EventFieldType, PrometheusMetric
19
-
20
- # Memory path for Prometheus registry file
21
- _registry_path = "/tmp/prom-reg.txt"
22
-
23
- # Initializing Promethues metric collector registry
24
- _registry: prometheus_client.CollectorRegistry = prometheus_client.CollectorRegistry()
25
-
26
- # The following real-time metrics are being updated through the monitoring stream graph steps
27
- _prediction_counter: prometheus_client.Counter = prometheus_client.Counter(
28
- name=PrometheusMetric.PREDICTIONS_TOTAL,
29
- documentation="Counter for total predictions",
30
- registry=_registry,
31
- labelnames=[
32
- EventFieldType.PROJECT,
33
- EventFieldType.ENDPOINT_ID,
34
- EventFieldType.MODEL,
35
- EventFieldType.ENDPOINT_TYPE,
36
- ],
37
- )
38
- _model_latency: prometheus_client.Summary = prometheus_client.Summary(
39
- name=PrometheusMetric.MODEL_LATENCY_SECONDS,
40
- documentation="Summary for for model latency",
41
- registry=_registry,
42
- labelnames=[
43
- EventFieldType.PROJECT,
44
- EventFieldType.ENDPOINT_ID,
45
- EventFieldType.MODEL,
46
- EventFieldType.ENDPOINT_TYPE,
47
- ],
48
- )
49
- _income_features: prometheus_client.Gauge = prometheus_client.Gauge(
50
- name=PrometheusMetric.INCOME_FEATURES,
51
- documentation="Samples of features and predictions",
52
- registry=_registry,
53
- labelnames=[
54
- EventFieldType.PROJECT,
55
- EventFieldType.ENDPOINT_ID,
56
- EventFieldType.METRIC,
57
- ],
58
- )
59
- _error_counter: prometheus_client.Counter = prometheus_client.Counter(
60
- name=PrometheusMetric.ERRORS_TOTAL,
61
- documentation="Counter for total errors",
62
- registry=_registry,
63
- labelnames=[
64
- EventFieldType.PROJECT,
65
- EventFieldType.ENDPOINT_ID,
66
- EventFieldType.MODEL,
67
- ],
68
- )
69
-
70
- # The following metrics are being updated through the model monitoring batch job
71
- _batch_metrics: prometheus_client.Gauge = prometheus_client.Gauge(
72
- name=PrometheusMetric.DRIFT_METRICS,
73
- documentation="Results from the batch drift analysis",
74
- registry=_registry,
75
- labelnames=[
76
- EventFieldType.PROJECT,
77
- EventFieldType.ENDPOINT_ID,
78
- EventFieldType.METRIC,
79
- ],
80
- )
81
- _drift_status: prometheus_client.Enum = prometheus_client.Enum(
82
- name=PrometheusMetric.DRIFT_STATUS,
83
- documentation="Drift status of the model endpoint",
84
- registry=_registry,
85
- states=["NO_DRIFT", "DRIFT_DETECTED", "POSSIBLE_DRIFT"],
86
- labelnames=[EventFieldType.PROJECT, EventFieldType.ENDPOINT_ID],
87
- )
88
-
89
-
90
- def _write_registry(func):
91
- def wrapper(*args, **kwargs):
92
- global _registry
93
- """A wrapper function to update the registry file each time a metric has been updated"""
94
- func(*args, **kwargs)
95
- prometheus_client.write_to_textfile(path=_registry_path, registry=_registry)
96
-
97
- return wrapper
98
-
99
-
100
- @_write_registry
101
- def write_predictions_and_latency_metrics(
102
- project: str, endpoint_id: str, latency: int, model_name: str, endpoint_type: int
103
- ):
104
- """
105
- Update the prediction counter and the latency value of the provided model endpoint within Prometheus registry.
106
- Please note that while the prediction counter is ALWAYS increasing by 1,the latency summary metric is being
107
- increased by the event latency time. Grafana dashboard will query the average latency time by dividing the total
108
- latency value by the total amount of predictions.
109
-
110
- :param project: Project name.
111
- :param endpoint_id: Model endpoint unique id.
112
- :param latency: Latency time (microsecond) in which the event has been processed through the model server.
113
- :param model_name: Model name which will be used by Grafana for displaying the results by model.
114
- :param endpoint_type: Endpoint type that is represented by an int (possible values: 1,2,3) corresponding to the
115
- Enum class :py:class:`~mlrun.common.schemas.model_monitoring.EndpointType`.
116
- """
117
-
118
- # Increase the prediction counter by 1
119
- _prediction_counter.labels(
120
- project=project,
121
- endpoint_id=endpoint_id,
122
- model=model_name,
123
- endpoint_type=endpoint_type,
124
- ).inc(1)
125
-
126
- # Increase the latency value according to the provided latency of the current event
127
- _model_latency.labels(
128
- project=project,
129
- endpoint_id=endpoint_id,
130
- model=model_name,
131
- endpoint_type=endpoint_type,
132
- ).observe(latency)
133
-
134
-
135
- @_write_registry
136
- def write_income_features(project: str, endpoint_id: str, features: dict[str, float]):
137
- """Update a sample of features.
138
-
139
- :param project: Project name.
140
- :param endpoint_id: Model endpoint unique id.
141
- :param features: Dictionary in which the key is a feature name and the value is a float number.
142
-
143
-
144
- """
145
-
146
- for metric in features:
147
- _income_features.labels(
148
- project=project, endpoint_id=endpoint_id, metric=metric
149
- ).set(value=features[metric])
150
-
151
-
152
- @_write_registry
153
- def write_drift_metrics(project: str, endpoint_id: str, metric: str, value: float):
154
- """Update drift metrics that have been calculated through the monitoring batch job
155
-
156
- :param project: Project name.
157
- :param endpoint_id: Model endpoint unique id.
158
- :param metric: Metric name (e.g. TVD, Hellinger).
159
- :param value: Metric value as a float.
160
-
161
- """
162
-
163
- _batch_metrics.labels(project=project, endpoint_id=endpoint_id, metric=metric).set(
164
- value=value
165
- )
166
-
167
-
168
- @_write_registry
169
- def write_drift_status(project: str, endpoint_id: str, drift_status: str):
170
- """
171
- Update the drift status enum for a specific model endpoint.
172
-
173
- :param project: Project name.
174
- :param endpoint_id: Model endpoint unique id.
175
- :param drift_status: Drift status value, can be one of the following: 'NO_DRIFT', 'DRIFT_DETECTED', or
176
- 'POSSIBLE_DRIFT'.
177
- """
178
-
179
- _drift_status.labels(project=project, endpoint_id=endpoint_id).state(drift_status)
180
-
181
-
182
- @_write_registry
183
- def write_errors(project: str, endpoint_id: str, model_name: str):
184
- """
185
- Update the error counter for a specific model endpoint.
186
-
187
- :param project: Project name.
188
- :param endpoint_id: Model endpoint unique id.
189
- :param model_name: Model name. Will be used by Grafana to show the amount of errors per model by time.
190
- """
191
-
192
- _error_counter.labels(
193
- project=project, endpoint_id=endpoint_id, model=model_name
194
- ).inc(1)
195
-
196
-
197
- def get_registry() -> str:
198
- """Returns the parsed registry file according to the exposition format of Prometheus."""
199
-
200
- # Read the registry file (note that the text is stored in UTF-8 format)
201
- f = open(_registry_path)
202
- lines = f.read()
203
- f.close()
204
-
205
- # Reset part of the metrics to avoid a repeating scraping of the same value
206
- clean_metrics()
207
-
208
- return lines
209
-
210
-
211
- @_write_registry
212
- def clean_metrics():
213
- """Clean the income features values. As these results are relevant only for a certain timestamp, we will remove
214
- them from the global registry after they have been scraped by Prometheus."""
215
-
216
- _income_features.clear()