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/artifacts/__init__.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.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
# Don't remove this, used by sphinx documentation
|
|
18
18
|
__all__ = ["get_model", "update_model"]
|
|
19
19
|
|
|
20
|
-
from .base import Artifact, get_artifact_meta
|
|
20
|
+
from .base import Artifact, ArtifactMetadata, ArtifactSpec, get_artifact_meta
|
|
21
21
|
from .dataset import DatasetArtifact, TableArtifact, update_dataset_meta
|
|
22
22
|
from .manager import ArtifactManager, ArtifactProducer, dict_to_artifact
|
|
23
23
|
from .model import ModelArtifact, get_model, update_model
|
mlrun/artifacts/base.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.
|
|
@@ -83,6 +83,7 @@ class ArtifactSpec(ModelObj):
|
|
|
83
83
|
"size",
|
|
84
84
|
"db_key",
|
|
85
85
|
"extra_data",
|
|
86
|
+
"unpackaging_instructions",
|
|
86
87
|
]
|
|
87
88
|
|
|
88
89
|
_extra_fields = ["annotations", "producer", "sources", "license", "encoding"]
|
|
@@ -98,6 +99,7 @@ class ArtifactSpec(ModelObj):
|
|
|
98
99
|
db_key=None,
|
|
99
100
|
extra_data=None,
|
|
100
101
|
body=None,
|
|
102
|
+
unpackaging_instructions: dict = None,
|
|
101
103
|
):
|
|
102
104
|
self.src_path = src_path
|
|
103
105
|
self.target_path = target_path
|
|
@@ -107,6 +109,7 @@ class ArtifactSpec(ModelObj):
|
|
|
107
109
|
self.size = size
|
|
108
110
|
self.db_key = db_key
|
|
109
111
|
self.extra_data = extra_data or {}
|
|
112
|
+
self.unpackaging_instructions = unpackaging_instructions
|
|
110
113
|
|
|
111
114
|
self._body = body
|
|
112
115
|
self.encoding = None
|
|
@@ -1024,7 +1027,10 @@ def generate_target_path(item: Artifact, artifact_path, producer):
|
|
|
1024
1027
|
|
|
1025
1028
|
suffix = "/"
|
|
1026
1029
|
if not item.is_dir:
|
|
1027
|
-
|
|
1030
|
+
|
|
1031
|
+
# suffixes yields a list of suffixes, e.g. ['.tar', '.gz']
|
|
1032
|
+
# join them together to get the full suffix, e.g. '.tar.gz'
|
|
1033
|
+
suffix = "".join(pathlib.Path(item.src_path or "").suffixes)
|
|
1028
1034
|
if not suffix and item.format:
|
|
1029
1035
|
suffix = f".{item.format}"
|
|
1030
1036
|
|
mlrun/artifacts/dataset.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.
|
|
@@ -22,10 +22,11 @@ from deprecated import deprecated
|
|
|
22
22
|
from pandas.io.json import build_table_schema
|
|
23
23
|
|
|
24
24
|
import mlrun
|
|
25
|
+
import mlrun.common.schemas
|
|
25
26
|
import mlrun.utils.helpers
|
|
26
27
|
|
|
27
28
|
from ..datastore import is_store_uri, store_manager
|
|
28
|
-
from .base import Artifact, ArtifactSpec, LegacyArtifact
|
|
29
|
+
from .base import Artifact, ArtifactSpec, LegacyArtifact, StorePrefix
|
|
29
30
|
|
|
30
31
|
default_preview_rows_length = 20
|
|
31
32
|
max_preview_columns = 100
|
|
@@ -122,9 +123,10 @@ class DatasetArtifactSpec(ArtifactSpec):
|
|
|
122
123
|
|
|
123
124
|
|
|
124
125
|
class DatasetArtifact(Artifact):
|
|
125
|
-
kind =
|
|
126
|
+
kind = mlrun.common.schemas.ArtifactCategories.dataset
|
|
126
127
|
# List of all the supported saving formats of a DataFrame:
|
|
127
128
|
SUPPORTED_FORMATS = ["csv", "parquet", "pq", "tsdb", "kv"]
|
|
129
|
+
_store_prefix = StorePrefix.Dataset
|
|
128
130
|
|
|
129
131
|
def __init__(
|
|
130
132
|
self,
|
mlrun/artifacts/manager.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.
|
|
@@ -191,6 +191,12 @@ class ArtifactManager:
|
|
|
191
191
|
if db_key is None:
|
|
192
192
|
# set the default artifact db key
|
|
193
193
|
if producer.kind == "run":
|
|
194
|
+
# When the producer's type is "run,"
|
|
195
|
+
# we generate a different db_key than the one we obtained in the request.
|
|
196
|
+
# As a result, a new artifact for the requested key will be created,
|
|
197
|
+
# which will contain the new db_key and will represent the current run.
|
|
198
|
+
# We implement this so that the user can query an artifact,
|
|
199
|
+
# and receive back all the runs that are associated with his search result.
|
|
194
200
|
db_key = producer.name + "_" + key
|
|
195
201
|
else:
|
|
196
202
|
db_key = key
|
mlrun/artifacts/model.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.
|
|
@@ -329,7 +329,9 @@ class ModelArtifact(Artifact):
|
|
|
329
329
|
artifact=self, extra_data=self.spec.extra_data, artifact_path=artifact_path
|
|
330
330
|
)
|
|
331
331
|
|
|
332
|
-
|
|
332
|
+
# the model spec yaml should not include the tag, as the same model can be used with different tags,
|
|
333
|
+
# and the tag is not part of the model spec but the metadata of the model artifact
|
|
334
|
+
spec_body = _remove_tag_from_spec_yaml(self)
|
|
333
335
|
spec_target_path = None
|
|
334
336
|
|
|
335
337
|
if mlrun.mlconf.artifacts.generate_target_path_from_artifact_hash:
|
|
@@ -355,7 +357,6 @@ class ModelArtifact(Artifact):
|
|
|
355
357
|
self.spec.target_path, model_spec_filename
|
|
356
358
|
)
|
|
357
359
|
store_manager.object(url=spec_target_path).put(spec_body)
|
|
358
|
-
self.spec.extra_data[model_spec_filename] = spec_target_path
|
|
359
360
|
|
|
360
361
|
def _get_file_body(self):
|
|
361
362
|
body = self.spec.get_body()
|
|
@@ -612,6 +613,12 @@ def _get_extra(target, extra_data, is_dir=False):
|
|
|
612
613
|
return extra_dataitems
|
|
613
614
|
|
|
614
615
|
|
|
616
|
+
def _remove_tag_from_spec_yaml(model_spec):
|
|
617
|
+
spec_dict = model_spec.to_dict()
|
|
618
|
+
spec_dict["metadata"].pop("tag", None)
|
|
619
|
+
return yaml.dump(spec_dict)
|
|
620
|
+
|
|
621
|
+
|
|
615
622
|
def update_model(
|
|
616
623
|
model_artifact,
|
|
617
624
|
parameters: dict = None,
|
|
@@ -690,7 +697,11 @@ def update_model(
|
|
|
690
697
|
|
|
691
698
|
if write_spec_copy:
|
|
692
699
|
spec_path = path.join(model_spec.target_path, model_spec_filename)
|
|
693
|
-
|
|
700
|
+
|
|
701
|
+
# the model spec yaml should not include the tag, as the same model can be used with different tags,
|
|
702
|
+
# and the tag is not part of the model spec but the metadata of the model artifact
|
|
703
|
+
model_spec_yaml = _remove_tag_from_spec_yaml(model_spec)
|
|
704
|
+
store_manager.object(url=spec_path).put(model_spec_yaml)
|
|
694
705
|
|
|
695
706
|
model_spec.db_key = model_spec.db_key or model_spec.key
|
|
696
707
|
if store_object:
|
mlrun/artifacts/plots.py
CHANGED
mlrun/common/__init__.py
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
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
|
+
IMAGE_NAME_ENRICH_REGISTRY_PREFIX = "." # prefix for image name to enrich with registry
|
|
@@ -0,0 +1,209 @@
|
|
|
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
|
+
|
|
16
|
+
import enum
|
|
17
|
+
import hashlib
|
|
18
|
+
from dataclasses import dataclass
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
import mlrun.utils
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class EventFieldType:
|
|
25
|
+
FUNCTION_URI = "function_uri"
|
|
26
|
+
FUNCTION = "function"
|
|
27
|
+
MODEL_URI = "model_uri"
|
|
28
|
+
MODEL = "model"
|
|
29
|
+
VERSION = "version"
|
|
30
|
+
VERSIONED_MODEL = "versioned_model"
|
|
31
|
+
MODEL_CLASS = "model_class"
|
|
32
|
+
TIMESTAMP = "timestamp"
|
|
33
|
+
# `endpoint_id` is deprecated as a field in the model endpoint schema since 1.3.1, replaced by `uid`.
|
|
34
|
+
ENDPOINT_ID = "endpoint_id"
|
|
35
|
+
UID = "uid"
|
|
36
|
+
ENDPOINT_TYPE = "endpoint_type"
|
|
37
|
+
REQUEST_ID = "request_id"
|
|
38
|
+
RECORD_TYPE = "record_type"
|
|
39
|
+
FEATURES = "features"
|
|
40
|
+
FEATURE_NAMES = "feature_names"
|
|
41
|
+
NAMED_FEATURES = "named_features"
|
|
42
|
+
LABELS = "labels"
|
|
43
|
+
LATENCY = "latency"
|
|
44
|
+
LABEL_NAMES = "label_names"
|
|
45
|
+
PREDICTION = "prediction"
|
|
46
|
+
PREDICTIONS = "predictions"
|
|
47
|
+
NAMED_PREDICTIONS = "named_predictions"
|
|
48
|
+
ERROR_COUNT = "error_count"
|
|
49
|
+
ENTITIES = "entities"
|
|
50
|
+
FIRST_REQUEST = "first_request"
|
|
51
|
+
LAST_REQUEST = "last_request"
|
|
52
|
+
METRICS = "metrics"
|
|
53
|
+
TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
|
|
54
|
+
BATCH_INTERVALS_DICT = "batch_intervals_dict"
|
|
55
|
+
DEFAULT_BATCH_INTERVALS = "default_batch_intervals"
|
|
56
|
+
MINUTES = "minutes"
|
|
57
|
+
HOURS = "hours"
|
|
58
|
+
DAYS = "days"
|
|
59
|
+
MODEL_ENDPOINTS = "model_endpoints"
|
|
60
|
+
STATE = "state"
|
|
61
|
+
PROJECT = "project"
|
|
62
|
+
STREAM_PATH = "stream_path"
|
|
63
|
+
ACTIVE = "active"
|
|
64
|
+
MONITORING_MODE = "monitoring_mode"
|
|
65
|
+
FEATURE_STATS = "feature_stats"
|
|
66
|
+
CURRENT_STATS = "current_stats"
|
|
67
|
+
CHILDREN = "children"
|
|
68
|
+
CHILDREN_UIDS = "children_uids"
|
|
69
|
+
DRIFT_MEASURES = "drift_measures"
|
|
70
|
+
DRIFT_STATUS = "drift_status"
|
|
71
|
+
MONITOR_CONFIGURATION = "monitor_configuration"
|
|
72
|
+
FEATURE_SET_URI = "monitoring_feature_set_uri"
|
|
73
|
+
ALGORITHM = "algorithm"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class EventLiveStats:
|
|
77
|
+
LATENCY_AVG_5M = "latency_avg_5m"
|
|
78
|
+
LATENCY_AVG_1H = "latency_avg_1h"
|
|
79
|
+
PREDICTIONS_PER_SECOND = "predictions_per_second"
|
|
80
|
+
PREDICTIONS_COUNT_5M = "predictions_count_5m"
|
|
81
|
+
PREDICTIONS_COUNT_1H = "predictions_count_1h"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class EventKeyMetrics:
|
|
85
|
+
BASE_METRICS = "base_metrics"
|
|
86
|
+
CUSTOM_METRICS = "custom_metrics"
|
|
87
|
+
ENDPOINT_FEATURES = "endpoint_features"
|
|
88
|
+
GENERIC = "generic"
|
|
89
|
+
REAL_TIME = "real_time"
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class TimeSeriesTarget:
|
|
93
|
+
TSDB = "tsdb"
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class ModelEndpointTarget:
|
|
97
|
+
V3IO_NOSQL = "v3io-nosql"
|
|
98
|
+
SQL = "sql"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class ProjectSecretKeys:
|
|
102
|
+
ENDPOINT_STORE_CONNECTION = "MODEL_MONITORING_ENDPOINT_STORE_CONNECTION"
|
|
103
|
+
ACCESS_KEY = "MODEL_MONITORING_ACCESS_KEY"
|
|
104
|
+
KAFKA_BOOTSTRAP_SERVERS = "KAFKA_BOOTSTRAP_SERVERS"
|
|
105
|
+
STREAM_PATH = "STREAM_PATH"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class ModelMonitoringStoreKinds:
|
|
109
|
+
ENDPOINTS = "endpoints"
|
|
110
|
+
EVENTS = "events"
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class FileTargetKind:
|
|
114
|
+
ENDPOINTS = "endpoints"
|
|
115
|
+
EVENTS = "events"
|
|
116
|
+
STREAM = "stream"
|
|
117
|
+
PARQUET = "parquet"
|
|
118
|
+
LOG_STREAM = "log_stream"
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class ModelMonitoringMode(str, enum.Enum):
|
|
122
|
+
enabled = "enabled"
|
|
123
|
+
disabled = "disabled"
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class EndpointType(enum.IntEnum):
|
|
127
|
+
NODE_EP = 1 # end point that is not a child of a router
|
|
128
|
+
ROUTER = 2 # endpoint that is router
|
|
129
|
+
LEAF_EP = 3 # end point that is a child of a router
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def create_model_endpoint_uid(function_uri: str, versioned_model: str):
|
|
133
|
+
function_uri = FunctionURI.from_string(function_uri)
|
|
134
|
+
versioned_model = VersionedModel.from_string(versioned_model)
|
|
135
|
+
|
|
136
|
+
if (
|
|
137
|
+
not function_uri.project
|
|
138
|
+
or not function_uri.function
|
|
139
|
+
or not versioned_model.model
|
|
140
|
+
):
|
|
141
|
+
raise ValueError("Both function_uri and versioned_model have to be initialized")
|
|
142
|
+
|
|
143
|
+
uid = EndpointUID(
|
|
144
|
+
function_uri.project,
|
|
145
|
+
function_uri.function,
|
|
146
|
+
function_uri.tag,
|
|
147
|
+
function_uri.hash_key,
|
|
148
|
+
versioned_model.model,
|
|
149
|
+
versioned_model.version,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
return uid
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
@dataclass
|
|
156
|
+
class FunctionURI:
|
|
157
|
+
project: str
|
|
158
|
+
function: str
|
|
159
|
+
tag: Optional[str] = None
|
|
160
|
+
hash_key: Optional[str] = None
|
|
161
|
+
|
|
162
|
+
@classmethod
|
|
163
|
+
def from_string(cls, function_uri):
|
|
164
|
+
project, uri, tag, hash_key = mlrun.utils.parse_versioned_object_uri(
|
|
165
|
+
function_uri
|
|
166
|
+
)
|
|
167
|
+
return cls(
|
|
168
|
+
project=project,
|
|
169
|
+
function=uri,
|
|
170
|
+
tag=tag or None,
|
|
171
|
+
hash_key=hash_key or None,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@dataclass
|
|
176
|
+
class VersionedModel:
|
|
177
|
+
model: str
|
|
178
|
+
version: Optional[str]
|
|
179
|
+
|
|
180
|
+
@classmethod
|
|
181
|
+
def from_string(cls, model):
|
|
182
|
+
try:
|
|
183
|
+
model, version = model.split(":")
|
|
184
|
+
except ValueError:
|
|
185
|
+
model, version = model, None
|
|
186
|
+
|
|
187
|
+
return cls(model, version)
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
@dataclass
|
|
191
|
+
class EndpointUID:
|
|
192
|
+
project: str
|
|
193
|
+
function: str
|
|
194
|
+
function_tag: str
|
|
195
|
+
function_hash_key: str
|
|
196
|
+
model: str
|
|
197
|
+
model_version: str
|
|
198
|
+
uid: Optional[str] = None
|
|
199
|
+
|
|
200
|
+
def __post_init__(self):
|
|
201
|
+
function_ref = (
|
|
202
|
+
f"{self.function}_{self.function_tag or self.function_hash_key or 'N/A'}"
|
|
203
|
+
)
|
|
204
|
+
versioned_model = f"{self.model}_{self.model_version or 'N/A'}"
|
|
205
|
+
unique_string = f"{self.project}_{function_ref}_{versioned_model}"
|
|
206
|
+
self.uid = hashlib.sha1(unique_string.encode("utf-8")).hexdigest()
|
|
207
|
+
|
|
208
|
+
def __str__(self):
|
|
209
|
+
return self.uid
|
|
@@ -0,0 +1,167 @@
|
|
|
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
|
+
# flake8: noqa - this is until we take care of the F401 violations with respect to __all__ & sphinx
|
|
16
|
+
|
|
17
|
+
from .artifact import ArtifactCategories, ArtifactIdentifier, ArtifactsFormat
|
|
18
|
+
from .auth import (
|
|
19
|
+
AuthInfo,
|
|
20
|
+
AuthorizationAction,
|
|
21
|
+
AuthorizationResourceTypes,
|
|
22
|
+
AuthorizationVerificationInput,
|
|
23
|
+
Credentials,
|
|
24
|
+
ProjectsRole,
|
|
25
|
+
)
|
|
26
|
+
from .background_task import (
|
|
27
|
+
BackgroundTask,
|
|
28
|
+
BackgroundTaskMetadata,
|
|
29
|
+
BackgroundTaskSpec,
|
|
30
|
+
BackgroundTaskState,
|
|
31
|
+
BackgroundTaskStatus,
|
|
32
|
+
)
|
|
33
|
+
from .client_spec import ClientSpec
|
|
34
|
+
from .clusterization_spec import (
|
|
35
|
+
ClusterizationSpec,
|
|
36
|
+
WaitForChiefToReachOnlineStateFeatureFlag,
|
|
37
|
+
)
|
|
38
|
+
from .constants import (
|
|
39
|
+
APIStates,
|
|
40
|
+
ClusterizationRole,
|
|
41
|
+
DeletionStrategy,
|
|
42
|
+
FeatureStorePartitionByField,
|
|
43
|
+
HeaderNames,
|
|
44
|
+
LogsCollectorMode,
|
|
45
|
+
OrderType,
|
|
46
|
+
PatchMode,
|
|
47
|
+
RunPartitionByField,
|
|
48
|
+
SortField,
|
|
49
|
+
)
|
|
50
|
+
from .events import (
|
|
51
|
+
AuthSecretEventActions,
|
|
52
|
+
EventClientKinds,
|
|
53
|
+
EventsModes,
|
|
54
|
+
SecretEventActions,
|
|
55
|
+
)
|
|
56
|
+
from .feature_store import (
|
|
57
|
+
EntitiesOutput,
|
|
58
|
+
Entity,
|
|
59
|
+
EntityListOutput,
|
|
60
|
+
EntityRecord,
|
|
61
|
+
Feature,
|
|
62
|
+
FeatureListOutput,
|
|
63
|
+
FeatureRecord,
|
|
64
|
+
FeatureSet,
|
|
65
|
+
FeatureSetDigestOutput,
|
|
66
|
+
FeatureSetDigestSpec,
|
|
67
|
+
FeatureSetIngestInput,
|
|
68
|
+
FeatureSetIngestOutput,
|
|
69
|
+
FeatureSetRecord,
|
|
70
|
+
FeatureSetsOutput,
|
|
71
|
+
FeatureSetSpec,
|
|
72
|
+
FeatureSetsTagsOutput,
|
|
73
|
+
FeaturesOutput,
|
|
74
|
+
FeatureVector,
|
|
75
|
+
FeatureVectorRecord,
|
|
76
|
+
FeatureVectorsOutput,
|
|
77
|
+
FeatureVectorsTagsOutput,
|
|
78
|
+
)
|
|
79
|
+
from .frontend_spec import (
|
|
80
|
+
AuthenticationFeatureFlag,
|
|
81
|
+
FeatureFlags,
|
|
82
|
+
FrontendSpec,
|
|
83
|
+
NuclioStreamsFeatureFlag,
|
|
84
|
+
PreemptionNodesFeatureFlag,
|
|
85
|
+
ProjectMembershipFeatureFlag,
|
|
86
|
+
)
|
|
87
|
+
from .function import FunctionState, PreemptionModes, SecurityContextEnrichmentModes
|
|
88
|
+
from .http import HTTPSessionRetryMode
|
|
89
|
+
from .hub import (
|
|
90
|
+
HubCatalog,
|
|
91
|
+
HubItem,
|
|
92
|
+
HubObjectMetadata,
|
|
93
|
+
HubSource,
|
|
94
|
+
HubSourceSpec,
|
|
95
|
+
IndexedHubSource,
|
|
96
|
+
last_source_index,
|
|
97
|
+
)
|
|
98
|
+
from .k8s import NodeSelectorOperator, Resources, ResourceSpec
|
|
99
|
+
from .memory_reports import MostCommonObjectTypesReport, ObjectTypeReport
|
|
100
|
+
from .model_endpoints import (
|
|
101
|
+
Features,
|
|
102
|
+
FeatureValues,
|
|
103
|
+
GrafanaColumn,
|
|
104
|
+
GrafanaDataPoint,
|
|
105
|
+
GrafanaNumberColumn,
|
|
106
|
+
GrafanaStringColumn,
|
|
107
|
+
GrafanaTable,
|
|
108
|
+
GrafanaTimeSeriesTarget,
|
|
109
|
+
ModelEndpoint,
|
|
110
|
+
ModelEndpointList,
|
|
111
|
+
ModelEndpointMetadata,
|
|
112
|
+
ModelEndpointSpec,
|
|
113
|
+
ModelEndpointStatus,
|
|
114
|
+
ModelMonitoringStoreKinds,
|
|
115
|
+
)
|
|
116
|
+
from .notification import (
|
|
117
|
+
Notification,
|
|
118
|
+
NotificationKind,
|
|
119
|
+
NotificationSeverity,
|
|
120
|
+
NotificationStatus,
|
|
121
|
+
SetNotificationRequest,
|
|
122
|
+
)
|
|
123
|
+
from .object import ObjectKind, ObjectMetadata, ObjectSpec, ObjectStatus
|
|
124
|
+
from .pipeline import PipelinesFormat, PipelinesOutput, PipelinesPagination
|
|
125
|
+
from .project import (
|
|
126
|
+
IguazioProject,
|
|
127
|
+
Project,
|
|
128
|
+
ProjectDesiredState,
|
|
129
|
+
ProjectMetadata,
|
|
130
|
+
ProjectOwner,
|
|
131
|
+
ProjectsFormat,
|
|
132
|
+
ProjectsOutput,
|
|
133
|
+
ProjectSpec,
|
|
134
|
+
ProjectState,
|
|
135
|
+
ProjectStatus,
|
|
136
|
+
ProjectSummariesOutput,
|
|
137
|
+
ProjectSummary,
|
|
138
|
+
)
|
|
139
|
+
from .regex import RegexMatchModes
|
|
140
|
+
from .runs import RunIdentifier
|
|
141
|
+
from .runtime_resource import (
|
|
142
|
+
GroupedByJobRuntimeResourcesOutput,
|
|
143
|
+
GroupedByProjectRuntimeResourcesOutput,
|
|
144
|
+
KindRuntimeResources,
|
|
145
|
+
ListRuntimeResourcesGroupByField,
|
|
146
|
+
RuntimeResource,
|
|
147
|
+
RuntimeResources,
|
|
148
|
+
RuntimeResourcesOutput,
|
|
149
|
+
)
|
|
150
|
+
from .schedule import (
|
|
151
|
+
ScheduleCronTrigger,
|
|
152
|
+
ScheduleIdentifier,
|
|
153
|
+
ScheduleInput,
|
|
154
|
+
ScheduleKinds,
|
|
155
|
+
ScheduleOutput,
|
|
156
|
+
ScheduleRecord,
|
|
157
|
+
SchedulesOutput,
|
|
158
|
+
ScheduleUpdate,
|
|
159
|
+
)
|
|
160
|
+
from .secret import (
|
|
161
|
+
AuthSecretData,
|
|
162
|
+
SecretKeysData,
|
|
163
|
+
SecretProviderName,
|
|
164
|
+
SecretsData,
|
|
165
|
+
UserSecretCreationRequest,
|
|
166
|
+
)
|
|
167
|
+
from .tag import Tag, TagObjects
|
|
@@ -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.
|
|
@@ -16,31 +16,30 @@ import typing
|
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
18
|
|
|
19
|
-
import mlrun.
|
|
19
|
+
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class ArtifactCategories(mlrun.
|
|
22
|
+
class ArtifactCategories(mlrun.common.types.StrEnum):
|
|
23
23
|
model = "model"
|
|
24
24
|
dataset = "dataset"
|
|
25
25
|
other = "other"
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
import mlrun.artifacts.dataset
|
|
31
|
-
import mlrun.artifacts.model
|
|
27
|
+
# we define the link as a category to prevent import cycles, but it's not a real category
|
|
28
|
+
# and should not be used as such
|
|
29
|
+
link = "link"
|
|
32
30
|
|
|
33
|
-
|
|
31
|
+
def to_kinds_filter(self) -> typing.Tuple[typing.List[str], bool]:
|
|
32
|
+
link_kind = ArtifactCategories.link.value
|
|
34
33
|
|
|
35
34
|
if self.value == ArtifactCategories.model.value:
|
|
36
|
-
return [
|
|
35
|
+
return [ArtifactCategories.model.value, link_kind], False
|
|
37
36
|
if self.value == ArtifactCategories.dataset.value:
|
|
38
|
-
return [
|
|
37
|
+
return [ArtifactCategories.dataset.value, link_kind], False
|
|
39
38
|
if self.value == ArtifactCategories.other.value:
|
|
40
39
|
return (
|
|
41
40
|
[
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
ArtifactCategories.model.value,
|
|
42
|
+
ArtifactCategories.dataset.value,
|
|
44
43
|
],
|
|
45
44
|
True,
|
|
46
45
|
)
|
|
@@ -56,6 +55,6 @@ class ArtifactIdentifier(pydantic.BaseModel):
|
|
|
56
55
|
# hash: typing.Optional[str]
|
|
57
56
|
|
|
58
57
|
|
|
59
|
-
class ArtifactsFormat(mlrun.
|
|
58
|
+
class ArtifactsFormat(mlrun.common.types.StrEnum):
|
|
60
59
|
full = "full"
|
|
61
60
|
legacy = "legacy"
|
|
@@ -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.
|
|
@@ -18,17 +18,17 @@ import pydantic
|
|
|
18
18
|
from nuclio.auth import AuthInfo as NuclioAuthInfo
|
|
19
19
|
from nuclio.auth import AuthKinds as NuclioAuthKinds
|
|
20
20
|
|
|
21
|
-
import mlrun.
|
|
21
|
+
import mlrun.common.types
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
class ProjectsRole(mlrun.
|
|
24
|
+
class ProjectsRole(mlrun.common.types.StrEnum):
|
|
25
25
|
iguazio = "iguazio"
|
|
26
26
|
mlrun = "mlrun"
|
|
27
27
|
nuclio = "nuclio"
|
|
28
28
|
nop = "nop"
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class AuthorizationAction(mlrun.
|
|
31
|
+
class AuthorizationAction(mlrun.common.types.StrEnum):
|
|
32
32
|
read = "read"
|
|
33
33
|
create = "create"
|
|
34
34
|
update = "update"
|
|
@@ -39,7 +39,7 @@ class AuthorizationAction(mlrun.api.utils.helpers.StrEnum):
|
|
|
39
39
|
store = "store"
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
class AuthorizationResourceTypes(mlrun.
|
|
42
|
+
class AuthorizationResourceTypes(mlrun.common.types.StrEnum):
|
|
43
43
|
project = "project"
|
|
44
44
|
log = "log"
|
|
45
45
|
runtime_resource = "runtime-resource"
|
|
@@ -56,7 +56,7 @@ class AuthorizationResourceTypes(mlrun.api.utils.helpers.StrEnum):
|
|
|
56
56
|
run = "run"
|
|
57
57
|
model_endpoint = "model-endpoint"
|
|
58
58
|
pipeline = "pipeline"
|
|
59
|
-
|
|
59
|
+
hub_source = "hub-source"
|
|
60
60
|
|
|
61
61
|
def to_resource_string(
|
|
62
62
|
self,
|
|
@@ -85,8 +85,10 @@ class AuthorizationResourceTypes(mlrun.api.utils.helpers.StrEnum):
|
|
|
85
85
|
AuthorizationResourceTypes.runtime_resource: "/projects/{project_name}/runtime-resources",
|
|
86
86
|
AuthorizationResourceTypes.model_endpoint: "/projects/{project_name}/model-endpoints/{resource_name}",
|
|
87
87
|
AuthorizationResourceTypes.pipeline: "/projects/{project_name}/pipelines/{resource_name}",
|
|
88
|
-
#
|
|
89
|
-
|
|
88
|
+
# Hub sources are not project-scoped, and auth is globally on the sources endpoint.
|
|
89
|
+
# TODO - this was reverted to /marketplace since MLRun needs to be able to run with old igz versions. Once
|
|
90
|
+
# we only have support for igz versions that support /hub (>=3.5.4), change this to "/hub/sources".
|
|
91
|
+
AuthorizationResourceTypes.hub_source: "/marketplace/sources",
|
|
90
92
|
}[self].format(project_name=project_name, resource_name=resource_name)
|
|
91
93
|
|
|
92
94
|
|