mlrun 1.3.3__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.3.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.3.dist-info/RECORD +0 -381
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
- {mlrun-1.3.3.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.
|
|
@@ -17,12 +17,12 @@ import typing
|
|
|
17
17
|
|
|
18
18
|
import pydantic
|
|
19
19
|
|
|
20
|
-
import mlrun.
|
|
20
|
+
import mlrun.common.types
|
|
21
21
|
|
|
22
22
|
from .object import ObjectKind
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
class BackgroundTaskState(mlrun.
|
|
25
|
+
class BackgroundTaskState(mlrun.common.types.StrEnum):
|
|
26
26
|
succeeded = "succeeded"
|
|
27
27
|
failed = "failed"
|
|
28
28
|
running = "running"
|
|
@@ -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,7 +16,7 @@ import typing
|
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
18
|
|
|
19
|
-
import mlrun.
|
|
19
|
+
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class ClusterizationSpec(pydantic.BaseModel):
|
|
@@ -24,6 +24,6 @@ class ClusterizationSpec(pydantic.BaseModel):
|
|
|
24
24
|
chief_version: typing.Optional[str]
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
class WaitForChiefToReachOnlineStateFeatureFlag(mlrun.
|
|
27
|
+
class WaitForChiefToReachOnlineStateFeatureFlag(mlrun.common.types.StrEnum):
|
|
28
28
|
enabled = "enabled"
|
|
29
29
|
disabled = "disabled"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2023 Iguazio
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
#
|
|
15
15
|
import mergedeep
|
|
16
16
|
|
|
17
|
-
import mlrun.
|
|
17
|
+
import mlrun.common.types
|
|
18
18
|
import mlrun.errors
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
class PatchMode(mlrun.
|
|
21
|
+
class PatchMode(mlrun.common.types.StrEnum):
|
|
22
22
|
replace = "replace"
|
|
23
23
|
additive = "additive"
|
|
24
24
|
|
|
@@ -33,7 +33,7 @@ class PatchMode(mlrun.api.utils.helpers.StrEnum):
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
class DeletionStrategy(mlrun.
|
|
36
|
+
class DeletionStrategy(mlrun.common.types.StrEnum):
|
|
37
37
|
restrict = "restrict"
|
|
38
38
|
restricted = "restricted"
|
|
39
39
|
cascade = "cascade"
|
|
@@ -97,7 +97,7 @@ class HeaderNames:
|
|
|
97
97
|
ui_clear_cache = f"{headers_prefix}ui-clear-cache"
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
class FeatureStorePartitionByField(mlrun.
|
|
100
|
+
class FeatureStorePartitionByField(mlrun.common.types.StrEnum):
|
|
101
101
|
name = "name" # Supported for feature-store objects
|
|
102
102
|
|
|
103
103
|
def to_partition_by_db_field(self, db_cls):
|
|
@@ -109,7 +109,7 @@ class FeatureStorePartitionByField(mlrun.api.utils.helpers.StrEnum):
|
|
|
109
109
|
)
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
class RunPartitionByField(mlrun.
|
|
112
|
+
class RunPartitionByField(mlrun.common.types.StrEnum):
|
|
113
113
|
name = "name" # Supported for runs objects
|
|
114
114
|
|
|
115
115
|
def to_partition_by_db_field(self, db_cls):
|
|
@@ -121,7 +121,7 @@ class RunPartitionByField(mlrun.api.utils.helpers.StrEnum):
|
|
|
121
121
|
)
|
|
122
122
|
|
|
123
123
|
|
|
124
|
-
class SortField(mlrun.
|
|
124
|
+
class SortField(mlrun.common.types.StrEnum):
|
|
125
125
|
created = "created"
|
|
126
126
|
updated = "updated"
|
|
127
127
|
|
|
@@ -139,7 +139,7 @@ class SortField(mlrun.api.utils.helpers.StrEnum):
|
|
|
139
139
|
)
|
|
140
140
|
|
|
141
141
|
|
|
142
|
-
class OrderType(mlrun.
|
|
142
|
+
class OrderType(mlrun.common.types.StrEnum):
|
|
143
143
|
asc = "asc"
|
|
144
144
|
desc = "desc"
|
|
145
145
|
|
|
@@ -170,6 +170,19 @@ class APIStates:
|
|
|
170
170
|
def terminal_states():
|
|
171
171
|
return [APIStates.online, APIStates.offline]
|
|
172
172
|
|
|
173
|
+
@staticmethod
|
|
174
|
+
def description(state: str):
|
|
175
|
+
return {
|
|
176
|
+
APIStates.online: "API is online",
|
|
177
|
+
APIStates.waiting_for_migrations: "API is waiting for migrations to be triggered. "
|
|
178
|
+
"Send POST request to /api/operations/migrations to trigger it",
|
|
179
|
+
APIStates.migrations_in_progress: "Migrations are in progress",
|
|
180
|
+
APIStates.migrations_failed: "Migrations failed, API can't be started",
|
|
181
|
+
APIStates.migrations_completed: "Migrations completed, API is waiting to become online",
|
|
182
|
+
APIStates.offline: "API is offline",
|
|
183
|
+
APIStates.waiting_for_chief: "API is waiting for chief to be ready",
|
|
184
|
+
}.get(state, f"Unknown API state '{state}'")
|
|
185
|
+
|
|
173
186
|
|
|
174
187
|
class ClusterizationRole:
|
|
175
188
|
chief = "chief"
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
+
import mlrun.common.types
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class EventsModes(mlrun.common.types.StrEnum):
|
|
19
|
+
enabled = "enabled"
|
|
20
|
+
disabled = "disabled"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class EventClientKinds(mlrun.common.types.StrEnum):
|
|
24
|
+
iguazio = "iguazio"
|
|
25
|
+
nop = "nop"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class SecretEventActions(mlrun.common.types.StrEnum):
|
|
29
|
+
created = "created"
|
|
30
|
+
updated = "updated"
|
|
31
|
+
deleted = "deleted"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class AuthSecretEventActions(mlrun.common.types.StrEnum):
|
|
35
|
+
created = "created"
|
|
36
|
+
updated = "updated"
|
|
@@ -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.
|
|
@@ -48,6 +48,7 @@ class Entity(BaseModel):
|
|
|
48
48
|
class FeatureSetSpec(ObjectSpec):
|
|
49
49
|
entities: List[Entity] = []
|
|
50
50
|
features: List[Feature] = []
|
|
51
|
+
engine: Optional[str] = Field(default="storey")
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
class FeatureSet(BaseModel):
|
|
@@ -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,29 +16,29 @@ import typing
|
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
18
|
|
|
19
|
-
import mlrun.
|
|
19
|
+
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
from .k8s import Resources
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
class ProjectMembershipFeatureFlag(mlrun.
|
|
24
|
+
class ProjectMembershipFeatureFlag(mlrun.common.types.StrEnum):
|
|
25
25
|
enabled = "enabled"
|
|
26
26
|
disabled = "disabled"
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class PreemptionNodesFeatureFlag(mlrun.
|
|
29
|
+
class PreemptionNodesFeatureFlag(mlrun.common.types.StrEnum):
|
|
30
30
|
enabled = "enabled"
|
|
31
31
|
disabled = "disabled"
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
class AuthenticationFeatureFlag(mlrun.
|
|
34
|
+
class AuthenticationFeatureFlag(mlrun.common.types.StrEnum):
|
|
35
35
|
none = "none"
|
|
36
36
|
basic = "basic"
|
|
37
37
|
bearer = "bearer"
|
|
38
38
|
iguazio = "iguazio"
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
class NuclioStreamsFeatureFlag(mlrun.
|
|
41
|
+
class NuclioStreamsFeatureFlag(mlrun.common.types.StrEnum):
|
|
42
42
|
enabled = "enabled"
|
|
43
43
|
disabled = "disabled"
|
|
44
44
|
|
|
@@ -67,6 +67,7 @@ class FrontendSpec(pydantic.BaseModel):
|
|
|
67
67
|
default_function_pod_resources: Resources = Resources()
|
|
68
68
|
default_function_preemption_mode: str
|
|
69
69
|
feature_store_data_prefixes: typing.Optional[typing.Dict[str, str]]
|
|
70
|
+
allowed_artifact_path_prefixes_list: typing.List[str]
|
|
70
71
|
|
|
71
72
|
# ce_mode is deprecated, we will use the full ce config instead and ce_mode will be removed in 1.6.0
|
|
72
73
|
ce_mode: typing.Optional[str]
|
|
@@ -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,10 +16,10 @@ import typing
|
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
18
|
|
|
19
|
-
import mlrun.
|
|
19
|
+
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
# Ideally we would want this to be class FunctionState(mlrun.
|
|
22
|
+
# Ideally we would want this to be class FunctionState(mlrun.common.types.StrEnum) which is the
|
|
23
23
|
# "FastAPI-compatible" way of creating schemas
|
|
24
24
|
# But, when we save a function to the DB, we pickle the body, which saves the state as an instance of this class (and
|
|
25
25
|
# not just a string), then if for some reason we downgrade to 0.6.4, before we had this class, we fail reading (pickle
|
|
@@ -46,7 +46,7 @@ class FunctionState:
|
|
|
46
46
|
build = "build"
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
class PreemptionModes(mlrun.
|
|
49
|
+
class PreemptionModes(mlrun.common.types.StrEnum):
|
|
50
50
|
# makes function pods be able to run on preemptible nodes
|
|
51
51
|
allow = "allow"
|
|
52
52
|
# makes the function pods run on preemptible nodes only
|
|
@@ -59,7 +59,7 @@ class PreemptionModes(mlrun.api.utils.helpers.StrEnum):
|
|
|
59
59
|
|
|
60
60
|
# used when running in Iguazio (otherwise use disabled mode)
|
|
61
61
|
# populates mlrun.mlconf.function.spec.security_context.enrichment_mode
|
|
62
|
-
class SecurityContextEnrichmentModes(mlrun.
|
|
62
|
+
class SecurityContextEnrichmentModes(mlrun.common.types.StrEnum):
|
|
63
63
|
# always use the user id of the user that triggered the 1st run / created the function
|
|
64
64
|
# NOTE: this mode is incomplete and not fully supported yet
|
|
65
65
|
retain = "retain"
|
|
@@ -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.
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
|
-
import mlrun.
|
|
15
|
+
import mlrun.common.types
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
class HTTPSessionRetryMode(mlrun.
|
|
18
|
+
class HTTPSessionRetryMode(mlrun.common.types.StrEnum):
|
|
19
19
|
enabled = "enabled"
|
|
20
20
|
disabled = "disabled"
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Copyright 2023 Iguazio
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
#
|
|
15
|
+
from datetime import datetime, timezone
|
|
16
|
+
from typing import Dict, List, Optional
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel, Extra, Field
|
|
19
|
+
|
|
20
|
+
import mlrun.common.types
|
|
21
|
+
import mlrun.errors
|
|
22
|
+
from mlrun.common.schemas.object import ObjectKind, ObjectSpec, ObjectStatus
|
|
23
|
+
from mlrun.config import config
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# Defining a different base class (not ObjectMetadata), as there's no project, and it differs enough to
|
|
27
|
+
# justify a new class
|
|
28
|
+
class HubObjectMetadata(BaseModel):
|
|
29
|
+
name: str
|
|
30
|
+
description: str = ""
|
|
31
|
+
labels: Optional[dict] = {}
|
|
32
|
+
updated: Optional[datetime]
|
|
33
|
+
created: Optional[datetime]
|
|
34
|
+
|
|
35
|
+
class Config:
|
|
36
|
+
extra = Extra.allow
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Currently only functions are supported. Will add more in the future.
|
|
40
|
+
class HubSourceType(mlrun.common.types.StrEnum):
|
|
41
|
+
functions = "functions"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Sources-related objects
|
|
45
|
+
class HubSourceSpec(ObjectSpec):
|
|
46
|
+
path: str # URL to base directory, should include schema (s3://, etc...)
|
|
47
|
+
channel: str
|
|
48
|
+
credentials: Optional[dict] = {}
|
|
49
|
+
object_type: HubSourceType = Field(HubSourceType.functions, const=True)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class HubSource(BaseModel):
|
|
53
|
+
kind: ObjectKind = Field(ObjectKind.hub_source, const=True)
|
|
54
|
+
metadata: HubObjectMetadata
|
|
55
|
+
spec: HubSourceSpec
|
|
56
|
+
status: Optional[ObjectStatus] = ObjectStatus(state="created")
|
|
57
|
+
|
|
58
|
+
def get_full_uri(self, relative_path):
|
|
59
|
+
return "{base}/{object_type}/{channel}/{relative_path}".format(
|
|
60
|
+
base=self.spec.path,
|
|
61
|
+
object_type=self.spec.object_type,
|
|
62
|
+
channel=self.spec.channel,
|
|
63
|
+
relative_path=relative_path,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def get_catalog_uri(self):
|
|
67
|
+
return self.get_full_uri(config.hub.catalog_filename)
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def generate_default_source(cls):
|
|
71
|
+
if not config.hub.default_source.create:
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
now = datetime.now(timezone.utc)
|
|
75
|
+
hub_metadata = HubObjectMetadata(
|
|
76
|
+
name=config.hub.default_source.name,
|
|
77
|
+
description=config.hub.default_source.description,
|
|
78
|
+
created=now,
|
|
79
|
+
updated=now,
|
|
80
|
+
)
|
|
81
|
+
return cls(
|
|
82
|
+
metadata=hub_metadata,
|
|
83
|
+
spec=HubSourceSpec(
|
|
84
|
+
path=config.hub.default_source.url,
|
|
85
|
+
channel=config.hub.default_source.channel,
|
|
86
|
+
object_type=HubSourceType(config.hub.default_source.object_type),
|
|
87
|
+
),
|
|
88
|
+
status=ObjectStatus(state="created"),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
last_source_index = -1
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class IndexedHubSource(BaseModel):
|
|
96
|
+
index: int = last_source_index # Default last. Otherwise, must be > 0
|
|
97
|
+
source: HubSource
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
# Item-related objects
|
|
101
|
+
class HubItemMetadata(HubObjectMetadata):
|
|
102
|
+
source: HubSourceType = Field(HubSourceType.functions, const=True)
|
|
103
|
+
version: str
|
|
104
|
+
tag: Optional[str]
|
|
105
|
+
|
|
106
|
+
def get_relative_path(self) -> str:
|
|
107
|
+
if self.source == HubSourceType.functions:
|
|
108
|
+
# This is needed since the hub deployment script modifies the paths to use _ instead of -.
|
|
109
|
+
modified_name = self.name.replace("-", "_")
|
|
110
|
+
# Prefer using the tag if exists. Otherwise, use version.
|
|
111
|
+
version = self.tag or self.version
|
|
112
|
+
return f"{modified_name}/{version}/"
|
|
113
|
+
else:
|
|
114
|
+
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
115
|
+
f"Bad source for hub item - {self.source}"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class HubItemSpec(ObjectSpec):
|
|
120
|
+
item_uri: str
|
|
121
|
+
assets: Dict[str, str] = {}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class HubItem(BaseModel):
|
|
125
|
+
kind: ObjectKind = Field(ObjectKind.hub_item, const=True)
|
|
126
|
+
metadata: HubItemMetadata
|
|
127
|
+
spec: HubItemSpec
|
|
128
|
+
status: ObjectStatus
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class HubCatalog(BaseModel):
|
|
132
|
+
kind: ObjectKind = Field(ObjectKind.hub_catalog, const=True)
|
|
133
|
+
channel: str
|
|
134
|
+
catalog: List[HubItem]
|
|
@@ -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,7 +16,7 @@ import typing
|
|
|
16
16
|
|
|
17
17
|
import pydantic
|
|
18
18
|
|
|
19
|
-
import mlrun.
|
|
19
|
+
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class ResourceSpec(pydantic.BaseModel):
|
|
@@ -30,7 +30,7 @@ class Resources(pydantic.BaseModel):
|
|
|
30
30
|
limits: ResourceSpec = ResourceSpec()
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
class NodeSelectorOperator(mlrun.
|
|
33
|
+
class NodeSelectorOperator(mlrun.common.types.StrEnum):
|
|
34
34
|
"""
|
|
35
35
|
A node selector operator is the set of operators that can be used in a node selector requirement
|
|
36
36
|
https://github.com/kubernetes/api/blob/b754a94214be15ffc8d648f9fe6481857f1fc2fe/core/v1/types.go#L2765
|