mlrun 1.8.0rc42__py3-none-any.whl → 1.8.0rc44__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.

@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  import math
15
- from datetime import datetime, timedelta, timezone
15
+ from datetime import datetime, timedelta
16
16
  from io import StringIO
17
17
  from typing import Callable, Literal, Optional, Union
18
18
 
@@ -72,6 +72,15 @@ class V3IOTSDBConnector(TSDBConnector):
72
72
  self._frames_client: Optional[v3io_frames.client.ClientBase] = None
73
73
  self._init_tables_path()
74
74
  self._create_table = create_table
75
+ self._v3io_client = None
76
+
77
+ @property
78
+ def v3io_client(self):
79
+ if not self._v3io_client:
80
+ self._v3io_client = mlrun.utils.v3io_clients.get_v3io_client(
81
+ endpoint=mlrun.mlconf.v3io_api, access_key=self._v3io_access_key
82
+ )
83
+ return self._v3io_client
75
84
 
76
85
  @property
77
86
  def frames_client(self) -> v3io_frames.client.ClientBase:
@@ -147,6 +156,21 @@ class V3IOTSDBConnector(TSDBConnector):
147
156
  )
148
157
  self.tables[mm_schemas.V3IOTSDBTables.PREDICTIONS] = monitoring_predictions_path
149
158
 
159
+ # initialize kv table
160
+ last_request_full_table_path = (
161
+ mlrun.mlconf.get_model_monitoring_file_target_path(
162
+ project=self.project,
163
+ kind=mm_schemas.FileTargetKind.LAST_REQUEST,
164
+ )
165
+ )
166
+ (
167
+ _,
168
+ _,
169
+ self.last_request_table,
170
+ ) = mlrun.common.model_monitoring.helpers.parse_model_endpoint_store_prefix(
171
+ last_request_full_table_path
172
+ )
173
+
150
174
  def create_tables(self) -> None:
