mlrun 1.8.0rc24__py3-none-any.whl → 1.8.0rc25__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.

mlrun/alerts/alert.py CHANGED
@@ -57,6 +57,7 @@ class AlertConfig(ModelObj):
57
57
  created: Optional[str] = None,
58
58
  count: Optional[int] = None,
59
59
  updated: Optional[str] = None,
60
+ **kwargs,
60
61
  ):
61
62
  """Alert config object
62
63
 
@@ -43,7 +43,7 @@ class DocumentLoaderSpec(ModelObj):
43
43
 
44
44
  """
45
45
 
46
- _dict_fields = ["loader_class_name", "src_name", "kwargs"]
46
+ _dict_fields = ["loader_class_name", "src_name", "download_object", "kwargs"]
47
47
 
48
48
  def __init__(
49
49
  self,
@@ -160,6 +160,9 @@ class AlertConfig(pydantic.v1.BaseModel):
160
160
  count: Optional[int] = 0
161
161
  updated: datetime = None
162
162
 
163
+ class Config:
164
+ extra = pydantic.v1.Extra.allow
165
+
163
166
  def get_raw_notifications(self) -> list[notification_objects.Notification]:
164
167
  return [
165
168
  alert_notification.notification for alert_notification in self.notifications
@@ -271,6 +271,9 @@ class VectorStoreCollection:
271
271
  DocumentArtifact.METADATA_SOURCE_KEY: {"$eq": artifact.get_source()}
272
272
  }
273
273
  self._collection_impl.delete(filter=filter)
274
+ elif store_class == "mongodbatlasvectorsearch":
275
+ filter = {DocumentArtifact.METADATA_SOURCE_KEY: artifact.get_source()}
276
+ self._collection_impl.collection.delete_many(filter=filter)
274
277
  elif (
275
278
  hasattr(self._collection_impl, "delete")
276
279
  and "filter"
mlrun/db/base.py CHANGED
@@ -929,6 +929,14 @@ class RunDBInterface(ABC):
929
929
  ):
930
930
  pass
931
931
 
932
+ @abstractmethod
933
+ def get_alert_activation(
934
+ self,
935
+ project,
936
+ activation_id,
937
+ ) -> mlrun.common.schemas.AlertActivation:
938
+ pass
939
+
932
940
  def update_alert_activation(
933
941
  self,
934
942
  activation_id: int,
mlrun/db/httpdb.py CHANGED
@@ -5022,6 +5022,27 @@ class HTTPRunDB(RunDBInterface):
5022
5022
  **kwargs,
5023
5023
  )
5024
5024
 
5025
+ def get_alert_activation(
5026
+ self,
5027
+ project,
5028
+ activation_id,
5029
+ ) -> mlrun.common.schemas.AlertActivation:
5030
+ """
5031
+ Retrieve the alert activation by id
5032
+
5033
+ :param project: Project name for which the summary belongs.
5034
+ :param activation_id: alert activation id.
5035
+ :returns: alert activation object.
5036
+ """
5037
+ project = project or config.default_project
5038
+
5039
+ error = "get alert activation"
5040
+ path = f"projects/{project}/alert-activations/{activation_id}"
5041
+
5042
+ response = self.api_call("GET", path, error)
5043
+
5044
+ return mlrun.common.schemas.AlertActivation(**response.json())
5045
+
5025
5046
  def get_project_summary(
5026
5047
  self, project: Optional[str] = None
5027
5048
  ) -> mlrun.common.schemas.ProjectSummary:
mlrun/db/nopdb.py CHANGED
@@ -948,5 +948,12 @@ class NopDB(RunDBInterface):
948
948
  ):
949
949
  pass
950
950
 
951
+ def get_alert_activation(
952
+ self,
953
+ project,
954
+ activation_id,
955
+ ) -> mlrun.common.schemas.AlertActivation:
956
+ pass
957
+
951
958
  def get_project_summary(self, project: str):
952
959
  pass
mlrun/execution.py CHANGED
@@ -965,12 +965,12 @@ class MLClientCtx:
965
965
  def get_artifact(
966
966
  self, key, tag=None, iter=None, tree=None, uid=None
967
967
  ) -> Optional[Artifact]:
968
- if tag or iter or tree or uid:
968
+ cached_artifact_uri = self._artifacts_manager.artifact_uris.get(key, None)
969
+ if tag or iter or tree or uid or (not cached_artifact_uri):
969
970
  project = self.get_project_object()
970
971
  return project.get_artifact(key=key, tag=tag, iter=iter, tree=tree, uid=uid)
971
972
  else:
972
- artifact_uri = self._artifacts_manager.artifact_uris[key]
973
- return self.get_store_resource(artifact_uri)
973
+ return self.get_store_resource(cached_artifact_uri)
974
974
 
975
975
  def update_artifact(self, artifact_object: Artifact):
976
976
  """Update an artifact object in the DB and the cached uri"""
mlrun/launcher/client.py CHANGED
@@ -134,7 +134,7 @@ class ClientBaseLauncher(launcher.BaseLauncher, abc.ABC):
134
134
  if mlrun.utils.is_jupyter and mlrun.mlconf.ipython_widget:
135
135
  results_tbl.show()
136
136
  print()
137
- ui_url = mlrun.utils.get_ui_url(project, uid)
137
+ ui_url = mlrun.utils.get_run_url(project, uid=uid, name=run.metadata.name)
138
138
  if ui_url:
139
139
  ui_url = f' or <a href="{ui_url}" target="_blank">click here</a> to open in UI'
