mlrun 1.3.3rc1__py3-none-any.whl → 1.4.0__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 +3 -3
- mlrun/__main__.py +79 -37
- mlrun/api/__init__.py +1 -1
- mlrun/api/api/__init__.py +1 -1
- mlrun/api/api/api.py +4 -4
- mlrun/api/api/deps.py +10 -21
- mlrun/api/api/endpoints/__init__.py +1 -1
- mlrun/api/api/endpoints/artifacts.py +64 -36
- mlrun/api/api/endpoints/auth.py +4 -4
- mlrun/api/api/endpoints/background_tasks.py +11 -11
- mlrun/api/api/endpoints/client_spec.py +5 -5
- mlrun/api/api/endpoints/clusterization_spec.py +6 -4
- mlrun/api/api/endpoints/feature_store.py +124 -115
- mlrun/api/api/endpoints/files.py +22 -14
- mlrun/api/api/endpoints/frontend_spec.py +28 -21
- mlrun/api/api/endpoints/functions.py +142 -87
- mlrun/api/api/endpoints/grafana_proxy.py +89 -442
- mlrun/api/api/endpoints/healthz.py +20 -7
- mlrun/api/api/endpoints/hub.py +320 -0
- mlrun/api/api/endpoints/internal/__init__.py +1 -1
- mlrun/api/api/endpoints/internal/config.py +1 -1
- mlrun/api/api/endpoints/internal/memory_reports.py +9 -9
- mlrun/api/api/endpoints/logs.py +11 -11
- mlrun/api/api/endpoints/model_endpoints.py +74 -70
- mlrun/api/api/endpoints/operations.py +13 -9
- mlrun/api/api/endpoints/pipelines.py +93 -88
- mlrun/api/api/endpoints/projects.py +35 -35
- mlrun/api/api/endpoints/runs.py +69 -27
- mlrun/api/api/endpoints/runtime_resources.py +28 -28
- mlrun/api/api/endpoints/schedules.py +98 -41
- mlrun/api/api/endpoints/secrets.py +37 -32
- mlrun/api/api/endpoints/submit.py +12 -12
- mlrun/api/api/endpoints/tags.py +20 -22
- mlrun/api/api/utils.py +251 -42
- mlrun/api/constants.py +1 -1
- mlrun/api/crud/__init__.py +18 -15
- mlrun/api/crud/artifacts.py +10 -10
- mlrun/api/crud/client_spec.py +4 -4
- mlrun/api/crud/clusterization_spec.py +3 -3
- mlrun/api/crud/feature_store.py +54 -46
- mlrun/api/crud/functions.py +3 -3
- mlrun/api/crud/hub.py +312 -0
- mlrun/api/crud/logs.py +11 -9
- mlrun/api/crud/model_monitoring/__init__.py +3 -3
- mlrun/api/crud/model_monitoring/grafana.py +435 -0
- mlrun/api/crud/model_monitoring/model_endpoints.py +352 -129
- mlrun/api/crud/notifications.py +149 -0
- mlrun/api/crud/pipelines.py +67 -52
- mlrun/api/crud/projects.py +51 -23
- mlrun/api/crud/runs.py +7 -5
- mlrun/api/crud/runtime_resources.py +13 -13
- mlrun/api/{db/filedb → crud/runtimes}/__init__.py +1 -1
- mlrun/api/crud/runtimes/nuclio/__init__.py +14 -0
- mlrun/api/crud/runtimes/nuclio/function.py +505 -0
- mlrun/api/crud/runtimes/nuclio/helpers.py +310 -0
- mlrun/api/crud/secrets.py +88 -46
- mlrun/api/crud/tags.py +5 -5
- mlrun/api/db/__init__.py +1 -1
- mlrun/api/db/base.py +102 -54
- mlrun/api/db/init_db.py +2 -3
- mlrun/api/db/session.py +4 -12
- mlrun/api/db/sqldb/__init__.py +1 -1
- mlrun/api/db/sqldb/db.py +439 -196
- mlrun/api/db/sqldb/helpers.py +1 -1
- mlrun/api/db/sqldb/models/__init__.py +3 -3
- mlrun/api/db/sqldb/models/models_mysql.py +82 -64
- mlrun/api/db/sqldb/models/models_sqlite.py +76 -64
- mlrun/api/db/sqldb/session.py +27 -20
- mlrun/api/initial_data.py +82 -24
- mlrun/api/launcher.py +196 -0
- mlrun/api/main.py +91 -22
- mlrun/api/middlewares.py +6 -5
- mlrun/api/migrations_mysql/env.py +1 -1
- mlrun/api/migrations_mysql/versions/28383af526f3_market_place_to_hub.py +40 -0
- mlrun/api/migrations_mysql/versions/32bae1b0e29c_increase_timestamp_fields_precision.py +1 -1
- mlrun/api/migrations_mysql/versions/4903aef6a91d_tag_foreign_key_and_cascades.py +1 -1
- mlrun/api/migrations_mysql/versions/5f1351c88a19_adding_background_tasks_table.py +1 -1
- mlrun/api/migrations_mysql/versions/88e656800d6a_add_requested_logs_column_and_index_to_.py +1 -1
- mlrun/api/migrations_mysql/versions/9d16de5f03a7_adding_data_versions_table.py +1 -1
- mlrun/api/migrations_mysql/versions/b86f5b53f3d7_adding_name_and_updated_to_runs_table.py +1 -1
- mlrun/api/migrations_mysql/versions/c4af40b0bf61_init.py +1 -1
- mlrun/api/migrations_mysql/versions/c905d15bd91d_notifications.py +72 -0
- mlrun/api/migrations_mysql/versions/ee041e8fdaa0_adding_next_run_time_column_to_schedule_.py +1 -1
- mlrun/api/migrations_sqlite/env.py +1 -1
- mlrun/api/migrations_sqlite/versions/11f8dd2dc9fe_init.py +1 -1
- mlrun/api/migrations_sqlite/versions/1c954f8cb32d_schedule_last_run_uri.py +1 -1
- mlrun/api/migrations_sqlite/versions/2b6d23c715aa_adding_feature_sets.py +1 -1
- mlrun/api/migrations_sqlite/versions/4acd9430b093_market_place_to_hub.py +77 -0
- mlrun/api/migrations_sqlite/versions/6401142f2d7c_adding_next_run_time_column_to_schedule_.py +1 -1
- mlrun/api/migrations_sqlite/versions/64d90a1a69bc_adding_background_tasks_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/803438ecd005_add_requested_logs_column_to_runs.py +1 -1
- mlrun/api/migrations_sqlite/versions/863114f0c659_refactoring_feature_set.py +1 -1
- mlrun/api/migrations_sqlite/versions/959ae00528ad_notifications.py +63 -0
- mlrun/api/migrations_sqlite/versions/accf9fc83d38_adding_data_versions_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/b68e8e897a28_schedule_labels.py +1 -1
- mlrun/api/migrations_sqlite/versions/bcd0c1f9720c_adding_project_labels.py +1 -1
- mlrun/api/migrations_sqlite/versions/cf21882f938e_schedule_id.py +1 -1
- mlrun/api/migrations_sqlite/versions/d781f58f607f_tag_object_name_string.py +1 -1
- mlrun/api/migrations_sqlite/versions/deac06871ace_adding_marketplace_sources_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/e1dd5983c06b_schedule_concurrency_limit.py +1 -1
- mlrun/api/migrations_sqlite/versions/e5594ed3ab53_adding_name_and_updated_to_runs_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/f4249b4ba6fa_adding_feature_vectors.py +1 -1
- mlrun/api/migrations_sqlite/versions/f7b5a1a03629_adding_feature_labels.py +1 -1
- mlrun/api/schemas/__init__.py +216 -138
- mlrun/api/utils/__init__.py +1 -1
- mlrun/api/utils/asyncio.py +1 -1
- mlrun/api/utils/auth/__init__.py +1 -1
- mlrun/api/utils/auth/providers/__init__.py +1 -1
- mlrun/api/utils/auth/providers/base.py +7 -7
- mlrun/api/utils/auth/providers/nop.py +6 -7
- mlrun/api/utils/auth/providers/opa.py +17 -17
- mlrun/api/utils/auth/verifier.py +36 -34
- mlrun/api/utils/background_tasks.py +24 -24
- mlrun/{builder.py → api/utils/builder.py} +216 -123
- mlrun/api/utils/clients/__init__.py +1 -1
- mlrun/api/utils/clients/chief.py +19 -4
- mlrun/api/utils/clients/iguazio.py +106 -60
- mlrun/api/utils/clients/log_collector.py +1 -1
- mlrun/api/utils/clients/nuclio.py +23 -23
- mlrun/api/utils/clients/protocols/grpc.py +2 -2
- mlrun/api/utils/db/__init__.py +1 -1
- mlrun/api/utils/db/alembic.py +1 -1
- mlrun/api/utils/db/backup.py +1 -1
- mlrun/api/utils/db/mysql.py +24 -25
- mlrun/api/utils/db/sql_collation.py +1 -1
- mlrun/api/utils/db/sqlite_migration.py +2 -2
- mlrun/api/utils/events/__init__.py +14 -0
- mlrun/api/utils/events/base.py +57 -0
- mlrun/api/utils/events/events_factory.py +41 -0
- mlrun/api/utils/events/iguazio.py +217 -0
- mlrun/api/utils/events/nop.py +55 -0
- mlrun/api/utils/helpers.py +16 -13
- mlrun/api/utils/memory_reports.py +1 -1
- mlrun/api/utils/periodic.py +6 -3
- mlrun/api/utils/projects/__init__.py +1 -1
- mlrun/api/utils/projects/follower.py +33 -33
- mlrun/api/utils/projects/leader.py +36 -34
- mlrun/api/utils/projects/member.py +27 -27
- mlrun/api/utils/projects/remotes/__init__.py +1 -1
- mlrun/api/utils/projects/remotes/follower.py +13 -13
- mlrun/api/utils/projects/remotes/leader.py +10 -10
- mlrun/api/utils/projects/remotes/nop_follower.py +27 -21
- mlrun/api/utils/projects/remotes/nop_leader.py +17 -16
- mlrun/api/utils/scheduler.py +140 -51
- mlrun/api/utils/singletons/__init__.py +1 -1
- mlrun/api/utils/singletons/db.py +9 -15
- mlrun/api/utils/singletons/k8s.py +677 -5
- mlrun/api/utils/singletons/logs_dir.py +1 -1
- mlrun/api/utils/singletons/project_member.py +1 -1
- mlrun/api/utils/singletons/scheduler.py +1 -1
- mlrun/artifacts/__init__.py +2 -2
- mlrun/artifacts/base.py +8 -2
- mlrun/artifacts/dataset.py +5 -3
- mlrun/artifacts/manager.py +7 -1
- mlrun/artifacts/model.py +15 -4
- mlrun/artifacts/plots.py +1 -1
- mlrun/common/__init__.py +1 -1
- mlrun/common/constants.py +15 -0
- mlrun/common/model_monitoring.py +209 -0
- mlrun/common/schemas/__init__.py +167 -0
- mlrun/{api → common}/schemas/artifact.py +13 -14
- mlrun/{api → common}/schemas/auth.py +10 -8
- mlrun/{api → common}/schemas/background_task.py +3 -3
- mlrun/{api → common}/schemas/client_spec.py +1 -1
- mlrun/{api → common}/schemas/clusterization_spec.py +3 -3
- mlrun/{api → common}/schemas/constants.py +21 -8
- mlrun/common/schemas/events.py +36 -0
- mlrun/{api → common}/schemas/feature_store.py +2 -1
- mlrun/{api → common}/schemas/frontend_spec.py +7 -6
- mlrun/{api → common}/schemas/function.py +5 -5
- mlrun/{api → common}/schemas/http.py +3 -3
- mlrun/common/schemas/hub.py +134 -0
- mlrun/{api → common}/schemas/k8s.py +3 -3
- mlrun/{api → common}/schemas/memory_reports.py +1 -1
- mlrun/common/schemas/model_endpoints.py +342 -0
- mlrun/common/schemas/notification.py +57 -0
- mlrun/{api → common}/schemas/object.py +6 -6
- mlrun/{api → common}/schemas/pipeline.py +3 -3
- mlrun/{api → common}/schemas/project.py +6 -5
- mlrun/common/schemas/regex.py +24 -0
- mlrun/common/schemas/runs.py +30 -0
- mlrun/{api → common}/schemas/runtime_resource.py +3 -3
- mlrun/{api → common}/schemas/schedule.py +19 -7
- mlrun/{api → common}/schemas/secret.py +3 -3
- mlrun/{api → common}/schemas/tag.py +2 -2
- mlrun/common/types.py +25 -0
- mlrun/config.py +152 -20
- mlrun/data_types/__init__.py +7 -2
- mlrun/data_types/data_types.py +4 -2
- mlrun/data_types/infer.py +1 -1
- mlrun/data_types/spark.py +10 -3
- mlrun/datastore/__init__.py +10 -3
- mlrun/datastore/azure_blob.py +1 -1
- mlrun/datastore/base.py +185 -53
- mlrun/datastore/datastore.py +1 -1
- mlrun/datastore/filestore.py +1 -1
- mlrun/datastore/google_cloud_storage.py +1 -1
- mlrun/datastore/inmem.py +4 -1
- mlrun/datastore/redis.py +1 -1
- mlrun/datastore/s3.py +1 -1
- mlrun/datastore/sources.py +192 -70
- mlrun/datastore/spark_udf.py +44 -0
- mlrun/datastore/store_resources.py +4 -4
- mlrun/datastore/targets.py +115 -45
- mlrun/datastore/utils.py +127 -5
- mlrun/datastore/v3io.py +1 -1
- mlrun/datastore/wasbfs/__init__.py +1 -1
- mlrun/datastore/wasbfs/fs.py +1 -1
- mlrun/db/__init__.py +7 -5
- mlrun/db/base.py +112 -68
- mlrun/db/httpdb.py +445 -277
- mlrun/db/nopdb.py +491 -0
- mlrun/db/sqldb.py +112 -65
- mlrun/errors.py +6 -1
- mlrun/execution.py +44 -22
- mlrun/feature_store/__init__.py +1 -1
- mlrun/feature_store/api.py +143 -95
- mlrun/feature_store/common.py +16 -20
- mlrun/feature_store/feature_set.py +42 -12
- mlrun/feature_store/feature_vector.py +32 -21
- mlrun/feature_store/ingestion.py +9 -12
- mlrun/feature_store/retrieval/__init__.py +3 -2
- mlrun/feature_store/retrieval/base.py +388 -66
- mlrun/feature_store/retrieval/dask_merger.py +63 -151
- mlrun/feature_store/retrieval/job.py +30 -12
- mlrun/feature_store/retrieval/local_merger.py +40 -133
- mlrun/feature_store/retrieval/spark_merger.py +129 -127
- mlrun/feature_store/retrieval/storey_merger.py +173 -0
- mlrun/feature_store/steps.py +132 -15
- mlrun/features.py +8 -3
- mlrun/frameworks/__init__.py +1 -1
- mlrun/frameworks/_common/__init__.py +1 -1
- mlrun/frameworks/_common/artifacts_library.py +1 -1
- mlrun/frameworks/_common/mlrun_interface.py +1 -1
- mlrun/frameworks/_common/model_handler.py +1 -1
- mlrun/frameworks/_common/plan.py +1 -1
- mlrun/frameworks/_common/producer.py +1 -1
- mlrun/frameworks/_common/utils.py +1 -1
- mlrun/frameworks/_dl_common/__init__.py +1 -1
- mlrun/frameworks/_dl_common/loggers/__init__.py +1 -1
- mlrun/frameworks/_dl_common/loggers/logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +1 -1
- mlrun/frameworks/_dl_common/model_handler.py +1 -1
- mlrun/frameworks/_dl_common/utils.py +1 -1
- mlrun/frameworks/_ml_common/__init__.py +1 -1
- mlrun/frameworks/_ml_common/artifacts_library.py +1 -1
- mlrun/frameworks/_ml_common/loggers/__init__.py +1 -1
- mlrun/frameworks/_ml_common/loggers/logger.py +1 -1
- mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_ml_common/model_handler.py +1 -1
- mlrun/frameworks/_ml_common/pkl_model_server.py +13 -1
- mlrun/frameworks/_ml_common/plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/__init__.py +1 -1
- mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +1 -6
- mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/dataset_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +1 -1
- mlrun/frameworks/_ml_common/producer.py +1 -1
- mlrun/frameworks/_ml_common/utils.py +1 -1
- mlrun/frameworks/auto_mlrun/__init__.py +1 -1
- mlrun/frameworks/auto_mlrun/auto_mlrun.py +1 -1
- mlrun/frameworks/huggingface/__init__.py +1 -1
- mlrun/frameworks/huggingface/model_server.py +1 -1
- mlrun/frameworks/lgbm/__init__.py +1 -1
- mlrun/frameworks/lgbm/callbacks/__init__.py +1 -1
- mlrun/frameworks/lgbm/callbacks/callback.py +1 -1
- mlrun/frameworks/lgbm/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/model_handler.py +1 -1
- mlrun/frameworks/lgbm/model_server.py +1 -1
- mlrun/frameworks/lgbm/utils.py +1 -1
- mlrun/frameworks/onnx/__init__.py +1 -1
- mlrun/frameworks/onnx/dataset.py +1 -1
- mlrun/frameworks/onnx/mlrun_interface.py +1 -1
- mlrun/frameworks/onnx/model_handler.py +1 -1
- mlrun/frameworks/onnx/model_server.py +1 -1
- mlrun/frameworks/parallel_coordinates.py +1 -1
- mlrun/frameworks/pytorch/__init__.py +1 -1
- mlrun/frameworks/pytorch/callbacks/__init__.py +1 -1
- mlrun/frameworks/pytorch/callbacks/callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks_handler.py +1 -1
- mlrun/frameworks/pytorch/mlrun_interface.py +1 -1
- mlrun/frameworks/pytorch/model_handler.py +1 -1
- mlrun/frameworks/pytorch/model_server.py +1 -1
- mlrun/frameworks/pytorch/utils.py +1 -1
- mlrun/frameworks/sklearn/__init__.py +1 -1
- mlrun/frameworks/sklearn/estimator.py +1 -1
- mlrun/frameworks/sklearn/metric.py +1 -1
- mlrun/frameworks/sklearn/metrics_library.py +1 -1
- mlrun/frameworks/sklearn/mlrun_interface.py +1 -1
- mlrun/frameworks/sklearn/model_handler.py +1 -1
- mlrun/frameworks/sklearn/utils.py +1 -1
- mlrun/frameworks/tf_keras/__init__.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/mlrun_interface.py +1 -1
- mlrun/frameworks/tf_keras/model_handler.py +1 -1
- mlrun/frameworks/tf_keras/model_server.py +1 -1
- mlrun/frameworks/tf_keras/utils.py +1 -1
- mlrun/frameworks/xgboost/__init__.py +1 -1
- mlrun/frameworks/xgboost/mlrun_interface.py +1 -1
- mlrun/frameworks/xgboost/model_handler.py +1 -1
- mlrun/frameworks/xgboost/utils.py +1 -1
- mlrun/k8s_utils.py +14 -765
- mlrun/kfpops.py +14 -17
- mlrun/launcher/__init__.py +13 -0
- mlrun/launcher/base.py +406 -0
- mlrun/launcher/client.py +159 -0
- mlrun/launcher/factory.py +50 -0
- mlrun/launcher/local.py +276 -0
- mlrun/launcher/remote.py +178 -0
- mlrun/lists.py +10 -2
- mlrun/mlutils/__init__.py +1 -1
- mlrun/mlutils/data.py +1 -1
- mlrun/mlutils/models.py +1 -1
- mlrun/mlutils/plots.py +1 -1
- mlrun/model.py +252 -14
- mlrun/model_monitoring/__init__.py +41 -0
- mlrun/model_monitoring/features_drift_table.py +1 -1
- mlrun/model_monitoring/helpers.py +123 -38
- mlrun/model_monitoring/model_endpoint.py +144 -0
- mlrun/model_monitoring/model_monitoring_batch.py +310 -259
- mlrun/model_monitoring/stores/__init__.py +106 -0
- mlrun/model_monitoring/stores/kv_model_endpoint_store.py +448 -0
- mlrun/model_monitoring/stores/model_endpoint_store.py +147 -0
- mlrun/model_monitoring/stores/models/__init__.py +23 -0
- mlrun/model_monitoring/stores/models/base.py +18 -0
- mlrun/model_monitoring/stores/models/mysql.py +100 -0
- mlrun/model_monitoring/stores/models/sqlite.py +98 -0
- mlrun/model_monitoring/stores/sql_model_endpoint_store.py +370 -0
- mlrun/model_monitoring/stream_processing_fs.py +239 -271
- mlrun/package/__init__.py +163 -0
- mlrun/package/context_handler.py +325 -0
- mlrun/package/errors.py +47 -0
- mlrun/package/packager.py +298 -0
- mlrun/{runtimes/package → package/packagers}/__init__.py +3 -1
- mlrun/package/packagers/default_packager.py +422 -0
- mlrun/package/packagers/numpy_packagers.py +612 -0
- mlrun/package/packagers/pandas_packagers.py +968 -0
- mlrun/package/packagers/python_standard_library_packagers.py +616 -0
- mlrun/package/packagers_manager.py +786 -0
- mlrun/package/utils/__init__.py +53 -0
- mlrun/package/utils/_archiver.py +226 -0
- mlrun/package/utils/_formatter.py +211 -0
- mlrun/package/utils/_pickler.py +234 -0
- mlrun/package/utils/_supported_format.py +71 -0
- mlrun/package/utils/log_hint_utils.py +93 -0
- mlrun/package/utils/type_hint_utils.py +298 -0
- mlrun/platforms/__init__.py +1 -1
- mlrun/platforms/iguazio.py +34 -2
- mlrun/platforms/other.py +1 -1
- mlrun/projects/__init__.py +1 -1
- mlrun/projects/operations.py +14 -9
- mlrun/projects/pipelines.py +31 -13
- mlrun/projects/project.py +762 -238
- mlrun/render.py +49 -19
- mlrun/run.py +57 -326
- mlrun/runtimes/__init__.py +3 -9
- mlrun/runtimes/base.py +247 -784
- mlrun/runtimes/constants.py +1 -1
- mlrun/runtimes/daskjob.py +45 -41
- mlrun/runtimes/funcdoc.py +43 -7
- mlrun/runtimes/function.py +66 -656
- mlrun/runtimes/function_reference.py +1 -1
- mlrun/runtimes/generators.py +1 -1
- mlrun/runtimes/kubejob.py +99 -116
- mlrun/runtimes/local.py +59 -66
- mlrun/runtimes/mpijob/__init__.py +1 -1
- mlrun/runtimes/mpijob/abstract.py +13 -15
- mlrun/runtimes/mpijob/v1.py +3 -1
- mlrun/runtimes/mpijob/v1alpha1.py +1 -1
- mlrun/runtimes/nuclio.py +1 -1
- mlrun/runtimes/pod.py +51 -26
- mlrun/runtimes/remotesparkjob.py +3 -1
- mlrun/runtimes/serving.py +12 -4
- mlrun/runtimes/sparkjob/__init__.py +1 -2
- mlrun/runtimes/sparkjob/abstract.py +44 -31
- mlrun/runtimes/sparkjob/spark3job.py +11 -9
- mlrun/runtimes/utils.py +61 -42
- mlrun/secrets.py +16 -18
- mlrun/serving/__init__.py +3 -2
- mlrun/serving/merger.py +1 -1
- mlrun/serving/remote.py +1 -1
- mlrun/serving/routers.py +39 -42
- mlrun/serving/server.py +23 -13
- mlrun/serving/serving_wrapper.py +1 -1
- mlrun/serving/states.py +172 -39
- mlrun/serving/utils.py +1 -1
- mlrun/serving/v1_serving.py +1 -1
- mlrun/serving/v2_serving.py +29 -21
- mlrun/utils/__init__.py +1 -2
- mlrun/utils/async_http.py +8 -1
- mlrun/utils/azure_vault.py +1 -1
- mlrun/utils/clones.py +2 -2
- mlrun/utils/condition_evaluator.py +65 -0
- mlrun/utils/db.py +52 -0
- mlrun/utils/helpers.py +188 -13
- mlrun/utils/http.py +89 -54
- mlrun/utils/logger.py +48 -8
- mlrun/utils/model_monitoring.py +132 -100
- mlrun/utils/notifications/__init__.py +1 -1
- mlrun/utils/notifications/notification/__init__.py +8 -6
- mlrun/utils/notifications/notification/base.py +20 -14
- mlrun/utils/notifications/notification/console.py +7 -4
- mlrun/utils/notifications/notification/git.py +36 -19
- mlrun/utils/notifications/notification/ipython.py +10 -8
- mlrun/utils/notifications/notification/slack.py +18 -13
- mlrun/utils/notifications/notification_pusher.py +377 -56
- mlrun/utils/regex.py +6 -1
- mlrun/utils/singleton.py +1 -1
- mlrun/utils/v3io_clients.py +1 -1
- mlrun/utils/vault.py +270 -269
- mlrun/utils/version/__init__.py +1 -1
- mlrun/utils/version/version.json +2 -2
- mlrun/utils/version/version.py +1 -1
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/METADATA +16 -10
- mlrun-1.4.0.dist-info/RECORD +434 -0
- mlrun/api/api/endpoints/marketplace.py +0 -257
- mlrun/api/crud/marketplace.py +0 -221
- mlrun/api/crud/model_monitoring/model_endpoint_store.py +0 -847
- mlrun/api/db/filedb/db.py +0 -518
- mlrun/api/schemas/marketplace.py +0 -128
- mlrun/api/schemas/model_endpoints.py +0 -185
- mlrun/db/filedb.py +0 -891
- mlrun/feature_store/retrieval/online.py +0 -92
- mlrun/model_monitoring/constants.py +0 -67
- mlrun/runtimes/package/context_handler.py +0 -711
- mlrun/runtimes/sparkjob/spark2job.py +0 -59
- mlrun-1.3.3rc1.dist-info/RECORD +0 -381
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Copyright 2023 Iguazio
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#
|
|
15
|
+
from abc import ABC, ABCMeta, abstractmethod
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
from typing import Any, List, Tuple, Type, Union
|
|
18
|
+
|
|
19
|
+
from mlrun.artifacts import Artifact
|
|
20
|
+
from mlrun.datastore import DataItem
|
|
21
|
+
|
|
22
|
+
from .utils import TypeHintUtils
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# TODO: When 3.7 is no longer supported, add "Packager" as reference type hint to cls (cls: Type["Packager"]) and other.
|
|
26
|
+
class _PackagerMeta(ABCMeta):
|
|
27
|
+
"""
|
|
28
|
+
Metaclass for `Packager` to override type class methods.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __lt__(cls, other) -> bool:
|
|
32
|
+
"""
|
|
33
|
+
A less than implementation to compare by priority in order to be able to sort the packagers by it.
|
|
34
|
+
|
|
35
|
+
:param other: The compared packager.
|
|
36
|
+
|
|
37
|
+
:return: True if priority is lower (means better) and False otherwise.
|
|
38
|
+
"""
|
|
39
|
+
return cls.PRIORITY < other.PRIORITY
|
|
40
|
+
|
|
41
|
+
def __repr__(cls) -> str:
|
|
42
|
+
"""
|
|
43
|
+
Get the string representation of a packager in the following format:
|
|
44
|
+
<packager name>(type=<handled type>, artifact_types=[<all supported artifact types>], priority=<priority>)
|
|
45
|
+
|
|
46
|
+
:return: The string representation of e packager.
|
|
47
|
+
"""
|
|
48
|
+
# Get the packager info into variables:
|
|
49
|
+
packager_name = cls.__name__
|
|
50
|
+
handled_type = (
|
|
51
|
+
(
|
|
52
|
+
# Types have __name__ attribute but typing's types do not.
|
|
53
|
+
cls.PACKABLE_OBJECT_TYPE.__name__
|
|
54
|
+
if hasattr(cls.PACKABLE_OBJECT_TYPE, "__name__")
|
|
55
|
+
else str(cls.PACKABLE_OBJECT_TYPE)
|
|
56
|
+
)
|
|
57
|
+
if cls.PACKABLE_OBJECT_TYPE is not ...
|
|
58
|
+
else "Any"
|
|
59
|
+
)
|
|
60
|
+
supported_artifact_types = cls.get_supported_artifact_types()
|
|
61
|
+
|
|
62
|
+
# Return the string representation in the format noted above:
|
|
63
|
+
return (
|
|
64
|
+
f"{packager_name}(packable_type={handled_type}, artifact_types={supported_artifact_types}, "
|
|
65
|
+
f"priority={cls.PRIORITY})"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Packager(ABC, metaclass=_PackagerMeta):
|
|
70
|
+
"""
|
|
71
|
+
The abstract base class for a packager. A packager is a static class that have two main duties:
|
|
72
|
+
|
|
73
|
+
1. Packing - get an object that was returned from a function and log it to MLRun. The user can specify packing
|
|
74
|
+
configurations to the packager using log hints. The packed object can be an artifact or a result.
|
|
75
|
+
2. Unpacking - get a ``mlrun.DataItem`` (an input to a MLRun function) and parse it to the desired hinted type. The
|
|
76
|
+
packager is using the instructions it noted itself when originally packing the object.
|
|
77
|
+
|
|
78
|
+
The Packager has one class variable and five class methods that must be implemented:
|
|
79
|
+
|
|
80
|
+
* ``PACKABLE_OBJECT_TYPE`` - A class variable to specify the object type this packager handles. Used for the
|
|
81
|
+
``is_packable`` and ``repr`` methods. An ellipses (`...`) means any type.
|
|
82
|
+
* ``PRIORITY`` - The priority of this packager among the rest of the packagers. Should be an integer between 1-10
|
|
83
|
+
where 1 is the highest priority and 10 is the lowest. If not set, a default priority of 5 is set for MLRun
|
|
84
|
+
builtin packagers and 3 for user custom packagers.
|
|
85
|
+
* ``get_default_packing_artifact_type`` - A class method to get the default artifact type for packing an object
|
|
86
|
+
when it is not provided by the user.
|
|
87
|
+
* ``get_default_unpacking_artifact_type`` - A class method to get the default artifact type for unpacking a data
|
|
88
|
+
item when it is not representing a package, but a simple url or an old / manually logged artifact
|
|
89
|
+
* ``get_supported_artifact_types`` - A class method to get the supported artifact types this packager can pack an
|
|
90
|
+
object as. Used for the ``is_packable`` and `repr` methods.
|
|
91
|
+
* ``pack`` - A class method to pack a returned object using the provided log hint configurations while noting itself
|
|
92
|
+
instructions for how to unpack it once needed (only relevant of packed artifacts as results do not need
|
|
93
|
+
unpacking).
|
|
94
|
+
* ``unpack`` - A class method to unpack a MLRun ``DataItem``, parsing it to its desired hinted type using the
|
|
95
|
+
instructions noted while originally packing it.
|
|
96
|
+
|
|
97
|
+
The class methods ``is_packable`` and ``is_unpackable`` are implemented with the following basic logic:
|
|
98
|
+
|
|
99
|
+
* ``is_packable`` - a class method to know whether to use this packager to pack an object by its
|
|
100
|
+
type and artifact type, compares the object's type with the ``PACKABLE_OBJECT_TYPE`` and checks the artifact type
|
|
101
|
+
is in the returned supported artifacts list from ``get_supported_artifact_types``.
|
|
102
|
+
* ``is_unpackable`` - a class method to know whether to use this packager to unpack a data item by the user noted
|
|
103
|
+
type hint and optionally stored artifact type in the data item (in case it was packaged before), matches the
|
|
104
|
+
``PACKABLE_OBJECT_TYPE`` to the type hint given (same logic as IDE matchups, meaning subclasses considered as
|
|
105
|
+
unpackable) and checks if the artifact type is in the returned supported artifacts list from
|
|
106
|
+
``get_supported_artifact_types``.
|
|
107
|
+
|
|
108
|
+
Preferably, each packager should handle a single type of object.
|
|
109
|
+
|
|
110
|
+
Linking Artifacts (extra data)
|
|
111
|
+
------------------------------
|
|
112
|
+
|
|
113
|
+
In order to link between packages (using the extra data or metrics spec attributes of an artifact), you should use
|
|
114
|
+
the key as if it exists and as value ellipses (...). The manager will link all packages once it is done packing.
|
|
115
|
+
|
|
116
|
+
For example, given extra data keys in the log hint as `extra_data`, setting them to an artifact should be::
|
|
117
|
+
|
|
118
|
+
artifact = Artifact(key="my_artifact")
|
|
119
|
+
artifact.spec.extra_data = {key: ... for key in extra_data}
|
|
120
|
+
|
|
121
|
+
Clearing Outputs
|
|
122
|
+
----------------
|
|
123
|
+
|
|
124
|
+
Some of the packagers may produce files and temporary directories that should be deleted once done with logging the
|
|
125
|
+
artifact. The packager can mark paths of files and directories to delete after logging using the class method
|
|
126
|
+
``future_clear``.
|
|
127
|
+
|
|
128
|
+
For example, in the following packager's ``pack`` method we can write a text file, create an Artifact and then mark
|
|
129
|
+
the text file to be deleted once the artifact is logged::
|
|
130
|
+
|
|
131
|
+
with open("./some_file.txt", "w") as file:
|
|
132
|
+
file.write("Pack me")
|
|
133
|
+
artifact = Artifact(key="my_artifact")
|
|
134
|
+
cls.future_clear(path="./some_file.txt")
|
|
135
|
+
return artifact, None
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
# The type of object this packager can pack and unpack:
|
|
139
|
+
PACKABLE_OBJECT_TYPE: Type = ...
|
|
140
|
+
|
|
141
|
+
# The priority of this packager in the packagers collection of the manager (lower is better)
|
|
142
|
+
PRIORITY = ...
|
|
143
|
+
|
|
144
|
+
# List of all paths to be deleted by the manager of this packager post logging the packages:
|
|
145
|
+
_CLEARING_PATH_LIST: List[str] = []
|
|
146
|
+
|
|
147
|
+
@classmethod
|
|
148
|
+
@abstractmethod
|
|
149
|
+
def get_default_packing_artifact_type(cls, obj: Any) -> str:
|
|
150
|
+
"""
|
|
151
|
+
Get the default artifact type used for packing. The method will be used when an object is sent for packing
|
|
152
|
+
without an artifact type noted by the user.
|
|
153
|
+
|
|
154
|
+
:param obj: The about to be packed object.
|
|
155
|
+
|
|
156
|
+
:return: The default artifact type.
|
|
157
|
+
"""
|
|
158
|
+
pass
|
|
159
|
+
|
|
160
|
+
@classmethod
|
|
161
|
+
@abstractmethod
|
|
162
|
+
def get_default_unpacking_artifact_type(cls, data_item: DataItem) -> str:
|
|
163
|
+
"""
|
|
164
|
+
Get the default artifact type used for unpacking a data item holding an object of this packager. The method will
|
|
165
|
+
be used when a data item is sent for unpacking without it being a package, but a simple url or an old / manually
|
|
166
|
+
logged artifact.
|
|
167
|
+
|
|
168
|
+
:param data_item: The about to be unpacked data item.
|
|
169
|
+
|
|
170
|
+
:return: The default artifact type.
|
|
171
|
+
"""
|
|
172
|
+
pass
|
|
173
|
+
|
|
174
|
+
@classmethod
|
|
175
|
+
@abstractmethod
|
|
176
|
+
def get_supported_artifact_types(cls) -> List[str]:
|
|
177
|
+
"""
|
|
178
|
+
Get all the supported artifact types on this packager.
|
|
179
|
+
|
|
180
|
+
:return: A list of all the supported artifact types.
|
|
181
|
+
"""
|
|
182
|
+
pass
|
|
183
|
+
|
|
184
|
+
@classmethod
|
|
185
|
+
@abstractmethod
|
|
186
|
+
def pack(
|
|
187
|
+
cls, obj: Any, artifact_type: str = None, configurations: dict = None
|
|
188
|
+
) -> Union[Tuple[Artifact, dict], dict]:
|
|
189
|
+
"""
|
|
190
|
+
Pack an object as the given artifact type using the provided configurations.
|
|
191
|
+
|
|
192
|
+
:param obj: The object to pack.
|
|
193
|
+
:param artifact_type: Artifact type to log to MLRun.
|
|
194
|
+
:param configurations: Log hints configurations to pass to the packing method.
|
|
195
|
+
|
|
196
|
+
:return: If the packed object is an artifact, a tuple of the packed artifact and unpacking instructions
|
|
197
|
+
dictionary. If the packed object is a result, a dictionary containing the result key and value.
|
|
198
|
+
"""
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
@classmethod
|
|
202
|
+
@abstractmethod
|
|
203
|
+
def unpack(
|
|
204
|
+
cls,
|
|
205
|
+
data_item: DataItem,
|
|
206
|
+
artifact_type: str = None,
|
|
207
|
+
instructions: dict = None,
|
|
208
|
+
) -> Any:
|
|
209
|
+
"""
|
|
210
|
+
Unpack the data item's artifact by the provided type using the given instructions.
|
|
211
|
+
|
|
212
|
+
:param data_item: The data input to unpack.
|
|
213
|
+
:param artifact_type: The artifact type to unpack the data item as.
|
|
214
|
+
:param instructions: Additional instructions noted in the package to pass to the unpacking method.
|
|
215
|
+
|
|
216
|
+
:return: The unpacked data item's object.
|
|
217
|
+
"""
|
|
218
|
+
pass
|
|
219
|
+
|
|
220
|
+
@classmethod
|
|
221
|
+
def is_packable(cls, obj: Any, artifact_type: str = None) -> bool:
|
|
222
|
+
"""
|
|
223
|
+
Check if this packager can pack an object of the provided type as the provided artifact type.
|
|
224
|
+
|
|
225
|
+
The default implementation check if the packable object type of this packager is equal to the given object's
|
|
226
|
+
type. If it does match, it will look for the artifact type in the list returned from
|
|
227
|
+
`get_supported_artifact_types`.
|
|
228
|
+
|
|
229
|
+
:param obj: The object to pack.
|
|
230
|
+
:param artifact_type: The artifact type to log the object as.
|
|
231
|
+
|
|
232
|
+
:return: True if packable and False otherwise.
|
|
233
|
+
"""
|
|
234
|
+
# Get the object's type:
|
|
235
|
+
object_type = type(obj)
|
|
236
|
+
|
|
237
|
+
# Validate the object type (ellipses means any type):
|
|
238
|
+
if (
|
|
239
|
+
cls.PACKABLE_OBJECT_TYPE is not ...
|
|
240
|
+
and object_type != cls.PACKABLE_OBJECT_TYPE
|
|
241
|
+
):
|
|
242
|
+
return False
|
|
243
|
+
|
|
244
|
+
# Validate the artifact type (if given):
|
|
245
|
+
if artifact_type and artifact_type not in cls.get_supported_artifact_types():
|
|
246
|
+
return False
|
|
247
|
+
|
|
248
|
+
return True
|
|
249
|
+
|
|
250
|
+
@classmethod
|
|
251
|
+
def is_unpackable(
|
|
252
|
+
cls, data_item: DataItem, type_hint: Type, artifact_type: str = None
|
|
253
|
+
) -> bool:
|
|
254
|
+
"""
|
|
255
|
+
Check if this packager can unpack an input according to the user given type hint and the provided artifact type.
|
|
256
|
+
|
|
257
|
+
The default implementation tries to match the packable object type of this packager to the given type hint, if
|
|
258
|
+
it does match, it will look for the artifact type in the list returned from `get_supported_artifact_types`.
|
|
259
|
+
|
|
260
|
+
:param data_item: The input data item to check if unpackable.
|
|
261
|
+
:param type_hint: The type hint of the input to unpack.
|
|
262
|
+
:param artifact_type: The artifact type to unpack the object as.
|
|
263
|
+
|
|
264
|
+
:return: True if unpackable and False otherwise.
|
|
265
|
+
"""
|
|
266
|
+
# Check type (ellipses means any type):
|
|
267
|
+
if cls.PACKABLE_OBJECT_TYPE is not ...:
|
|
268
|
+
if not TypeHintUtils.is_matching(
|
|
269
|
+
object_type=cls.PACKABLE_OBJECT_TYPE,
|
|
270
|
+
type_hint=type_hint,
|
|
271
|
+
reduce_type_hint=False,
|
|
272
|
+
):
|
|
273
|
+
return False
|
|
274
|
+
|
|
275
|
+
# Check the artifact type:
|
|
276
|
+
if artifact_type and artifact_type not in cls.get_supported_artifact_types():
|
|
277
|
+
return False
|
|
278
|
+
|
|
279
|
+
# Unpackable:
|
|
280
|
+
return True
|
|
281
|
+
|
|
282
|
+
@classmethod
|
|
283
|
+
def add_future_clearing_path(cls, path: Union[str, Path]):
|
|
284
|
+
"""
|
|
285
|
+
Mark a path to be cleared by this packager's manager post logging the packaged artifacts.
|
|
286
|
+
|
|
287
|
+
:param path: The path to clear.
|
|
288
|
+
"""
|
|
289
|
+
cls._CLEARING_PATH_LIST.append(str(path))
|
|
290
|
+
|
|
291
|
+
@classmethod
|
|
292
|
+
def get_future_clearing_path_list(cls) -> List[str]:
|
|
293
|
+
"""
|
|
294
|
+
Get the packager's future clearing path list.
|
|
295
|
+
|
|
296
|
+
:return: The clearing path list.
|
|
297
|
+
"""
|
|
298
|
+
return cls._CLEARING_PATH_LIST
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2023 Iguazio
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -14,3 +14,5 @@
|
|
|
14
14
|
#
|
|
15
15
|
|
|
16
16
|
# flake8: noqa - this is until we take care of the F401 violations with respect to __all__ & sphinx
|
|
17
|
+
from .default_packager import DefaultPackager
|
|
18
|
+
from .numpy_packagers import NumPySupportedFormat
|