151
175
  """
152
176
  Create the tables using the TSDB connector. These are the tables that are stored in the V3IO TSDB:
@@ -252,6 +276,16 @@ class V3IOTSDBConnector(TSDBConnector):
252
276
  key=mm_schemas.EventFieldType.ENDPOINT_ID,
253
277
  )
254
278
 
279
+ # Write last request timestamp to KV table
280
+ graph.add_step(
281
+ "storey.NoSqlTarget",
282
+ name="KVLastRequest",
283
+ after="tsdb_predictions",
284
+ table=f"v3io:///users/{self.last_request_table}",
285
+ columns=[EventFieldType.LAST_REQUEST_TIMESTAMP],
286
+ index_cols=[EventFieldType.ENDPOINT_ID],
287
+ )
288
+
255
289
  # Emits the event in window size of events based on sample_window size (10 by default)
256
290
  graph.add_step(
257
291
  "storey.steps.SampleWindow",
@@ -458,12 +492,31 @@ class V3IOTSDBConnector(TSDBConnector):
458
492
  error=mlrun.errors.err_to_str(e),
459
493
  project=self.project,
460
494
  )
495
+
496
+ # Clean the last request records from the KV table
497
+ self._delete_last_request_records(endpoint_ids=endpoint_ids)
498
+
461
499
  logger.debug(
462
500
  "Deleted all model endpoint resources using the V3IO connector",
463
501
  project=self.project,
464
502
  number_of_endpoints_to_delete=len(endpoint_ids),
465
503
  )
466
504
 
505
+ def _delete_last_request_records(self, endpoint_ids: list[str]):
506
+ for endpoint_id in endpoint_ids:
507
+ try:
508
+ self.v3io_client.kv.delete(
509
+ container=self.container,
510
+ table=self.last_request_table,
511
+ key=endpoint_id,
512
+ )
513
+ except Exception as e:
514
+ logger.warning(
515
+ f"Failed to delete last request record for endpoint '{endpoint_id}'",
516
+ error=mlrun.errors.err_to_str(e),
517
+ project=self.project,
518
+ )
519
+
467
520
  def get_model_endpoint_real_time_metrics(
468
521
  self, endpoint_id: str, metrics: list[str], start: str, end: str
469
522
  ) -> dict[str, list[tuple[str, float]]]:
@@ -826,41 +879,34 @@ class V3IOTSDBConnector(TSDBConnector):
826
879
  endpoint_ids: Union[str, list[str]],
827
880
  start: Optional[datetime] = None,
828
881
  end: Optional[datetime] = None,
829
- get_raw: bool = False,
830
- ) -> Union[pd.DataFrame, list[v3io_frames.client.RawFrame]]:
831
- filter_query = self._get_endpoint_filter(endpoint_id=endpoint_ids)
832
- start, end = self._get_start_end(start, end)
833
-
834
- res = self._get_records(
835
- table=mm_schemas.V3IOTSDBTables.PREDICTIONS,
836
- start=start,
837
- end=end,
838
- filter_query=filter_query,
839
- agg_funcs=["last"],
840
- get_raw=get_raw,
841
- )
882
+ ) -> dict[str, float]:
883
+ if isinstance(endpoint_ids, str):
884
+ filter_expression = f"__name=='{endpoint_ids}'"
885
+ else:
886
+ filter_expression = " OR ".join(
887
+ [f"__name=='{endpoint_id}'" for endpoint_id in endpoint_ids]
888
+ )
842
889
 
843
- if get_raw:
844
- return res
890
+ # Get the last request timestamp for each endpoint from the KV table.
891
+ # The result of the query is a list of dictionaries,
892
+ # each dictionary contains the endpoint id and the last request timestamp.
845
893
 
846
- df = res
847
- if not df.empty:
848
- df.rename(
849
- columns={
850
- f"last({mm_schemas.EventFieldType.LAST_REQUEST_TIMESTAMP})": mm_schemas.EventFieldType.LAST_REQUEST,
851
- f"last({mm_schemas.EventFieldType.LATENCY})": f"last_{mm_schemas.EventFieldType.LATENCY}",
852
- },
853
- inplace=True,
854
- )
855
- df[mm_schemas.EventFieldType.LAST_REQUEST] = df[
856
- mm_schemas.EventFieldType.LAST_REQUEST
857
- ].map(
858
- lambda last_request: datetime.fromtimestamp(
859
- last_request, tz=timezone.utc
860
- )
894
+ try:
895
+ res = self.v3io_client.kv.new_cursor(
896
+ container=self.container,
897
+ table_path=self.last_request_table,
898
+ filter_expression=filter_expression,
899
+ ).all()
900
+ except Exception as e:
901
+ logger.warning(
902
+ "Failed to get last request timestamp from V3IO KV table.",
903
+ err=mlrun.errors.err_to_str(e),
904
+ project=self.project,
905
+ table=self.last_request_table,
861
906
  )
907
+ return {}
862
908
 
863
- return df.reset_index(drop=True)
909
+ return {d["__name"]: d["last_request_timestamp"] for d in res}
864
910
 
865
911
  def get_drift_status(
866
912
  self,
@@ -1037,7 +1083,6 @@ class V3IOTSDBConnector(TSDBConnector):
1037
1083
  model_endpoint_objects_by_uid[uid] = model_endpoint_object
1038
1084
 
1039
1085
  error_count_res = self.get_error_count(endpoint_ids=uids, get_raw=True)
1040
- last_request_res = self.get_last_request(endpoint_ids=uids, get_raw=True)
1041
1086
  avg_latency_res = self.get_avg_latency(endpoint_ids=uids, get_raw=True)
1042
1087
  drift_status_res = self.get_drift_status(endpoint_ids=uids, get_raw=True)
1043
1088
 
@@ -1060,11 +1105,7 @@ class V3IOTSDBConnector(TSDBConnector):
1060
1105
  "count(error_count)",
1061
1106
  error_count_res,
1062
1107
  )
1063
- add_metric(
1064
- "last_request",
1065
- "last(last_request_timestamp)",
1066
- last_request_res,
1067
- )
1108
+
1068
1109
  add_metric(
1069
1110
  "avg_latency",
1070
1111
  "avg(latency)",
@@ -1075,4 +1116,19 @@ class V3IOTSDBConnector(TSDBConnector):
1075
1116
  "max(result_status)",
1076
1117
  drift_status_res,
1077
1118
  )
1119
+
1120
+ self._enrich_mep_with_last_request(
1121
+ model_endpoint_objects_by_uid=model_endpoint_objects_by_uid
1122
+ )
1123
+
1078
1124
  return list(model_endpoint_objects_by_uid.values())
1125
+
1126
+ def _enrich_mep_with_last_request(
1127
+ self,
1128
+ model_endpoint_objects_by_uid: dict[str, mlrun.common.schemas.ModelEndpoint],
1129
+ ):
1130
+ last_request_dictionary = self.get_last_request(
1131
+ endpoint_ids=list(model_endpoint_objects_by_uid.keys())
1132
+ )
1133
+ for uid, mep in model_endpoint_objects_by_uid.items():
1134
+ mep.status.last_request = last_request_dictionary.get(uid)
mlrun/serving/states.py CHANGED
@@ -959,7 +959,7 @@ class ModelRunner(storey.ParallelExecution):
959
959
  return self.model_selector.select(event, models)
960
960
 
961
961
 
962
- class ModelRunnerStep(TaskStep):
962
+ class ModelRunnerStep(TaskStep, StepToDict):
963
963
  """