140
140
  IPython.display.display(
@@ -150,6 +150,6 @@ class ClientBaseLauncher(launcher.BaseLauncher, abc.ABC):
150
150
  mlrun.utils.logger.info(
151
151
  "To track results use the CLI", info_cmd=info_cmd, logs_cmd=logs_cmd
152
152
  )
153
- ui_url = mlrun.utils.get_ui_url(project, uid)
153
+ ui_url = mlrun.utils.get_run_url(project, uid=uid, name=run.metadata.name)
154
154
  if ui_url:
155
155
  mlrun.utils.logger.info("Or click for UI", ui_url=ui_url)
@@ -166,7 +166,9 @@ class _ApplicationErrorHandler(StepToDict):
166
166
  "Endpoint ID": event.body.endpoint_id,
167
167
  "Application Class": event.body.application_name,
168
168
  "Error": "".join(
169
- traceback.format_exception(None, event.error, event.error.__traceback__)
169
+ traceback.format_exception(
170
+ None, value=event.error, tb=event.error.__traceback__
171
+ )
170
172
  ),
171
173
  "Timestamp": event.timestamp,
172
174
  }
@@ -302,7 +302,7 @@ class EventStreamProcessor:
302
302
  "controller_stream_kafka",
303
303
  path=path,
304
304
  kafka_brokers=brokers,
305
- _sharding_func="kafka_sharding_func", # TODO: remove this when storey handle str key
305
+ _sharding_func=ControllerEvent.ENDPOINT_ID,
306
306
  after="ForwardNOP",
307
307
  )
308
308
 
@@ -893,7 +893,3 @@ def update_monitoring_feature_set(
893
893
  )
894
894
 
895
895
  monitoring_feature_set.save()
896
-
897
-
898
- def kafka_sharding_func(event):
899
- return event.body[ControllerEvent.ENDPOINT_ID].encode("UTF-8")
@@ -50,7 +50,7 @@ class ContextHandler:
50
50
  "numpy",
51
51
  ]
52
52
  # Optional packagers to be collected at initialization time:
53
- _EXTENDED_PACKAGERS = [] # TODO: Create "matplotlib", "plotly", "bokeh" packagers.
53
+ _EXTENDED_PACKAGERS = [] # TODO: Create "matplotlib", "plotly", packagers.
54
54
  # Optional packagers from the `mlrun.frameworks` package:
55
55
  _MLRUN_FRAMEWORKS_PACKAGERS = [] # TODO: Create frameworks packagers.
56
56
  # Default priority values for packagers:
@@ -667,16 +667,9 @@ class PackagersManager:
667
667
  data_item=data_item,
668
668
  instructions={},
669
669
  )
670
- except Exception as exception:
670
+ except Exception:
671
671
  # Could not unpack as the reduced type hint, collect the exception and go to the next one:
672
- exception_string = "".join(
673
- traceback.format_exception(
674
- etype=type(exception),
675
- value=exception,
676
- tb=exception.__traceback__,
677
- )
678
- )
679
- found_packagers.append((packager, exception_string))
672
+ found_packagers.append((packager, traceback.format_exc()))
680
673
  # Reduce the type hint list and continue:
681
674
  possible_type_hints = TypeHintUtils.reduce_type_hint(
682
675
  type_hint=possible_type_hints
@@ -692,15 +685,8 @@ class PackagersManager:
692
685
  artifact_type=None,
693
686
  instructions={},
694
687
  )
695
- except Exception as exception:
696
- exception_string = "".join(
697
- traceback.format_exception(
698
- etype=type(exception),
699
- value=exception,
700
- tb=exception.__traceback__,
701
- )
702
- )
703
- found_packagers.append((self._default_packager, exception_string))
688
+ except Exception:
689
+ found_packagers.append((self._default_packager, traceback.format_exc()))
704
690
 
705
691
  # The method did not return until this point, raise an error:
