mlrun 1.10.0rc18__py3-none-any.whl → 1.11.0rc16__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/__init__.py +24 -3
- mlrun/__main__.py +0 -4
- mlrun/artifacts/dataset.py +2 -2
- mlrun/artifacts/document.py +6 -1
- mlrun/artifacts/llm_prompt.py +21 -15
- mlrun/artifacts/model.py +3 -3
- mlrun/artifacts/plots.py +1 -1
- mlrun/{model_monitoring/db/tsdb/tdengine → auth}/__init__.py +2 -3
- mlrun/auth/nuclio.py +89 -0
- mlrun/auth/providers.py +429 -0
- mlrun/auth/utils.py +415 -0
- mlrun/common/constants.py +14 -0
- mlrun/common/model_monitoring/helpers.py +123 -0
- mlrun/common/runtimes/constants.py +28 -0
- mlrun/common/schemas/__init__.py +14 -3
- mlrun/common/schemas/alert.py +2 -2
- mlrun/common/schemas/api_gateway.py +3 -0
- mlrun/common/schemas/auth.py +12 -10
- mlrun/common/schemas/client_spec.py +4 -0
- mlrun/common/schemas/constants.py +25 -0
- mlrun/common/schemas/frontend_spec.py +1 -8
- mlrun/common/schemas/function.py +34 -0
- mlrun/common/schemas/hub.py +33 -20
- mlrun/common/schemas/model_monitoring/__init__.py +2 -1
- mlrun/common/schemas/model_monitoring/constants.py +12 -15
- mlrun/common/schemas/model_monitoring/functions.py +13 -4
- mlrun/common/schemas/model_monitoring/model_endpoints.py +11 -0
- mlrun/common/schemas/pipeline.py +1 -1
- mlrun/common/schemas/secret.py +17 -2
- mlrun/common/secrets.py +95 -1
- mlrun/common/types.py +10 -10
- mlrun/config.py +69 -19
- mlrun/data_types/infer.py +2 -2
- mlrun/datastore/__init__.py +12 -5
- mlrun/datastore/azure_blob.py +162 -47
- mlrun/datastore/base.py +274 -10
- mlrun/datastore/datastore.py +7 -2
- mlrun/datastore/datastore_profile.py +84 -22
- mlrun/datastore/model_provider/huggingface_provider.py +225 -41
- mlrun/datastore/model_provider/mock_model_provider.py +87 -0
- mlrun/datastore/model_provider/model_provider.py +206 -74
- mlrun/datastore/model_provider/openai_provider.py +226 -66
- mlrun/datastore/s3.py +39 -18
- mlrun/datastore/sources.py +1 -1
- mlrun/datastore/store_resources.py +4 -4
- mlrun/datastore/storeytargets.py +17 -12
- mlrun/datastore/targets.py +1 -1
- mlrun/datastore/utils.py +25 -6
- mlrun/datastore/v3io.py +1 -1
- mlrun/db/base.py +63 -32
- mlrun/db/httpdb.py +373 -153
- mlrun/db/nopdb.py +54 -21
- mlrun/errors.py +4 -2
- mlrun/execution.py +66 -25
- mlrun/feature_store/api.py +1 -1
- mlrun/feature_store/common.py +1 -1
- mlrun/feature_store/feature_vector_utils.py +1 -1
- mlrun/feature_store/steps.py +8 -6
- mlrun/frameworks/_common/utils.py +3 -3
- mlrun/frameworks/_dl_common/loggers/logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +2 -1
- mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_ml_common/utils.py +2 -1
- mlrun/frameworks/auto_mlrun/auto_mlrun.py +4 -3
- mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +2 -1
- mlrun/frameworks/onnx/dataset.py +2 -1
- mlrun/frameworks/onnx/mlrun_interface.py +2 -1
- mlrun/frameworks/pytorch/callbacks/logging_callback.py +5 -4
- mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +2 -1
- mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +2 -1
- mlrun/frameworks/pytorch/utils.py +2 -1
- mlrun/frameworks/sklearn/metric.py +2 -1
- mlrun/frameworks/tf_keras/callbacks/logging_callback.py +5 -4
- mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +2 -1
- mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +2 -1
- mlrun/hub/__init__.py +52 -0
- mlrun/hub/base.py +142 -0
- mlrun/hub/module.py +172 -0
- mlrun/hub/step.py +113 -0
- mlrun/k8s_utils.py +105 -16
- mlrun/launcher/base.py +15 -7
- mlrun/launcher/local.py +4 -1
- mlrun/model.py +14 -4
- mlrun/model_monitoring/__init__.py +0 -1
- mlrun/model_monitoring/api.py +65 -28
- mlrun/model_monitoring/applications/__init__.py +1 -1
- mlrun/model_monitoring/applications/base.py +299 -128
- mlrun/model_monitoring/applications/context.py +2 -4
- mlrun/model_monitoring/controller.py +132 -58
- mlrun/model_monitoring/db/_schedules.py +38 -29
- mlrun/model_monitoring/db/_stats.py +6 -16
- mlrun/model_monitoring/db/tsdb/__init__.py +9 -7
- mlrun/model_monitoring/db/tsdb/base.py +29 -9
- mlrun/model_monitoring/db/tsdb/preaggregate.py +234 -0
- mlrun/model_monitoring/db/tsdb/stream_graph_steps.py +63 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/queries/timescaledb_metrics_queries.py +414 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/queries/timescaledb_predictions_queries.py +376 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/queries/timescaledb_results_queries.py +590 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/timescaledb_connection.py +434 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/timescaledb_connector.py +541 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/timescaledb_operations.py +808 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/timescaledb_schema.py +502 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/timescaledb_stream.py +163 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/timescaledb_stream_graph_steps.py +60 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/utils/timescaledb_dataframe_processor.py +141 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/utils/timescaledb_query_builder.py +585 -0
- mlrun/model_monitoring/db/tsdb/timescaledb/writer_graph_steps.py +73 -0
- mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +20 -9
- mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +235 -51
- mlrun/model_monitoring/features_drift_table.py +2 -1
- mlrun/model_monitoring/helpers.py +30 -6
- mlrun/model_monitoring/stream_processing.py +34 -28
- mlrun/model_monitoring/writer.py +224 -4
- mlrun/package/__init__.py +2 -1
- mlrun/platforms/__init__.py +0 -43
- mlrun/platforms/iguazio.py +8 -4
- mlrun/projects/operations.py +17 -11
- mlrun/projects/pipelines.py +2 -2
- mlrun/projects/project.py +187 -123
- mlrun/run.py +95 -21
- mlrun/runtimes/__init__.py +2 -186
- mlrun/runtimes/base.py +103 -25
- mlrun/runtimes/constants.py +225 -0
- mlrun/runtimes/daskjob.py +5 -2
- mlrun/runtimes/databricks_job/databricks_runtime.py +2 -1
- mlrun/runtimes/local.py +5 -2
- mlrun/runtimes/mounts.py +20 -2
- mlrun/runtimes/nuclio/__init__.py +12 -7
- mlrun/runtimes/nuclio/api_gateway.py +36 -6
- mlrun/runtimes/nuclio/application/application.py +339 -40
- mlrun/runtimes/nuclio/function.py +222 -72
- mlrun/runtimes/nuclio/serving.py +132 -42
- mlrun/runtimes/pod.py +213 -21
- mlrun/runtimes/utils.py +49 -9
- mlrun/secrets.py +99 -14
- mlrun/serving/__init__.py +2 -0
- mlrun/serving/remote.py +84 -11
- mlrun/serving/routers.py +26 -44
- mlrun/serving/server.py +138 -51
- mlrun/serving/serving_wrapper.py +6 -2
- mlrun/serving/states.py +997 -283
- mlrun/serving/steps.py +62 -0
- mlrun/serving/system_steps.py +149 -95
- mlrun/serving/v2_serving.py +9 -10
- mlrun/track/trackers/mlflow_tracker.py +29 -31
- mlrun/utils/helpers.py +292 -94
- mlrun/utils/http.py +9 -2
- mlrun/utils/notifications/notification/base.py +18 -0
- mlrun/utils/notifications/notification/git.py +3 -5
- mlrun/utils/notifications/notification/mail.py +39 -16
- mlrun/utils/notifications/notification/slack.py +2 -4
- mlrun/utils/notifications/notification/webhook.py +2 -5
- mlrun/utils/notifications/notification_pusher.py +3 -3
- mlrun/utils/version/version.json +2 -2
- mlrun/utils/version/version.py +3 -4
- {mlrun-1.10.0rc18.dist-info → mlrun-1.11.0rc16.dist-info}/METADATA +63 -74
- {mlrun-1.10.0rc18.dist-info → mlrun-1.11.0rc16.dist-info}/RECORD +161 -143
- mlrun/api/schemas/__init__.py +0 -259
- mlrun/db/auth_utils.py +0 -152
- mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -344
- mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -75
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -281
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +0 -1266
- {mlrun-1.10.0rc18.dist-info → mlrun-1.11.0rc16.dist-info}/WHEEL +0 -0
- {mlrun-1.10.0rc18.dist-info → mlrun-1.11.0rc16.dist-info}/entry_points.txt +0 -0
- {mlrun-1.10.0rc18.dist-info → mlrun-1.11.0rc16.dist-info}/licenses/LICENSE +0 -0
- {mlrun-1.10.0rc18.dist-info → mlrun-1.11.0rc16.dist-info}/top_level.txt +0 -0
|
@@ -34,17 +34,18 @@ class MailNotification(base.NotificationBase):
|
|
|
34
34
|
|
|
35
35
|
boolean_params = ["use_tls", "start_tls", "validate_certs"]
|
|
36
36
|
|
|
37
|
+
optional_auth_params = ["username", "password"]
|
|
38
|
+
|
|
37
39
|
required_params = [
|
|
38
40
|
"server_host",
|
|
39
41
|
"server_port",
|
|
40
42
|
"sender_address",
|
|
41
|
-
"username",
|
|
42
|
-
"password",
|
|
43
43
|
"email_addresses",
|
|
44
44
|
] + boolean_params
|
|
45
45
|
|
|
46
46
|
@classmethod
|
|
47
47
|
def validate_params(cls, params):
|
|
48
|
+
cls._enrich_params(params)
|
|
48
49
|
for required_param in cls.required_params:
|
|
49
50
|
if required_param not in params:
|
|
50
51
|
raise ValueError(
|
|
@@ -57,6 +58,13 @@ class MailNotification(base.NotificationBase):
|
|
|
57
58
|
f"Parameter '{boolean_param}' must be a boolean for MailNotification"
|
|
58
59
|
)
|
|
59
60
|
|
|
61
|
+
# Allow no auth, username only, or username + password
|
|
62
|
+
# Some SMTP servers allow username without password
|
|
63
|
+
if params["password"] and not params["username"]:
|
|
64
|
+
raise ValueError(
|
|
65
|
+
"Parameter 'username' is required when 'password' is provided for MailNotification"
|
|
66
|
+
)
|
|
67
|
+
|
|
60
68
|
cls._validate_emails(params)
|
|
61
69
|
|
|
62
70
|
async def push(
|
|
@@ -78,6 +86,8 @@ class MailNotification(base.NotificationBase):
|
|
|
78
86
|
)
|
|
79
87
|
self.params["body"] = runs_html
|
|
80
88
|
|
|
89
|
+
self._enrich_params(self.params)
|
|
90
|
+
|
|
81
91
|
if message_body_override:
|
|
82
92
|
self.params["body"] = message_body_override.replace(
|
|
83
93
|
"{{ runs }}", runs_html
|
|
@@ -122,7 +132,7 @@ class MailNotification(base.NotificationBase):
|
|
|
122
132
|
def _validate_emails(cls, params):
|
|
123
133
|
cls._validate_email_address(params["sender_address"])
|
|
124
134
|
|
|
125
|
-
if not isinstance(params["email_addresses"],
|
|
135
|
+
if not isinstance(params["email_addresses"], str | list):
|
|
126
136
|
raise ValueError(
|
|
127
137
|
"Parameter 'email_addresses' must be a string or a list of strings"
|
|
128
138
|
)
|
|
@@ -147,8 +157,8 @@ class MailNotification(base.NotificationBase):
|
|
|
147
157
|
sender_address: str,
|
|
148
158
|
server_host: str,
|
|
149
159
|
server_port: int,
|
|
150
|
-
username: str,
|
|
151
|
-
password: str,
|
|
160
|
+
username: typing.Optional[str],
|
|
161
|
+
password: typing.Optional[str],
|
|
152
162
|
use_tls: bool,
|
|
153
163
|
start_tls: bool,
|
|
154
164
|
validate_certs: bool,
|
|
@@ -163,14 +173,27 @@ class MailNotification(base.NotificationBase):
|
|
|
163
173
|
message["Subject"] = subject
|
|
164
174
|
message.attach(MIMEText(body, "html"))
|
|
165
175
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
send_kwargs = {
|
|
177
|
+
"hostname": server_host,
|
|
178
|
+
"port": server_port,
|
|
179
|
+
"use_tls": use_tls,
|
|
180
|
+
"validate_certs": validate_certs,
|
|
181
|
+
"start_tls": start_tls,
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
# Only include auth parameters when provided to avoid forcing SMTP AUTH
|
|
185
|
+
if username is not None:
|
|
186
|
+
send_kwargs["username"] = username
|
|
187
|
+
if password is not None:
|
|
188
|
+
send_kwargs["password"] = password
|
|
189
|
+
|
|
190
|
+
await aiosmtplib.send(message, **send_kwargs)
|
|
191
|
+
|
|
192
|
+
@staticmethod
|
|
193
|
+
def _enrich_params(params):
|
|
194
|
+
# if username/password are not provided or empty strings, set them to None.
|
|
195
|
+
# this ensures consistent behavior in _send_email and avoids
|
|
196
|
+
# forcing SMTP auth when the server does not require authentication.
|
|
197
|
+
for param in ["username", "password"]:
|
|
198
|
+
if param not in params or not params[param]:
|
|
199
|
+
params[param] = None
|
|
@@ -14,14 +14,12 @@
|
|
|
14
14
|
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import aiohttp
|
|
18
|
-
|
|
19
17
|
import mlrun.common.runtimes.constants as runtimes_constants
|
|
20
18
|
import mlrun.common.schemas
|
|
21
19
|
import mlrun.lists
|
|
22
20
|
import mlrun.utils.helpers
|
|
23
21
|
|
|
24
|
-
from .base import NotificationBase
|
|
22
|
+
from .base import NotificationBase, TimedHTTPClient
|
|
25
23
|
|
|
26
24
|
|
|
27
25
|
class SlackNotification(NotificationBase):
|
|
@@ -67,7 +65,7 @@ class SlackNotification(NotificationBase):
|
|
|
67
65
|
|
|
68
66
|
data = self._generate_slack_data(message, severity, runs, alert, event_data)
|
|
69
67
|
|
|
70
|
-
async with
|
|
68
|
+
async with TimedHTTPClient().session() as session:
|
|
71
69
|
async with session.post(webhook, json=data) as response:
|
|
72
70
|
response.raise_for_status()
|
|
73
71
|
|
|
@@ -15,14 +15,13 @@
|
|
|
15
15
|
import re
|
|
16
16
|
import typing
|
|
17
17
|
|
|
18
|
-
import aiohttp
|
|
19
18
|
import orjson
|
|
20
19
|
|
|
21
20
|
import mlrun.common.schemas
|
|
22
21
|
import mlrun.lists
|
|
23
22
|
import mlrun.utils.helpers
|
|
24
23
|
|
|
25
|
-
from .base import NotificationBase
|
|
24
|
+
from .base import NotificationBase, TimedHTTPClient
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class WebhookNotification(NotificationBase):
|
|
@@ -87,9 +86,7 @@ class WebhookNotification(NotificationBase):
|
|
|
87
86
|
# we automatically handle it as `ssl=None` for their convenience.
|
|
88
87
|
verify_ssl = verify_ssl and None if url.startswith("https") else None
|
|
89
88
|
|
|
90
|
-
async with
|
|
91
|
-
json_serialize=self._encoder,
|
|
92
|
-
) as session:
|
|
89
|
+
async with TimedHTTPClient().session(json_serialize=self._encoder) as session:
|
|
93
90
|
response = await getattr(session, method)(
|
|
94
91
|
url,
|
|
95
92
|
headers=headers,
|
|
@@ -308,7 +308,7 @@ class NotificationPusher(_NotificationPusherBase):
|
|
|
308
308
|
and retry_count >= max_retries
|
|
309
309
|
):
|
|
310
310
|
message += (
|
|
311
|
-
"\nRetry limit reached
|
|
311
|
+
"\nRetry limit reached - run has failed after all retry attempts."
|
|
312
312
|
)
|
|
313
313
|
|
|
314
314
|
severity = (
|
|
@@ -347,7 +347,7 @@ class NotificationPusher(_NotificationPusherBase):
|
|
|
347
347
|
run_uid=run.metadata.uid,
|
|
348
348
|
)
|
|
349
349
|
update_notification_status_kwargs["sent_time"] = datetime.datetime.now(
|
|
350
|
-
tz=datetime.
|
|
350
|
+
tz=datetime.UTC
|
|
351
351
|
)
|
|
352
352
|
except Exception as exc:
|
|
353
353
|
logger.warning(
|
|
@@ -397,7 +397,7 @@ class NotificationPusher(_NotificationPusherBase):
|
|
|
397
397
|
run_uid=run.metadata.uid,
|
|
398
398
|
)
|
|
399
399
|
update_notification_status_kwargs["sent_time"] = datetime.datetime.now(
|
|
400
|
-
tz=datetime.
|
|
400
|
+
tz=datetime.UTC
|
|
401
401
|
)
|
|
402
402
|
|
|
403
403
|
except Exception as exc:
|
mlrun/utils/version/version.json
CHANGED
mlrun/utils/version/version.py
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
import sys
|
|
17
|
-
from importlib.resources import
|
|
17
|
+
from importlib.resources import files
|
|
18
18
|
|
|
19
19
|
import mlrun.utils
|
|
20
20
|
from mlrun.utils.singleton import Singleton
|
|
@@ -37,9 +37,8 @@ class Version(metaclass=Singleton):
|
|
|
37
37
|
self.version_info = {"git_commit": "unknown", "version": "0.0.0+unstable"}
|
|
38
38
|
self.python_version = self._resolve_python_version()
|
|
39
39
|
try:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
)
|
|
40
|
+
with (files("mlrun.utils.version") / "version.json").open("r") as read_text:
|
|
41
|
+
self.version_info = json.loads(read_text.read())
|
|
43
42
|
except Exception:
|
|
44
43
|
mlrun.utils.logger.warning(
|
|
45
44
|
"Failed resolving version info. Ignoring and using defaults"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0rc16
|
|
4
4
|
Summary: Tracking and config of machine learning runs
|
|
5
5
|
Home-page: https://github.com/mlrun/mlrun
|
|
6
6
|
Author: Yaron Haviv
|
|
@@ -13,22 +13,22 @@ Classifier: Operating System :: POSIX :: Linux
|
|
|
13
13
|
Classifier: Operating System :: Microsoft :: Windows
|
|
14
14
|
Classifier: Operating System :: MacOS
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
17
|
Classifier: Programming Language :: Python
|
|
19
18
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
19
|
Classifier: Topic :: Software Development :: Libraries
|
|
21
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.11, <3.12
|
|
22
21
|
Description-Content-Type: text/markdown
|
|
23
22
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist: urllib3
|
|
23
|
+
Requires-Dist: urllib3~=2.6
|
|
24
|
+
Requires-Dist: v3io-frames~=0.13.11
|
|
25
25
|
Requires-Dist: GitPython>=3.1.41,~=3.1
|
|
26
26
|
Requires-Dist: aiohttp~=3.11
|
|
27
27
|
Requires-Dist: aiohttp-retry~=2.9
|
|
28
28
|
Requires-Dist: click~=8.1
|
|
29
29
|
Requires-Dist: nest-asyncio~=1.0
|
|
30
30
|
Requires-Dist: ipython~=8.10
|
|
31
|
-
Requires-Dist: nuclio-jupyter~=0.
|
|
31
|
+
Requires-Dist: nuclio-jupyter~=0.13.0
|
|
32
32
|
Requires-Dist: numpy<1.27.0,>=1.26.4
|
|
33
33
|
Requires-Dist: pandas<2.2,>=1.2
|
|
34
34
|
Requires-Dist: pyarrow<18,>=10.0
|
|
@@ -38,31 +38,31 @@ Requires-Dist: tabulate~=0.8.6
|
|
|
38
38
|
Requires-Dist: v3io~=0.7.0
|
|
39
39
|
Requires-Dist: pydantic>=1.10.15
|
|
40
40
|
Requires-Dist: mergedeep~=1.3
|
|
41
|
-
Requires-Dist: v3io-frames~=0.10.14; python_version < "3.11"
|
|
42
|
-
Requires-Dist: v3io-frames>=0.13.0; python_version >= "3.11"
|
|
43
41
|
Requires-Dist: semver~=3.0
|
|
44
42
|
Requires-Dist: dependency-injector~=4.41
|
|
45
|
-
Requires-Dist: fsspec
|
|
43
|
+
Requires-Dist: fsspec<=2025.7.0,>=2025.5.1
|
|
46
44
|
Requires-Dist: v3iofs~=0.1.17
|
|
47
|
-
Requires-Dist: storey~=1.
|
|
45
|
+
Requires-Dist: storey~=1.11.5
|
|
48
46
|
Requires-Dist: inflection~=0.5.0
|
|
49
47
|
Requires-Dist: python-dotenv~=1.0
|
|
50
48
|
Requires-Dist: setuptools>=75.2
|
|
51
49
|
Requires-Dist: deprecated~=1.2
|
|
52
50
|
Requires-Dist: jinja2>=3.1.6,~=3.1
|
|
53
51
|
Requires-Dist: orjson<4,>=3.9.15
|
|
54
|
-
Requires-Dist: mlrun-pipelines-kfp-common~=0.
|
|
55
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.
|
|
52
|
+
Requires-Dist: mlrun-pipelines-kfp-common~=0.6.0
|
|
53
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.6.0
|
|
56
54
|
Requires-Dist: docstring_parser~=0.16
|
|
57
55
|
Requires-Dist: aiosmtplib~=3.0
|
|
56
|
+
Requires-Dist: deepdiff<9.0.0,>=8.6.1
|
|
57
|
+
Requires-Dist: pyjwt~=2.10
|
|
58
58
|
Provides-Extra: s3
|
|
59
59
|
Requires-Dist: boto3<1.36,>=1.28.0; extra == "s3"
|
|
60
60
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "s3"
|
|
61
|
-
Requires-Dist: s3fs
|
|
61
|
+
Requires-Dist: s3fs<=2025.7.0,>=2025.5.1; extra == "s3"
|
|
62
62
|
Provides-Extra: azure-blob-storage
|
|
63
63
|
Requires-Dist: msrest~=0.6.21; extra == "azure-blob-storage"
|
|
64
64
|
Requires-Dist: azure-core~=1.24; extra == "azure-blob-storage"
|
|
65
|
-
Requires-Dist: adlfs==
|
|
65
|
+
Requires-Dist: adlfs==2024.12.0; extra == "azure-blob-storage"
|
|
66
66
|
Requires-Dist: pyopenssl>=23; extra == "azure-blob-storage"
|
|
67
67
|
Provides-Extra: azure-key-vault
|
|
68
68
|
Requires-Dist: azure-identity~=1.5; extra == "azure-key-vault"
|
|
@@ -77,42 +77,40 @@ Requires-Dist: google-cloud-storage==2.14.0; extra == "google-cloud"
|
|
|
77
77
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "google-cloud"
|
|
78
78
|
Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "google-cloud"
|
|
79
79
|
Requires-Dist: google-cloud==0.34; extra == "google-cloud"
|
|
80
|
-
Requires-Dist: gcsfs
|
|
80
|
+
Requires-Dist: gcsfs<=2025.7.0,>=2025.5.1; extra == "google-cloud"
|
|
81
81
|
Provides-Extra: kafka
|
|
82
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"
|
|
86
|
-
Provides-Extra: mlflow
|
|
87
|
-
Requires-Dist: mlflow~=2.22; extra == "mlflow"
|
|
88
86
|
Provides-Extra: databricks-sdk
|
|
89
87
|
Requires-Dist: databricks-sdk~=0.20.0; extra == "databricks-sdk"
|
|
90
88
|
Provides-Extra: sqlalchemy
|
|
91
89
|
Requires-Dist: sqlalchemy~=2.0; extra == "sqlalchemy"
|
|
92
90
|
Provides-Extra: dask
|
|
93
|
-
Requires-Dist: dask
|
|
94
|
-
Requires-Dist: distributed
|
|
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"
|
|
91
|
+
Requires-Dist: dask==2024.8; extra == "dask"
|
|
92
|
+
Requires-Dist: distributed==2024.8; extra == "dask"
|
|
97
93
|
Provides-Extra: alibaba-oss
|
|
98
|
-
Requires-Dist: ossfs==
|
|
99
|
-
Requires-Dist: oss2==2.18.
|
|
100
|
-
Provides-Extra:
|
|
101
|
-
Requires-Dist:
|
|
94
|
+
Requires-Dist: ossfs==2025.5.0; extra == "alibaba-oss"
|
|
95
|
+
Requires-Dist: oss2==2.18.4; extra == "alibaba-oss"
|
|
96
|
+
Provides-Extra: timescaledb
|
|
97
|
+
Requires-Dist: psycopg[binary,pool]~=3.2; extra == "timescaledb"
|
|
102
98
|
Provides-Extra: snowflake
|
|
103
99
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "snowflake"
|
|
104
100
|
Provides-Extra: dev-postgres
|
|
105
101
|
Requires-Dist: pytest-mock-resources[postgres]~=2.12; extra == "dev-postgres"
|
|
106
102
|
Provides-Extra: kfp18
|
|
107
|
-
Requires-Dist: mlrun_pipelines_kfp_v1_8[kfp]
|
|
103
|
+
Requires-Dist: mlrun_pipelines_kfp_v1_8[kfp]~=0.6.0; extra == "kfp18"
|
|
104
|
+
Provides-Extra: mlflow
|
|
105
|
+
Requires-Dist: mlflow~=3.0; extra == "mlflow"
|
|
108
106
|
Provides-Extra: api
|
|
109
107
|
Requires-Dist: uvicorn~=0.32.1; extra == "api"
|
|
110
108
|
Requires-Dist: dask-kubernetes~=0.11.0; extra == "api"
|
|
111
109
|
Requires-Dist: apscheduler<4,>=3.11; extra == "api"
|
|
112
110
|
Requires-Dist: objgraph~=3.6; extra == "api"
|
|
113
|
-
Requires-Dist: igz-mgmt~=0.4.
|
|
111
|
+
Requires-Dist: igz-mgmt~=0.4.2; extra == "api"
|
|
114
112
|
Requires-Dist: humanfriendly~=10.0; extra == "api"
|
|
115
|
-
Requires-Dist: fastapi~=0.
|
|
113
|
+
Requires-Dist: fastapi~=0.120.0; extra == "api"
|
|
116
114
|
Requires-Dist: sqlalchemy~=2.0; extra == "api"
|
|
117
115
|
Requires-Dist: sqlalchemy-utils~=0.41.2; extra == "api"
|
|
118
116
|
Requires-Dist: pymysql~=1.1; extra == "api"
|
|
@@ -122,72 +120,65 @@ Requires-Dist: timelength~=1.1; extra == "api"
|
|
|
122
120
|
Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "api"
|
|
123
121
|
Requires-Dist: aiosmtplib~=3.0; extra == "api"
|
|
124
122
|
Requires-Dist: pydantic<2,>=1; extra == "api"
|
|
125
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.
|
|
126
|
-
Requires-Dist: grpcio~=1.70.0; extra == "api"
|
|
123
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.6.0; extra == "api"
|
|
127
124
|
Provides-Extra: all
|
|
128
|
-
Requires-Dist: adlfs==
|
|
125
|
+
Requires-Dist: adlfs==2024.12.0; extra == "all"
|
|
129
126
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "all"
|
|
130
127
|
Requires-Dist: avro~=1.11; extra == "all"
|
|
131
128
|
Requires-Dist: azure-core~=1.24; extra == "all"
|
|
132
129
|
Requires-Dist: azure-identity~=1.5; extra == "all"
|
|
133
130
|
Requires-Dist: azure-keyvault-secrets~=4.2; extra == "all"
|
|
134
131
|
Requires-Dist: boto3<1.36,>=1.28.0; extra == "all"
|
|
135
|
-
Requires-Dist: dask
|
|
136
|
-
Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "all"
|
|
132
|
+
Requires-Dist: dask==2024.8; extra == "all"
|
|
137
133
|
Requires-Dist: databricks-sdk~=0.20.0; extra == "all"
|
|
138
|
-
Requires-Dist: distributed
|
|
139
|
-
Requires-Dist:
|
|
140
|
-
Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "all"
|
|
134
|
+
Requires-Dist: distributed==2024.8; extra == "all"
|
|
135
|
+
Requires-Dist: gcsfs<=2025.7.0,>=2025.5.1; extra == "all"
|
|
141
136
|
Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "all"
|
|
142
137
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "all"
|
|
143
138
|
Requires-Dist: google-cloud-storage==2.14.0; extra == "all"
|
|
144
139
|
Requires-Dist: google-cloud==0.34; extra == "all"
|
|
145
140
|
Requires-Dist: graphviz~=0.20.0; extra == "all"
|
|
146
141
|
Requires-Dist: kafka-python~=2.1.0; extra == "all"
|
|
147
|
-
Requires-Dist: mlflow~=2.22; extra == "all"
|
|
148
142
|
Requires-Dist: msrest~=0.6.21; extra == "all"
|
|
149
|
-
Requires-Dist: oss2==2.18.
|
|
150
|
-
Requires-Dist: ossfs==
|
|
143
|
+
Requires-Dist: oss2==2.18.4; extra == "all"
|
|
144
|
+
Requires-Dist: ossfs==2025.5.0; extra == "all"
|
|
151
145
|
Requires-Dist: plotly~=5.23; extra == "all"
|
|
146
|
+
Requires-Dist: psycopg[binary,pool]~=3.2; extra == "all"
|
|
152
147
|
Requires-Dist: pyopenssl>=23; extra == "all"
|
|
153
148
|
Requires-Dist: redis~=4.3; extra == "all"
|
|
154
|
-
Requires-Dist: s3fs
|
|
149
|
+
Requires-Dist: s3fs<=2025.7.0,>=2025.5.1; extra == "all"
|
|
155
150
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "all"
|
|
156
151
|
Requires-Dist: sqlalchemy~=2.0; extra == "all"
|
|
157
|
-
Requires-Dist: taos-ws-py==0.3.2; extra == "all"
|
|
158
152
|
Provides-Extra: complete
|
|
159
|
-
Requires-Dist: adlfs==
|
|
153
|
+
Requires-Dist: adlfs==2024.12.0; extra == "complete"
|
|
160
154
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "complete"
|
|
161
155
|
Requires-Dist: avro~=1.11; extra == "complete"
|
|
162
156
|
Requires-Dist: azure-core~=1.24; extra == "complete"
|
|
163
157
|
Requires-Dist: azure-identity~=1.5; extra == "complete"
|
|
164
158
|
Requires-Dist: azure-keyvault-secrets~=4.2; extra == "complete"
|
|
165
159
|
Requires-Dist: boto3<1.36,>=1.28.0; extra == "complete"
|
|
166
|
-
Requires-Dist: dask
|
|
167
|
-
Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "complete"
|
|
160
|
+
Requires-Dist: dask==2024.8; extra == "complete"
|
|
168
161
|
Requires-Dist: databricks-sdk~=0.20.0; extra == "complete"
|
|
169
|
-
Requires-Dist: distributed
|
|
170
|
-
Requires-Dist:
|
|
171
|
-
Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "complete"
|
|
162
|
+
Requires-Dist: distributed==2024.8; extra == "complete"
|
|
163
|
+
Requires-Dist: gcsfs<=2025.7.0,>=2025.5.1; extra == "complete"
|
|
172
164
|
Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "complete"
|
|
173
165
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "complete"
|
|
174
166
|
Requires-Dist: google-cloud-storage==2.14.0; extra == "complete"
|
|
175
167
|
Requires-Dist: google-cloud==0.34; extra == "complete"
|
|
176
168
|
Requires-Dist: graphviz~=0.20.0; extra == "complete"
|
|
177
169
|
Requires-Dist: kafka-python~=2.1.0; extra == "complete"
|
|
178
|
-
Requires-Dist: mlflow~=2.22; extra == "complete"
|
|
179
170
|
Requires-Dist: msrest~=0.6.21; extra == "complete"
|
|
180
|
-
Requires-Dist: oss2==2.18.
|
|
181
|
-
Requires-Dist: ossfs==
|
|
171
|
+
Requires-Dist: oss2==2.18.4; extra == "complete"
|
|
172
|
+
Requires-Dist: ossfs==2025.5.0; extra == "complete"
|
|
182
173
|
Requires-Dist: plotly~=5.23; extra == "complete"
|
|
174
|
+
Requires-Dist: psycopg[binary,pool]~=3.2; extra == "complete"
|
|
183
175
|
Requires-Dist: pyopenssl>=23; extra == "complete"
|
|
184
176
|
Requires-Dist: redis~=4.3; extra == "complete"
|
|
185
|
-
Requires-Dist: s3fs
|
|
177
|
+
Requires-Dist: s3fs<=2025.7.0,>=2025.5.1; extra == "complete"
|
|
186
178
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "complete"
|
|
187
179
|
Requires-Dist: sqlalchemy~=2.0; extra == "complete"
|
|
188
|
-
Requires-Dist: taos-ws-py==0.3.2; extra == "complete"
|
|
189
180
|
Provides-Extra: complete-api
|
|
190
|
-
Requires-Dist: adlfs==
|
|
181
|
+
Requires-Dist: adlfs==2024.12.0; extra == "complete-api"
|
|
191
182
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "complete-api"
|
|
192
183
|
Requires-Dist: aiosmtplib~=3.0; extra == "complete-api"
|
|
193
184
|
Requires-Dist: alembic~=1.14; extra == "complete-api"
|
|
@@ -198,40 +189,36 @@ Requires-Dist: azure-identity~=1.5; extra == "complete-api"
|
|
|
198
189
|
Requires-Dist: azure-keyvault-secrets~=4.2; extra == "complete-api"
|
|
199
190
|
Requires-Dist: boto3<1.36,>=1.28.0; extra == "complete-api"
|
|
200
191
|
Requires-Dist: dask-kubernetes~=0.11.0; extra == "complete-api"
|
|
201
|
-
Requires-Dist: dask
|
|
202
|
-
Requires-Dist: dask~=2024.12.1; python_version >= "3.11" and extra == "complete-api"
|
|
192
|
+
Requires-Dist: dask==2024.8; extra == "complete-api"
|
|
203
193
|
Requires-Dist: databricks-sdk~=0.20.0; extra == "complete-api"
|
|
204
|
-
Requires-Dist: distributed
|
|
205
|
-
Requires-Dist:
|
|
206
|
-
Requires-Dist:
|
|
207
|
-
Requires-Dist: gcsfs<2024.7,>=2023.9.2; extra == "complete-api"
|
|
194
|
+
Requires-Dist: distributed==2024.8; extra == "complete-api"
|
|
195
|
+
Requires-Dist: fastapi~=0.120.0; extra == "complete-api"
|
|
196
|
+
Requires-Dist: gcsfs<=2025.7.0,>=2025.5.1; extra == "complete-api"
|
|
208
197
|
Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "complete-api"
|
|
209
198
|
Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "complete-api"
|
|
210
199
|
Requires-Dist: google-cloud-storage==2.14.0; extra == "complete-api"
|
|
211
200
|
Requires-Dist: google-cloud==0.34; extra == "complete-api"
|
|
212
201
|
Requires-Dist: graphviz~=0.20.0; extra == "complete-api"
|
|
213
|
-
Requires-Dist: grpcio~=1.70.0; extra == "complete-api"
|
|
214
202
|
Requires-Dist: humanfriendly~=10.0; extra == "complete-api"
|
|
215
|
-
Requires-Dist: igz-mgmt~=0.4.
|
|
203
|
+
Requires-Dist: igz-mgmt~=0.4.2; extra == "complete-api"
|
|
216
204
|
Requires-Dist: kafka-python~=2.1.0; extra == "complete-api"
|
|
217
205
|
Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "complete-api"
|
|
218
|
-
Requires-Dist:
|
|
219
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.7; extra == "complete-api"
|
|
206
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.6.0; extra == "complete-api"
|
|
220
207
|
Requires-Dist: msrest~=0.6.21; extra == "complete-api"
|
|
221
208
|
Requires-Dist: objgraph~=3.6; extra == "complete-api"
|
|
222
|
-
Requires-Dist: oss2==2.18.
|
|
223
|
-
Requires-Dist: ossfs==
|
|
209
|
+
Requires-Dist: oss2==2.18.4; extra == "complete-api"
|
|
210
|
+
Requires-Dist: ossfs==2025.5.0; extra == "complete-api"
|
|
224
211
|
Requires-Dist: plotly~=5.23; extra == "complete-api"
|
|
225
212
|
Requires-Dist: psycopg2-binary~=2.9; extra == "complete-api"
|
|
213
|
+
Requires-Dist: psycopg[binary,pool]~=3.2; extra == "complete-api"
|
|
226
214
|
Requires-Dist: pydantic<2,>=1; extra == "complete-api"
|
|
227
215
|
Requires-Dist: pymysql~=1.1; extra == "complete-api"
|
|
228
216
|
Requires-Dist: pyopenssl>=23; extra == "complete-api"
|
|
229
217
|
Requires-Dist: redis~=4.3; extra == "complete-api"
|
|
230
|
-
Requires-Dist: s3fs
|
|
218
|
+
Requires-Dist: s3fs<=2025.7.0,>=2025.5.1; extra == "complete-api"
|
|
231
219
|
Requires-Dist: snowflake-connector-python~=3.7; extra == "complete-api"
|
|
232
220
|
Requires-Dist: sqlalchemy-utils~=0.41.2; extra == "complete-api"
|
|
233
221
|
Requires-Dist: sqlalchemy~=2.0; extra == "complete-api"
|
|
234
|
-
Requires-Dist: taos-ws-py==0.3.2; extra == "complete-api"
|
|
235
222
|
Requires-Dist: timelength~=1.1; extra == "complete-api"
|
|
236
223
|
Requires-Dist: uvicorn~=0.32.1; extra == "complete-api"
|
|
237
224
|
Dynamic: author
|
|
@@ -278,7 +265,7 @@ MLRun is an open source AI orchestration platform for quickly building and manag
|
|
|
278
265
|
MLRun significantly reduces engineering efforts, time to production, and computation resources.
|
|
279
266
|
With MLRun, you can choose any IDE on your local machine or on the cloud. MLRun breaks the silos between data, ML, software, and DevOps/MLOps teams, enabling collaboration and fast continuous improvements.
|
|
280
267
|
|
|
281
|
-
Get started with the MLRun [**Tutorials and Examples**](https://docs.mlrun.org/en/stable/tutorials/index.html) and the [**
|
|
268
|
+
Get started with the MLRun [**Tutorials and Examples**](https://docs.mlrun.org/en/stable/tutorials/index.html) and the [**Set up your client environment**](https://docs.mlrun.org/en/stable/setup-guide.md), or read about the [**MLRun Architecture**](https://docs.mlrun.org/en/stable/architecture.html).
|
|
282
269
|
|
|
283
270
|
This page explains how MLRun addresses the [**gen AI tasks**](#genai-tasks), [**MLOps tasks**](#mlops-tasks), and presents the [**MLRun core components**](#core-components).
|
|
284
271
|
|
|
@@ -299,8 +286,8 @@ Removing inappropriate data at an early stage saves resources that would otherwi
|
|
|
299
286
|
|
|
300
287
|
|
|
301
288
|
**Docs:**
|
|
302
|
-
[Using LLMs to process unstructured data](https://docs.mlrun.org/en/stable/genai/data-mgmt/unstructured-data.html)
|
|
303
|
-
[Vector databases](https://docs.mlrun.org/en/stable/genai/data-mgmt/vector-databases.html)
|
|
289
|
+
[Using LLMs to process unstructured data](https://docs.mlrun.org/en/stable/genai/data-mgmt/unstructured-data.html),
|
|
290
|
+
[Vector databases](https://docs.mlrun.org/en/stable/genai/data-mgmt/vector-databases.html),
|
|
304
291
|
[Guardrails for data management](https://docs.mlrun.org/en/stable/genai/data-mgmt/guardrails-data.html)
|
|
305
292
|
**Demo:**
|
|
306
293
|
[Call center demo](https://github.com/mlrun/demo-call-center)
|
|
@@ -314,7 +301,8 @@ preprocess (prepare) the data, run the training pipeline, and evaluate the model
|
|
|
314
301
|
**Docs:**
|
|
315
302
|
[Working with RAG](https://docs.mlrun.org/en/stable/genai/development/working-with-rag.html), [Evalating LLMs](https://docs.mlrun.org/en/stable/genai/development/evaluating-llms.html), [Fine tuning LLMS](https://docs.mlrun.org/en/stable/genai/development/fine-tuning-llms.html)
|
|
316
303
|
**Demos:**
|
|
317
|
-
[Call center demo](https://github.com/mlrun/demo-call-center),
|
|
304
|
+
[Call center demo](https://github.com/mlrun/demo-call-center),
|
|
305
|
+
[Banking agent demo](https://github.com/mlrun/demo-banking-agent)
|
|
318
306
|
**Video:**
|
|
319
307
|
[Call center](https://youtu.be/YycMbxRgLBA)
|
|
320
308
|
|
|
@@ -328,9 +316,10 @@ inferring results using one or more models, and driving actions.
|
|
|
328
316
|
**Docs:**
|
|
329
317
|
[Serving gen AI models](https://docs.mlrun.org/en/stable/genai/deployment/genai_serving.html), [GPU utilization](https://docs.mlrun.org/en/stable/genai/deployment/gpu_utilization.html), [Gen AI realtime serving graph](https://docs.mlrun.org/en/stable/genai/deployment/genai_serving_graph.html)
|
|
330
318
|
**Tutorial:**
|
|
331
|
-
[Deploy LLM using MLRun](https://docs.mlrun.org/en/stable/tutorials/
|
|
319
|
+
[Deploy LLM using MLRun](https://docs.mlrun.org/en/stable/tutorials/genai-01-basic-tutorial.html)
|
|
332
320
|
**Demos:**
|
|
333
|
-
[Call center demo](https://github.com/mlrun/demo-call-center),
|
|
321
|
+
[Call center demo](https://github.com/mlrun/demo-call-center),
|
|
322
|
+
[Banking agent demo](https://github.com/mlrun/demo-banking-agent)
|
|
334
323
|
**Video:**
|
|
335
324
|
[Call center](https://youtu.be/YycMbxRgLBA)
|
|
336
325
|
|
|
@@ -343,9 +332,9 @@ Collect production data, metadata, and metrics to tune the model and application
|
|
|
343
332
|
**Docs:**
|
|
344
333
|
[Model monitoring <monitoring](https://docs.mlrun.org/en/stable/concepts/monitoring.html), [Alerts and notifications](https://docs.mlrun.org/en/stable/concepts/alerts-notifications.html)
|
|
345
334
|
**Tutorials:**
|
|
346
|
-
[Deploy LLM using MLRun](https://docs.mlrun.org/en/stable/tutorials/
|
|
335
|
+
[Deploy LLM using MLRun](https://docs.mlrun.org/en/stable/tutorials/genai-01-basic-tutorial.html), [Model monitoring using LLM](https://docs.mlrun.org/en/stable/tutorials/genai-02-monitoring-llm.html)
|
|
347
336
|
**Demo:**
|
|
348
|
-
[
|
|
337
|
+
[Banking agent demo](https://github.com/mlrun/demo-banking-agent)
|
|
349
338
|
|
|
350
339
|
|
|
351
340
|
<a id="mlops-tasks"></a>
|