mlrun 1.9.0rc3__py3-none-any.whl → 1.9.0rc5__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 (52) hide show
  1. mlrun/__main__.py +13 -3
  2. mlrun/artifacts/base.py +5 -5
  3. mlrun/artifacts/dataset.py +1 -1
  4. mlrun/artifacts/model.py +1 -1
  5. mlrun/artifacts/plots.py +2 -2
  6. mlrun/common/constants.py +7 -0
  7. mlrun/common/runtimes/constants.py +1 -1
  8. mlrun/common/schemas/artifact.py +1 -1
  9. mlrun/common/schemas/model_monitoring/model_endpoints.py +32 -8
  10. mlrun/common/schemas/pipeline.py +1 -1
  11. mlrun/common/schemas/project.py +1 -1
  12. mlrun/common/schemas/runs.py +1 -1
  13. mlrun/config.py +5 -11
  14. mlrun/datastore/datastore.py +1 -1
  15. mlrun/datastore/datastore_profile.py +2 -2
  16. mlrun/datastore/sources.py +3 -3
  17. mlrun/datastore/targets.py +4 -4
  18. mlrun/datastore/utils.py +2 -2
  19. mlrun/db/base.py +9 -7
  20. mlrun/db/httpdb.py +48 -27
  21. mlrun/db/nopdb.py +3 -1
  22. mlrun/execution.py +1 -1
  23. mlrun/frameworks/_common/model_handler.py +2 -2
  24. mlrun/launcher/client.py +1 -1
  25. mlrun/model_monitoring/api.py +4 -4
  26. mlrun/model_monitoring/applications/_application_steps.py +3 -1
  27. mlrun/model_monitoring/applications/evidently/base.py +59 -71
  28. mlrun/model_monitoring/controller.py +26 -11
  29. mlrun/model_monitoring/db/tsdb/base.py +3 -1
  30. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +213 -0
  31. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +27 -49
  32. mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +48 -35
  33. mlrun/model_monitoring/tracking_policy.py +1 -1
  34. mlrun/model_monitoring/writer.py +1 -1
  35. mlrun/projects/operations.py +3 -3
  36. mlrun/projects/project.py +37 -22
  37. mlrun/render.py +5 -9
  38. mlrun/run.py +1 -1
  39. mlrun/runtimes/base.py +5 -5
  40. mlrun/runtimes/kubejob.py +2 -2
  41. mlrun/runtimes/nuclio/function.py +3 -3
  42. mlrun/runtimes/nuclio/serving.py +4 -4
  43. mlrun/runtimes/utils.py +25 -8
  44. mlrun/utils/helpers.py +3 -2
  45. mlrun/utils/notifications/notification/webhook.py +18 -2
  46. mlrun/utils/version/version.json +2 -2
  47. {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/METADATA +9 -13
  48. {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/RECORD +52 -51
  49. {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/WHEEL +1 -1
  50. {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/entry_points.txt +0 -0
  51. {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/licenses/LICENSE +0 -0
  52. {mlrun-1.9.0rc3.dist-info → mlrun-1.9.0rc5.dist-info}/top_level.txt +0 -0
mlrun/projects/project.py CHANGED
@@ -756,10 +756,10 @@ def _project_instance_from_struct(struct, name, allow_cross_project):
756
756
  )
757
757
 
758
758
  if allow_cross_project is None:
759
- # TODO: Remove this warning in version 1.9.0 and also fix cli to support allow_cross_project
759
+ # TODO: Remove this warning in version 1.10.0 and also fix cli to support allow_cross_project
760
760
  warnings.warn(
761
761
  f"Project {name=} is different than specified on the context's project yaml. "
762
- "This behavior is deprecated and will not be supported from version 1.9.0."
762
+ "This behavior is deprecated and will not be supported from version 1.10.0."
763
763
  )
764
764
  logger.warn(error_message)
765
765
  elif allow_cross_project:
@@ -2478,9 +2478,9 @@ class MlrunProject(ModelObj):
2478
2478
  :param fetch_credentials_from_sys_config: If true, fetch the credentials from the system configuration.
2479
2479
  """
2480
2480
  if default_controller_image != "mlrun/mlrun":
2481
- # TODO: Remove this in 1.9.0
2481
+ # TODO: Remove this in 1.10.0
2482
2482
  warnings.warn(
2483
- "'default_controller_image' is deprecated and will be removed in 1.9.0, "
2483
+ "'default_controller_image' is deprecated in 1.7.0 and will be removed in 1.10.0, "
2484
2484
  "use 'image' instead",
2485
2485
  FutureWarning,
2486
2486
  )
@@ -2860,10 +2860,10 @@ class MlrunProject(ModelObj):
2860
2860
 
2861
2861
  self.spec.set_function(name, function_object, func)
2862
2862
 
2863
- # TODO: Remove this in 1.10.0
2863
+ # TODO: Remove this in 1.11.0
2864
2864
  @deprecated.deprecated(
2865
2865
  version="1.8.0",
2866
- reason="'remove_function' is deprecated and will be removed in 1.10.0. "
2866
+ reason="'remove_function' is deprecated and will be removed in 1.11.0. "
2867
2867
  "Please use `delete_function` instead.",
2868
2868
  category=FutureWarning,
2869
2869
  )
@@ -2891,9 +2891,9 @@ class MlrunProject(ModelObj):
2891
2891
 
2892
2892
  :param name: name of the model-monitoring-function/s (under the project)
2893
2893
  """
2894
- # TODO: Remove this in 1.9.0
2894
+ # TODO: Remove this in 1.10.0
2895
2895
  warnings.warn(
2896
- "'remove_model_monitoring_function' is deprecated and will be removed in 1.9.0. "
2896
+ "'remove_model_monitoring_function' is deprecated in 1.7.0 and will be removed in 1.10.0. "
2897
2897
  "Please use `delete_model_monitoring_function` instead.",
2898
2898
  FutureWarning,
2899
2899
  )
@@ -3795,7 +3795,8 @@ class MlrunProject(ModelObj):
3795
3795
  top_level: bool = False,
3796
3796
  uids: Optional[list[str]] = None,
3797
3797
  latest_only: bool = False,
3798
- tsdb_metrics: bool = True,
3798
+ tsdb_metrics: bool = False,
3799
+ metric_list: Optional[list[str]] = None,
3799
3800
  ) -> mlrun.common.schemas.ModelEndpointList:
3800
3801
  """
3801
3802
  Returns a list of `ModelEndpoint` objects. Each `ModelEndpoint` object represents the current state of a
@@ -3825,10 +3826,15 @@ class MlrunProject(ModelObj):
3825
3826
  or just `"label"` for key existence.
3826
3827
  - A comma-separated string formatted as `"label1=value1,label2"` to match entities with
3827
3828
  the specified key-value pairs or key existence.
3828
- :param start: The start time to filter by.Corresponding to the `created` field.
3829
- :param end: The end time to filter by. Corresponding to the `created` field.
3830
- :param top_level: if true will return only routers and endpoint that are NOT children of any router
3831
- :param uids: if passed will return a list `ModelEndpoint` object with uid in uids
3829
+ :param start: The start time to filter by.Corresponding to the `created` field.
3830
+ :param end: The end time to filter by. Corresponding to the `created` field.
3831
+ :param top_level: If true will return only routers and endpoint that are NOT children of any router.
3832
+ :param uids: If passed will return a list `ModelEndpoint` object with uid in uids.
3833
+ :param tsdb_metrics: When True, the time series metrics will be added to the output
3834
+ of the resulting.
3835
+ :param metric_list: List of metrics to include from the time series DB. Defaults to all metrics.
3836
+ If tsdb_metrics=False, this parameter will be ignored and no tsdb metrics
3837
+ will be included.
3832
3838
 
3833
3839
  :returns: Returns a list of `ModelEndpoint` objects.
3834
3840
  """
@@ -3847,6 +3853,7 @@ class MlrunProject(ModelObj):
3847
3853
  uids=uids,
3848
3854
  latest_only=latest_only,
3849
3855
  tsdb_metrics=tsdb_metrics,
3856
+ metric_list=metric_list,
3850
3857
  )
3851
3858
 
3852
3859
  def run_function(
@@ -4057,9 +4064,9 @@ class MlrunProject(ModelObj):
4057
4064
  (by default `/home/mlrun_code`)
4058
4065
  """
4059
4066
  if not overwrite_build_params:
4060
- # TODO: change overwrite_build_params default to True in 1.9.0
4067
+ # TODO: change overwrite_build_params default to True in 1.10.0
4061
4068
  warnings.warn(
4062
- "The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.9.0.",
4069
+ "The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.10.0.",
4063
4070
  mlrun.utils.OverwriteBuildParamsWarning,
4064
4071
  )
4065
4072
  default_image_name = mlrun.mlconf.default_project_image_name.format(
@@ -4134,9 +4141,9 @@ class MlrunProject(ModelObj):
4134
4141
  )
4135
4142
 
4136
4143
  if not overwrite_build_params:
4137
- # TODO: change overwrite_build_params default to True in 1.9.0
4144
+ # TODO: change overwrite_build_params default to True in 1.10.0
4138
4145
  warnings.warn(
4139
- "The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.9.0.",
4146
+ "The `overwrite_build_params` parameter default will change from 'False' to 'True' in 1.10.0.",
4140
4147
  mlrun.utils.OverwriteBuildParamsWarning,
4141
4148
  )
4142
4149
 
@@ -4315,7 +4322,7 @@ class MlrunProject(ModelObj):
4315
4322
  :param kind: Return artifacts of the requested kind.
4316
4323
  :param category: Return artifacts of the requested category.
4317
4324
  :param tree: Return artifacts of the requested tree.
4318
- :param limit: Maximum number of artifacts to return.
4325
+ :param limit: Deprecated - Maximum number of artifacts to return (will be removed in 1.11.0).
4319
4326
  :param format_: The format in which to return the artifacts. Default is 'full'.
4320
4327
  :param partition_by: Field to group results by. When `partition_by` is specified, the `partition_sort_by`
4321
4328
  parameter must be provided as well.
@@ -4326,6 +4333,14 @@ class MlrunProject(ModelObj):
4326
4333
  :param partition_order: Order of sorting within partitions - `asc` or `desc`. Default is `desc`.
4327
4334
  """
4328
4335
  db = mlrun.db.get_run_db(secrets=self._secrets)
4336
+
4337
+ if limit:
4338
+ # TODO: Remove this in 1.11.0
4339
+ warnings.warn(
4340
+ "'limit' is deprecated and will be removed in 1.11.0. Use 'page' and 'page_size' instead.",
4341
+ FutureWarning,
4342
+ )
4343
+
4329
4344
  return db.list_artifacts(
4330
4345
  name,
4331
4346
  self.metadata.name,
@@ -4452,7 +4467,7 @@ class MlrunProject(ModelObj):
4452
4467
  artifacts generated from a hyper-param run. If only a single iteration exists, will return the artifact
4453
4468
  from that iteration. If using ``best_iter``, the ``iter`` parameter must not be used.
4454
4469
  :param tree: Return artifacts of the requested tree.
4455
- :param limit: Maximum number of artifacts to return.
4470
+ :param limit: Deprecated - Maximum number of artifacts to return (will be removed in 1.11.0).
4456
4471
  :param format_: The format in which to return the artifacts. Default is 'full'.
4457
4472
  """
4458
4473
  db = mlrun.db.get_run_db(secrets=self._secrets)
@@ -4719,7 +4734,7 @@ class MlrunProject(ModelObj):
4719
4734
  :param states: List only runs whose state is one of the provided states.
4720
4735
  :param sort: Whether to sort the result according to their start time. Otherwise, results will be
4721
4736
  returned by their internal order in the DB (order will not be guaranteed).
4722
- :param last: Deprecated - currently not used (will be removed in 1.9.0).
4737
+ :param last: Deprecated - currently not used (will be removed in 1.10.0).
4723
4738
  :param iter: If ``True`` return runs from all iterations. Otherwise, return only runs whose ``iter`` is 0.
4724
4739
  :param start_time_from: Filter by run start time in ``[start_time_from, start_time_to]``.
4725
4740
  :param start_time_to: Filter by run start time in ``[start_time_from, start_time_to]``.
@@ -4730,9 +4745,9 @@ class MlrunProject(ModelObj):
4730
4745
  :param end_time_to: Filter by run end time in ``[end_time_from, end_time_to]``.
4731
4746
  """
4732
4747
  if state:
4733
- # TODO: Remove this in 1.9.0
4748
+ # TODO: Remove this in 1.10.0
4734
4749
  warnings.warn(
4735
- "'state' is deprecated and will be removed in 1.9.0. Use 'states' instead.",
4750
+ "'state' is deprecated in 1.7.0 and will be removed in 1.10.0. Use 'states' instead.",
4736
4751
  FutureWarning,
4737
4752
  )
4738
4753
 
mlrun/render.py CHANGED
@@ -361,9 +361,6 @@ def get_tblframe(df, display, classes=None):
361
361
  return ipython_display(html, display)
362
362
 
363
363
 
364
- uid_template = '<div title="{}"><a href="{}/{}/{}/jobs/monitor/{}/overview" target="_blank" >...{}</a></div>'
365
-
366
-
367
364
  def runs_to_html(
368
365
  df: pd.DataFrame,
369
366
  display: bool = True,
@@ -379,15 +376,14 @@ def runs_to_html(
379
376
  df["results"] = df["results"].apply(dict_html)
380
377
  df["start"] = df["start"].apply(time_str)
381
378
  df["parameters"] = df["parameters"].apply(dict_html)
379
+ uid_template = '<div title="{}"><a href="{}" target="_blank" >...{}</a></div>'
380
+
382
381
  if config.resolve_ui_url():
383
382
  df["uid"] = df.apply(
384
383
  lambda x: uid_template.format(
385
- x.uid,
386
- config.resolve_ui_url(),
387
- config.ui.projects_prefix,
388
- x.project,
389
- x.uid,
390
- x.uid[-8:],
384
+ x["uid"],
385
+ mlrun.utils.get_run_url(x["project"], x["uid"], x["name"]),
386
+ x["uid"][-8:],
391
387
  ),
392
388
  axis=1,
393
389
  )
mlrun/run.py CHANGED
@@ -261,7 +261,7 @@ def get_or_create_ctx(
261
261
  """
262
262
  if labels:
263
263
  warnings.warn(
264
- "The `labels` argument is deprecated and will be removed in 1.9.0. "
264
+ "The `labels` argument is deprecated in 1.7.0 and will be removed in 1.10.0. "
265
265
  "Please use `spec` instead, e.g.:\n"
266
266
  "spec={'metadata': {'labels': {'key': 'value'}}}",
267
267
  FutureWarning,
mlrun/runtimes/base.py CHANGED
@@ -148,10 +148,10 @@ class FunctionSpec(ModelObj):
148
148
 
149
149
  @property
150
150
  def clone_target_dir(self):
151
- # TODO: remove this property in 1.9.0
151
+ # TODO: remove this property in 1.10.0
152
152
  if self.build.source_code_target_dir:
153
153
  warnings.warn(
154
- "The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.9.0. "
154
+ "The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.10.0. "
155
155
  "Use spec.build.source_code_target_dir instead.",
156
156
  FutureWarning,
157
157
  )
@@ -159,10 +159,10 @@ class FunctionSpec(ModelObj):
159
159
 
160
160
  @clone_target_dir.setter
161
161
  def clone_target_dir(self, clone_target_dir):
162
- # TODO: remove this property in 1.9.0
162
+ # TODO: remove this property in 1.10.0
163
163
  if clone_target_dir:
164
164
  warnings.warn(
165
- "The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.9.0. "
165
+ "The clone_target_dir attribute is deprecated in 1.6.2 and will be removed in 1.10.0. "
166
166
  "Use spec.build.source_code_target_dir instead.",
167
167
  FutureWarning,
168
168
  )
@@ -489,7 +489,7 @@ class BaseRuntime(ModelObj):
489
489
  def _store_function(self, runspec, meta, db):
490
490
  meta.labels["kind"] = self.kind
491
491
  mlrun.runtimes.utils.enrich_run_labels(
492
- meta.labels, [mlrun.common.runtimes.constants.RunLabels.owner]
492
+ meta.labels, [mlrun_constants.MLRunInternalLabels.owner]
493
493
  )
494
494
  if runspec.spec.output_path:
495
495
  runspec.spec.output_path = runspec.spec.output_path.replace(
mlrun/runtimes/kubejob.py CHANGED
@@ -114,9 +114,9 @@ class KubejobRuntime(KubeResource):
114
114
  e.g. builder_env={"GIT_TOKEN": token}
115
115
  """
116
116
  if not overwrite:
117
- # TODO: change overwrite default to True in 1.9.0
117
+ # TODO: change overwrite default to True in 1.10.0
118
118
  warnings.warn(
119
- "The `overwrite` parameter default will change from 'False' to 'True' in 1.9.0.",
119
+ "The `overwrite` parameter default will change from 'False' to 'True' in 1.10.0.",
120
120
  mlrun.utils.OverwriteBuildParamsWarning,
121
121
  )
122
122
  image = mlrun.utils.helpers.remove_image_protocol_prefix(image)
@@ -623,9 +623,9 @@ class RemoteRuntime(KubeResource):
623
623
  :param force_build: set True for force building the image
624
624
  """
625
625
  if auth_info:
626
- # TODO: remove in 1.9.0
626
+ # TODO: remove in 1.10.0
627
627
  warnings.warn(
628
- "'auth_info' is deprecated for nuclio runtimes in 1.7.0 and will be removed in 1.9.0",
628
+ "'auth_info' is deprecated for nuclio runtimes in 1.7.0 and will be removed in 1.10.0",
629
629
  FutureWarning,
630
630
  )
631
631
 
@@ -1000,7 +1000,7 @@ class RemoteRuntime(KubeResource):
1000
1000
  else:
1001
1001
  http_client_kwargs["json"] = body
1002
1002
  try:
1003
- logger.info("Invoking function", method=method, path=path)
1003
+ logger.debug("Invoking function", method=method, path=path)
1004
1004
  if not getattr(self, "_http_session", None):
1005
1005
  self._http_session = requests.Session()
1006
1006
  resp = self._http_session.request(
@@ -44,7 +44,7 @@ from .function import NuclioSpec, RemoteRuntime, min_nuclio_versions
44
44
  serving_subkind = "serving_v2"
45
45
 
46
46
  if TYPE_CHECKING:
47
- # remove this block in 1.9.0
47
+ # remove this block in 1.10.0
48
48
  from mlrun.model_monitoring import TrackingPolicy
49
49
 
50
50
 
@@ -361,8 +361,8 @@ class ServingRuntime(RemoteRuntime):
361
361
  if batch:
362
362
  warnings.warn(
363
363
  "The `batch` size parameter was deprecated in version 1.8.0 and is no longer used. "
364
- "It will be removed in 1.10.",
365
- # TODO: Remove this in 1.10
364
+ "It will be removed in 1.11.",
365
+ # TODO: Remove this in 1.11
366
366
  FutureWarning,
367
367
  )
368
368
  if stream_args:
@@ -370,7 +370,7 @@ class ServingRuntime(RemoteRuntime):
370
370
  if tracking_policy is not None:
371
371
  warnings.warn(
372
372
  "The `tracking_policy` argument is deprecated from version 1.7.0 "
373
- "and has no effect. It will be removed in 1.9.0.\n"
373
+ "and has no effect. It will be removed in 1.10.0.\n"
374
374
  "To set the desired model monitoring time window and schedule, use "
375
375
  "the `base_period` argument in `project.enable_model_monitoring()`.",
376
376
  FutureWarning,
mlrun/runtimes/utils.py CHANGED
@@ -11,6 +11,7 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
+ import enum
14
15
  import getpass
15
16
  import hashlib
16
17
  import json
@@ -28,7 +29,6 @@ import mlrun.common.constants as mlrun_constants
28
29
  import mlrun.common.schemas
29
30
  import mlrun.utils.regex
30
31
  from mlrun.artifacts import TableArtifact
31
- from mlrun.common.runtimes.constants import RunLabels
32
32
  from mlrun.config import config
33
33
  from mlrun.errors import err_to_str
34
34
  from mlrun.frameworks.parallel_coordinates import gen_pcp_plot
@@ -433,18 +433,35 @@ def enrich_function_from_dict(function, function_dict):
433
433
 
434
434
  def enrich_run_labels(
435
435
  labels: dict,
436
- labels_to_enrich: Optional[list[RunLabels]] = None,
436
+ labels_to_enrich: Optional[list[mlrun_constants.MLRunInternalLabels]] = None,
437
437
  ):
438
+ """
439
+ Enrich the run labels with the internal labels and the labels enrichment extension
440
+ :param labels: The run labels dict
441
+ :param labels_to_enrich: The label keys to enrich from MLRunInternalLabels.default_run_labels_to_enrich
442
+ :return: The enriched labels dict
443
+ """
444
+ # Merge the labels with the labels enrichment extension
438
445
  labels_enrichment = {
439
- RunLabels.owner: os.environ.get("V3IO_USERNAME") or getpass.getuser(),
440
- # TODO: remove this in 1.9.0
441
- RunLabels.v3io_user: os.environ.get("V3IO_USERNAME"),
446
+ mlrun_constants.MLRunInternalLabels.owner: os.environ.get("V3IO_USERNAME")
447
+ or getpass.getuser(),
448
+ # TODO: remove this in 1.10.0
449
+ mlrun_constants.MLRunInternalLabels.v3io_user: os.environ.get("V3IO_USERNAME"),
442
450
  }
443
- labels_to_enrich = labels_to_enrich or RunLabels.all()
451
+
452
+ # Resolve which label keys to enrich
453
+ if labels_to_enrich is None:
454
+ labels_to_enrich = (
455
+ mlrun_constants.MLRunInternalLabels.default_run_labels_to_enrich()
456
+ )
457
+
458
+ # Enrich labels
444
459
  for label in labels_to_enrich:
460
+ if isinstance(label, enum.Enum):
461
+ label = label.value
445
462
  enrichment = labels_enrichment.get(label)
446
- if label.value not in labels and enrichment:
447
- labels[label.value] = enrichment
463
+ if label not in labels and enrichment:
464
+ labels[label] = enrichment
448
465
  return labels
449
466
 
450
467
 
mlrun/utils/helpers.py CHANGED
@@ -2224,8 +2224,9 @@ class Workflow:
2224
2224
  namespace=mlrun.mlconf.namespace,
2225
2225
  )
2226
2226
 
2227
- # arbitrary timeout of 5 seconds, the workflow should be done by now
2228
- kfp_run = kfp_client.wait_for_run_completion(workflow_id, 5)
2227
+ # arbitrary timeout of 60 seconds, the workflow should be done by now, however sometimes kfp takes a few
2228
+ # seconds to update the workflow status
2229
+ kfp_run = kfp_client.wait_for_run_completion(workflow_id, 60)
2229
2230
  if not kfp_run:
2230
2231
  return None
2231
2232
 
@@ -16,6 +16,7 @@ import re
16
16
  import typing
17
17
 
18
18
  import aiohttp
19
+ import orjson
19
20
 
20
21
  import mlrun.common.schemas
21
22
  import mlrun.lists
@@ -86,9 +87,14 @@ class WebhookNotification(NotificationBase):
86
87
  # we automatically handle it as `ssl=None` for their convenience.
87
88
  verify_ssl = verify_ssl and None if url.startswith("https") else None
88
89
 
89
- async with aiohttp.ClientSession() as session:
90
+ async with aiohttp.ClientSession(
91
+ json_serialize=self._encoder,
92
+ ) as session:
90
93
  response = await getattr(session, method)(
91
- url, headers=headers, json=request_body, ssl=verify_ssl
94
+ url,
95
+ headers=headers,
96
+ json=request_body,
97
+ ssl=verify_ssl,
92
98
  )
93
99
  response.raise_for_status()
94
100
 
@@ -128,3 +134,13 @@ class WebhookNotification(NotificationBase):
128
134
  )
129
135
 
130
136
  return override_body
137
+
138
+ @property
139
+ def _encoder(self):
140
+ return lambda body: orjson.dumps(
141
+ body,
142
+ option=orjson.OPT_NAIVE_UTC
143
+ | orjson.OPT_SERIALIZE_NUMPY
144
+ | orjson.OPT_NON_STR_KEYS
145
+ | orjson.OPT_SORT_KEYS,
146
+ ).decode()
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "847c2d4b159d98e5e456cbc4898272b9dac77d65",
3
- "version": "1.9.0-rc3"
2
+ "git_commit": "6a74fb2c76fb2f1f30c94f16336a8df6e14d5ed4",
3
+ "version": "1.9.0-rc5"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.9.0rc3
3
+ Version: 1.9.0rc5
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -51,8 +51,8 @@ Requires-Dist: setuptools>=75.2
51
51
  Requires-Dist: deprecated~=1.2
52
52
  Requires-Dist: jinja2>=3.1.3,~=3.1
53
53
  Requires-Dist: orjson<4,>=3.9.15
54
- Requires-Dist: mlrun-pipelines-kfp-common~=0.4.1
55
- Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.0
54
+ Requires-Dist: mlrun-pipelines-kfp-common~=0.4.3
55
+ Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.2
56
56
  Requires-Dist: docstring_parser~=0.16
57
57
  Requires-Dist: aiosmtplib~=3.0
58
58
  Provides-Extra: s3
@@ -79,7 +79,7 @@ Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "google-cloud"
79
79
  Requires-Dist: google-cloud==0.34; extra == "google-cloud"
80
80
  Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "google-cloud"
81
81
  Provides-Extra: kafka
82
- Requires-Dist: kafka-python~=2.0; extra == "kafka"
82
+ Requires-Dist: kafka-python~=2.1.0; extra == "kafka"
83
83
  Requires-Dist: avro~=1.11; extra == "kafka"
84
84
  Provides-Extra: redis
85
85
  Requires-Dist: redis~=4.3; extra == "redis"
@@ -99,7 +99,6 @@ Requires-Dist: ossfs==2023.12.0; extra == "alibaba-oss"
99
99
  Requires-Dist: oss2==2.18.1; extra == "alibaba-oss"
100
100
  Provides-Extra: tdengine
101
101
  Requires-Dist: taos-ws-py==0.3.2; extra == "tdengine"
102
- Requires-Dist: taoswswrap~=0.3.5; extra == "tdengine"
103
102
  Provides-Extra: snowflake
104
103
  Requires-Dist: snowflake-connector-python~=3.7; extra == "snowflake"
105
104
  Provides-Extra: kfp18
@@ -119,7 +118,7 @@ Requires-Dist: timelength~=1.1; extra == "api"
119
118
  Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "api"
120
119
  Requires-Dist: aiosmtplib~=3.0; extra == "api"
121
120
  Requires-Dist: pydantic<2,>=1; extra == "api"
122
- Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.0; extra == "api"
121
+ Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.2; extra == "api"
123
122
  Requires-Dist: grpcio~=1.70.0; extra == "api"
124
123
  Provides-Extra: all
125
124
  Requires-Dist: adlfs==2023.9.0; extra == "all"
@@ -140,7 +139,7 @@ Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "all"
140
139
  Requires-Dist: google-cloud-storage==2.14.0; extra == "all"
141
140
  Requires-Dist: google-cloud==0.34; extra == "all"
142
141
  Requires-Dist: graphviz~=0.20.0; extra == "all"
143
- Requires-Dist: kafka-python~=2.0; extra == "all"
142
+ Requires-Dist: kafka-python~=2.1.0; extra == "all"
144
143
  Requires-Dist: mlflow~=2.16; extra == "all"
145
144
  Requires-Dist: msrest~=0.6.21; extra == "all"
146
145
  Requires-Dist: oss2==2.18.1; extra == "all"
@@ -152,7 +151,6 @@ Requires-Dist: s3fs<2024.7,>=2023.9.2; extra == "all"
152
151
  Requires-Dist: snowflake-connector-python~=3.7; extra == "all"
153
152
  Requires-Dist: sqlalchemy~=1.4; extra == "all"
154
153
  Requires-Dist: taos-ws-py==0.3.2; extra == "all"
155
- Requires-Dist: taoswswrap~=0.3.5; extra == "all"
156
154
  Provides-Extra: complete
157
155
  Requires-Dist: adlfs==2023.9.0; extra == "complete"
158
156
  Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "complete"
@@ -172,7 +170,7 @@ Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "comple
172
170
  Requires-Dist: google-cloud-storage==2.14.0; extra == "complete"
173
171
  Requires-Dist: google-cloud==0.34; extra == "complete"
174
172
  Requires-Dist: graphviz~=0.20.0; extra == "complete"
175
- Requires-Dist: kafka-python~=2.0; extra == "complete"
173
+ Requires-Dist: kafka-python~=2.1.0; extra == "complete"
176
174
  Requires-Dist: mlflow~=2.16; extra == "complete"
177
175
  Requires-Dist: msrest~=0.6.21; extra == "complete"
178
176
  Requires-Dist: oss2==2.18.1; extra == "complete"
@@ -184,7 +182,6 @@ Requires-Dist: s3fs<2024.7,>=2023.9.2; extra == "complete"
184
182
  Requires-Dist: snowflake-connector-python~=3.7; extra == "complete"
185
183
  Requires-Dist: sqlalchemy~=1.4; extra == "complete"
186
184
  Requires-Dist: taos-ws-py==0.3.2; extra == "complete"
187
- Requires-Dist: taoswswrap~=0.3.5; extra == "complete"
188
185
  Provides-Extra: complete-api
189
186
  Requires-Dist: adlfs==2023.9.0; extra == "complete-api"
190
187
  Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "complete-api"
@@ -212,10 +209,10 @@ Requires-Dist: graphviz~=0.20.0; extra == "complete-api"
212
209
  Requires-Dist: grpcio~=1.70.0; extra == "complete-api"
213
210
  Requires-Dist: humanfriendly~=10.0; extra == "complete-api"
214
211
  Requires-Dist: igz-mgmt~=0.4.1; extra == "complete-api"
215
- Requires-Dist: kafka-python~=2.0; extra == "complete-api"
212
+ Requires-Dist: kafka-python~=2.1.0; extra == "complete-api"
216
213
  Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "complete-api"
217
214
  Requires-Dist: mlflow~=2.16; extra == "complete-api"
218
- Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.0; extra == "complete-api"
215
+ Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.4.2; extra == "complete-api"
219
216
  Requires-Dist: msrest~=0.6.21; extra == "complete-api"
220
217
  Requires-Dist: objgraph~=3.6; extra == "complete-api"
221
218
  Requires-Dist: oss2==2.18.1; extra == "complete-api"
@@ -229,7 +226,6 @@ Requires-Dist: s3fs<2024.7,>=2023.9.2; extra == "complete-api"
229
226
  Requires-Dist: snowflake-connector-python~=3.7; extra == "complete-api"
230
227
  Requires-Dist: sqlalchemy~=1.4; extra == "complete-api"
231
228
  Requires-Dist: taos-ws-py==0.3.2; extra == "complete-api"
232
- Requires-Dist: taoswswrap~=0.3.5; extra == "complete-api"
233
229
  Requires-Dist: timelength~=1.1; extra == "complete-api"
234
230
  Requires-Dist: uvicorn~=0.32.1; extra == "complete-api"
235
231
  Dynamic: author