706
692
  raise MLRunPackageUnpackingError(
@@ -31,7 +31,7 @@ import mlrun_pipelines.patcher
31
31
  import mlrun_pipelines.utils
32
32
  from mlrun.errors import err_to_str
33
33
  from mlrun.utils import (
34
- get_ui_url,
34
+ get_workflow_url,
35
35
  logger,
36
36
  normalize_workflow_name,
37
37
  retry_until_successful,
@@ -1225,7 +1225,7 @@ def notify_scheduled_workflow_failure(
1225
1225
  notification_pusher = mlrun.utils.notifications.CustomNotificationPusher(
1226
1226
  ["slack"]
1227
1227
  )
1228
- url = get_ui_url(project_name, context_uid)
1228
+ url = get_workflow_url(project_name, context_uid)
1229
1229
  link = f"<{url}|*view workflow job details*>"
1230
1230
  message = (
1231
1231
  f":x: Failed to run scheduled workflow {workflow_name} "
mlrun/secrets.py CHANGED
@@ -134,7 +134,7 @@ class SecretsStore:
134
134
  def k8s_env_variable_name_for_secret(secret_name):
135
135
  from mlrun.config import config
136
136
 
137
- return config.secret_stores.kubernetes.env_variable_prefix + secret_name.upper()
137
+ return config.secret_stores.kubernetes.env_variable_prefix + secret_name
138
138
 
139
139
  def get_k8s_secrets(self):
140
140
  for source in self._hidden_sources:
mlrun/utils/helpers.py CHANGED
@@ -93,14 +93,19 @@ class StorePrefix:
93
93
  Artifact = "artifacts"
94
94
  Model = "models"
95
95
  Dataset = "datasets"
96
+ Document = "documents"
96
97
 
97
98
  @classmethod
98
99
  def is_artifact(cls, prefix):
99
- return prefix in [cls.Artifact, cls.Model, cls.Dataset]
100
+ return prefix in [cls.Artifact, cls.Model, cls.Dataset, cls.Document]
100
101
 
101
102
  @classmethod
102
103
  def kind_to_prefix(cls, kind):
103
- kind_map = {"model": cls.Model, "dataset": cls.Dataset}
104
+ kind_map = {
105
+ "model": cls.Model,
106
+ "dataset": cls.Dataset,
107
+ "document": cls.Document,
108
+ }
104
109
  return kind_map.get(kind, cls.Artifact)
105
110
 
106
111
  @classmethod
@@ -111,6 +116,7 @@ class StorePrefix:
111
116
  cls.Dataset,
112
117
  cls.FeatureSet,
113
118
  cls.FeatureVector,
119
+ cls.Document,
114
120
  ]
115
121
 
116
122
 
@@ -1040,31 +1046,85 @@ async def retry_until_successful_async(
1040
1046
  ).run()
1041
1047
 
1042
1048
 
1043
- def get_ui_url(project, uid=None):
1044
- url = ""
1049
+ def get_project_url(project: str) -> str:
1050
+ """
1051
+ Generate the base URL for a given project.
1052
+
1053
+ :param project: The project name.
1054
+ :return: The base URL for the project, or an empty string if the base URL is not resolved.
1055
+ """
1045
1056
  if mlrun.mlconf.resolve_ui_url():
1046
- url = f"{mlrun.mlconf.resolve_ui_url()}/{mlrun.mlconf.ui.projects_prefix}/{project}/jobs"
1047
- if uid:
1048
- url += f"/monitor/{uid}/overview"
1049
- return url
1057
+ return f"{mlrun.mlconf.resolve_ui_url()}/{mlrun.mlconf.ui.projects_prefix}/{project}"
1058
+ return ""
1050
1059
 
1051
1060
 
1052
- def get_model_endpoint_url(project, model_name, model_endpoint_id):
1053
- url = ""
1054
- if mlrun.mlconf.resolve_ui_url():
1055
- url = f"{mlrun.mlconf.resolve_ui_url()}/{mlrun.mlconf.ui.projects_prefix}/{project}/models"
1056
- if model_name:
1057
- url += f"/model-endpoints/{model_name}/{model_endpoint_id}/overview"
1061
+ def get_run_url(project: str, uid: str, name: str) -> str:
1062
+ """
1063
+ Generate the URL for a specific run.
1064
+
1065
+ :param project: The project name.
1066
+ :param uid: The run UID.
1067
+ :param name: The run name.
1068
+ :return: The URL for the run, or an empty string if the base URL is not resolved.
1069
+ """
1070
+ runs_url = get_runs_url(project)
1071
+ if not runs_url:
1072
+ return ""
1073
+ return f"{runs_url}/monitor-jobs/{name}/{uid}/overview"
1074
+
1075
+
1076
+ def get_runs_url(project: str) -> str:
1077
+ """
1078
+ Generate the URL for the runs of a given project.
1079
+
1080
+ :param project: The project name.
1081
+ :return: The URL for the runs, or an empty string if the base URL is not resolved.
1082
+ """
1083
+ base_url = get_project_url(project)
1084
+ if not base_url:
1085
+ return ""
1086
+ return f"{base_url}/jobs"
1087
+
1088
+
1089
+ def get_model_endpoint_url(
1090
+ project: str,
1091
+ model_name: Optional[str] = None,
1092
+ model_endpoint_id: Optional[str] = None,
1093
+ ) -> str:
1094
+ """
1095
+ Generate the URL for a specific model endpoint.
1096
+
1097
+ :param project: The project name.
1098
+ :param model_name: The model name.
1099
+ :param model_endpoint_id: The model endpoint ID.
1100
+ :return: The URL for the model endpoint, or an empty string if the base URL is not resolved.
1101
+ """
1102
+ base_url = get_project_url(project)
1103
+ if not base_url:
1104
+ return ""
1105
+ url = f"{base_url}/models"
1106
+ if model_name and model_endpoint_id:
1107
+ url += f"/model-endpoints/{model_name}/{model_endpoint_id}/overview"
1058
1108
  return url
1059
1109
 
1060
1110
 
1061
- def get_workflow_url(project, id=None):
1062
- url = ""
1063
- if mlrun.mlconf.resolve_ui_url():
1064
- url = (
1065
- f"{mlrun.mlconf.resolve_ui_url()}/{mlrun.mlconf.ui.projects_prefix}"
1066
- f"/{project}/jobs/monitor-workflows/workflow/{id}"
1067
- )
1111
+ def get_workflow_url(
1112
+ project: str,
1113
+ id: Optional[str] = None,
1114
+ ) -> str:
1115
+ """
1116
+ Generate the URL for a specific workflow.
1117
+
1118
+ :param project: The project name.
1119
+ :param id: The workflow ID.
1120
+ :return: The URL for the workflow, or an empty string if the base URL is not resolved.
1121
+ """
1122
+ base_url = get_project_url(project)
1123
+ if not base_url:
1124
+ return ""
1125
+ url = f"{base_url}/jobs/monitor-workflows/workflow"
1126
+ if id:
1127
+ url += f"/{id}"
1068
1128
  return url
1069
1129
 
1070
1130
 
@@ -134,7 +134,12 @@ class NotificationBase:
134
134
  event_data.entity.kind == mlrun.common.schemas.alert.EventEntityKind.JOB
135
135
  ): # JOB entity
136
136
  uid = event_data.value_dict.get("uid")
137
- url = mlrun.utils.helpers.get_ui_url(alert.project, uid)
137
+ name = event_data.entity.ids[0]
138
+ url = mlrun.utils.helpers.get_run_url(
139
+ alert.project,
140
+ uid=uid,
141
+ name=name,
142
+ )
138
143
  overview_type = "Job overview"
139
144
  else: # MODEL entity
140
145
  model_name = event_data.value_dict.get("model")
@@ -168,7 +168,11 @@ class SlackNotification(NotificationBase):
168
168
 
169
169
  def _get_run_line(self, run: dict) -> dict:
170
170
  meta = run["metadata"]
171
- url = mlrun.utils.helpers.get_ui_url(meta.get("project"), meta.get("uid"))
171
+ url = mlrun.utils.helpers.get_run_url(
172
+ meta.get("project"),
173
+ uid=meta.get("uid"),
174
+ name=meta.get("name"),
175
+ )
172
176
 
173
177
  # Only show the URL if the run is not a function (serving or mlrun function)
174
178
  kind = run.get("step_kind")
@@ -200,7 +200,7 @@ class NotificationPusher(_NotificationPusherBase):
200
200
  "Failed to push notification async",
201
201
  error=mlrun.errors.err_to_str(result),
202
202
  traceback=traceback.format_exception(
203
- etype=type(result),
203
+ result,
204
204
  value=result,
205
205
  tb=result.__traceback__,
206
206
  ),
@@ -637,7 +637,7 @@ class CustomNotificationPusher(_NotificationPusherBase):
637
637
  if has_workflow_url:
638
638
  url = mlrun.utils.helpers.get_workflow_url(project, pipeline_id)
639
639
  else:
640
- url = mlrun.utils.helpers.get_ui_url(project)
640
+ url = mlrun.utils.helpers.get_runs_url(project)
641
641
  html = ""
642
642
  if url:
643
643
  html = (
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "f1df8f0da3910eb0d0603cb299703b00e79947f4",
3
- "version": "1.8.0-rc24"
2
+ "git_commit": "71de34eae245da0670aad9935e8729b9fbf9fc83",
3
+ "version": "1.8.0-rc25"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mlrun
3
- Version: 1.8.0rc24
3
+ Version: 1.8.0rc25
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -39,12 +39,12 @@ Requires-Dist: v3io~=0.6.9
39
39
  Requires-Dist: pydantic>=1.10.15
40
40
  Requires-Dist: mergedeep~=1.3
41
41
  Requires-Dist: v3io-frames~=0.10.14; python_version < "3.11"
42
- Requires-Dist: v3io-frames!=0.11.*,!=0.12.*,>=0.10.14; python_version >= "3.11"
42
+ Requires-Dist: v3io-frames>=0.13.0; python_version >= "3.11"
43
43
  Requires-Dist: semver~=3.0
44
44
  Requires-Dist: dependency-injector~=4.41
45
45
  Requires-Dist: fsspec<2024.7,>=2023.9.2
46
46
  Requires-Dist: v3iofs~=0.1.17
47
- Requires-Dist: storey~=1.8.7
47
+ Requires-Dist: storey~=1.8.8
48
48
  Requires-Dist: inflection~=0.5.0
49
49
  Requires-Dist: python-dotenv~=1.0
50
50
  Requires-Dist: setuptools>=75.2
@@ -68,8 +68,6 @@ Provides-Extra: azure-key-vault
68
68
  Requires-Dist: azure-identity~=1.5; extra == "azure-key-vault"
69
69
  Requires-Dist: azure-keyvault-secrets~=4.2; extra == "azure-key-vault"
70
70
  Requires-Dist: pyopenssl>=23; extra == "azure-key-vault"
71
- Provides-Extra: bokeh
72
- Requires-Dist: bokeh>=2.4.2,~=2.4; extra == "bokeh"
73
71
  Provides-Extra: plotly
74
72
  Requires-Dist: plotly~=5.23; extra == "plotly"
75
73
  Provides-Extra: graphviz
@@ -92,8 +90,10 @@ Requires-Dist: databricks-sdk~=0.20.0; extra == "databricks-sdk"
92
90
  Provides-Extra: sqlalchemy
93
91
  Requires-Dist: sqlalchemy~=1.4; extra == "sqlalchemy"
94
92
  Provides-Extra: dask
95
- Requires-Dist: dask~=2023.12.1; extra == "dask"
96
- Requires-Dist: distributed~=2023.12.1; extra == "dask"
93
+ Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "dask"
94
+ Requires-Dist: distributed~=2024.12.1; python_version >= "3.11" and extra == "dask"
95
+ Requires-Dist: dask~=2023.12.1; python_version < "3.11" and extra == "dask"
96
+ Requires-Dist: distributed~=2023.12.1; python_version < "3.11" and extra == "dask"
97
97
  Provides-Extra: alibaba-oss
98
98
  Requires-Dist: ossfs==2023.12.0; extra == "alibaba-oss"
99
99
  Requires-Dist: oss2==2.18.1; extra == "alibaba-oss"
@@ -127,11 +127,12 @@ Requires-Dist: avro~=1.11; extra == "all"
127
127
  Requires-Dist: azure-core~=1.24; extra == "all"
128
128
  Requires-Dist: azure-identity~=1.5; extra == "all"
129
129
  Requires-Dist: azure-keyvault-secrets~=4.2; extra == "all"
130
- Requires-Dist: bokeh>=2.4.2,~=2.4; extra == "all"
131
130
  Requires-Dist: boto3<1.36,>=1.28.0; extra == "all"
132
- Requires-Dist: dask~=2023.12.1; extra == "all"
131
+ Requires-Dist: dask~=2023.12.1; python_version < "3.11" and extra == "all"
132
+ Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "all"
133
133
  Requires-Dist: databricks-sdk~=0.20.0; extra == "all"
134
- Requires-Dist: distributed~=2023.12.1; extra == "all"
134
+ Requires-Dist: distributed~=2023.12.1; python_version < "3.11" and extra == "all"
135
+ Requires-Dist: distributed~=2024.12.1; python_version >= "3.11" and extra == "all"
135
136
  Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "all"
136
137
  Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "all"
137
138
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "all"
@@ -159,9 +160,11 @@ Requires-Dist: azure-core~=1.24; extra == "complete"
159
160
  Requires-Dist: azure-identity~=1.5; extra == "complete"
160
161
  Requires-Dist: azure-keyvault-secrets~=4.2; extra == "complete"
161
162
  Requires-Dist: boto3<1.36,>=1.28.0; extra == "complete"
162
- Requires-Dist: dask~=2023.12.1; extra == "complete"
163
+ Requires-Dist: dask~=2023.12.1; python_version < "3.11" and extra == "complete"
164
+ Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "complete"
163
165
  Requires-Dist: databricks-sdk~=0.20.0; extra == "complete"
164
- Requires-Dist: distributed~=2023.12.1; extra == "complete"
166
+ Requires-Dist: distributed~=2023.12.1; python_version < "3.11" and extra == "complete"
167
+ Requires-Dist: distributed~=2024.12.1; python_version >= "3.11" and extra == "complete"
165
168
  Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "complete"
166
169
  Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "complete"
167
170
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "complete"
@@ -193,9 +196,11 @@ Requires-Dist: azure-identity~=1.5; extra == "complete-api"
193
196
  Requires-Dist: azure-keyvault-secrets~=4.2; extra == "complete-api"
194
197
  Requires-Dist: boto3<1.36,>=1.28.0; extra == "complete-api"
195
198
  Requires-Dist: dask-kubernetes~=0.11.0; extra == "complete-api"
196
- Requires-Dist: dask~=2023.12.1; extra == "complete-api"
199
+ Requires-Dist: dask~=2023.12.1; python_version < "3.11" and extra == "complete-api"
200
+ Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "complete-api"
197
201
  Requires-Dist: databricks-sdk~=0.20.0; extra == "complete-api"
198
- Requires-Dist: distributed~=2023.12.1; extra == "complete-api"
202
+ Requires-Dist: distributed~=2023.12.1; python_version < "3.11" and extra == "complete-api"
203
+ Requires-Dist: distributed~=2024.12.1; python_version >= "3.11" and extra == "complete-api"
199
204
  Requires-Dist: fastapi~=0.115.6; extra == "complete-api"
200
205
  Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "complete-api"
201
206
  Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "complete-api"
@@ -2,21 +2,21 @@ mlrun/__init__.py,sha256=zS40Lp5ZKivLBlNDkv-OQmVvwDib7C-cCdtD6UKXe28,8808
2
2
  mlrun/__main__.py,sha256=3CJdwbSQGpbEhnAnVN_-CkQmLOPUUXTKhMf7xIWNQrc,46138
3
3
  mlrun/config.py,sha256=zzR_qbNuA-lLIScx5GLRIF21eNJIoiVeBU-JS_movKo,71711
4
4
  mlrun/errors.py,sha256=LkcbXTLANGdsgo2CRX2pdbyNmt--lMsjGv0XZMgP-Nc,8222
5
- mlrun/execution.py,sha256=WCrE3AoB2ldwcZPzJI1iCeD4DXi5ARkUv119FiQiiQk,49087
5
+ mlrun/execution.py,sha256=0Lvs_kgUUbAyxnU8uABy4iRKLiTr7hcwhtWM79hrT28,49136
6
6
  mlrun/features.py,sha256=ReBaNGsBYXqcbgI012n-SO_j6oHIbk_Vpv0CGPXbUmo,15842
7
7
  mlrun/k8s_utils.py,sha256=mRQMs6NzPq36vx1n5_2BfFapXysc8wv3NcrZ77_2ANA,8949
8
8
  mlrun/lists.py,sha256=1hFv3Iyu5DVX1kdBGJmwUoY0CqrzauhKdSq9g3piHb4,8442
9
9
  mlrun/model.py,sha256=Qmj0UH5H0GKd6ZwxugxCvoqSP3O5q0LV0wSlHIzkyIM,85312
10
10
  mlrun/render.py,sha256=940H9fBBFeghH4dlifbURvtjlvw4GlWdAXezN6ky4rI,13275
11
11
  mlrun/run.py,sha256=ht5tg-Sge_IYHILd55ym_HJTSmimu6sjBvSc5JzVqJc,45151
12
- mlrun/secrets.py,sha256=2WZEYp11tZkvcvD888vnSIbRMRttfNfYKLnCbiRvEaU,7808
12
+ mlrun/secrets.py,sha256=dZPdkc_zzfscVQepOHUwmzFqnBavDCBXV9DQoH_eIYM,7800
13
13
  mlrun/alerts/__init__.py,sha256=0gtG1BG0DXxFrXegIkjbM1XEN4sP9ODo0ucXrNld1hU,601
14
- mlrun/alerts/alert.py,sha256=mTROlDXzQw5gyWBFaUnykai3wpvjmgRmo28p0ytbzIU,15930
14
+ mlrun/alerts/alert.py,sha256=9kGTtV385Ax-aTm-450HzPwEek9e0c3O3Qln-jXjhFg,15948
15
15
  mlrun/api/schemas/__init__.py,sha256=fEWH4I8hr5AdRJ7yoW44RlFB6NHkYDxyomP5J6ct1z4,14248
16
16
  mlrun/artifacts/__init__.py,sha256=ofC2extBCOC1wg1YtdTzWzH3eeG_f-sFBUkHjYtZJpk,1175
17
17
  mlrun/artifacts/base.py,sha256=nz2ZqC74JGfWN0M6_hOXXQj3bXSTxNp4eUgvWHVcdvY,29979
18
18
  mlrun/artifacts/dataset.py,sha256=QTot5vCgLHatlIWwNnKbWdZ8HHTxaZ7wk4gWQDoqQ2k,16655
19
- mlrun/artifacts/document.py,sha256=_EpmUGKEAQR-S_Yde4lqJTkwMaiHqHGXsEoiFPX_-Uk,16552
19
+ mlrun/artifacts/document.py,sha256=KQy_wC8QouE_EU_t3vK24Du4bkKBhmxacSssJk_yXLw,16571
20
20
  mlrun/artifacts/manager.py,sha256=bXb70mKF6wIGs7syCiFfGnjalqx4g9bO_J5DaVzUUKw,16163
21
21
  mlrun/artifacts/model.py,sha256=jeOjUq_iZSHoNqlPyGgOz6acwje1Yqpg1yZwF9GbyG8,21615
22
22
  mlrun/artifacts/plots.py,sha256=dS0mHGt1b20tN2JyEH9H5o5I0oMKZkzn3Uz_3Hf4WjU,4813
@@ -40,7 +40,7 @@ mlrun/common/model_monitoring/__init__.py,sha256=kXGBqhLN0rlAx0kTXhozGzFsIdSqW0u
40
40
  mlrun/common/model_monitoring/helpers.py,sha256=lV86teJYoE3MNDx4yhpbzO1KylWmvDbuNODw5yGZwgs,2943
41
41
  mlrun/common/runtimes/constants.py,sha256=07wD1g8QjXZe1fm2hSMOxZG19aAUsEZM8WeXnyoBd6Q,12127
42
42
  mlrun/common/schemas/__init__.py,sha256=PBuIAhXSkVEVxxKcv5hR_xvTwNAUqxOXHVPugOoWTyM,5386
43
- mlrun/common/schemas/alert.py,sha256=G9lFTXFYDor-RVLpJxMorIPlLWr_-GYCFKRN9DkKwXs,10124
43
+ mlrun/common/schemas/alert.py,sha256=tRsjHEQTjCb-83GS0mprsu5junvqL4aQjWN2Rt_yAaM,10183
44
44
  mlrun/common/schemas/api_gateway.py,sha256=3a0QxECLmoDkD5IiOKtXJL-uiWB26Hg55WMA3nULYuI,7127
45
45
  mlrun/common/schemas/artifact.py,sha256=f0NPsoZmA-WD9RtN-dcKFW6KuV0PPQB25A2psF7LbP8,4013
46
46
  mlrun/common/schemas/auth.py,sha256=AGbBNvQq_vcvhX_NLqbT-QPHL4BAJMB3xwBXW7cFvpo,6761
@@ -102,15 +102,15 @@ mlrun/datastore/storeytargets.py,sha256=uNYG4nCBD3JIfa51CG4cDe9ryc9oIcqUdUXKvCPB
102
102
  mlrun/datastore/targets.py,sha256=QiEK-mHmUt2qnS2yaBSSKgk8CKqsGU-JoQ9kHoW1bvE,80759
103
103
  mlrun/datastore/utils.py,sha256=ZDAzz0W16_JcM6Q9h4RoMbdruM9eA6YGlA5dw8gW8Bw,7754
104
104
  mlrun/datastore/v3io.py,sha256=QSYBORRLcJTeM9mt0EaWzyLcdmzrPkqrF7k5uLTam5U,8209
105
- mlrun/datastore/vectorstore.py,sha256=QzywQi9ZuFShSRTVpHbwro8G6-N279OFVQ4niiwRDW4,11485
105
+ mlrun/datastore/vectorstore.py,sha256=k-yom5gfw20hnVG0Rg7aBEehuXwvAloZwn0cx0VGals,11708
106
106
  mlrun/datastore/wasbfs/__init__.py,sha256=s5Ul-0kAhYqFjKDR2X0O2vDGDbLQQduElb32Ev56Te4,1343
107
107
  mlrun/datastore/wasbfs/fs.py,sha256=ge8NK__5vTcFT-krI155_8RDUywQw4SIRX6BWATXy9Q,6299
108
108
  mlrun/db/__init__.py,sha256=WqJ4x8lqJ7ZoKbhEyFqkYADd9P6E3citckx9e9ZLcIU,1163
109
109
  mlrun/db/auth_utils.py,sha256=hpg8D2r82oN0BWabuWN04BTNZ7jYMAF242YSUpK7LFM,5211
110
- mlrun/db/base.py,sha256=2Pkq8Hax13rZjxlB5aNq5X4LcU6a_frpvvNFCqsBHOQ,30435
110
+ mlrun/db/base.py,sha256=hYxV5VIz7EbnOA7AXIfWv52ABueCka07xM6xpH2hbto,30600
111
111
  mlrun/db/factory.py,sha256=yP2vVmveUE7LYTCHbS6lQIxP9rW--zdISWuPd_I3d_4,2111
112
- mlrun/db/httpdb.py,sha256=3k6DtcgjasUThVjz0AQfSFrURYbB3DWqVRqJIwvbNX0,230448
113
- mlrun/db/nopdb.py,sha256=IyZG7n2c-Cbp0x8zPlLmgIMzYPFOTMJKW9bMkJV0hic,26890
112
+ mlrun/db/httpdb.py,sha256=yOnMVLLm4ZigKdtsXXqe6i9IIVzQ-hKMEIKoVexzdhg,231100
113
+ mlrun/db/nopdb.py,sha256=8nAuIn52NAfrKmk8EnE9kewLeGWOR29PxqVmfLxhhUw,27035
114
114
  mlrun/feature_store/__init__.py,sha256=AVnY2AFUNc2dKxLLUMx2K3Wo1eGviv0brDcYlDnmtf4,1506
115
115
  mlrun/feature_store/api.py,sha256=qkojZpzqGAn3r9ww0ynBRKOs8ji8URaK4DSYD4SE-CE,50395
116
116
  mlrun/feature_store/common.py,sha256=Z7USI-d1fo0iwBMsqMBtJflJfyuiV3BLoDXQPSAoBAs,12826
@@ -211,7 +211,7 @@ mlrun/frameworks/xgboost/model_handler.py,sha256=e3VLKMmaC9OFoclUPx9buUXYLDe1Ab3
211
211
  mlrun/frameworks/xgboost/utils.py,sha256=5zLzHoeI3n2FuA_rdGzi404QCTLfQx1TYEyUWhZogs8,1069
212
212
  mlrun/launcher/__init__.py,sha256=JL8qkT1lLr1YvW6iP0hmwDTaSR2RfrMDx0-1gWRhTOE,571
213
213
  mlrun/launcher/base.py,sha256=uZaUpwjy9_Z137aQ4b1JsuYqD01ZVRxytAxZSFKSu6U,16480
214
- mlrun/launcher/client.py,sha256=FXzQQqrSVE9oapLjjUYvx5qhZPG1r4ynUjUUFZVPekE,6228
214
+ mlrun/launcher/client.py,sha256=lJ3y9brmPspgwAZrUPAeu3Dn5B7mh9k3MhrbFKhNDvw,6286
215
215
  mlrun/launcher/factory.py,sha256=RW7mfzEFi8fR0M-4W1JQg1iq3_muUU6OTqT_3l4Ubrk,2338
216
216
  mlrun/launcher/local.py,sha256=9zNiuswHnSINDj4yYP2Vd192b5d4FUtSA8O2ICKjsKo,11279
217
217
  mlrun/launcher/remote.py,sha256=rLJW4UAnUT5iUb4BsGBOAV3K4R29a0X4lFtRkVKlyYU,7709
@@ -220,11 +220,11 @@ mlrun/model_monitoring/api.py,sha256=nH5aEUkmUEJF0CurrWJxmxVv1tQed2yzCLhQByG1L00
220
220
  mlrun/model_monitoring/controller.py,sha256=1SdrYC3n9nDOOM6G2dE0RgWnaq0o7u7sw2U2gJTpBPs,26516
221
221
  mlrun/model_monitoring/features_drift_table.py,sha256=c6GpKtpOJbuT1u5uMWDL_S-6N4YPOmlktWMqPme3KFY,25308
222
222
  mlrun/model_monitoring/helpers.py,sha256=EX9i1JCY4NKHqUFptGU_xOIpGjQQ--3GytrEhDxIZ-4,18317
223
- mlrun/model_monitoring/stream_processing.py,sha256=h_jexS-yttP98Ma51vxB_m_ZGs9soCOMoEwAkf_3hHA,35669
223
+ mlrun/model_monitoring/stream_processing.py,sha256=EEix1rY0UMsaqadK9NsKMNJqcVPqGQq0vhuRCoKro2M,35526
224
224
  mlrun/model_monitoring/tracking_policy.py,sha256=PBIGrUYWrwcE5gwXupBIVzOb0QRRwPJsgQm_yLGQxB4,5595
225
225
  mlrun/model_monitoring/writer.py,sha256=vbL7bqTyNu8q4bNcebX72sUMybVDAoTWg-CXq4fov3Y,8429
226
226
  mlrun/model_monitoring/applications/__init__.py,sha256=QYvzgCutFdAkzqKPD3mvkX_3c1X4tzd-kW8ojUOE9ic,889
227
- mlrun/model_monitoring/applications/_application_steps.py,sha256=NvrYJs6N0Kpp3s_t6s9LkCk5hY7kWYmkVoIhz_ZZx_8,7178
227
+ mlrun/model_monitoring/applications/_application_steps.py,sha256=q4Dd7EtPPqrvLoBHh3eViu22_RF3CpnWBg7NN3aT_SM,7225
228
228
  mlrun/model_monitoring/applications/base.py,sha256=pqmZ67zaslIkcJlsjcUG6TWjbBTD_fYci6rlEvbFttc,15091
229
229
  mlrun/model_monitoring/applications/context.py,sha256=kE_8h7eoUES_bFG2s7nENRziMFB72fJvAZ3KpIBWxOo,15084
230
230
  mlrun/model_monitoring/applications/evidently_base.py,sha256=hRjXuXf6xf8sbjGt9yYfGDUGnvS5rV3W7tkJroF3QJA,5098
@@ -246,10 +246,10 @@ mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=oiro-fEmeVQe39hPmeN
246
246
  mlrun/model_monitoring/metrics/__init__.py,sha256=6CsTXAxeLbbf8yfCADTaxmiavqwrLEdYFJ-qc5kgDAY,569
247
247
  mlrun/model_monitoring/metrics/histogram_distance.py,sha256=E9_WIl2vd6qNvoHVHoFcnuQk3ekbFWOdi8aU7sHrfk4,4724
248
248
  mlrun/package/__init__.py,sha256=v7VDyK9kDOOuDvFo4oiGV2fx-vM1KL7fdN9pGLakhUQ,7008
249
- mlrun/package/context_handler.py,sha256=VTr1Sz8LgmiktV4o9IEq1oeMNb8h4VGxigHP_6APB6o,14597
249
+ mlrun/package/context_handler.py,sha256=in6jOV4O9ALUYaDKdsUVa8uFP4g9pVJsgvjamkfA4VY,14589
250
250
  mlrun/package/errors.py,sha256=LKF8SSaRIdbkB7JQz6b9U4mZV42Ebnf6ZHu4wKuWqK4,1204
251
251
  mlrun/package/packager.py,sha256=-eXESrSuPTT_3ELi9RG1-035O2J4R73umOkC5xnPgqc,15189
252
- mlrun/package/packagers_manager.py,sha256=VF7X9NDJGuXRDIIZmPLPzOxB9qFqiXqVaK064_7vKz4,37895
252
+ mlrun/package/packagers_manager.py,sha256=hRRJxIZJhTEPaosWsDOUjcLTj-5-nCii94J5kLjpcRM,37337
253
253
  mlrun/package/packagers/__init__.py,sha256=wF2OdhG1zgABbxYBxBNUCk0VNYwBMS9Yy4EW0OMPuoI,666
254
254
  mlrun/package/packagers/default_packager.py,sha256=stA6WtaTbwacLSLqFOiHCnCBgb-afvzBRMicCtBIl-Y,26768
255
255
  mlrun/package/packagers/numpy_packagers.py,sha256=UlhV4CE6r8uqlLKDOuRuMx154ktzcQ1hJNFB8sUgAeI,25767
@@ -266,7 +266,7 @@ mlrun/platforms/__init__.py,sha256=ZuyeHCHHUxYEoZRmaJqzFSfwhaTyUdBZXMeVp75ql1w,3
266
266
  mlrun/platforms/iguazio.py,sha256=6VBTq8eQ3mzT96tzjYhAtcMQ2VjF4x8LpIPW5DAcX2Q,13749
267
267
  mlrun/projects/__init__.py,sha256=0Krf0WIKfnZa71WthYOg0SoaTodGg3sV_hK3f_OlTPI,1220
268
268
  mlrun/projects/operations.py,sha256=VXUlMrouFTls-I-bMhdN5pPfQ34TR7bFQ-NUSWNvl84,20029
269
- mlrun/projects/pipelines.py,sha256=UwRwK2e8T0463quQ3d-ud_swmTLkBuSVUroY4YkgzZU,47903
269
+ mlrun/projects/pipelines.py,sha256=3UmjPKKAKKttdAOFnv_3vF0YLU1LHKQqUO2xp0K5yng,47915
270
270
  mlrun/projects/project.py,sha256=R928WXngIo_KJ-Ayxod2C2cmsHz2_yor8a3W7phDf_0,233046
271
271
  mlrun/runtimes/__init__.py,sha256=J9Sy2HiyMlztNv6VUurMzF5H2XzttNil8nRsWDsqLyg,8923
272
272
  mlrun/runtimes/base.py,sha256=Yt2l7srrXjK783cunBEKH0yQxQZRH8lkedXNOXuLbbo,37841
@@ -318,7 +318,7 @@ mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,34
318
318
  mlrun/utils/clones.py,sha256=y3zC9QS7z5mLuvyQ6vFd6sJnikbgtDwrBvieQq0sovY,7359
319
319
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
320
320
  mlrun/utils/db.py,sha256=blQgkWMfFH9lcN4sgJQcPQgEETz2Dl_zwbVA0SslpFg,2186
321
- mlrun/utils/helpers.py,sha256=TYDhMDWGtkrMJLslanSAb1sg7kR92q3etOWpTcqCoJk,70499
321
+ mlrun/utils/helpers.py,sha256=fQmr1xcOB9Q3Z3CL-n9qqevBWsoMF7VPz_Uucmz4ORg,72101
322
322
  mlrun/utils/http.py,sha256=t6FrXQstZm9xVVjxqIGiLzrwZNCR4CSienSOuVgNIcI,8706
323
323
  mlrun/utils/logger.py,sha256=_v4UTv1-STzC2c6aAWAa0NNl9STQoBYbR3OHgAiL41s,14606
324
324
  mlrun/utils/regex.py,sha256=IQqwPna6Z8J31xkTUduYbGk48GkQBUJFZSuxAWm1pzU,5162
@@ -327,21 +327,21 @@ mlrun/utils/singleton.py,sha256=p1Y-X0mPSs_At092GS-pZCA8CTR62HOqPU07_ZH6-To,869
327
327
  mlrun/utils/v3io_clients.py,sha256=0aCFiQFBmgdSeLzJr_nEP6SG-zyieSgH8RdtcUq4dc0,1294
328
328
  mlrun/utils/vault.py,sha256=xUiKL17dCXjwQJ33YRzQj0oadUXATlFWPzKKYAESoQk,10447
329
329
  mlrun/utils/notifications/__init__.py,sha256=eUzQDBxSQmMZASRY-YAnYS6tL5801P0wEjycp3Dvoe0,990
330
- mlrun/utils/notifications/notification_pusher.py,sha256=wxp5aehPLCWTw5xQMJwPNZGCt2uJ-qeqWrY3L2TCc0o,25604
330
+ mlrun/utils/notifications/notification_pusher.py,sha256=DfYFiIVYbFybxvOx4uChaPWHjpMdOdUW2BS2FISH4Sw,25594
331
331
  mlrun/utils/notifications/notification/__init__.py,sha256=9Rfy6Jm8n0LaEDO1VAQb6kIbr7_uVuQhK1pS_abELIY,2581
332
- mlrun/utils/notifications/notification/base.py,sha256=VOgrzRakRfjYYBqvkc0cgEC5pl7KMidP7u-TL4HpGCY,5280
332
+ mlrun/utils/notifications/notification/base.py,sha256=-9e3XqUixrWwImnTGrIL4enJRSIUP9gMrJVxwaLqeXc,5403
333
333
  mlrun/utils/notifications/notification/console.py,sha256=ICbIhOf9fEBJky_3j9TFiKAewDGyDHJr9l4VeT7G2sc,2745
334
334
  mlrun/utils/notifications/notification/git.py,sha256=t2lqRrPRBO4awf_uhxJreH9CpcbYSH8T3CvHtwspHkE,6306
335
335
  mlrun/utils/notifications/notification/ipython.py,sha256=9uZvI1uOLFaNuAsfJPXmL3l6dOzFoWdBK5GYNYFAfks,2282
336
336
  mlrun/utils/notifications/notification/mail.py,sha256=ZyJ3eqd8simxffQmXzqd3bgbAqp1vij7C6aRJ9h2mgs,6012
337
- mlrun/utils/notifications/notification/slack.py,sha256=NKV4RFiY3gLsS8uPppgniPLyag8zJ9O1VhixoXkM7kw,7108
337
+ mlrun/utils/notifications/notification/slack.py,sha256=eQvmctTh6wIG5xVOesLLV9S1-UUCu5UEQ9JIJOor3ts,7183
338
338
  mlrun/utils/notifications/notification/webhook.py,sha256=NeyIMSBojjjTJaUHmPbxMByp34GxYkl1-16NqzU27fU,4943
339
339
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
340
- mlrun/utils/version/version.json,sha256=pkFLUjCOLs6cpEzvgIMc-xFOvwd9CFJ4V-ICOtobiJs,89
340
+ mlrun/utils/version/version.json,sha256=MTyj1mgVxV_xX2d-zAZ65wss0XsoFXkn-u5mvdrLu00,89
341
341
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
342
- mlrun-1.8.0rc24.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
343
- mlrun-1.8.0rc24.dist-info/METADATA,sha256=N1n40qQkytpt020w12W8ZhK6fY5TRCto8vxoHTRgMx4,25141
344
- mlrun-1.8.0rc24.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
345
- mlrun-1.8.0rc24.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
346
- mlrun-1.8.0rc24.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
347
- mlrun-1.8.0rc24.dist-info/RECORD,,
342
+ mlrun-1.8.0rc25.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
343
+ mlrun-1.8.0rc25.dist-info/METADATA,sha256=QBiS1ES5J3LU6NX_Q5djlz1z9ediStIi10fHxVGE2qY,25888
344
+ mlrun-1.8.0rc25.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
345
+ mlrun-1.8.0rc25.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
346
+ mlrun-1.8.0rc25.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
347
+ mlrun-1.8.0rc25.dist-info/RECORD,,