mlrun 1.10.0rc27__tar.gz → 1.10.0rc29__tar.gz
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-1.10.0rc27 → mlrun-1.10.0rc29}/Makefile +0 -2
- {mlrun-1.10.0rc27/mlrun.egg-info → mlrun-1.10.0rc29}/PKG-INFO +2 -2
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/__init__.py +1 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/hub.py +5 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/config.py +2 -1
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/azure_blob.py +98 -17
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/utils.py +9 -3
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/db/base.py +1 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/db/httpdb.py +4 -1
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/db/nopdb.py +1 -0
- mlrun-1.10.0rc29/mlrun/hub/__init__.py +15 -0
- mlrun-1.10.0rc29/mlrun/hub/module.py +166 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +38 -7
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/helpers.py +23 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/projects/operations.py +6 -1
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/projects/project.py +6 -1
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/base.py +10 -3
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/application/application.py +6 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/serving.py +12 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/pod.py +1 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/states.py +13 -4
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/helpers.py +49 -38
- mlrun-1.10.0rc29/mlrun/utils/version/version.json +4 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29/mlrun.egg-info}/PKG-INFO +2 -2
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun.egg-info/SOURCES.txt +2 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun.egg-info/requires.txt +1 -1
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/requirements.txt +1 -1
- mlrun-1.10.0rc27/mlrun/utils/version/version.json +0 -4
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/LICENSE +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/MANIFEST.in +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/README.md +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/dependencies.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/dev-requirements.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/dockerfiles/mlrun-api/requirements.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/archive.zip +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/function.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/infile.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/load-project.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_basics.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_dask.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_db.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_export_import.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_jobs.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_sparkk8s.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/mlrun_vault.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/model.bst +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/new-project.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/nulltst.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/params.csv +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/remote-spark.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/secrets.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/spark-function.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/training.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/v2_model_server.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/examples/xgb_serving.ipynb +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/extras-requirements.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/__main__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/alerts/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/alerts/alert.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/dataset.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/document.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/helpers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/llm_prompt.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/manager.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/model.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/artifacts/plots.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/constants.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/db/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/db/dialects.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/artifact.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/feature_set.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/function.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/model_endpoint.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/pipeline.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/project.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/formatters/run.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/helpers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/model_monitoring/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/model_monitoring/helpers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/runtimes/constants.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/alert.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/api_gateway.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/artifact.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/auth.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/background_task.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/client_spec.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/clusterization_spec.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/common.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/constants.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/datastore_profile.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/events.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/feature_store.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/frontend_spec.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/function.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/http.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/k8s.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/memory_reports.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/model_monitoring/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/model_monitoring/constants.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/model_monitoring/functions.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/model_monitoring/grafana.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/model_monitoring/model_endpoints.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/notification.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/object.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/pagination.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/partition.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/pipeline.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/project.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/regex.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/runs.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/runtime_resource.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/schedule.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/secret.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/serving.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/tag.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/schemas/workflow.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/secrets.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/common/types.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/data_types/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/data_types/data_types.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/data_types/infer.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/data_types/spark.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/data_types/to_pandas.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/alibaba_oss.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/datastore.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/datastore_profile.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/dbfs_store.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/filestore.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/google_cloud_storage.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/hdfs.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/inmem.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/model_provider/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/model_provider/huggingface_provider.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/model_provider/mock_model_provider.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/model_provider/model_provider.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/model_provider/openai_provider.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/redis.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/remote_client.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/s3.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/snowflake_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/sources.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/spark_udf.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/spark_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/store_resources.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/storeytargets.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/targets.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/v3io.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/vectorstore.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/wasbfs/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/datastore/wasbfs/fs.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/db/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/db/auth_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/db/factory.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/errors.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/execution.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/api.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/common.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/feature_set.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/feature_vector.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/feature_vector_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/ingestion.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/dask_merger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/job.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/local_merger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/spark_merger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/retrieval/storey_merger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/feature_store/steps.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/features.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/artifacts_library.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/producer.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_common/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/loggers/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/loggers/logger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_dl_common/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/artifacts_library.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/loggers/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/loggers/logger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/pkl_model_server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plans/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plans/dataset_plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/producer.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/_ml_common/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/auto_mlrun/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/auto_mlrun/auto_mlrun.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/huggingface/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/huggingface/model_server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/callbacks/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/callbacks/callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/callbacks/logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/model_server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/lgbm/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/onnx/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/onnx/dataset.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/onnx/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/onnx/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/onnx/model_server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/parallel_coordinates.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/callbacks/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/callbacks/callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/callbacks/logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/callbacks_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/model_server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/pytorch/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/estimator.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/metric.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/metrics_library.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/sklearn/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/callbacks/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/callbacks/logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/model_server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/tf_keras/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/xgboost/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/xgboost/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/xgboost/model_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/frameworks/xgboost/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/k8s_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/launcher/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/launcher/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/launcher/client.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/launcher/factory.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/launcher/local.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/launcher/remote.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/lists.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/api.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/_application_steps.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/context.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/evidently/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/evidently/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/histogram_data_drift.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/applications/results.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/controller.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/_schedules.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/_stats.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/helpers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/v3io/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/features_drift_table.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/metrics/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/metrics/histogram_distance.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/stream_processing.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/model_monitoring/writer.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/context_handler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/errors.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packager.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packagers/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packagers/default_packager.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packagers/numpy_packagers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packagers/pandas_packagers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packagers/python_standard_library_packagers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/packagers_manager.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/_archiver.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/_formatter.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/_pickler.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/_supported_format.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/log_hint_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/package/utils/type_hint_utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/platforms/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/platforms/iguazio.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/projects/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/projects/pipelines.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/render.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/run.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/daskjob.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/databricks_job/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/databricks_job/databricks_cancel_task.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/databricks_job/databricks_runtime.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/databricks_job/databricks_wrapper.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/funcdoc.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/function_reference.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/generators.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/kubejob.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/local.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/mounts.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/mpijob/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/mpijob/abstract.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/mpijob/v1.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/api_gateway.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/application/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/application/reverse_proxy.go +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/function.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/nuclio/nuclio.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/remotesparkjob.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/sparkjob/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/sparkjob/spark3job.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/runtimes/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/secrets.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/merger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/remote.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/routers.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/server.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/serving_wrapper.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/system_steps.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/utils.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/v1_serving.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/serving/v2_serving.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/track/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/track/tracker.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/track/tracker_manager.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/track/trackers/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/track/trackers/mlflow_tracker.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/async_http.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/azure_vault.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/clones.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/condition_evaluator.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/http.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/logger.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/base.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/console.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/git.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/ipython.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/mail.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/slack.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification/webhook.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/notifications/notification_pusher.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/regex.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/retryer.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/singleton.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/v3io_clients.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/vault.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/version/__init__.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun/utils/version/version.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun.egg-info/dependency_links.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun.egg-info/entry_points.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun.egg-info/not-zip-safe +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/mlrun.egg-info/top_level.txt +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/packages.py +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/pyproject.toml +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/setup.cfg +0 -0
- {mlrun-1.10.0rc27 → mlrun-1.10.0rc29}/setup.py +0 -0
|
@@ -656,8 +656,6 @@ test: clean ## Run mlrun tests
|
|
|
656
656
|
--ignore=server/py/services/api/migrations \
|
|
657
657
|
") && \
|
|
658
658
|
PER_PYTHON_VERSION_IGNORE_TEST_FLAGS=$(if $(filter $(MLRUN_PYTHON_VERSION),3.11),$$(echo "\
|
|
659
|
-
--ignore=server/py/services/api/tests/unit/api/test_pipelines.py \
|
|
660
|
-
--ignore=server/py/services/api/tests/unit/crud/test_pipelines.py \
|
|
661
659
|
--ignore=tests/serving/test_remote.py \
|
|
662
660
|
--ignore=tests/projects/test_remote_pipeline.py \
|
|
663
661
|
--ignore=tests/frameworks/tf_keras/test_tf_keras.py \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.10.
|
|
3
|
+
Version: 1.10.0rc29
|
|
4
4
|
Summary: Tracking and config of machine learning runs
|
|
5
5
|
Home-page: https://github.com/mlrun/mlrun
|
|
6
6
|
Author: Yaron Haviv
|
|
@@ -22,7 +22,7 @@ Requires-Python: >=3.9, <3.12
|
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
Requires-Dist: urllib3>=1.26.20
|
|
25
|
-
Requires-Dist: v3io-frames>=0.10.
|
|
25
|
+
Requires-Dist: v3io-frames>=0.10.16
|
|
26
26
|
Requires-Dist: GitPython>=3.1.41,~=3.1
|
|
27
27
|
Requires-Dist: aiohttp~=3.11
|
|
28
28
|
Requires-Dist: aiohttp-retry~=2.9
|
|
@@ -37,6 +37,7 @@ from .datastore import DataItem, ModelProvider, store_manager
|
|
|
37
37
|
from .db import get_run_db
|
|
38
38
|
from .errors import MLRunInvalidArgumentError, MLRunNotFoundError
|
|
39
39
|
from .execution import MLClientCtx
|
|
40
|
+
from .hub import get_hub_module, import_module
|
|
40
41
|
from .model import RunObject, RunTemplate, new_task
|
|
41
42
|
from .package import ArtifactType, DefaultPackager, Packager, handler
|
|
42
43
|
from .projects import (
|
|
@@ -134,3 +134,8 @@ class HubCatalog(BaseModel):
|
|
|
134
134
|
kind: ObjectKind = Field(ObjectKind.hub_catalog, const=True)
|
|
135
135
|
channel: str
|
|
136
136
|
catalog: list[HubItem]
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class HubModuleType(mlrun.common.types.StrEnum):
|
|
140
|
+
generic = "generic"
|
|
141
|
+
monitoring_app = "monitoring-app"
|
|
@@ -255,7 +255,8 @@ default_config = {
|
|
|
255
255
|
},
|
|
256
256
|
"runtimes": {
|
|
257
257
|
"dask": "600",
|
|
258
|
-
|
|
258
|
+
# cluster start might take some time in case k8s needs to spin up new nodes
|
|
259
|
+
"dask_cluster_start": "600",
|
|
259
260
|
},
|
|
260
261
|
"push_notifications": "60",
|
|
261
262
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
1
|
+
# Copyright 2025 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,6 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
+
import contextlib
|
|
15
16
|
import time
|
|
16
17
|
from pathlib import Path
|
|
17
18
|
from typing import Optional
|
|
@@ -30,6 +31,40 @@ from .base import DataStore, FileStats, make_datastore_schema_sanitizer
|
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
class AzureBlobStore(DataStore):
|
|
34
|
+
"""
|
|
35
|
+
Azure Blob Storage datastore implementation.
|
|
36
|
+
|
|
37
|
+
Supports multiple URL schemas: az://, wasbs://, wasb://
|
|
38
|
+
|
|
39
|
+
Supported Connection String Formats:
|
|
40
|
+
====================================
|
|
41
|
+
|
|
42
|
+
1. Account Key (Standard):
|
|
43
|
+
"DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.windows.net"
|
|
44
|
+
|
|
45
|
+
2. SAS Token:
|
|
46
|
+
"BlobEndpoint=https://<account>.blob.core.windows.net/;SharedAccessSignature=<sas_token>"
|
|
47
|
+
|
|
48
|
+
3. Minimal BlobEndpoint:
|
|
49
|
+
"BlobEndpoint=https://<account>.blob.core.windows.net/;AccountName=<account>;AccountKey=<key>"
|
|
50
|
+
|
|
51
|
+
4. Custom Domain:
|
|
52
|
+
"BlobEndpoint=https://<account>.mydomain.com/;AccountName=<account>;AccountKey=<key>"
|
|
53
|
+
|
|
54
|
+
5. China/Government Cloud:
|
|
55
|
+
"DefaultEndpointsProtocol=https;AccountName=<account>;AccountKey=<key>;EndpointSuffix=core.chinacloudapi.cn"
|
|
56
|
+
|
|
57
|
+
6. Full Service Endpoints with SAS:
|
|
58
|
+
"BlobEndpoint=https://<account>.blob.core.windows.net/;QueueEndpoint=...;SharedAccessSignature=<sas>"
|
|
59
|
+
|
|
60
|
+
Authentication Methods:
|
|
61
|
+
======================
|
|
62
|
+
- Account Key (connection_string or storage_options)
|
|
63
|
+
- SAS Token (connection_string or storage_options)
|
|
64
|
+
- OAuth/Azure AD (storage_options: client_id, client_secret, tenant_id)
|
|
65
|
+
|
|
66
|
+
"""
|
|
67
|
+
|
|
33
68
|
using_bucket = True
|
|
34
69
|
max_concurrency = 100
|
|
35
70
|
max_blocksize = 1024 * 1024 * 4
|
|
@@ -40,6 +75,12 @@ class AzureBlobStore(DataStore):
|
|
|
40
75
|
def __init__(
|
|
41
76
|
self, parent, schema, name, endpoint="", secrets: Optional[dict] = None
|
|
42
77
|
):
|
|
78
|
+
# Extract container from WASBS endpoint before calling super()
|
|
79
|
+
self._container_from_endpoint = None
|
|
80
|
+
if schema in ["wasbs", "wasb"] and endpoint and "@" in endpoint:
|
|
81
|
+
# Handle container@host format
|
|
82
|
+
self._container_from_endpoint, endpoint = endpoint.split("@", 1)
|
|
83
|
+
|
|
43
84
|
super().__init__(parent, name, schema, endpoint, secrets=secrets)
|
|
44
85
|
self._service_client = None
|
|
45
86
|
self._storage_options = None
|
|
@@ -67,6 +108,34 @@ class AzureBlobStore(DataStore):
|
|
|
67
108
|
or self._get_secret_or_env("AZURE_STORAGE_SAS_TOKEN"),
|
|
68
109
|
credential=self._get_secret_or_env("credential"),
|
|
69
110
|
)
|
|
111
|
+
# Use container extracted from WASBS endpoint during initialization
|
|
112
|
+
if self._container_from_endpoint:
|
|
113
|
+
res["container"] = self._container_from_endpoint
|
|
114
|
+
|
|
115
|
+
# For az:// URLs, endpoint contains the container name
|
|
116
|
+
if not res.get("container") and self.kind in ["az"]:
|
|
117
|
+
if container := getattr(self, "endpoint", None):
|
|
118
|
+
res["container"] = container
|
|
119
|
+
|
|
120
|
+
# Last resort: For wasbs:// without container, check if connection string has BlobEndpoint with container
|
|
121
|
+
if not res.get("container") and self.kind in ["wasbs", "wasb"]:
|
|
122
|
+
connection_string = res.get("connection_string")
|
|
123
|
+
if connection_string and "BlobEndpoint=" in connection_string:
|
|
124
|
+
# Try to extract container from BlobEndpoint URL
|
|
125
|
+
for part in connection_string.split(";"):
|
|
126
|
+
if part.startswith("BlobEndpoint="):
|
|
127
|
+
blob_endpoint = part.split("=", 1)[1]
|
|
128
|
+
# Parse URL to get path component
|
|
129
|
+
from urllib.parse import urlparse
|
|
130
|
+
|
|
131
|
+
parsed = urlparse(blob_endpoint)
|
|
132
|
+
if parsed.path and parsed.path.strip("/"):
|
|
133
|
+
# Extract first path segment as container
|
|
134
|
+
path_parts = parsed.path.strip("/").split("/")
|
|
135
|
+
if path_parts[0]:
|
|
136
|
+
res["container"] = path_parts[0]
|
|
137
|
+
break
|
|
138
|
+
|
|
70
139
|
self._storage_options = self._sanitize_options(res)
|
|
71
140
|
return self._storage_options
|
|
72
141
|
|
|
@@ -243,10 +312,12 @@ class AzureBlobStore(DataStore):
|
|
|
243
312
|
|
|
244
313
|
for key in ["account_name", "account_key", "sas_token"]:
|
|
245
314
|
if parsed_value := parsed_credential.get(key):
|
|
246
|
-
if
|
|
315
|
+
# Only check for conflicts if storage options has a non-empty value for this key
|
|
316
|
+
existing_value = st.get(key)
|
|
317
|
+
if existing_value and existing_value != parsed_value:
|
|
247
318
|
if key == "account_name":
|
|
248
319
|
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
249
|
-
f"Storage option for '{key}' is '{
|
|
320
|
+
f"Storage option for '{key}' is '{existing_value}', "
|
|
250
321
|
f"which does not match corresponding connection string '{parsed_value}'"
|
|
251
322
|
)
|
|
252
323
|
else:
|
|
@@ -262,7 +333,8 @@ class AzureBlobStore(DataStore):
|
|
|
262
333
|
primary_url = primary_url[len("http://") :]
|
|
263
334
|
if primary_url.startswith("https://"):
|
|
264
335
|
primary_url = primary_url[len("https://") :]
|
|
265
|
-
|
|
336
|
+
# Remove any path components from the host
|
|
337
|
+
host = primary_url.split("/")[0]
|
|
266
338
|
elif account_name:
|
|
267
339
|
host = f"{account_name}.{service}.core.windows.net"
|
|
268
340
|
else:
|
|
@@ -278,7 +350,10 @@ class AzureBlobStore(DataStore):
|
|
|
278
350
|
# --- WASB + SAS (container-scoped key; no provider classes needed) ---
|
|
279
351
|
if "sas_token" in st and st["sas_token"]:
|
|
280
352
|
sas = st["sas_token"].lstrip("?")
|
|
281
|
-
|
|
353
|
+
|
|
354
|
+
container = st.get("container")
|
|
355
|
+
|
|
356
|
+
if container:
|
|
282
357
|
# fs.azure.sas.<container>.<account>.blob.core.windows.net = <sas>
|
|
283
358
|
res[f"spark.hadoop.fs.azure.sas.{container}.{host}"] = sas
|
|
284
359
|
|
|
@@ -295,11 +370,12 @@ class AzureBlobStore(DataStore):
|
|
|
295
370
|
st = self.storage_options
|
|
296
371
|
service = "blob"
|
|
297
372
|
|
|
298
|
-
container =
|
|
373
|
+
container = st.get("container")
|
|
374
|
+
|
|
299
375
|
if not container:
|
|
300
376
|
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
301
|
-
"Container is required to build the WASB URL "
|
|
302
|
-
"
|
|
377
|
+
"Container name is required to build the WASB URL. "
|
|
378
|
+
"Set storage_options['container'] or use datastore profile with container specified."
|
|
303
379
|
)
|
|
304
380
|
|
|
305
381
|
# Prefer host from connection string; else synthesize from account_name
|
|
@@ -308,18 +384,23 @@ class AzureBlobStore(DataStore):
|
|
|
308
384
|
connection_string = st.get("connection_string")
|
|
309
385
|
|
|
310
386
|
if connection_string:
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
387
|
+
with contextlib.suppress(Exception):
|
|
388
|
+
primary_url, _, _ = parse_connection_str(
|
|
389
|
+
connection_string, credential=None, service=service
|
|
390
|
+
)
|
|
391
|
+
if primary_url.startswith("http://"):
|
|
392
|
+
primary_url = primary_url[len("http://") :]
|
|
393
|
+
if primary_url.startswith("https://"):
|
|
394
|
+
primary_url = primary_url[len("https://") :]
|
|
395
|
+
# Remove any path components from the host
|
|
396
|
+
host = primary_url.split("/")[0].rstrip("/")
|
|
320
397
|
if not host and account_name:
|
|
321
398
|
host = f"{account_name}.{service}.core.windows.net"
|
|
322
399
|
|
|
400
|
+
# For wasbs:// URLs where endpoint is already the host
|
|
401
|
+
if not host and self.kind in ["wasbs", "wasb"] and hasattr(self, "endpoint"):
|
|
402
|
+
host = getattr(self, "endpoint", None)
|
|
403
|
+
|
|
323
404
|
if not host:
|
|
324
405
|
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
325
406
|
"account_name is required (or provide a connection_string) to build the WASB URL."
|
|
@@ -320,7 +320,13 @@ def parse_url(url):
|
|
|
320
320
|
parsed_url = urlparse(url)
|
|
321
321
|
schema = parsed_url.scheme.lower()
|
|
322
322
|
endpoint = parsed_url.hostname
|
|
323
|
-
|
|
323
|
+
|
|
324
|
+
# Special handling for WASBS URLs to preserve container information
|
|
325
|
+
if schema in ["wasbs", "wasb"] and parsed_url.netloc and "@" in parsed_url.netloc:
|
|
326
|
+
# For wasbs://container@host format, preserve the full netloc as endpoint
|
|
327
|
+
# This allows the datastore to extract container later
|
|
328
|
+
endpoint = parsed_url.netloc
|
|
329
|
+
elif endpoint:
|
|
324
330
|
# HACK - urlparse returns the hostname after in lower case - we want the original case:
|
|
325
331
|
# the hostname is a substring of the netloc, in which it's the original case, so we find the indexes of the
|
|
326
332
|
# hostname in the netloc and take it from there
|
|
@@ -331,8 +337,8 @@ def parse_url(url):
|
|
|
331
337
|
endpoint = netloc[
|
|
332
338
|
hostname_index_in_netloc : hostname_index_in_netloc + len(lower_hostname)
|
|
333
339
|
]
|
|
334
|
-
|
|
335
|
-
|
|
340
|
+
if parsed_url.port:
|
|
341
|
+
endpoint += f":{parsed_url.port}"
|
|
336
342
|
return schema, endpoint, parsed_url
|
|
337
343
|
|
|
338
344
|
|
|
@@ -774,6 +774,7 @@ class RunDBInterface(ABC):
|
|
|
774
774
|
item_name: Optional[str] = None,
|
|
775
775
|
tag: Optional[str] = None,
|
|
776
776
|
version: Optional[str] = None,
|
|
777
|
+
item_type: mlrun.common.schemas.hub.HubSourceType = mlrun.common.schemas.hub.HubSourceType.functions,
|
|
777
778
|
):
|
|
778
779
|
pass
|
|
779
780
|
|
|
@@ -4310,6 +4310,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
4310
4310
|
item_name: Optional[str] = None,
|
|
4311
4311
|
tag: Optional[str] = None,
|
|
4312
4312
|
version: Optional[str] = None,
|
|
4313
|
+
item_type: HubSourceType = HubSourceType.functions,
|
|
4313
4314
|
) -> list[mlrun.common.schemas.hub.IndexedHubSource]:
|
|
4314
4315
|
"""
|
|
4315
4316
|
List hub sources in the MLRun DB.
|
|
@@ -4317,6 +4318,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
4317
4318
|
:param item_name: Sources contain this item will be returned, If not provided all sources will be returned.
|
|
4318
4319
|
:param tag: Item tag to filter by, supported only if item name is provided.
|
|
4319
4320
|
:param version: Item version to filter by, supported only if item name is provided and tag is not.
|
|
4321
|
+
:param item_type: Item type to filter by, supported only if item name is provided.
|
|
4320
4322
|
|
|
4321
4323
|
:returns: List of indexed hub sources.
|
|
4322
4324
|
"""
|
|
@@ -4324,6 +4326,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
4324
4326
|
params = {}
|
|
4325
4327
|
if item_name:
|
|
4326
4328
|
params["item-name"] = normalize_name(item_name)
|
|
4329
|
+
params["item-type"] = item_type
|
|
4327
4330
|
if tag:
|
|
4328
4331
|
params["tag"] = tag
|
|
4329
4332
|
if version:
|
|
@@ -5200,7 +5203,7 @@ class HTTPRunDB(RunDBInterface):
|
|
|
5200
5203
|
|
|
5201
5204
|
:return: A ModelEndpointDriftValues object containing the drift counts over time.
|
|
5202
5205
|
"""
|
|
5203
|
-
endpoint_path = f"projects/{project}/model-
|
|
5206
|
+
endpoint_path = f"projects/{project}/model-monitoring/drift-over-time"
|
|
5204
5207
|
error_message = f"Failed retrieving drift data for {project}"
|
|
5205
5208
|
response = self.api_call(
|
|
5206
5209
|
method="GET",
|
|
@@ -673,6 +673,7 @@ class NopDB(RunDBInterface):
|
|
|
673
673
|
item_name: Optional[str] = None,
|
|
674
674
|
tag: Optional[str] = None,
|
|
675
675
|
version: Optional[str] = None,
|
|
676
|
+
item_type: mlrun.common.schemas.hub.HubSourceType = mlrun.common.schemas.hub.HubSourceType.functions,
|
|
676
677
|
):
|
|
677
678
|
pass
|
|
678
679
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Copyright 2025 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 .module import get_hub_module, import_module
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Copyright 2025 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 os
|
|
16
|
+
import subprocess
|
|
17
|
+
import sys
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Optional, Union
|
|
20
|
+
|
|
21
|
+
import yaml
|
|
22
|
+
|
|
23
|
+
import mlrun.common.types
|
|
24
|
+
import mlrun.utils
|
|
25
|
+
from mlrun.common.schemas.hub import HubModuleType, HubSourceType
|
|
26
|
+
from mlrun.run import function_to_module, get_object
|
|
27
|
+
from mlrun.utils import logger
|
|
28
|
+
|
|
29
|
+
from ..model import ModelObj
|
|
30
|
+
from ..utils import extend_hub_uri_if_needed
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class HubModule(ModelObj):
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
name: str,
|
|
37
|
+
kind: Union[HubModuleType, str],
|
|
38
|
+
version: Optional[str] = None,
|
|
39
|
+
description: Optional[str] = None,
|
|
40
|
+
categories: Optional[list] = None,
|
|
41
|
+
requirements: Optional[list] = None,
|
|
42
|
+
local_path: Optional[str] = None,
|
|
43
|
+
filename: Optional[str] = None,
|
|
44
|
+
example: Optional[str] = None,
|
|
45
|
+
url: Optional[str] = None,
|
|
46
|
+
**kwargs, # catch all for unused args
|
|
47
|
+
):
|
|
48
|
+
self.name: str = name
|
|
49
|
+
self.version: str = version
|
|
50
|
+
self.kind: HubModuleType = kind
|
|
51
|
+
self.description: str = description or ""
|
|
52
|
+
self.categories: list = categories or []
|
|
53
|
+
self.requirements: list = requirements or []
|
|
54
|
+
self.local_path: str = local_path or ""
|
|
55
|
+
self.filename: str = filename or name + ".py"
|
|
56
|
+
self.example: str = example or ""
|
|
57
|
+
self.url: str = url or ""
|
|
58
|
+
|
|
59
|
+
def module(self):
|
|
60
|
+
"""Import the module after downloading its fils to local_path"""
|
|
61
|
+
try:
|
|
62
|
+
return function_to_module(code=self.filename, workdir=self.local_path)
|
|
63
|
+
except FileNotFoundError:
|
|
64
|
+
searched_path = self.local_path or "./"
|
|
65
|
+
raise FileNotFoundError(
|
|
66
|
+
f"Module file {self.filename} not found in {searched_path}, try calling download_module_files() first"
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
def install_requirements(self) -> None:
|
|
70
|
+
"""
|
|
71
|
+
Install pip-style requirements (e.g., ["pandas>=2.0.0", "requests==2.31.0"]).
|
|
72
|
+
"""
|
|
73
|
+
for req in self.requirements:
|
|
74
|
+
logger.info(f"Installing {req} ...")
|
|
75
|
+
try:
|
|
76
|
+
subprocess.run(
|
|
77
|
+
[sys.executable, "-m", "pip", "install", req], check=True, text=True
|
|
78
|
+
)
|
|
79
|
+
logger.info(f"Installed {req}")
|
|
80
|
+
except subprocess.CalledProcessError as e:
|
|
81
|
+
logger.error(f"Failed to install {req} (exit code {e.returncode})")
|
|
82
|
+
|
|
83
|
+
def download_module_files(self, local_path=None, secrets=None):
|
|
84
|
+
"""
|
|
85
|
+
Download this hub module’s files (code file and, if available, an example notebook) to the target directory
|
|
86
|
+
specified by `local_path` (defaults to the current working directory).
|
|
87
|
+
This path will be used later to locate the code file when importing the module.
|
|
88
|
+
"""
|
|
89
|
+
self.local_path = self.verify_directory(path=local_path)
|
|
90
|
+
source_url, _ = extend_hub_uri_if_needed(
|
|
91
|
+
uri=self.url, asset_type=HubSourceType.modules, file=self.filename
|
|
92
|
+
)
|
|
93
|
+
self._download_object(
|
|
94
|
+
obj_url=source_url, target_name=self.filename, secrets=secrets
|
|
95
|
+
)
|
|
96
|
+
if self.example:
|
|
97
|
+
example_url, _ = extend_hub_uri_if_needed(
|
|
98
|
+
uri=self.url, asset_type=HubSourceType.modules, file=self.example
|
|
99
|
+
)
|
|
100
|
+
self._download_object(
|
|
101
|
+
obj_url=example_url, target_name=self.example, secrets=secrets
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
def _download_object(self, obj_url, target_name, secrets=None):
|
|
105
|
+
data = get_object(url=obj_url, secrets=secrets)
|
|
106
|
+
target_dir = self.local_path if self.local_path is not None else os.getcwd()
|
|
107
|
+
target_filepath = os.path.join(target_dir, target_name)
|
|
108
|
+
with open(target_filepath, "wb") as f:
|
|
109
|
+
f.write(data)
|
|
110
|
+
|
|
111
|
+
@staticmethod
|
|
112
|
+
def verify_directory(path: str) -> Path:
|
|
113
|
+
"""Validate that the given path is an existing directory."""
|
|
114
|
+
if path:
|
|
115
|
+
path = Path(path)
|
|
116
|
+
if not path.exists():
|
|
117
|
+
raise ValueError(f"Path does not exist: {path}")
|
|
118
|
+
if not path.is_dir():
|
|
119
|
+
raise ValueError(f"Path is not a directory: {path}")
|
|
120
|
+
return path
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def get_hub_module(
|
|
124
|
+
url="", download_files=True, secrets=None, local_path=None
|
|
125
|
+
) -> HubModule:
|
|
126
|
+
"""
|
|
127
|
+
Get a hub-module object containing metadata of the requested module.
|
|
128
|
+
:param url: Hub module url in the format "hub://[<source>/]<item-name>[:<tag>]"
|
|
129
|
+
:param download_files: When set to True, the module files (code file and example notebook) are downloaded
|
|
130
|
+
:param secrets: Optional, credentials dict for DB or URL (s3, v3io, ...)
|
|
131
|
+
:param local_path: Path to target directory for the module files. Ignored when download_files is set to False.
|
|
132
|
+
Defaults to the current working directory.
|
|
133
|
+
|
|
134
|
+
:return: HubModule object
|
|
135
|
+
"""
|
|
136
|
+
item_yaml_url, is_hub_uri = extend_hub_uri_if_needed(
|
|
137
|
+
uri=url, asset_type=HubSourceType.modules, file="item.yaml"
|
|
138
|
+
)
|
|
139
|
+
if not is_hub_uri:
|
|
140
|
+
raise mlrun.errors.MLRunInvalidArgumentError("Not a valid hub URL")
|
|
141
|
+
yaml_obj = get_object(url=item_yaml_url, secrets=secrets)
|
|
142
|
+
item_yaml = yaml.safe_load(yaml_obj)
|
|
143
|
+
spec = item_yaml.pop("spec", {})
|
|
144
|
+
hub_module = HubModule(**item_yaml, **spec, url=url)
|
|
145
|
+
if download_files:
|
|
146
|
+
hub_module.download_module_files(local_path=local_path, secrets=secrets)
|
|
147
|
+
return hub_module
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def import_module(url="", install_requirements=False, secrets=None, local_path=None):
|
|
151
|
+
"""
|
|
152
|
+
Import a module from the hub to use directly.
|
|
153
|
+
:param url: hub module url in the format "hub://[<source>/]<item-name>[:<tag>]"
|
|
154
|
+
:param install_requirements: when set to True, the module's requirements are installed.
|
|
155
|
+
:param secrets: optional, credentials dict for DB or URL (s3, v3io, ...)
|
|
156
|
+
:param local_path: Path to target directory for the module files (code and example notebook).
|
|
157
|
+
Defaults to the current working directory.
|
|
158
|
+
|
|
159
|
+
:return: the module
|
|
160
|
+
"""
|
|
161
|
+
hub_module: HubModule = get_hub_module(
|
|
162
|
+
url=url, download_files=True, secrets=secrets, local_path=local_path
|
|
163
|
+
)
|
|
164
|
+
if install_requirements:
|
|
165
|
+
hub_module.install_requirements()
|
|
166
|
+
return hub_module.module()
|
|
@@ -1499,20 +1499,51 @@ class V3IOTSDBConnector(TSDBConnector):
|
|
|
1499
1499
|
) -> mm_schemas.ModelEndpointDriftValues:
|
|
1500
1500
|
table = mm_schemas.V3IOTSDBTables.APP_RESULTS
|
|
1501
1501
|
start, end, interval = self._prepare_aligned_start_end(start, end)
|
|
1502
|
-
|
|
1503
|
-
# get per time-interval x endpoint_id combination the max result status
|
|
1504
1502
|
df = self._get_records(
|
|
1505
1503
|
table=table,
|
|
1506
1504
|
start=start,
|
|
1507
1505
|
end=end,
|
|
1508
|
-
interval=interval,
|
|
1509
|
-
sliding_window_step=interval,
|
|
1510
1506
|
columns=[mm_schemas.ResultData.RESULT_STATUS],
|
|
1511
|
-
agg_funcs=["max"],
|
|
1512
|
-
group_by=mm_schemas.WriterEvent.ENDPOINT_ID,
|
|
1513
1507
|
)
|
|
1508
|
+
df = self._aggregate_raw_drift_data(df, start, end, interval)
|
|
1514
1509
|
if df.empty:
|
|
1515
1510
|
return mm_schemas.ModelEndpointDriftValues(values=[])
|
|
1516
1511
|
df = df[df[f"max({mm_schemas.ResultData.RESULT_STATUS})"] >= 1]
|
|
1517
|
-
df = df.reset_index(names="_wstart")
|
|
1518
1512
|
return self._df_to_drift_data(df)
|
|
1513
|
+
|
|
1514
|
+
@staticmethod
|
|
1515
|
+
def _aggregate_raw_drift_data(
|
|
1516
|
+
df: pd.DataFrame, start: datetime, end: datetime, interval: str
|
|
1517
|
+
) -> pd.DataFrame:
|
|
1518
|
+
if df.empty:
|
|
1519
|
+
return df
|
|
1520
|
+
if not isinstance(df.index, pd.DatetimeIndex):
|
|
1521
|
+
raise TypeError("Expected a DatetimeIndex on the DataFrame (time index).")
|
|
1522
|
+
df[EventFieldType.ENDPOINT_ID] = (
|
|
1523
|
+
df[EventFieldType.ENDPOINT_ID].astype("string").str.strip()
|
|
1524
|
+
) # remove extra data carried by the category dtype
|
|
1525
|
+
window = df.loc[
|
|
1526
|
+
(df.index >= start) & (df.index < end),
|
|
1527
|
+
[mm_schemas.ResultData.RESULT_STATUS, EventFieldType.ENDPOINT_ID],
|
|
1528
|
+
]
|
|
1529
|
+
out = (
|
|
1530
|
+
window.groupby(
|
|
1531
|
+
[
|
|
1532
|
+
EventFieldType.ENDPOINT_ID,
|
|
1533
|
+
pd.Grouper(
|
|
1534
|
+
freq=interval, origin=start, label="left", closed="left"
|
|
1535
|
+
),
|
|
1536
|
+
]
|
|
1537
|
+
# align to start, [start, end) intervals
|
|
1538
|
+
)[mm_schemas.ResultData.RESULT_STATUS]
|
|
1539
|
+
.max()
|
|
1540
|
+
.reset_index()
|
|
1541
|
+
.rename(
|
|
1542
|
+
columns={
|
|
1543
|
+
mm_schemas.ResultData.RESULT_STATUS: f"max({mm_schemas.ResultData.RESULT_STATUS})"
|
|
1544
|
+
}
|
|
1545
|
+
)
|
|
1546
|
+
)
|
|
1547
|
+
return out.rename(
|
|
1548
|
+
columns={"time": "_wstart"}
|
|
1549
|
+
) # rename datetime column to _wstart to align with the tdengine result
|
|
@@ -659,3 +659,26 @@ def get_start_end(
|
|
|
659
659
|
)
|
|
660
660
|
|
|
661
661
|
return start, end
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def validate_time_range(
|
|
665
|
+
start: Optional[datetime.datetime] = None, end: Optional[datetime.datetime] = None
|
|
666
|
+
) -> tuple[datetime.datetime, datetime.datetime]:
|
|
667
|
+
"""
|
|
668
|
+
validate start and end parameters and set default values if needed.
|
|
669
|
+
:param start: Either None or datetime, None is handled as datetime.now(tz=timezone.utc) - timedelta(days=1)
|
|
670
|
+
:param end: Either None or datetime, None is handled as datetime.now(tz=timezone.utc)
|
|
671
|
+
:return: start datetime, end datetime
|
|
672
|
+
"""
|
|
673
|
+
end = end or mlrun.utils.helpers.datetime_now()
|
|
674
|
+
start = start or (end - datetime.timedelta(days=1))
|
|
675
|
+
if start.tzinfo is None or end.tzinfo is None:
|
|
676
|
+
raise mlrun.errors.MLRunInvalidArgumentTypeError(
|
|
677
|
+
"Custom start and end times must contain the timezone."
|
|
678
|
+
)
|
|
679
|
+
if start > end:
|
|
680
|
+
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
681
|
+
"The start time must be before the end time. Note that if end time is not provided, "
|
|
682
|
+
"the current time is used by default."
|
|
683
|
+
)
|
|
684
|
+
return start, end
|
|
@@ -177,7 +177,12 @@ def run_function(
|
|
|
177
177
|
This ensures latest code changes are executed. This argument must be used in
|
|
178
178
|
conjunction with the local=True argument.
|
|
179
179
|
:param output_path: path to store artifacts, when running in a workflow this will be set automatically
|
|
180
|
-
:param retry: Retry configuration for the run, can be a dict or an instance of
|
|
180
|
+
:param retry: Retry configuration for the run, can be a dict or an instance of
|
|
181
|
+
:py:class:`~mlrun.model.Retry`.
|
|
182
|
+
The `count` field in the `Retry` object specifies the number of retry attempts.
|
|
183
|
+
If `count=0`, the run will not be retried.
|
|
184
|
+
The `backoff` field specifies the retry backoff strategy between retry attempts.
|
|
185
|
+
If not provided, no backoff is applied.
|
|
181
186
|
:return: MLRun RunObject or PipelineNodeWrapper
|
|
182
187
|
"""
|
|
183
188
|
if artifact_path:
|
|
@@ -4104,7 +4104,12 @@ class MlrunProject(ModelObj):
|
|
|
4104
4104
|
This ensures latest code changes are executed. This argument must be used in
|
|
4105
4105
|
conjunction with the local=True argument.
|
|
4106
4106
|
:param output_path: path to store artifacts, when running in a workflow this will be set automatically
|
|
4107
|
-
:param retry: Retry configuration for the run, can be a dict or an instance of
|
|
4107
|
+
:param retry: Retry configuration for the run, can be a dict or an instance of
|
|
4108
|
+
:py:class:`~mlrun.model.Retry`.
|
|
4109
|
+
The `count` field in the `Retry` object specifies the number of retry attempts.
|
|
4110
|
+
If `count=0`, the run will not be retried.
|
|
4111
|
+
The `backoff` field specifies the retry backoff strategy between retry attempts.
|
|
4112
|
+
If not provided, no backoff is applied.
|
|
4108
4113
|
:return: MLRun RunObject or PipelineNodeWrapper
|
|
4109
4114
|
"""
|
|
4110
4115
|
if artifact_path:
|
|
@@ -376,7 +376,12 @@ class BaseRuntime(ModelObj):
|
|
|
376
376
|
This ensures latest code changes are executed. This argument must be used in
|
|
377
377
|
conjunction with the local=True argument.
|
|
378
378
|
:param output_path: Default artifact output path.
|
|
379
|
-
:param retry: Retry configuration for the run, can be a dict or an instance of
|
|
379
|
+
:param retry: Retry configuration for the run, can be a dict or an instance of
|
|
380
|
+
:py:class:`~mlrun.model.Retry`.
|
|
381
|
+
The `count` field in the `Retry` object specifies the number of retry attempts.
|
|
382
|
+
If `count=0`, the run will not be retried.
|
|
383
|
+
The `backoff` field specifies the retry backoff strategy between retry attempts.
|
|
384
|
+
If not provided, no backoff is applied.
|
|
380
385
|
:return: Run context object (RunObject) with run metadata, results and status
|
|
381
386
|
"""
|
|
382
387
|
if artifact_path or out_path:
|
|
@@ -443,9 +448,11 @@ class BaseRuntime(ModelObj):
|
|
|
443
448
|
:param runobj: Run context object (RunObject) with run metadata and status
|
|
444
449
|
:return: Dictionary with all the variables that could be parsed
|
|
445
450
|
"""
|
|
451
|
+
active_project = self.metadata.project or config.active_project
|
|
446
452
|
runtime_env = {
|
|
447
|
-
mlrun_constants.MLRUN_ACTIVE_PROJECT:
|
|
448
|
-
|
|
453
|
+
mlrun_constants.MLRUN_ACTIVE_PROJECT: active_project,
|
|
454
|
+
# TODO: Remove this in 1.12.0 as MLRUN_DEFAULT_PROJECT is deprecated and should not be injected anymore
|
|
455
|
+
"MLRUN_DEFAULT_PROJECT": active_project,
|
|
449
456
|
}
|
|
450
457
|
if runobj:
|
|
451
458
|
runtime_env["MLRUN_EXEC_CONFIG"] = runobj.to_json(
|