mlrun 1.10.0rc34__py3-none-any.whl → 1.10.0rc35__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.

@@ -154,6 +154,7 @@ from .model_monitoring import (
154
154
  ModelEndpointSchema,
155
155
  ModelEndpointSpec,
156
156
  ModelEndpointStatus,
157
+ ModelMonitoringInfraLabel,
157
158
  ModelMonitoringMode,
158
159
  MonitoringFunctionNames,
159
160
  TSDBTarget,
@@ -30,6 +30,7 @@ from .constants import (
30
30
  ModelEndpointMonitoringMetricType,
31
31
  ModelEndpointSchema,
32
32
  ModelMonitoringAppLabel,
33
+ ModelMonitoringInfraLabel,
33
34
  ModelMonitoringMode,
34
35
  MonitoringFunctionNames,
35
36
  PredictionsQueryConstants,
@@ -332,36 +332,11 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
332
332
  project=project,
333
333
  ) as (endpoints_output, application_schedules):
334
334
 
335
- def call_do_tracking(event: Optional[dict] = None):
335
+ def call_do_tracking(
336
+ monitoring_context: mm_context.MonitoringApplicationContext,
337
+ ):
336
338
  nonlocal endpoints_output
337
339
 
338
- if event is None:
339
- event = {}
340
- monitoring_context = (
341
- mm_context.MonitoringApplicationContext._from_ml_ctx(
342
- event=event,
343
- application_name=application_name,
344
- context=context,
345
- project=project,
346
- sample_df=sample_data,
347
- feature_stats=feature_stats,
348
- )
349
- )
350
-
351
- if (
352
- monitoring_context.endpoint_id
353
- and monitoring_context.sample_df.empty
354
- ):
355
- # The current sample is empty
356
- context.logger.warning(
357
- "No sample data available for tracking",
358
- application_name=application_name,
359
- endpoint_id=monitoring_context.endpoint_id,
360
- start_time=monitoring_context.start_infer_time,
361
- end_time=monitoring_context.end_infer_time,
362
- )
363
- return
364
-
365
340
  result = self.do_tracking(monitoring_context)
366
341
  endpoints_output[monitoring_context.endpoint_id].append(
367
342
  (monitoring_context, result)
@@ -369,7 +344,7 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
369
344
  return result
370
345
 
371
346
  if endpoints is not None:
372
- resolved_endpoints = self._handle_endpoints_type_evaluate(
347
+ resolved_endpoints = self._validate_endpoints(
373
348
  project=project, endpoints=endpoints
374
349
  )
375
350
  if (
@@ -391,26 +366,24 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
391
366
  application_schedules=application_schedules,
392
367
  )
393
368
  for endpoint_name, endpoint_id in resolved_endpoints:
394
- for window_start, window_end in self._window_generator(
369
+ for monitoring_ctx in self._window_generator(
395
370
  start=start,
396
371
  end=end,
397
372
  base_period=base_period,
398
373
  application_schedules=application_schedules,
399
374
  endpoint_id=endpoint_id,
375
+ endpoint_name=endpoint_name,
400
376
  application_name=application_name,
401
377
  existing_data_handling=existing_data_handling,
378
+ sample_data=sample_data,
379
+ context=context,
380
+ project=project,
402
381
  ):
403
- result = call_do_tracking(
404
- event={
405
- mm_constants.ApplicationEvent.ENDPOINT_NAME: endpoint_name,
406
- mm_constants.ApplicationEvent.ENDPOINT_ID: endpoint_id,
407
- mm_constants.ApplicationEvent.START_INFER_TIME: window_start,
408
- mm_constants.ApplicationEvent.END_INFER_TIME: window_end,
409
- }
410
- )
382
+ result = call_do_tracking(monitoring_ctx)
411
383
  result_key = (
412
- f"{endpoint_name}-{endpoint_id}_{window_start.isoformat()}_{window_end.isoformat()}"
413
- if window_start and window_end
384
+ f"{endpoint_name}-{endpoint_id}_{monitoring_ctx.start_infer_time.isoformat()}_{monitoring_ctx.end_infer_time.isoformat()}"
385
+ if monitoring_ctx.start_infer_time
386
+ and monitoring_ctx.end_infer_time
414
387
  else f"{endpoint_name}-{endpoint_id}"
415
388
  )
416
389
 
@@ -418,10 +391,38 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
418
391
  result_key, self._flatten_data_result(result)
419
392
  )
420
393
  else:
421
- return self._flatten_data_result(call_do_tracking())
394
+ result = call_do_tracking(
395
+ mm_context.MonitoringApplicationContext._from_ml_ctx(
396
+ context=context,
397
+ project=project,
398
+ application_name=application_name,
399
+ event={},
400
+ sample_df=sample_data,
401
+ feature_stats=feature_stats,
402
+ )
403
+ )
404
+ return self._flatten_data_result(result)
422
405
 
423
406
  @staticmethod
424
- def _handle_endpoints_type_evaluate(
407
+ def _check_endpoints_first_request(
408
+ endpoints: list[mlrun.common.schemas.ModelEndpoint],
409
+ ) -> None:
410
+ """Make sure that all the endpoints have had at least one request"""
411
+ endpoints_no_requests = [
412
+ (endpoint.metadata.name, endpoint.metadata.uid)
413
+ for endpoint in endpoints
414
+ if not endpoint.status.first_request
415
+ ]
416
+ if endpoints_no_requests:
417
+ raise mlrun.errors.MLRunValueError(
418
+ "The following model endpoints have not had any requests yet and "
419
+ "have no data, cannot run the model monitoring application on them: "
420
+ f"{endpoints_no_requests}"
421
+ )
422
+
423
+ @classmethod
424
+ def _validate_endpoints(
425
+ cls,
425
426
  project: "mlrun.MlrunProject",
426
427
  endpoints: Union[
427
428
  list[tuple[str, str]], list[list[str]], list[str], Literal["all"]
@@ -457,6 +458,9 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
457
458
  endpoints_list = project.list_model_endpoints(
458
459
  names=endpoint_names, latest_only=True
459
460
  ).endpoints
461
+
462
+ cls._check_endpoints_first_request(endpoints_list)
463
+
460
464
  if endpoints_list:
461
465
  list_endpoints_result = [
462
466
  (endpoint.metadata.name, endpoint.metadata.uid)
@@ -596,13 +600,51 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
596
600
  application_schedules: Optional[
597
601
  mm_schedules.ModelMonitoringSchedulesFileApplication
598
602
  ],
603
+ endpoint_name: str,
599
604
  endpoint_id: str,
600
605
  application_name: str,
601
606
  existing_data_handling: ExistingDataHandling,
602
- ) -> Iterator[tuple[Optional[datetime], Optional[datetime]]]:
607
+ context: "mlrun.MLClientCtx",
608
+ project: "mlrun.MlrunProject",
609
+ sample_data: Optional[pd.DataFrame],
610
+ ) -> Iterator[mm_context.MonitoringApplicationContext]:
611
+ def yield_monitoring_ctx(
612
+ window_start: Optional[datetime], window_end: Optional[datetime]
613
+ ) -> Iterator[mm_context.MonitoringApplicationContext]:
614
+ ctx = mm_context.MonitoringApplicationContext._from_ml_ctx(
615
+ event={
616
+ mm_constants.ApplicationEvent.ENDPOINT_NAME: endpoint_name,
617
+ mm_constants.ApplicationEvent.ENDPOINT_ID: endpoint_id,
618
+ mm_constants.ApplicationEvent.START_INFER_TIME: window_start,
619
+ mm_constants.ApplicationEvent.END_INFER_TIME: window_end,
620
+ },
621
+ application_name=application_name,
622
+ context=context,
623
+ project=project,
624
+ sample_df=sample_data,
625
+ )
626
+
627
+ if ctx.sample_df.empty:
628
+ # The current sample is empty
629
+ context.logger.debug(
630
+ "No sample data available for tracking",
631
+ application_name=application_name,
632
+ endpoint_id=ctx.endpoint_id,
633
+ start_time=ctx.start_infer_time,
634
+ end_time=ctx.end_infer_time,
635
+ )
636
+ return
637
+
638
+ yield ctx
639
+
640
+ if application_schedules and window_end:
641
+ application_schedules.update_endpoint_last_analyzed(
642
+ endpoint_uid=endpoint_id, last_analyzed=window_end
643
+ )
644
+
603
645
  if start is None or end is None:
604
646
  # A single window based on the `sample_data` input - see `_handler`.
605
- yield None, None
647
+ yield from yield_monitoring_ctx(None, None)
606
648
  return
607
649
 
608
650
  start_dt = datetime.fromisoformat(start)
@@ -630,11 +672,7 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
630
672
  )
631
673
 
632
674
  if base_period is None:
633
- yield start_dt, end_dt
634
- if application_schedules:
635
- application_schedules.update_endpoint_last_analyzed(
636
- endpoint_uid=endpoint_id, last_analyzed=end_dt
637
- )
675
+ yield from yield_monitoring_ctx(start_dt, end_dt)
638
676
  return
639
677
 
640
678
  window_length = cls._validate_and_get_window_length(
@@ -644,11 +682,7 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
644
682
  current_start_time = start_dt
645
683
  while current_start_time < end_dt:
646
684
  current_end_time = min(current_start_time + window_length, end_dt)
647
- yield current_start_time, current_end_time
648
- if application_schedules:
649
- application_schedules.update_endpoint_last_analyzed(
650
- endpoint_uid=endpoint_id, last_analyzed=current_end_time
651
- )
685
+ yield from yield_monitoring_ctx(current_start_time, current_end_time)
652
686
  current_start_time = current_end_time
653
687
 
654
688
  @classmethod
mlrun/run.py CHANGED
@@ -17,6 +17,7 @@ import json
17
17
  import os
18
18
  import pathlib
19
19
  import socket
20
+ import sys
20
21
  import tempfile
21
22
  import time
22
23
  import typing
@@ -117,14 +118,13 @@ def function_to_module(code="", workdir=None, secrets=None, silent=False):
117
118
  raise ValueError("nothing to run, specify command or function")
118
119
 
119
120
  command = os.path.join(workdir or "", command)
120
- path = Path(command)
121
- mod_name = path.name
122
- if path.suffix:
123
- mod_name = mod_name[: -len(path.suffix)]
121
+ mod_name = mlrun.utils.helpers.get_module_name_from_path(command)
124
122
  spec = imputil.spec_from_file_location(mod_name, command)
125
123
  if spec is None:
126
124
  raise OSError(f"cannot import from {command!r}")
127
125
  mod = imputil.module_from_spec(spec)
126
+ # add to system modules, which can be necessary when running in a MockServer (ML-10937)
127
+ sys.modules[mod_name] = mod
128
128
  spec.loader.exec_module(mod)
129
129
 
130
130
  return mod
@@ -413,21 +413,29 @@ def import_function_to_dict(
413
413
  with open(code_file, "wb") as fp:
414
414
  fp.write(code)
415
415
  elif cmd:
416
- if not path.isfile(code_file):
417
- slash_index = url.rfind("/")
418
- if slash_index < 0:
419
- raise ValueError(f"no file in exec path (spec.command={code_file})")
420
- base_dir = os.path.normpath(url[: slash_index + 1])
421
- candidate_path = _ensure_path_confined_to_base_dir(
422
- base_directory=base_dir,
423
- relative_path=code_file,
424
- error_message_on_escape=f"exec file spec.command={code_file} is outside of allowed directory",
425
- )
426
- if path.isfile(candidate_path):
427
- raise ValueError(
428
- f"exec file spec.command={code_file} is relative, change working dir"
429
- )
416
+ slash_index = url.rfind("/")
417
+ if slash_index < 0:
418
+ raise ValueError(f"no file in exec path (spec.command={code_file})")
419
+ base_dir = os.path.normpath(url[: slash_index + 1])
420
+
421
+ # Validate and resolve the candidate path before checking existence
422
+ candidate_path = _ensure_path_confined_to_base_dir(
423
+ base_directory=base_dir,
424
+ relative_path=code_file,
425
+ error_message_on_escape=(
426
+ f"exec file spec.command={code_file} is outside of allowed directory"
427
+ ),
428
+ )
429
+
430
+ # Only now it's safe to check file existence
431
+ if not path.isfile(candidate_path):
430
432
  raise ValueError(f"no file in exec path (spec.command={code_file})")
433
+
434
+ # Check that the path is absolute
435
+ if not os.path.isabs(code_file):
436
+ raise ValueError(
437
+ f"exec file spec.command={code_file} is relative, it must be absolute. Change working dir"
438
+ )
431
439
  else:
432
440
  raise ValueError("command or code not specified in function spec")
433
441
 
@@ -568,6 +568,12 @@ class ApplicationRuntime(RemoteRuntime):
568
568
  "Authentication credentials not provided"
569
569
  )
570
570
 
571
+ if direct_port_access and port:
572
+ logger.warning(
573
+ "Ignoring 'port' because 'direct_port_access' is enabled. "
574
+ "The 'port' setting is only applicable when 'direct_port_access' is disabled."
575
+ )
576
+
571
577
  ports = (
572
578
  port or self.spec.internal_application_port if direct_port_access else []
573
579
  )
mlrun/serving/server.py CHANGED
@@ -20,7 +20,6 @@ import copy
20
20
  import importlib
21
21
  import json
22
22
  import os
23
- import pathlib
24
23
  import socket
25
24
  import traceback
26
25
  import uuid
@@ -51,7 +50,7 @@ from ..datastore.store_resources import ResourceCache
51
50
  from ..errors import MLRunInvalidArgumentError
52
51
  from ..execution import MLClientCtx
53
52
  from ..model import ModelObj
54
- from ..utils import get_caller_globals
53
+ from ..utils import get_caller_globals, get_module_name_from_path
55
54
  from .states import (
56
55
  FlowStep,
57
56
  MonitoredStep,
@@ -598,17 +597,7 @@ async def async_execute_graph(
598
597
  # gets set in local flow and not just in the remote pod
599
598
  source_file_path = spec.get("filename", None)
600
599
  if source_file_path:
601
- source_file_path_object = pathlib.Path(source_file_path).resolve()
602
- current_dir_path_object = pathlib.Path(".").resolve()
603
- if not source_file_path_object.is_relative_to(current_dir_path_object):
604
- raise mlrun.errors.MLRunRuntimeError(
605
- f"Source file path '{source_file_path}' is not under the current working directory "
606
- f"(which is required when running with local=True)"
607
- )
608
- relative_path_to_source_file = source_file_path_object.relative_to(
609
- current_dir_path_object
610
- )
611
- modname = ".".join(relative_path_to_source_file.with_suffix("").parts)
600
+ modname = get_module_name_from_path(source_file_path)
612
601
 
613
602
  namespace = {}
614
603
  if modname:
mlrun/utils/helpers.py CHANGED
@@ -21,6 +21,7 @@ import inspect
21
21
  import itertools
22
22
  import json
23
23
  import os
24
+ import pathlib
24
25
  import re
25
26
  import string
26
27
  import sys
@@ -923,11 +924,23 @@ def enrich_image_url(
923
924
  )
924
925
  mlrun_version = config.images_tag or client_version or server_version
925
926
  tag = mlrun_version or ""
926
- tag += resolve_image_tag_suffix(
927
- mlrun_version=mlrun_version,
928
- python_version=client_python_version,
927
+
928
+ # starting mlrun 1.10.0-rc0 we want to enrich the kfp image with the python version
929
+ # e.g for 1.9 we have a single mlrun-kfp image that supports only python 3.9
930
+ enrich_kfp_python_version = (
931
+ "mlrun-kfp" in image_url
932
+ and mlrun_version
933
+ and semver.VersionInfo.is_valid(mlrun_version)
934
+ and semver.VersionInfo.parse(mlrun_version)
935
+ >= semver.VersionInfo.parse("1.10.0-rc0")
929
936
  )
930
937
 
938
+ if "mlrun-kfp" not in image_url or enrich_kfp_python_version:
939
+ tag += resolve_image_tag_suffix(
940
+ mlrun_version=mlrun_version,
941
+ python_version=client_python_version,
942
+ )
943
+
931
944
  # it's an mlrun image if the repository is mlrun
932
945
  is_mlrun_image = image_url.startswith("mlrun/") or "/mlrun/" in image_url
933
946
  if ":" in image_url:
@@ -2408,3 +2421,17 @@ def set_data_by_path(
2408
2421
  raise mlrun.errors.MLRunInvalidArgumentError(
2409
2422
  "Expected path to be of type str or list of str"
2410
2423
  )
2424
+
2425
+
2426
+ def get_module_name_from_path(source_file_path: str) -> str:
2427
+ source_file_path_object = pathlib.Path(source_file_path).resolve()
2428
+ current_dir_path_object = pathlib.Path(".").resolve()
2429
+ if not source_file_path_object.is_relative_to(current_dir_path_object):
2430
+ raise mlrun.errors.MLRunRuntimeError(
2431
+ f"Source file path '{source_file_path}' is not under the current working directory "
2432
+ f"(which is required when running with local=True)"
2433
+ )
2434
+ relative_path_to_source_file = source_file_path_object.relative_to(
2435
+ current_dir_path_object
2436
+ )
2437
+ return ".".join(relative_path_to_source_file.with_suffix("").parts)
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "0d61caa563d5a76229ea18f1116fef794cd1058a",
3
- "version": "1.10.0-rc34"
2
+ "git_commit": "6ab7c319ab2182ce9f0594c1a6c0be3c98175ebe",
3
+ "version": "1.10.0-rc35"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.10.0rc34
3
+ Version: 1.10.0rc35
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -105,7 +105,7 @@ Requires-Dist: snowflake-connector-python~=3.7; extra == "snowflake"
105
105
  Provides-Extra: dev-postgres
106
106
  Requires-Dist: pytest-mock-resources[postgres]~=2.12; extra == "dev-postgres"
107
107
  Provides-Extra: kfp18
108
- Requires-Dist: mlrun_pipelines_kfp_v1_8[kfp]>=0.5.7; extra == "kfp18"
108
+ Requires-Dist: mlrun_pipelines_kfp_v1_8[kfp]~=0.5.8; extra == "kfp18"
109
109
  Provides-Extra: api
110
110
  Requires-Dist: uvicorn~=0.32.1; extra == "api"
111
111
  Requires-Dist: dask-kubernetes~=0.11.0; extra == "api"
@@ -8,7 +8,7 @@ mlrun/k8s_utils.py,sha256=zIacVyvsXrXVO-DdxAoGQOGEDWOGJEFJzYPhPVnn3z8,24548
8
8
  mlrun/lists.py,sha256=OlaV2QIFUzmenad9kxNJ3k4whlDyxI3zFbGwr6vpC5Y,8561
9
9
  mlrun/model.py,sha256=wHtM8LylSOEFk6Hxl95CVm8DOPhofjsANYdIvKHH6dw,88956
10
10
  mlrun/render.py,sha256=5DlhD6JtzHgmj5RVlpaYiHGhX84Q7qdi4RCEUj2UMgw,13195
11
- mlrun/run.py,sha256=OBx7rvtgd288dyl42DOll-zU05cFzsA5Is958qnX4Qo,48673
11
+ mlrun/run.py,sha256=6ginzm5WUbfHlPurgfyE1qJchTDm8PymiBgiNysZWUE,48960
12
12
  mlrun/secrets.py,sha256=dZPdkc_zzfscVQepOHUwmzFqnBavDCBXV9DQoH_eIYM,7800
13
13
  mlrun/alerts/__init__.py,sha256=0gtG1BG0DXxFrXegIkjbM1XEN4sP9ODo0ucXrNld1hU,601
14
14
  mlrun/alerts/alert.py,sha256=QQFZGydQbx9RvAaSiaH-ALQZVcDKQX5lgizqj_rXW2k,15948
@@ -40,7 +40,7 @@ mlrun/common/formatters/run.py,sha256=LlqhhVY4dAp5y17k_sWBtHaJogdNdtJWF0iO9sX-bU
40
40
  mlrun/common/model_monitoring/__init__.py,sha256=kXGBqhLN0rlAx0kTXhozGzFsIdSqW0uTSKMmsLgq_is,569
41
41
  mlrun/common/model_monitoring/helpers.py,sha256=DZ1xAtqHNswKY5rrZo2cVTmQLsfS-M7fSF4XsV-FIYE,6237
42
42
  mlrun/common/runtimes/constants.py,sha256=CGMHE2gdsNHXNsa-u3eL0o8sQmDs6PN5FLpMlCDClns,12218
43
- mlrun/common/schemas/__init__.py,sha256=HbnF4nd6jIGbej9Qj6WYjajIr44f3vYNpgWyeLk7N6I,5486
43
+ mlrun/common/schemas/__init__.py,sha256=oEG9cIcDxzrTVrjDRuYBTSsEOK0ifFVdQp-D1EUkIDY,5517
44
44
  mlrun/common/schemas/alert.py,sha256=u6INAHBhQIfm-mMsGqDJo1_JDN6gOuWZa-8fOU-aOUE,10182
45
45
  mlrun/common/schemas/api_gateway.py,sha256=bgC3vXbyb1SVwsSZkLXtEoQLCe_QDKpIhAVX3X_HWW4,7126
46
46
  mlrun/common/schemas/artifact.py,sha256=JojMRRa4n0Rge2olGOpUyp348hkTGsMEnvUBRSoo4oE,4310
@@ -73,7 +73,7 @@ mlrun/common/schemas/secret.py,sha256=Td2UAeWHSAdA4nIP3rQv_PIVKVqcBnCnK6xjr528tS
73
73
  mlrun/common/schemas/serving.py,sha256=4ek9JZDagkdeXyfkX6P6xp4deUNSf_kqXUaXcKSuv-g,1391
74
74
  mlrun/common/schemas/tag.py,sha256=1wqEiAujsElojWb3qmuyfcaLFjXSNAAQdafkDx7fkn0,891
75
75
  mlrun/common/schemas/workflow.py,sha256=Y-FHJnxs5c86yetuOAPdEJPkne__tLPCxjSXSb4lrjo,2541
76
- mlrun/common/schemas/model_monitoring/__init__.py,sha256=FqFiFIDcylquQdY0XTBamB5kMzMrMFEpVYM_ecsVfLg,1925
76
+ mlrun/common/schemas/model_monitoring/__init__.py,sha256=ndeGXCJTE_GvMSb1FfQ5fXvhs0I8nO_yWy1UBSZIifY,1956
77
77
  mlrun/common/schemas/model_monitoring/constants.py,sha256=uQ3ataL-tAcwGY1GQLEvu05gGgMb2kBr6YRzjJS6yYs,13953
78
78
  mlrun/common/schemas/model_monitoring/functions.py,sha256=Ej8ChjmMZq1HP32THNABoktQHN1mdlkSqKbofxu10i4,2536
79
79
  mlrun/common/schemas/model_monitoring/grafana.py,sha256=THQlLfPBevBksta8p5OaIsBaJtsNSXexLvHrDxOaVns,2095
@@ -236,7 +236,7 @@ mlrun/model_monitoring/stream_processing.py,sha256=bryYO3D0cC10MAQ-liHxUZ79MrL-V
236
236
  mlrun/model_monitoring/writer.py,sha256=l2D_5Ms5Wq5jfyQRVJbGBBRTMLjMmIAxwPeHWmrc9Kg,16382
237
237
  mlrun/model_monitoring/applications/__init__.py,sha256=BwlmRELlFJf2b2YMyv5kUSHNe8--OyqWhDgRlT8a_8g,779
238
238
  mlrun/model_monitoring/applications/_application_steps.py,sha256=t9LDIqQUGE10cyjyhlg0QqN1yVx0apD1HpERYLJfm8U,7409
239
- mlrun/model_monitoring/applications/base.py,sha256=X-9zjdnW7i-zfhEdsT76JaxlSBk9J1HSchx-FcJ-Eqo,47911
239
+ mlrun/model_monitoring/applications/base.py,sha256=kvfYiFUsStjZwPIqeibUW6auCXRFcovyh-pih_pZ6Rs,49139
240
240
  mlrun/model_monitoring/applications/context.py,sha256=3W3AW4oyJgx_nW_5mDsV59Iy5D3frkfYMQSc6DgBc4c,17004
241
241
  mlrun/model_monitoring/applications/histogram_data_drift.py,sha256=2qgfFmrpHf-x0_EaHD-0T28piwSQzw-HH71aV1GwbZs,15389
242
242
  mlrun/model_monitoring/applications/results.py,sha256=LfBQOmkpKGvVGNrcj5QiXsRIG2IRgcv_Xqe4QJBmauk,5699
@@ -307,7 +307,7 @@ mlrun/runtimes/nuclio/function.py,sha256=VjJtfteEX2I8gYCwbBdqWwIK6ZOCVOu8lQGlX4i
307
307
  mlrun/runtimes/nuclio/nuclio.py,sha256=sLK8KdGO1LbftlL3HqPZlFOFTAAuxJACZCVl1c0Ha6E,2942
308
308
  mlrun/runtimes/nuclio/serving.py,sha256=NF0f7a6KV8GIb4QBUKiJa_L_5oqCsG7UHPs8Uo3K_Eo,36330
309
309
  mlrun/runtimes/nuclio/application/__init__.py,sha256=rRs5vasy_G9IyoTpYIjYDafGoL6ifFBKgBtsXn31Atw,614
310
- mlrun/runtimes/nuclio/application/application.py,sha256=5bwGgB_isThhbk9BqAsgJYdd0rKCwcil-LyMPR0dVwQ,33210
310
+ mlrun/runtimes/nuclio/application/application.py,sha256=q5vBuHnWTGciokEODlSM3nfopuPwJ9RqKZNZe6C86l4,33464
311
311
  mlrun/runtimes/nuclio/application/reverse_proxy.go,sha256=lEHH74vr2PridIHp1Jkc_NjkrWb5b6zawRrNxHQhwGU,2913
312
312
  mlrun/runtimes/sparkjob/__init__.py,sha256=GPP_ekItxiU9Ydn3mJa4Obph02Bg6DO-JYs791_MV58,607
313
313
  mlrun/runtimes/sparkjob/spark3job.py,sha256=3dW7RG2T58F2dsUw0TsRvE3SIFcekx3CerLdcaG1f50,41458
@@ -315,7 +315,7 @@ mlrun/serving/__init__.py,sha256=nriJAcVn5aatwU03T7SsE6ngJEGTxr3wIGt4WuvCCzY,139
315
315
  mlrun/serving/merger.py,sha256=pfOQoozUyObCTpqXAMk94PmhZefn4bBrKufO3MKnkAc,6193
316
316
  mlrun/serving/remote.py,sha256=p29CBtKwbW_l8BzmNg3Uy__0eMf7_OubTMzga_S3EOA,22089
317
317
  mlrun/serving/routers.py,sha256=pu5jlSLI4Ml68YP_FMFDhhwPfLcT6lRu5yL5QDgXPHQ,52889
318
- mlrun/serving/server.py,sha256=WvAQtkNhAcd2vGuMR04OdxfynMNWvtz6LpKEYPhK3z0,40959
318
+ mlrun/serving/server.py,sha256=voN7s7WT3S-7gt14F1lXd5OMxz6tMNZX8ORP-blq2Hg,40342
319
319
  mlrun/serving/serving_wrapper.py,sha256=UL9hhWCfMPcTJO_XrkvNaFvck1U1E7oS8trTZyak0cA,835
320
320
  mlrun/serving/states.py,sha256=Q2Q7o0eJCvnonXd2-sfiv7zhCiyC6xthfW25nzf61KM,138976
321
321
  mlrun/serving/steps.py,sha256=zbMgJnu-m4n7vhFRgZkCMMifIsCya-TzAj3Gjc-Fgnc,2193
@@ -333,7 +333,7 @@ mlrun/utils/async_http.py,sha256=8Olx8TNNeXB07nEGwlqhEgFgnFAD71vBU_bqaA9JW-w,122
333
333
  mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,3450
334
334
  mlrun/utils/clones.py,sha256=qbAGyEbSvlewn3Tw_DpQZP9z6MGzFhSaZfI1CblX8Fg,7515
335
335
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
336
- mlrun/utils/helpers.py,sha256=k2uce80yYNcWPZPe7tz6ufDpZqR2xVZesfzcXAsv5RY,81983
336
+ mlrun/utils/helpers.py,sha256=5zlzE8ueXulk8jezi1cutYcLcVMEhI8B09LU0SRK_x0,83174
337
337
  mlrun/utils/http.py,sha256=5ZU2VpokaUM_DT3HBSqTm8xjUqTPjZN5fKkSIvKlTl0,8704
338
338
  mlrun/utils/logger.py,sha256=uaCgI_ezzaXf7nJDCy-1Nrjds8vSXqDbzmjmb3IyCQo,14864
339
339
  mlrun/utils/regex.py,sha256=FcRwWD8x9X3HLhCCU2F0AVKTFah784Pr7ZAe3a02jw8,5199
@@ -352,11 +352,11 @@ mlrun/utils/notifications/notification/mail.py,sha256=ZyJ3eqd8simxffQmXzqd3bgbAq
352
352
  mlrun/utils/notifications/notification/slack.py,sha256=wSu_7W0EnGLBNwIgWCYEeTP8j9SPAMPDBnfUcPnVZYA,7299
353
353
  mlrun/utils/notifications/notification/webhook.py,sha256=FM5-LQAKAVJKp37MRzR3SsejalcnpM6r_9Oe7znxZEA,5313
354
354
  mlrun/utils/version/__init__.py,sha256=YnzE6tlf24uOQ8y7Z7l96QLAI6-QEii7-77g8ynmzy0,613
355
- mlrun/utils/version/version.json,sha256=zr0lbZ3pe5GquH7vvraCJo9LaQm6FmEIuv1mXnxXqkE,90
355
+ mlrun/utils/version/version.json,sha256=pCkizZFO7606nn8mstxD5U8Su__8IGZsvegPQ4lFcD0,90
356
356
  mlrun/utils/version/version.py,sha256=M2hVhRrgkN3SxacZHs3ZqaOsqAA7B6a22ne324IQ1HE,1877
357
- mlrun-1.10.0rc34.dist-info/licenses/LICENSE,sha256=zTiv1CxWNkOk1q8eJS1G_8oD4gWpWLwWxj_Agcsi8Os,11337
358
- mlrun-1.10.0rc34.dist-info/METADATA,sha256=KjpinCMYNSRXDTsD9nfKq99EKsW08Q0lreJm45tXLbw,26104
359
- mlrun-1.10.0rc34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
360
- mlrun-1.10.0rc34.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
361
- mlrun-1.10.0rc34.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
362
- mlrun-1.10.0rc34.dist-info/RECORD,,
357
+ mlrun-1.10.0rc35.dist-info/licenses/LICENSE,sha256=zTiv1CxWNkOk1q8eJS1G_8oD4gWpWLwWxj_Agcsi8Os,11337
358
+ mlrun-1.10.0rc35.dist-info/METADATA,sha256=Z0CoYAAIxgiUb02QdTHV3Jzvx6fQ__svH209vXs7O9s,26104
359
+ mlrun-1.10.0rc35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
360
+ mlrun-1.10.0rc35.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
361
+ mlrun-1.10.0rc35.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
362
+ mlrun-1.10.0rc35.dist-info/RECORD,,