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
|
@@ -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.
|
|
@@ -24,28 +24,28 @@ from sqlalchemy.orm import Session
|
|
|
24
24
|
|
|
25
25
|
import mlrun.api.api.deps
|
|
26
26
|
import mlrun.api.crud
|
|
27
|
-
import mlrun.api.schemas
|
|
28
27
|
import mlrun.api.utils.auth.verifier
|
|
28
|
+
import mlrun.common.schemas
|
|
29
29
|
from mlrun.errors import MLRunConflictError
|
|
30
30
|
|
|
31
|
-
router = APIRouter()
|
|
31
|
+
router = APIRouter(prefix="/projects/{project}/model-endpoints")
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
@router.put(
|
|
35
|
-
"/
|
|
36
|
-
|
|
35
|
+
"/{endpoint_id}",
|
|
36
|
+
response_model=mlrun.common.schemas.ModelEndpoint,
|
|
37
37
|
)
|
|
38
38
|
async def create_or_patch(
|
|
39
39
|
project: str,
|
|
40
40
|
endpoint_id: str,
|
|
41
|
-
model_endpoint: mlrun.
|
|
42
|
-
auth_info: mlrun.
|
|
41
|
+
model_endpoint: mlrun.common.schemas.ModelEndpoint,
|
|
42
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
43
43
|
mlrun.api.api.deps.authenticate_request
|
|
44
44
|
),
|
|
45
45
|
db_session: Session = Depends(mlrun.api.api.deps.get_db_session),
|
|
46
|
-
):
|
|
46
|
+
) -> mlrun.common.schemas.ModelEndpoint:
|
|
47
47
|
"""
|
|
48
|
-
Either create or
|
|
48
|
+
Either create or update the record of a given `ModelEndpoint` object.
|
|
49
49
|
Leaving here for backwards compatibility.
|
|
50
50
|
"""
|
|
51
51
|
|
|
@@ -57,10 +57,10 @@ async def create_or_patch(
|
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
60
|
-
mlrun.
|
|
60
|
+
mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
|
|
61
61
|
project,
|
|
62
62
|
endpoint_id,
|
|
63
|
-
mlrun.
|
|
63
|
+
mlrun.common.schemas.AuthorizationAction.store,
|
|
64
64
|
auth_info,
|
|
65
65
|
)
|
|
66
66
|
# get_access_key will validate the needed auth (which is used later) exists in the request
|
|
@@ -76,7 +76,7 @@ async def create_or_patch(
|
|
|
76
76
|
)
|
|
77
77
|
# Since the endpoint records are created automatically, at point of serving function deployment, we need to use
|
|
78
78
|
# V3IO_ACCESS_KEY here
|
|
79
|
-
await run_in_threadpool(
|
|
79
|
+
return await run_in_threadpool(
|
|
80
80
|
mlrun.api.crud.ModelEndpoints().create_or_patch,
|
|
81
81
|
db_session=db_session,
|
|
82
82
|
access_key=os.environ.get("V3IO_ACCESS_KEY"),
|
|
@@ -86,20 +86,20 @@ async def create_or_patch(
|
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
@router.post(
|
|
89
|
-
"/
|
|
90
|
-
response_model=mlrun.
|
|
89
|
+
"/{endpoint_id}",
|
|
90
|
+
response_model=mlrun.common.schemas.ModelEndpoint,
|
|
91
91
|
)
|
|
92
92
|
async def create_model_endpoint(
|
|
93
93
|
project: str,
|
|
94
94
|
endpoint_id: str,
|
|
95
|
-
model_endpoint: mlrun.
|
|
96
|
-
auth_info: mlrun.
|
|
95
|
+
model_endpoint: mlrun.common.schemas.ModelEndpoint,
|
|
96
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
97
97
|
mlrun.api.api.deps.authenticate_request
|
|
98
98
|
),
|
|
99
99
|
db_session: Session = Depends(mlrun.api.api.deps.get_db_session),
|
|
100
|
-
) -> mlrun.
|
|
100
|
+
) -> mlrun.common.schemas.ModelEndpoint:
|
|
101
101
|
"""
|
|
102
|
-
Create a DB record of a given ModelEndpoint object.
|
|
102
|
+
Create a DB record of a given `ModelEndpoint` object.
|
|
103
103
|
|
|
104
104
|
:param project: The name of the project.
|
|
105
105
|
:param endpoint_id: The unique id of the model endpoint.
|
|
@@ -111,11 +111,12 @@ async def create_model_endpoint(
|
|
|
111
111
|
|
|
112
112
|
:return: A Model endpoint object.
|
|
113
113
|
"""
|
|
114
|
+
|
|
114
115
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
115
|
-
resource_type=mlrun.
|
|
116
|
+
resource_type=mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
|
|
116
117
|
project_name=project,
|
|
117
118
|
resource_name=endpoint_id,
|
|
118
|
-
action=mlrun.
|
|
119
|
+
action=mlrun.common.schemas.AuthorizationAction.store,
|
|
119
120
|
auth_info=auth_info,
|
|
120
121
|
)
|
|
121
122
|
|
|
@@ -137,26 +138,25 @@ async def create_model_endpoint(
|
|
|
137
138
|
|
|
138
139
|
|
|
139
140
|
@router.patch(
|
|
140
|
-
"/
|
|
141
|
-
response_model=mlrun.
|
|
141
|
+
"/{endpoint_id}",
|
|
142
|
+
response_model=mlrun.common.schemas.ModelEndpoint,
|
|
142
143
|
)
|
|
143
144
|
async def patch_model_endpoint(
|
|
144
145
|
project: str,
|
|
145
146
|
endpoint_id: str,
|
|
146
147
|
attributes: str = None,
|
|
147
|
-
auth_info: mlrun.
|
|
148
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
148
149
|
mlrun.api.api.deps.authenticate_request
|
|
149
150
|
),
|
|
150
|
-
) -> mlrun.
|
|
151
|
+
) -> mlrun.common.schemas.ModelEndpoint:
|
|
151
152
|
"""
|
|
152
|
-
Update a DB record of a given ModelEndpoint object.
|
|
153
|
+
Update a DB record of a given `ModelEndpoint` object.
|
|
153
154
|
|
|
154
155
|
:param project: The name of the project.
|
|
155
156
|
:param endpoint_id: The unique id of the model endpoint.
|
|
156
157
|
:param attributes: Attributes that will be updated. The input is provided in a json structure that will be
|
|
157
158
|
converted into a dictionary before applying the patch process. Note that the keys of
|
|
158
|
-
dictionary should exist in the DB target.
|
|
159
|
-
attributes can be found under :py:class:`~mlrun.api.schemas.ModelEndpoint`.
|
|
159
|
+
the dictionary should exist in the DB target.
|
|
160
160
|
|
|
161
161
|
example::
|
|
162
162
|
|
|
@@ -168,10 +168,10 @@ async def patch_model_endpoint(
|
|
|
168
168
|
"""
|
|
169
169
|
|
|
170
170
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
171
|
-
resource_type=mlrun.
|
|
171
|
+
resource_type=mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
|
|
172
172
|
project_name=project,
|
|
173
173
|
resource_name=endpoint_id,
|
|
174
|
-
action=mlrun.
|
|
174
|
+
action=mlrun.common.schemas.AuthorizationAction.update,
|
|
175
175
|
auth_info=auth_info,
|
|
176
176
|
)
|
|
177
177
|
|
|
@@ -188,13 +188,13 @@ async def patch_model_endpoint(
|
|
|
188
188
|
|
|
189
189
|
|
|
190
190
|
@router.delete(
|
|
191
|
-
"/
|
|
191
|
+
"/{endpoint_id}",
|
|
192
192
|
status_code=HTTPStatus.NO_CONTENT.value,
|
|
193
193
|
)
|
|
194
194
|
async def delete_model_endpoint(
|
|
195
195
|
project: str,
|
|
196
196
|
endpoint_id: str,
|
|
197
|
-
auth_info: mlrun.
|
|
197
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
198
198
|
mlrun.api.api.deps.authenticate_request
|
|
199
199
|
),
|
|
200
200
|
):
|
|
@@ -208,10 +208,10 @@ async def delete_model_endpoint(
|
|
|
208
208
|
"""
|
|
209
209
|
|
|
210
210
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
211
|
-
resource_type=mlrun.
|
|
211
|
+
resource_type=mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
|
|
212
212
|
project_name=project,
|
|
213
213
|
resource_name=endpoint_id,
|
|
214
|
-
action=mlrun.
|
|
214
|
+
action=mlrun.common.schemas.AuthorizationAction.delete,
|
|
215
215
|
auth_info=auth_info,
|
|
216
216
|
)
|
|
217
217
|
|
|
@@ -223,8 +223,8 @@ async def delete_model_endpoint(
|
|
|
223
223
|
|
|
224
224
|
|
|
225
225
|
@router.get(
|
|
226
|
-
"
|
|
227
|
-
response_model=mlrun.
|
|
226
|
+
"",
|
|
227
|
+
response_model=mlrun.common.schemas.ModelEndpointList,
|
|
228
228
|
)
|
|
229
229
|
async def list_model_endpoints(
|
|
230
230
|
project: str,
|
|
@@ -236,16 +236,16 @@ async def list_model_endpoints(
|
|
|
236
236
|
metrics: List[str] = Query([], alias="metric"),
|
|
237
237
|
top_level: bool = Query(False, alias="top-level"),
|
|
238
238
|
uids: List[str] = Query(None, alias="uid"),
|
|
239
|
-
auth_info: mlrun.
|
|
239
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
240
240
|
mlrun.api.api.deps.authenticate_request
|
|
241
241
|
),
|
|
242
|
-
) -> mlrun.
|
|
242
|
+
) -> mlrun.common.schemas.ModelEndpointList:
|
|
243
243
|
"""
|
|
244
244
|
Returns a list of endpoints of type 'ModelEndpoint', supports filtering by model, function, tag,
|
|
245
245
|
labels or top level. By default, when no filters are applied, all available endpoints for the given project will be
|
|
246
246
|
listed.
|
|
247
247
|
|
|
248
|
-
If uids are passed: will return ModelEndpointList of endpoints with uid in uids
|
|
248
|
+
If uids are passed: will return `ModelEndpointList` of endpoints with uid in uids
|
|
249
249
|
Labels can be used to filter on the existence of a label:
|
|
250
250
|
api/projects/{project}/model-endpoints/?label=mylabel
|
|
251
251
|
|
|
@@ -264,11 +264,11 @@ async def list_model_endpoints(
|
|
|
264
264
|
:param model: The name of the model to filter by.
|
|
265
265
|
:param function: The name of the function to filter by.
|
|
266
266
|
:param labels: A list of labels to filter by. Label filters work by either filtering a specific value of a label
|
|
267
|
-
(i.e. list("key
|
|
268
|
-
:param metrics: A list of metrics to return for each endpoint. There are pre-defined metrics
|
|
269
|
-
such as predictions_per_second and latency_avg_5m but also custom metrics
|
|
270
|
-
Please note that these metrics are stored in the time series DB and the
|
|
271
|
-
under model_endpoint.spec.metrics of each endpoint.
|
|
267
|
+
(i.e. list("key=value")) or by looking for the existence of a given key (i.e. "key").
|
|
268
|
+
:param metrics: A list of real-time metrics to return for each endpoint. There are pre-defined real-time metrics
|
|
269
|
+
for model endpoints such as predictions_per_second and latency_avg_5m but also custom metrics
|
|
270
|
+
defined by the user. Please note that these metrics are stored in the time series DB and the
|
|
271
|
+
results will be appeared under model_endpoint.spec.metrics of each endpoint.
|
|
272
272
|
:param start: The start time of the metrics. Can be represented by a string containing an RFC 3339
|
|
273
273
|
time, a Unix timestamp in milliseconds, a relative time (`'now'` or `'now-[0-9]+[mhd]'`, where
|
|
274
274
|
`m` = minutes, `h` = hours, and `'d'` = days), or 0 for the earliest time.
|
|
@@ -276,15 +276,15 @@ async def list_model_endpoints(
|
|
|
276
276
|
time, a Unix timestamp in milliseconds, a relative time (`'now'` or `'now-[0-9]+[mhd]'`, where
|
|
277
277
|
`m` = minutes, `h` = hours, and `'d'` = days), or 0 for the earliest time.
|
|
278
278
|
:param top_level: If True will return only routers and endpoint that are NOT children of any router.
|
|
279
|
-
:param uids: Will return ModelEndpointList of endpoints with uid in uids.
|
|
279
|
+
:param uids: Will return `ModelEndpointList` of endpoints with uid in uids.
|
|
280
280
|
|
|
281
|
-
:return: An object of ModelEndpointList which is literally a list of model endpoints along with some metadata. To
|
|
281
|
+
:return: An object of `ModelEndpointList` which is literally a list of model endpoints along with some metadata. To
|
|
282
282
|
get a standard list of model endpoints use ModelEndpointList.endpoints.
|
|
283
283
|
"""
|
|
284
284
|
|
|
285
285
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
|
|
286
286
|
project_name=project,
|
|
287
|
-
action=mlrun.
|
|
287
|
+
action=mlrun.common.schemas.AuthorizationAction.read,
|
|
288
288
|
auth_info=auth_info,
|
|
289
289
|
)
|
|
290
290
|
|
|
@@ -302,7 +302,7 @@ async def list_model_endpoints(
|
|
|
302
302
|
uids=uids,
|
|
303
303
|
)
|
|
304
304
|
allowed_endpoints = await mlrun.api.utils.auth.verifier.AuthVerifier().filter_project_resources_by_permissions(
|
|
305
|
-
mlrun.
|
|
305
|
+
mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
|
|
306
306
|
endpoints.endpoints,
|
|
307
307
|
lambda _endpoint: (
|
|
308
308
|
_endpoint.metadata.project,
|
|
@@ -316,8 +316,8 @@ async def list_model_endpoints(
|
|
|
316
316
|
|
|
317
317
|
|
|
318
318
|
@router.get(
|
|
319
|
-
"/
|
|
320
|
-
response_model=mlrun.
|
|
319
|
+
"/{endpoint_id}",
|
|
320
|
+
response_model=mlrun.common.schemas.ModelEndpoint,
|
|
321
321
|
)
|
|
322
322
|
async def get_model_endpoint(
|
|
323
323
|
project: str,
|
|
@@ -326,36 +326,40 @@ async def get_model_endpoint(
|
|
|
326
326
|
end: str = Query(default="now"),
|
|
327
327
|
metrics: List[str] = Query([], alias="metric"),
|
|
328
328
|
feature_analysis: bool = Query(default=False),
|
|
329
|
-
auth_info: mlrun.
|
|
329
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
330
330
|
mlrun.api.api.deps.authenticate_request
|
|
331
331
|
),
|
|
332
|
-
) -> mlrun.
|
|
332
|
+
) -> mlrun.common.schemas.ModelEndpoint:
|
|
333
333
|
"""Get a single model endpoint object. You can apply different time series metrics that will be added to the
|
|
334
334
|
result.
|
|
335
335
|
|
|
336
|
-
|
|
337
|
-
:param
|
|
338
|
-
:param
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
:
|
|
336
|
+
|
|
337
|
+
:param project: The name of the project
|
|
338
|
+
:param endpoint_id: The unique id of the model endpoint.
|
|
339
|
+
:param start: The start time of the metrics. Can be represented by a string containing an
|
|
340
|
+
RFC 3339 time, a Unix timestamp in milliseconds, a relative time (`'now'` or
|
|
341
|
+
`'now-[0-9]+[mhd]'`, where `m` = minutes, `h` = hours, and `'d'` = days), or
|
|
342
|
+
0 for the earliest time.
|
|
343
|
+
:param end: The end time of the metrics. Can be represented by a string containing an
|
|
344
|
+
RFC 3339 time, a Unix timestamp in milliseconds, a relative time (`'now'` or
|
|
345
|
+
`'now-[0-9]+[mhd]'`, where `m` = minutes, `h` = hours, and `'d'` = days), or
|
|
346
|
+
0 for the earliest time.
|
|
347
|
+
:param metrics: A list of real-time metrics to return for the model endpoint. There are
|
|
348
|
+
pre-defined real-time metrics for model endpoints such as predictions_per_second
|
|
349
|
+
and latency_avg_5m but also custom metrics defined by the user. Please note that
|
|
350
|
+
these metrics are stored in the time series DB and the results will be
|
|
351
|
+
appeared under model_endpoint.spec.metrics.
|
|
352
|
+
:param feature_analysis: When True, the base feature statistics and current feature statistics will
|
|
353
|
+
be added to the output of the resulting object.
|
|
354
|
+
:param auth_info: The auth info of the request
|
|
355
|
+
|
|
356
|
+
:return: A `ModelEndpoint` object.
|
|
353
357
|
"""
|
|
354
358
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
355
|
-
mlrun.
|
|
359
|
+
mlrun.common.schemas.AuthorizationResourceTypes.model_endpoint,
|
|
356
360
|
project,
|
|
357
361
|
endpoint_id,
|
|
358
|
-
mlrun.
|
|
362
|
+
mlrun.common.schemas.AuthorizationAction.read,
|
|
359
363
|
auth_info,
|
|
360
364
|
)
|
|
361
365
|
|
|
@@ -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.
|
|
@@ -21,9 +21,9 @@ from fastapi.concurrency import run_in_threadpool
|
|
|
21
21
|
import mlrun.api.api.deps
|
|
22
22
|
import mlrun.api.crud
|
|
23
23
|
import mlrun.api.initial_data
|
|
24
|
-
import mlrun.api.schemas
|
|
25
24
|
import mlrun.api.utils.background_tasks
|
|
26
25
|
import mlrun.api.utils.clients.chief
|
|
26
|
+
import mlrun.common.schemas
|
|
27
27
|
from mlrun.utils import logger
|
|
28
28
|
|
|
29
29
|
router = fastapi.APIRouter()
|
|
@@ -36,7 +36,7 @@ current_migration_background_task_name = None
|
|
|
36
36
|
"/operations/migrations",
|
|
37
37
|
responses={
|
|
38
38
|
http.HTTPStatus.OK.value: {},
|
|
39
|
-
http.HTTPStatus.ACCEPTED.value: {"model": mlrun.
|
|
39
|
+
http.HTTPStatus.ACCEPTED.value: {"model": mlrun.common.schemas.BackgroundTask},
|
|
40
40
|
},
|
|
41
41
|
)
|
|
42
42
|
async def trigger_migrations(
|
|
@@ -47,7 +47,7 @@ async def trigger_migrations(
|
|
|
47
47
|
# only chief can execute migrations, redirecting request to chief
|
|
48
48
|
if (
|
|
49
49
|
mlrun.mlconf.httpdb.clusterization.role
|
|
50
|
-
!= mlrun.
|
|
50
|
+
!= mlrun.common.schemas.ClusterizationRole.chief
|
|
51
51
|
):
|
|
52
52
|
logger.info("Requesting to trigger migrations, re-routing to chief")
|
|
53
53
|
chief_client = mlrun.api.utils.clients.chief.Client()
|
|
@@ -72,18 +72,22 @@ async def trigger_migrations(
|
|
|
72
72
|
|
|
73
73
|
def _get_or_create_migration_background_task(
|
|
74
74
|
task_name: str, background_tasks
|
|
75
|
-
) -> typing.Optional[mlrun.
|
|
76
|
-
if
|
|
75
|
+
) -> typing.Optional[mlrun.common.schemas.BackgroundTask]:
|
|
76
|
+
if (
|
|
77
|
+
mlrun.mlconf.httpdb.state
|
|
78
|
+
== mlrun.common.schemas.APIStates.migrations_in_progress
|
|
79
|
+
):
|
|
77
80
|
background_task = mlrun.api.utils.background_tasks.InternalBackgroundTasksHandler().get_background_task(
|
|
78
81
|
task_name
|
|
79
82
|
)
|
|
80
83
|
return background_task
|
|
81
|
-
elif mlrun.mlconf.httpdb.state == mlrun.
|
|
84
|
+
elif mlrun.mlconf.httpdb.state == mlrun.common.schemas.APIStates.migrations_failed:
|
|
82
85
|
raise mlrun.errors.MLRunPreconditionFailedError(
|
|
83
86
|
"Migrations were already triggered and failed. Restart the API to retry"
|
|
84
87
|
)
|
|
85
88
|
elif (
|
|
86
|
-
mlrun.mlconf.httpdb.state
|
|
89
|
+
mlrun.mlconf.httpdb.state
|
|
90
|
+
!= mlrun.common.schemas.APIStates.waiting_for_migrations
|
|
87
91
|
):
|
|
88
92
|
return None
|
|
89
93
|
|
|
@@ -102,4 +106,4 @@ async def _perform_migration():
|
|
|
102
106
|
mlrun.api.initial_data.init_data, perform_migrations_if_needed=True
|
|
103
107
|
)
|
|
104
108
|
await mlrun.api.main.move_api_to_online()
|
|
105
|
-
mlrun.mlconf.httpdb.state = mlrun.
|
|
109
|
+
mlrun.mlconf.httpdb.state = mlrun.common.schemas.APIStates.online
|