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
mlrun/db/sqldb.py
CHANGED
|
@@ -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.
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
import datetime
|
|
16
16
|
from typing import List, Optional, Union
|
|
17
17
|
|
|
18
|
-
import mlrun.
|
|
18
|
+
import mlrun.common.schemas
|
|
19
|
+
import mlrun.model_monitoring.model_endpoint
|
|
19
20
|
from mlrun.api.db.base import DBError
|
|
20
21
|
from mlrun.api.db.sqldb.db import SQLDB as SQLAPIDB
|
|
21
22
|
from mlrun.api.db.sqldb.session import create_session
|
|
@@ -28,8 +29,6 @@ from mlrun.api.db.sqldb.session import create_session
|
|
|
28
29
|
# service, in order to prevent the api from calling itself several times for each submission request (since the runDB
|
|
29
30
|
# will be httpdb to that same api service) we have this class which is kind of a proxy between the RunDB interface to
|
|
30
31
|
# the api service's DB interface
|
|
31
|
-
from ..api import schemas
|
|
32
|
-
from ..api.schemas import ModelEndpoint
|
|
33
32
|
from .base import RunDBError, RunDBInterface
|
|
34
33
|
|
|
35
34
|
|
|
@@ -95,7 +94,7 @@ class SQLDB(RunDBInterface):
|
|
|
95
94
|
updates,
|
|
96
95
|
)
|
|
97
96
|
|
|
98
|
-
def abort_run(self, uid, project="", iter=0):
|
|
97
|
+
def abort_run(self, uid, project="", iter=0, timeout=45):
|
|
99
98
|
raise NotImplementedError()
|
|
100
99
|
|
|
101
100
|
def read_run(self, uid, project=None, iter=None):
|
|
@@ -123,11 +122,14 @@ class SQLDB(RunDBInterface):
|
|
|
123
122
|
start_time_to: datetime.datetime = None,
|
|
124
123
|
last_update_time_from: datetime.datetime = None,
|
|
125
124
|
last_update_time_to: datetime.datetime = None,
|
|
126
|
-
partition_by: Union[schemas.RunPartitionByField, str] = None,
|
|
125
|
+
partition_by: Union[mlrun.common.schemas.RunPartitionByField, str] = None,
|
|
127
126
|
rows_per_partition: int = 1,
|
|
128
|
-
partition_sort_by: Union[schemas.SortField, str] = None,
|
|
129
|
-
partition_order: Union[
|
|
127
|
+
partition_sort_by: Union[mlrun.common.schemas.SortField, str] = None,
|
|
128
|
+
partition_order: Union[
|
|
129
|
+
mlrun.common.schemas.OrderType, str
|
|
130
|
+
] = mlrun.common.schemas.OrderType.desc,
|
|
130
131
|
max_partitions: int = 0,
|
|
132
|
+
with_notifications: bool = False,
|
|
131
133
|
):
|
|
132
134
|
import mlrun.api.crud
|
|
133
135
|
|
|
@@ -151,6 +153,7 @@ class SQLDB(RunDBInterface):
|
|
|
151
153
|
partition_sort_by,
|
|
152
154
|
partition_order,
|
|
153
155
|
max_partitions,
|
|
156
|
+
with_notifications,
|
|
154
157
|
)
|
|
155
158
|
|
|
156
159
|
def del_run(self, uid, project=None, iter=None):
|
|
@@ -214,12 +217,12 @@ class SQLDB(RunDBInterface):
|
|
|
214
217
|
iter: int = None,
|
|
215
218
|
best_iteration: bool = False,
|
|
216
219
|
kind: str = None,
|
|
217
|
-
category: Union[str, schemas.ArtifactCategories] = None,
|
|
220
|
+
category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
|
|
218
221
|
):
|
|
219
222
|
import mlrun.api.crud
|
|
220
223
|
|
|
221
224
|
if category and isinstance(category, str):
|
|
222
|
-
category = schemas.ArtifactCategories(category)
|
|
225
|
+
category = mlrun.common.schemas.ArtifactCategories(category)
|
|
223
226
|
|
|
224
227
|
return self._transform_db_error(
|
|
225
228
|
mlrun.api.crud.Artifacts().list_artifacts,
|
|
@@ -307,7 +310,9 @@ class SQLDB(RunDBInterface):
|
|
|
307
310
|
)
|
|
308
311
|
|
|
309
312
|
def list_artifact_tags(
|
|
310
|
-
self,
|
|
313
|
+
self,
|
|
314
|
+
project=None,
|
|
315
|
+
category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
|
|
311
316
|
):
|
|
312
317
|
return self._transform_db_error(
|
|
313
318
|
self.db.list_artifact_tags, self.session, project
|
|
@@ -317,7 +322,7 @@ class SQLDB(RunDBInterface):
|
|
|
317
322
|
self,
|
|
318
323
|
project: str,
|
|
319
324
|
tag_name: str,
|
|
320
|
-
tag_objects: mlrun.
|
|
325
|
+
tag_objects: mlrun.common.schemas.TagObjects,
|
|
321
326
|
replace: bool = False,
|
|
322
327
|
):
|
|
323
328
|
import mlrun.api.crud
|
|
@@ -343,7 +348,7 @@ class SQLDB(RunDBInterface):
|
|
|
343
348
|
self,
|
|
344
349
|
project: str,
|
|
345
350
|
tag_name: str,
|
|
346
|
-
tag_objects: mlrun.
|
|
351
|
+
tag_objects: mlrun.common.schemas.TagObjects,
|
|
347
352
|
):
|
|
348
353
|
import mlrun.api.crud
|
|
349
354
|
|
|
@@ -392,34 +397,65 @@ class SQLDB(RunDBInterface):
|
|
|
392
397
|
def store_project(
|
|
393
398
|
self,
|
|
394
399
|
name: str,
|
|
395
|
-
project: mlrun.
|
|
396
|
-
) -> mlrun.
|
|
397
|
-
|
|
400
|
+
project: mlrun.common.schemas.Project,
|
|
401
|
+
) -> mlrun.common.schemas.Project:
|
|
402
|
+
import mlrun.api.crud
|
|
403
|
+
|
|
404
|
+
if isinstance(project, dict):
|
|
405
|
+
project = mlrun.common.schemas.Project(**project)
|
|
406
|
+
|
|
407
|
+
return self._transform_db_error(
|
|
408
|
+
mlrun.api.crud.Projects().store_project,
|
|
409
|
+
self.session,
|
|
410
|
+
name=name,
|
|
411
|
+
project=project,
|
|
412
|
+
)
|
|
398
413
|
|
|
399
414
|
def patch_project(
|
|
400
415
|
self,
|
|
401
416
|
name: str,
|
|
402
417
|
project: dict,
|
|
403
|
-
patch_mode: mlrun.
|
|
404
|
-
) -> mlrun.
|
|
405
|
-
|
|
418
|
+
patch_mode: mlrun.common.schemas.PatchMode = mlrun.common.schemas.PatchMode.replace,
|
|
419
|
+
) -> mlrun.common.schemas.Project:
|
|
420
|
+
import mlrun.api.crud
|
|
421
|
+
|
|
422
|
+
return self._transform_db_error(
|
|
423
|
+
mlrun.api.crud.Projects().patch_project,
|
|
424
|
+
self.session,
|
|
425
|
+
name=name,
|
|
426
|
+
project=project,
|
|
427
|
+
patch_mode=patch_mode,
|
|
428
|
+
)
|
|
406
429
|
|
|
407
430
|
def create_project(
|
|
408
431
|
self,
|
|
409
|
-
project: mlrun.
|
|
410
|
-
) -> mlrun.
|
|
411
|
-
|
|
432
|
+
project: mlrun.common.schemas.Project,
|
|
433
|
+
) -> mlrun.common.schemas.Project:
|
|
434
|
+
import mlrun.api.crud
|
|
435
|
+
|
|
436
|
+
return self._transform_db_error(
|
|
437
|
+
mlrun.api.crud.Projects().create_project,
|
|
438
|
+
self.session,
|
|
439
|
+
project=project,
|
|
440
|
+
)
|
|
412
441
|
|
|
413
442
|
def delete_project(
|
|
414
443
|
self,
|
|
415
444
|
name: str,
|
|
416
|
-
deletion_strategy: mlrun.
|
|
445
|
+
deletion_strategy: mlrun.common.schemas.DeletionStrategy = mlrun.common.schemas.DeletionStrategy.default(),
|
|
417
446
|
):
|
|
418
|
-
|
|
447
|
+
import mlrun.api.crud
|
|
448
|
+
|
|
449
|
+
return self._transform_db_error(
|
|
450
|
+
mlrun.api.crud.Projects().delete_project,
|
|
451
|
+
self.session,
|
|
452
|
+
name=name,
|
|
453
|
+
deletion_strategy=deletion_strategy,
|
|
454
|
+
)
|
|
419
455
|
|
|
420
456
|
def get_project(
|
|
421
457
|
self, name: str = None, project_id: int = None
|
|
422
|
-
) -> mlrun.
|
|
458
|
+
) -> mlrun.common.schemas.Project:
|
|
423
459
|
import mlrun.api.crud
|
|
424
460
|
|
|
425
461
|
return self._transform_db_error(
|
|
@@ -431,11 +467,20 @@ class SQLDB(RunDBInterface):
|
|
|
431
467
|
def list_projects(
|
|
432
468
|
self,
|
|
433
469
|
owner: str = None,
|
|
434
|
-
format_: mlrun.
|
|
470
|
+
format_: mlrun.common.schemas.ProjectsFormat = mlrun.common.schemas.ProjectsFormat.full,
|
|
435
471
|
labels: List[str] = None,
|
|
436
|
-
state: mlrun.
|
|
437
|
-
) -> mlrun.
|
|
438
|
-
|
|
472
|
+
state: mlrun.common.schemas.ProjectState = None,
|
|
473
|
+
) -> mlrun.common.schemas.ProjectsOutput:
|
|
474
|
+
import mlrun.api.crud
|
|
475
|
+
|
|
476
|
+
return self._transform_db_error(
|
|
477
|
+
mlrun.api.crud.Projects().list_projects,
|
|
478
|
+
self.session,
|
|
479
|
+
owner=owner,
|
|
480
|
+
format_=format_,
|
|
481
|
+
labels=labels,
|
|
482
|
+
state=state,
|
|
483
|
+
)
|
|
439
484
|
|
|
440
485
|
@staticmethod
|
|
441
486
|
def _transform_db_error(func, *args, **kwargs):
|
|
@@ -517,10 +562,10 @@ class SQLDB(RunDBInterface):
|
|
|
517
562
|
entities: List[str] = None,
|
|
518
563
|
features: List[str] = None,
|
|
519
564
|
labels: List[str] = None,
|
|
520
|
-
partition_by: mlrun.
|
|
565
|
+
partition_by: mlrun.common.schemas.FeatureStorePartitionByField = None,
|
|
521
566
|
rows_per_partition: int = 1,
|
|
522
|
-
partition_sort_by: mlrun.
|
|
523
|
-
partition_order: mlrun.
|
|
567
|
+
partition_sort_by: mlrun.common.schemas.SortField = None,
|
|
568
|
+
partition_order: mlrun.common.schemas.OrderType = mlrun.common.schemas.OrderType.desc,
|
|
524
569
|
):
|
|
525
570
|
import mlrun.api.crud
|
|
526
571
|
|
|
@@ -542,7 +587,7 @@ class SQLDB(RunDBInterface):
|
|
|
542
587
|
|
|
543
588
|
def store_feature_set(
|
|
544
589
|
self,
|
|
545
|
-
feature_set: Union[dict, mlrun.
|
|
590
|
+
feature_set: Union[dict, mlrun.common.schemas.FeatureSet],
|
|
546
591
|
name=None,
|
|
547
592
|
project="",
|
|
548
593
|
tag=None,
|
|
@@ -552,7 +597,7 @@ class SQLDB(RunDBInterface):
|
|
|
552
597
|
import mlrun.api.crud
|
|
553
598
|
|
|
554
599
|
if isinstance(feature_set, dict):
|
|
555
|
-
feature_set = mlrun.
|
|
600
|
+
feature_set = mlrun.common.schemas.FeatureSet(**feature_set)
|
|
556
601
|
|
|
557
602
|
name = name or feature_set.metadata.name
|
|
558
603
|
project = project or feature_set.metadata.project
|
|
@@ -627,10 +672,10 @@ class SQLDB(RunDBInterface):
|
|
|
627
672
|
tag: str = None,
|
|
628
673
|
state: str = None,
|
|
629
674
|
labels: List[str] = None,
|
|
630
|
-
partition_by: mlrun.
|
|
675
|
+
partition_by: mlrun.common.schemas.FeatureStorePartitionByField = None,
|
|
631
676
|
rows_per_partition: int = 1,
|
|
632
|
-
partition_sort_by: mlrun.
|
|
633
|
-
partition_order: mlrun.
|
|
677
|
+
partition_sort_by: mlrun.common.schemas.SortField = None,
|
|
678
|
+
partition_order: mlrun.common.schemas.OrderType = mlrun.common.schemas.OrderType.desc,
|
|
634
679
|
):
|
|
635
680
|
import mlrun.api.crud
|
|
636
681
|
|
|
@@ -712,18 +757,18 @@ class SQLDB(RunDBInterface):
|
|
|
712
757
|
page_token: str = "",
|
|
713
758
|
filter_: str = "",
|
|
714
759
|
format_: Union[
|
|
715
|
-
str, mlrun.
|
|
716
|
-
] = mlrun.
|
|
760
|
+
str, mlrun.common.schemas.PipelinesFormat
|
|
761
|
+
] = mlrun.common.schemas.PipelinesFormat.metadata_only,
|
|
717
762
|
page_size: int = None,
|
|
718
|
-
) -> mlrun.
|
|
763
|
+
) -> mlrun.common.schemas.PipelinesOutput:
|
|
719
764
|
raise NotImplementedError()
|
|
720
765
|
|
|
721
766
|
def create_project_secrets(
|
|
722
767
|
self,
|
|
723
768
|
project: str,
|
|
724
769
|
provider: Union[
|
|
725
|
-
str, mlrun.
|
|
726
|
-
] = mlrun.
|
|
770
|
+
str, mlrun.common.schemas.SecretProviderName
|
|
771
|
+
] = mlrun.common.schemas.SecretProviderName.kubernetes,
|
|
727
772
|
secrets: dict = None,
|
|
728
773
|
):
|
|
729
774
|
raise NotImplementedError()
|
|
@@ -733,28 +778,28 @@ class SQLDB(RunDBInterface):
|
|
|
733
778
|
project: str,
|
|
734
779
|
token: str,
|
|
735
780
|
provider: Union[
|
|
736
|
-
str, mlrun.
|
|
737
|
-
] = mlrun.
|
|
781
|
+
str, mlrun.common.schemas.SecretProviderName
|
|
782
|
+
] = mlrun.common.schemas.SecretProviderName.kubernetes,
|
|
738
783
|
secrets: List[str] = None,
|
|
739
|
-
) -> mlrun.
|
|
784
|
+
) -> mlrun.common.schemas.SecretsData:
|
|
740
785
|
raise NotImplementedError()
|
|
741
786
|
|
|
742
787
|
def list_project_secret_keys(
|
|
743
788
|
self,
|
|
744
789
|
project: str,
|
|
745
790
|
provider: Union[
|
|
746
|
-
str, mlrun.
|
|
747
|
-
] = mlrun.
|
|
791
|
+
str, mlrun.common.schemas.SecretProviderName
|
|
792
|
+
] = mlrun.common.schemas.SecretProviderName.kubernetes,
|
|
748
793
|
token: str = None,
|
|
749
|
-
) -> mlrun.
|
|
794
|
+
) -> mlrun.common.schemas.SecretKeysData:
|
|
750
795
|
raise NotImplementedError()
|
|
751
796
|
|
|
752
797
|
def delete_project_secrets(
|
|
753
798
|
self,
|
|
754
799
|
project: str,
|
|
755
800
|
provider: Union[
|
|
756
|
-
str, mlrun.
|
|
757
|
-
] = mlrun.
|
|
801
|
+
str, mlrun.common.schemas.SecretProviderName
|
|
802
|
+
] = mlrun.common.schemas.SecretProviderName.kubernetes,
|
|
758
803
|
secrets: List[str] = None,
|
|
759
804
|
):
|
|
760
805
|
raise NotImplementedError()
|
|
@@ -763,8 +808,8 @@ class SQLDB(RunDBInterface):
|
|
|
763
808
|
self,
|
|
764
809
|
user: str,
|
|
765
810
|
provider: Union[
|
|
766
|
-
str, mlrun.
|
|
767
|
-
] = mlrun.
|
|
811
|
+
str, mlrun.common.schemas.SecretProviderName
|
|
812
|
+
] = mlrun.common.schemas.SecretProviderName.vault,
|
|
768
813
|
secrets: dict = None,
|
|
769
814
|
):
|
|
770
815
|
raise NotImplementedError()
|
|
@@ -773,7 +818,9 @@ class SQLDB(RunDBInterface):
|
|
|
773
818
|
self,
|
|
774
819
|
project: str,
|
|
775
820
|
endpoint_id: str,
|
|
776
|
-
model_endpoint:
|
|
821
|
+
model_endpoint: Union[
|
|
822
|
+
mlrun.model_monitoring.model_endpoint.ModelEndpoint, dict
|
|
823
|
+
],
|
|
777
824
|
):
|
|
778
825
|
raise NotImplementedError()
|
|
779
826
|
|
|
@@ -815,40 +862,40 @@ class SQLDB(RunDBInterface):
|
|
|
815
862
|
):
|
|
816
863
|
raise NotImplementedError()
|
|
817
864
|
|
|
818
|
-
def
|
|
819
|
-
self, source: Union[dict, schemas.
|
|
865
|
+
def create_hub_source(
|
|
866
|
+
self, source: Union[dict, mlrun.common.schemas.IndexedHubSource]
|
|
820
867
|
):
|
|
821
868
|
raise NotImplementedError()
|
|
822
869
|
|
|
823
|
-
def
|
|
824
|
-
self,
|
|
870
|
+
def store_hub_source(
|
|
871
|
+
self,
|
|
872
|
+
source_name: str,
|
|
873
|
+
source: Union[dict, mlrun.common.schemas.IndexedHubSource],
|
|
825
874
|
):
|
|
826
875
|
raise NotImplementedError()
|
|
827
876
|
|
|
828
|
-
def
|
|
877
|
+
def list_hub_sources(self):
|
|
829
878
|
raise NotImplementedError()
|
|
830
879
|
|
|
831
|
-
def
|
|
880
|
+
def get_hub_source(self, source_name: str):
|
|
832
881
|
raise NotImplementedError()
|
|
833
882
|
|
|
834
|
-
def
|
|
883
|
+
def delete_hub_source(self, source_name: str):
|
|
835
884
|
raise NotImplementedError()
|
|
836
885
|
|
|
837
|
-
def
|
|
886
|
+
def get_hub_catalog(
|
|
838
887
|
self,
|
|
839
888
|
source_name: str,
|
|
840
|
-
channel: str = None,
|
|
841
889
|
version: str = None,
|
|
842
890
|
tag: str = None,
|
|
843
891
|
force_refresh: bool = False,
|
|
844
892
|
):
|
|
845
893
|
raise NotImplementedError()
|
|
846
894
|
|
|
847
|
-
def
|
|
895
|
+
def get_hub_item(
|
|
848
896
|
self,
|
|
849
897
|
source_name: str,
|
|
850
898
|
item_name: str,
|
|
851
|
-
channel: str = "development",
|
|
852
899
|
version: str = None,
|
|
853
900
|
tag: str = "latest",
|
|
854
901
|
force_refresh: bool = False,
|
|
@@ -857,7 +904,7 @@ class SQLDB(RunDBInterface):
|
|
|
857
904
|
|
|
858
905
|
def verify_authorization(
|
|
859
906
|
self,
|
|
860
|
-
authorization_verification_input: mlrun.
|
|
907
|
+
authorization_verification_input: mlrun.common.schemas.AuthorizationVerificationInput,
|
|
861
908
|
):
|
|
862
909
|
# on server side authorization is done in endpoint anyway, so for server side we can "pass" on check
|
|
863
910
|
# done from ingest()
|
mlrun/errors.py
CHANGED
|
@@ -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.
|
|
@@ -179,6 +179,10 @@ class MLRunInternalServerError(MLRunHTTPStatusError):
|
|
|
179
179
|
error_status_code = HTTPStatus.INTERNAL_SERVER_ERROR.value
|
|
180
180
|
|
|
181
181
|
|
|
182
|
+
class MLRunServiceUnavailableError(MLRunHTTPStatusError):
|
|
183
|
+
error_status_code = HTTPStatus.SERVICE_UNAVAILABLE.value
|
|
184
|
+
|
|
185
|
+
|
|
182
186
|
class MLRunRuntimeError(MLRunHTTPStatusError, RuntimeError):
|
|
183
187
|
error_status_code = HTTPStatus.INTERNAL_SERVER_ERROR.value
|
|
184
188
|
|
|
@@ -213,4 +217,5 @@ STATUS_ERRORS = {
|
|
|
213
217
|
HTTPStatus.CONFLICT.value: MLRunConflictError,
|
|
214
218
|
HTTPStatus.PRECONDITION_FAILED.value: MLRunPreconditionFailedError,
|
|
215
219
|
HTTPStatus.INTERNAL_SERVER_ERROR.value: MLRunInternalServerError,
|
|
220
|
+
HTTPStatus.SERVICE_UNAVAILABLE.value: MLRunServiceUnavailableError,
|
|
216
221
|
}
|
mlrun/execution.py
CHANGED
|
@@ -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.
|
|
@@ -20,6 +20,7 @@ from typing import List, Union
|
|
|
20
20
|
|
|
21
21
|
import numpy as np
|
|
22
22
|
import yaml
|
|
23
|
+
from dateutil import parser
|
|
23
24
|
|
|
24
25
|
import mlrun
|
|
25
26
|
from mlrun.artifacts import ModelArtifact
|
|
@@ -79,6 +80,7 @@ class MLClientCtx(object):
|
|
|
79
80
|
self._log_level = "info"
|
|
80
81
|
self._matrics_db = None
|
|
81
82
|
self._autocommit = autocommit
|
|
83
|
+
self._notifications = []
|
|
82
84
|
|
|
83
85
|
self._labels = {}
|
|
84
86
|
self._annotations = {}
|
|
@@ -298,11 +300,12 @@ class MLClientCtx(object):
|
|
|
298
300
|
self.artifact_path = spec.get(run_keys.output_path, self.artifact_path)
|
|
299
301
|
self._in_path = spec.get(run_keys.input_path, self._in_path)
|
|
300
302
|
inputs = spec.get(run_keys.inputs)
|
|
303
|
+
self._notifications = spec.get("notifications", self._notifications)
|
|
301
304
|
|
|
302
305
|
self._init_dbs(rundb)
|
|
303
306
|
|
|
304
|
-
if spec
|
|
305
|
-
# init data related objects (require DB & Secrets to be set first)
|
|
307
|
+
if spec:
|
|
308
|
+
# init data related objects (require DB & Secrets to be set first)
|
|
306
309
|
self._data_stores.from_dict(spec)
|
|
307
310
|
if inputs and isinstance(inputs, dict):
|
|
308
311
|
for k, v in inputs.items():
|
|
@@ -314,6 +317,7 @@ class MLClientCtx(object):
|
|
|
314
317
|
|
|
315
318
|
start = get_in(attrs, "status.start_time")
|
|
316
319
|
if start:
|
|
320
|
+
start = parser.parse(start) if isinstance(start, str) else start
|
|
317
321
|
self._start_time = start
|
|
318
322
|
self._state = "running"
|
|
319
323
|
if store_run:
|
|
@@ -376,7 +380,7 @@ class MLClientCtx(object):
|
|
|
376
380
|
|
|
377
381
|
@property
|
|
378
382
|
def inputs(self):
|
|
379
|
-
"""dictionary of input data
|
|
383
|
+
"""dictionary of input data item urls (read-only)"""
|
|
380
384
|
return self._inputs
|
|
381
385
|
|
|
382
386
|
@property
|
|
@@ -459,16 +463,26 @@ class MLClientCtx(object):
|
|
|
459
463
|
def _load_project_object(self):
|
|
460
464
|
if not self._project_object:
|
|
461
465
|
if not self._project:
|
|
462
|
-
self.logger.warning(
|
|
466
|
+
self.logger.warning(
|
|
467
|
+
"Project cannot be loaded without a project name set in the context"
|
|
468
|
+
)
|
|
463
469
|
return None
|
|
464
470
|
if not self._rundb:
|
|
465
471
|
self.logger.warning(
|
|
466
|
-
"
|
|
472
|
+
"Cannot retrieve project data - MLRun DB is not accessible"
|
|
467
473
|
)
|
|
468
474
|
return None
|
|
469
475
|
self._project_object = self._rundb.get_project(self._project)
|
|
470
476
|
return self._project_object
|
|
471
477
|
|
|
478
|
+
def get_project_object(self):
|
|
479
|
+
"""
|
|
480
|
+
Get the MLRun project object by the project name set in the context.
|
|
481
|
+
|
|
482
|
+
:return: The project object or None if it couldn't be retrieved.
|
|
483
|
+
"""
|
|
484
|
+
return self._load_project_object()
|
|
485
|
+
|
|
472
486
|
def get_project_param(self, key: str, default=None):
|
|
473
487
|
"""get a parameter from the run's project's parameters"""
|
|
474
488
|
if not self._load_project_object():
|
|
@@ -493,27 +507,34 @@ class MLClientCtx(object):
|
|
|
493
507
|
url = key
|
|
494
508
|
if self.in_path and is_relative_path(url):
|
|
495
509
|
url = os.path.join(self._in_path, url)
|
|
496
|
-
|
|
497
|
-
url,
|
|
498
|
-
key,
|
|
499
|
-
project=self._project,
|
|
500
|
-
allow_empty_resources=self._allow_empty_resources,
|
|
501
|
-
)
|
|
502
|
-
self._inputs[key] = obj
|
|
503
|
-
return obj
|
|
510
|
+
self._inputs[key] = url
|
|
504
511
|
|
|
505
512
|
def get_input(self, key: str, url: str = ""):
|
|
506
|
-
"""
|
|
507
|
-
|
|
513
|
+
"""
|
|
514
|
+
Get an input :py:class:`~mlrun.DataItem` object,
|
|
515
|
+
data objects have methods such as .get(), .download(), .url, .. to access the actual data.
|
|
516
|
+
Requires access to the data store secrets if configured.
|
|
508
517
|
|
|
509
|
-
|
|
518
|
+
Example::
|
|
510
519
|
|
|
511
520
|
data = context.get_input("my_data").get()
|
|
521
|
+
|
|
522
|
+
:param key: The key name for the input url entry.
|
|
523
|
+
:param url: The url of the input data (file, stream, ..) - optional, saved in the inputs dictionary
|
|
524
|
+
if the key is not already present.
|
|
525
|
+
|
|
526
|
+
:return: :py:class:`~mlrun.datastore.base.DataItem` object
|
|
512
527
|
"""
|
|
513
528
|
if key not in self._inputs:
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
529
|
+
self._set_input(key, url)
|
|
530
|
+
|
|
531
|
+
url = self._inputs[key]
|
|
532
|
+
return self._data_stores.object(
|
|
533
|
+
url,
|
|
534
|
+
key,
|
|
535
|
+
project=self._project,
|
|
536
|
+
allow_empty_resources=self._allow_empty_resources,
|
|
537
|
+
)
|
|
517
538
|
|
|
518
539
|
def log_result(self, key: str, value, commit=False):
|
|
519
540
|
"""log a scalar result value
|
|
@@ -941,7 +962,8 @@ class MLClientCtx(object):
|
|
|
941
962
|
"handler": self._handler,
|
|
942
963
|
"outputs": self._outputs,
|
|
943
964
|
run_keys.output_path: self.artifact_path,
|
|
944
|
-
run_keys.inputs:
|
|
965
|
+
run_keys.inputs: self._inputs,
|
|
966
|
+
"notifications": self._notifications,
|
|
945
967
|
},
|
|
946
968
|
"status": {
|
|
947
969
|
"results": self._results,
|
|
@@ -977,7 +999,7 @@ class MLClientCtx(object):
|
|
|
977
999
|
"metadata.annotations": self._annotations,
|
|
978
1000
|
"spec.parameters": self._parameters,
|
|
979
1001
|
"spec.outputs": self._outputs,
|
|
980
|
-
"spec.inputs":
|
|
1002
|
+
"spec.inputs": self._inputs,
|
|
981
1003
|
"status.results": self._results,
|
|
982
1004
|
"status.start_time": to_date_str(self._start_time),
|
|
983
1005
|
"status.last_update": to_date_str(self._last_update),
|
mlrun/feature_store/__init__.py
CHANGED