964
964
  Runs multiple Models on each event.
965
965
 
@@ -981,29 +981,41 @@ class ModelRunnerStep(TaskStep):
981
981
  model_selector: Optional[Union[str, ModelSelector]] = None,
982
982
  **kwargs,
983
983
  ):
984
- self._models = []
985
984
  super().__init__(
986
985
  *args,
987
986
  class_name="mlrun.serving.ModelRunner",
988
- class_args=dict(runnables=self._models, model_selector=model_selector),
987
+ class_args=dict(model_selector=model_selector),
989
988
  **kwargs,
990
989
  )
991
990
 
992
- def add_model(self, model: Model) -> None:
993
- """Add a Model to this ModelRunner."""
994
- self._models.append(model)
991
+ def add_model(self, model: Union[str, Model], **model_parameters) -> None:
992
+ """
993
+ Add a Model to this ModelRunner.
994
+
995
+ :param model: Model class name or object
996
+ :param model_parameters: Parameters for model instantiation
997
+ """
998
+ models = self.class_args.get("models", [])
999
+ models.append((model, model_parameters))
1000
+ self.class_args["models"] = models
995
1001
 
996
1002
  def init_object(self, context, namespace, mode="sync", reset=False, **extra_kwargs):
997
1003
  model_selector = self.class_args.get("model_selector")
1004
+ models = self.class_args.get("models")
998
1005
  if isinstance(model_selector, str):
999
1006
  model_selector = get_class(model_selector, namespace)()
1007
+ model_objects = []
1008
+ for model, model_params in models:
1009
+ if not isinstance(model, Model):
1010
+ model = get_class(model, namespace)(**model_params)
1011
+ model_objects.append(model)
1000
1012
  self._async_object = ModelRunner(
1001
- self.class_args.get("runnables"),
1002
1013
  model_selector=model_selector,
1014
+ runnables=model_objects,
1003
1015
  )
1004
1016
 
1005
1017
 
1006
- class QueueStep(BaseStep):
1018
+ class QueueStep(BaseStep, StepToDict):
1007
1019
  """queue step, implement an async queue or represent a stream"""
1008
1020
 
1009
1021
  kind = "queue"
@@ -1799,21 +1811,13 @@ def params_to_step(
1799
1811
 
1800
1812
  class_args = class_args or {}
1801
1813
 
1802
- if class_name and hasattr(class_name, "to_dict"):
1803
- struct = class_name.to_dict()
1804
- kind = struct.get("kind", StepKinds.task)
1805
- name = name or struct.get("name", struct.get("class_name"))
1806
- cls = classes_map.get(kind, RootFlowStep)
1807
- step = cls.from_dict(struct)
1808
- step.function = function
1809
- step.full_event = full_event or step.full_event
1810
- step.input_path = input_path or step.input_path
1811
- step.result_path = result_path or step.result_path
1812
- if kind == StepKinds.task:
1813
- step.model_endpoint_creation_strategy = model_endpoint_creation_strategy
1814
- step.endpoint_type = endpoint_type
1814
+ if isinstance(class_name, QueueStep):
1815
+ if not name or class_name.name:
1816
+ raise MLRunInvalidArgumentError("queue name must be specified")
1817
+
1818
+ step = class_name
1815
1819
 
1816
- elif class_name and class_name in queue_class_names:
1820
+ elif class_name in queue_class_names:
1817
1821
  if "path" not in class_args:
1818
1822
  raise MLRunInvalidArgumentError(
1819
1823
  "path=<stream path or None> must be specified for queues"
@@ -1826,6 +1830,20 @@ def params_to_step(
1826
1830
  class_args["full_event"] = full_event
1827
1831
  step = QueueStep(name, **class_args)
1828
1832
 
1833
+ elif class_name and hasattr(class_name, "to_dict"):
1834
+ struct = class_name.to_dict()
1835
+ kind = struct.get("kind", StepKinds.task)
1836
+ name = name or struct.get("name", struct.get("class_name"))
1837
+ cls = classes_map.get(kind, RootFlowStep)
1838
+ step = cls.from_dict(struct)
1839
+ step.function = function
1840
+ step.full_event = full_event or step.full_event
1841
+ step.input_path = input_path or step.input_path
1842
+ step.result_path = result_path or step.result_path
1843
+ if kind == StepKinds.task:
1844
+ step.model_endpoint_creation_strategy = model_endpoint_creation_strategy
1845
+ step.endpoint_type = endpoint_type
1846
+
1829
1847
  elif class_name and class_name.startswith("*"):
1830
1848
  routes = class_args.get("routes", None)
1831
1849
  class_name = class_name[1:]
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "3a6636b3c157e7b97066aafb130368828f360190",
3
- "version": "1.8.0-rc42"
2
+ "git_commit": "636cd70a5d3e77937a343927a8fe4bc5c24d0a58",
3
+ "version": "1.8.0-rc44"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mlrun
3
- Version: 1.8.0rc42
3
+ Version: 1.8.0rc44
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -73,7 +73,7 @@ mlrun/common/schemas/serving.py,sha256=81ZxlDHP1fm9VPmXZGkjZj2n6cVRmqEN478hsmvv5
73
73
  mlrun/common/schemas/tag.py,sha256=HRZi5QZ4vVGaCr2AMk9eJgcNiAIXmH4YDc8a4fvF770,893
74
74
  mlrun/common/schemas/workflow.py,sha256=6u9niXfXpV-_c2rZL97gFIdAnOfM5WK-OCbrM5Kk34s,2108
75
75
  mlrun/common/schemas/model_monitoring/__init__.py,sha256=SxHG-GIdcTEuFxpKzkUdT9zKaU5Xqz9qF1uCwXvZ2z8,1709
76
- mlrun/common/schemas/model_monitoring/constants.py,sha256=YhbybKq2y8wKG9XZGz9sO1SrhDRIF9bF2m5-mbzc6AI,12428
76
+ mlrun/common/schemas/model_monitoring/constants.py,sha256=BWGNxOUoXMcR2epGck_UId1C33bbmxhLwgQYktIrPxE,12462
77
77
  mlrun/common/schemas/model_monitoring/grafana.py,sha256=THQlLfPBevBksta8p5OaIsBaJtsNSXexLvHrDxOaVns,2095
78
78
  mlrun/common/schemas/model_monitoring/model_endpoints.py,sha256=O0i-pvzcXJVgf9E_tNcudDTa1xLaJchzPGfZZ8MNdD4,11482
79
79
  mlrun/data_types/__init__.py,sha256=unRo9GGwCmj0hBKBRsXJ2P4BzpQaddlQTvIrVQaKluI,984
@@ -112,20 +112,21 @@ mlrun/db/base.py,sha256=U77W97LMeVGRmXHH_gafZE95TiFLcI27HJVkAmLTPaQ,30788
112
112
  mlrun/db/factory.py,sha256=yP2vVmveUE7LYTCHbS6lQIxP9rW--zdISWuPd_I3d_4,2111
113
113
  mlrun/db/httpdb.py,sha256=O1PCDOfax3YdwAlYKj-nALcBVTBM9EHWQyhQwNlJS44,231559
114
114
  mlrun/db/nopdb.py,sha256=kjvoaWWc4OmQ7AdQKomtRzviJy1_dK3jdMCJNkic34o,27223
115
- mlrun/feature_store/__init__.py,sha256=8vLyiRgLyfzn5yjd46mjZ__OXm5MiDcZL5nQk63micc,1290
116
- mlrun/feature_store/api.py,sha256=YBnsPjd6YFy9cJfJNqzwAqYYpoGgFzi6Mbt4NgYSVbE,36987
115
+ mlrun/feature_store/__init__.py,sha256=SlI845bWt6xX34SXunHHqhmFAR9-5v2ak8N-qpcAPGo,1328
116
+ mlrun/feature_store/api.py,sha256=qKj5Tk6prTab6XWatWhBuPRVp0eJEctoxRMN2wz48vA,32168
117
117
  mlrun/feature_store/common.py,sha256=Z7USI-d1fo0iwBMsqMBtJflJfyuiV3BLoDXQPSAoBAs,12826
118
118
  mlrun/feature_store/feature_set.py,sha256=lakkuKYAvYDJKDTE0xJa5n1nEipMPwpLki-J3CMk0mQ,56221
119
- mlrun/feature_store/feature_vector.py,sha256=9EJXdnPklwKdkYDKV0hxByIjd59K6R2S-DnP7jZlwoY,44602
119
+ mlrun/feature_store/feature_vector.py,sha256=DY7wUx3ifqWqjzLliCnZcosbMFsIY0WDeF4ToDQcXd8,31068
120
+ mlrun/feature_store/feature_vector_utils.py,sha256=1EIzCG5dtZu-lbvVP68yv2u8NkWo-aSin-uH5iLMByM,17189
120
121
  mlrun/feature_store/ingestion.py,sha256=kT3Hbz1PBjsJd-GPBm2ap0sg9-fiXxaSXoEIo-dOXpU,11361
121
122
  mlrun/feature_store/steps.py,sha256=IXvxKxTAxkeeZQmbHp7CkqmkfBYGnMaP8OBv-7moj2M,29327
122
123
  mlrun/feature_store/retrieval/__init__.py,sha256=bwA4copPpLQi8fyoUAYtOyrlw0-6f3-Knct8GbJSvRg,1282
123
- mlrun/feature_store/retrieval/base.py,sha256=XupWdfxEsqElOvpCPEE-sKaE3EU_AhNCS1ANBUB9nS8,30456
124
+ mlrun/feature_store/retrieval/base.py,sha256=ehopCTJA75mv8YQph5JEzWpErl6EvVXvU393SnHcxSU,30434
124
125
  mlrun/feature_store/retrieval/dask_merger.py,sha256=t60xciYp6StUQLEyFyI4JK5NpWkdBy2MGCs6beimaWU,5575
125
126
  mlrun/feature_store/retrieval/job.py,sha256=_EltjdbAuQgBUTNzGdlz58Ite1QqFBCnX61Kr1VdW04,8631
126
127
  mlrun/feature_store/retrieval/local_merger.py,sha256=jM-8ta44PeNUc1cKMPs-TxrO9t8pXbwu_Tw8MZrLxUY,4513
127
128
  mlrun/feature_store/retrieval/spark_merger.py,sha256=XTMK40Y0bUli1Z9KwtYmMSQ8a4WOHEHzIq9uzk1mfc4,10548
128
- mlrun/feature_store/retrieval/storey_merger.py,sha256=5YM0UPrLjGOobulHkowRO-1LuvFD2cm_0GxcpnTdu0I,6314
129
+ mlrun/feature_store/retrieval/storey_merger.py,sha256=gzqK1K2xtgFmreZDL5Y6U6MNunOIdS75bhzGmP38wRE,6320
129
130
  mlrun/frameworks/__init__.py,sha256=f-iaBYrQ3Qtu_Jh482ZosSZppI0M_JeeXuDhoLcZTBk,641
130
131
  mlrun/frameworks/parallel_coordinates.py,sha256=UuZ0b0ACsaaH0rDya_0YMOWwaH6zhEyDIssOwEgqOAo,11588
131
132
  mlrun/frameworks/_common/__init__.py,sha256=1ovfHxNW8V9ERVVZx8lPFVGBtsXHaHli7pZPR-Ixn8g,860
@@ -218,7 +219,7 @@ mlrun/launcher/local.py,sha256=775HY-8S9LFUX5ubGXrLO0N1lVh8bn-DHFmNYuNqQPA,11451
218
219
  mlrun/launcher/remote.py,sha256=rLJW4UAnUT5iUb4BsGBOAV3K4R29a0X4lFtRkVKlyYU,7709
219
220
  mlrun/model_monitoring/__init__.py,sha256=ELy7njEtZnz09Dc6PGZSFFEGtnwI15bJNWM3Pj4_YIs,753
220
221
  mlrun/model_monitoring/api.py,sha256=nkNlBq_X12tGgs4rbVutzq-ce9P49zAyg_hvffwmz7I,27544
221
- mlrun/model_monitoring/controller.py,sha256=ulrIjjx5Gf8Uwtk9hmxSnkP5fIXkQgFG7PsVkncaUpE,31756
222
+ mlrun/model_monitoring/controller.py,sha256=kRKoI47YMAhL8YdqD5D7n8fX4vqcX4uWDl6gi5WVnqA,31698
222
223
  mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
223
224
  mlrun/model_monitoring/helpers.py,sha256=Q4vcc7x41lCJdFQIE8UFPY0WIQ8a-4tSGhziMA4ib4w,22003
224
225
  mlrun/model_monitoring/stream_processing.py,sha256=4M0H4txMlsC2Q5iKTPp992KWoNPAJjPHj9rqWhXbl8w,33321
@@ -236,15 +237,15 @@ mlrun/model_monitoring/db/__init__.py,sha256=r47xPGZpIfMuv8J3PQCZTSqVPMhUta4sSJC
236
237
  mlrun/model_monitoring/db/_schedules.py,sha256=AKyCJBAt0opNE3K3pg2TjCoD_afk1LKw5TY88rLQ2VA,6097
237
238
  mlrun/model_monitoring/db/_stats.py,sha256=VVMWLMqG3Us3ozBkLaokJF22Ewv8WKmVE1-OvS_g9vA,6943
238
239
  mlrun/model_monitoring/db/tsdb/__init__.py,sha256=4S86V_Ot_skE16SLkw0WwsaAUB0ECH6SoJdp-TIu6s8,4645
239
- mlrun/model_monitoring/db/tsdb/base.py,sha256=ayWMWmpm35mDVTEP9AvU-P5_5rBAkBO1hULajkgt0Vw,26995
240
+ mlrun/model_monitoring/db/tsdb/base.py,sha256=55lZfKmAWPW_Zi8DJhGib6euYhRhNxEpj528_rfh9Ww,26894
240
241
  mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
241
242
  mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
242
243
  mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=EslhaR65jfeNdD5Ibk-3Hb4e5r5qYPfHb9rTChX3sG0,12689
243
244
  mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=Uadj0UvAmln2MxDWod-kAzau1uNlqZh981rPhbUH_5M,2857
244
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=wjoxlNUFoHgMiG7yAMNsk1_1scca9EmMlM2Jp4Qv00c,37796
245
+ mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=gDK6nNbAwTprs2UAI1r7r6loZB40I_8iQ2JvedvAs78,37765
245
246
  mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
246
247
  mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=_-zo9relCDtjGgievxAcAP9gVN9nDWs8BzGtFwTjb9M,6284
247
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=oIGkdjp9PH-giOLzeRwzM3KIHCkSWOAgZN92DiWoWBQ,42635
248
+ mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=4jpHjG_xV6RePyrw2Xg_Y1netMorMDeZHPtU_2YZlog,44719
248
249
  mlrun/model_monitoring/metrics/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
249
250
  mlrun/model_monitoring/metrics/histogram_distance.py,sha256=E9_WIl2vd6qNvoHVHoFcnuQk3ekbFWOdi8aU7sHrfk4,4724
250
251
  mlrun/package/__init__.py,sha256=v7VDyK9kDOOuDvFo4oiGV2fx-vM1KL7fdN9pGLakhUQ,7008
@@ -305,7 +306,7 @@ mlrun/serving/remote.py,sha256=gxJkj_J3j-sZcVUbUzbAmJafP6t6y4NVFsu0kWmYngA,18818
305
306
  mlrun/serving/routers.py,sha256=SY6AsaiSnh8ssXq8hQE2z9MYapOxFOFJBx9QomiZMO8,53915
306
307
  mlrun/serving/server.py,sha256=KiNhW0nTV5STZPzR6kEAUFVzCCAX8qv0g9AoCopARrM,23429
307
308
  mlrun/serving/serving_wrapper.py,sha256=R670-S6PX_d5ER6jiHtRvacuPyFzQH0mEf2K0sBIIOM,836
308
- mlrun/serving/states.py,sha256=VQaZPmtNPuAnczafXit_UykO-o3zIhb9l6nCz0xhXeQ,72119
309
+ mlrun/serving/states.py,sha256=Kst2N7R5SaTKYMYB8re9wTlhQwEDgkG61-4JtROKlNI,72803
309
310
  mlrun/serving/utils.py,sha256=k2EIYDWHUGkE-IBI6T0UNT32fw-KySsccIJM_LObI00,4171
310
311
  mlrun/serving/v1_serving.py,sha256=c6J_MtpE-Tqu00-6r4eJOCO6rUasHDal9W2eBIcrl50,11853
311
312
  mlrun/serving/v2_serving.py,sha256=nMxaFcc7vzjIYDqZMRGkMcvm2VxwnTCKocoYLByQdbw,23121
@@ -339,11 +340,11 @@ mlrun/utils/notifications/notification/mail.py,sha256=ZyJ3eqd8simxffQmXzqd3bgbAq
339
340
  mlrun/utils/notifications/notification/slack.py,sha256=eQvmctTh6wIG5xVOesLLV9S1-UUCu5UEQ9JIJOor3ts,7183
340
341
  mlrun/utils/notifications/notification/webhook.py,sha256=NeyIMSBojjjTJaUHmPbxMByp34GxYkl1-16NqzU27fU,4943
341
342
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
342
- mlrun/utils/version/version.json,sha256=65OWSZpvM9Y3MGeASH_-mtvz_E1p9viDfjuw4z9-CS4,89
343
+ mlrun/utils/version/version.json,sha256=ciygJ1gAo0RxZORLqRbG9wRR1xO-sfHP3MdbVhPBs0Y,89
343
344
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
344
- mlrun-1.8.0rc42.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
345
- mlrun-1.8.0rc42.dist-info/METADATA,sha256=J_7vhfXaVJiBb-XcTJ8hrSXsqqjizBM8HNBC5vNct2w,25986
346
- mlrun-1.8.0rc42.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
347
- mlrun-1.8.0rc42.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
348
- mlrun-1.8.0rc42.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
349
- mlrun-1.8.0rc42.dist-info/RECORD,,
345
+ mlrun-1.8.0rc44.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
346
+ mlrun-1.8.0rc44.dist-info/METADATA,sha256=P7-B2qIlhAydIA_24hVz9_SpUYvtyOwCCtm5R7YKoWY,25986
347
+ mlrun-1.8.0rc44.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
348
+ mlrun-1.8.0rc44.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
349
+ mlrun-1.8.0rc44.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
350
+ mlrun-1.8.0rc44.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (76.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5