mlrun 1.10.0rc30__tar.gz → 1.10.0rc32__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.0rc30/mlrun.egg-info → mlrun-1.10.0rc32}/PKG-INFO +6 -6
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/dockerfiles/mlrun-api/requirements.txt +1 -1
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/llm_prompt.py +7 -9
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/model_monitoring/constants.py +5 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/config.py +7 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/execution.py +5 -5
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/_stats.py +4 -3
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/base.py +13 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +60 -0
- mlrun-1.10.0rc32/mlrun/model_monitoring/db/tsdb/tdengine/writer_graph_steps.py +51 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +44 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/writer.py +220 -1
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/projects/project.py +5 -5
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/function.py +5 -2
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/remote.py +79 -6
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/states.py +13 -13
- mlrun-1.10.0rc32/mlrun/utils/version/version.json +4 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32/mlrun.egg-info}/PKG-INFO +6 -6
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun.egg-info/SOURCES.txt +1 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun.egg-info/requires.txt +5 -5
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/requirements.txt +3 -3
- mlrun-1.10.0rc30/mlrun/utils/version/version.json +0 -4
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/LICENSE +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/MANIFEST.in +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/Makefile +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/README.md +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/dependencies.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/dev-requirements.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/archive.zip +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/function.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/infile.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/load-project.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_basics.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_dask.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_db.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_export_import.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_jobs.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_sparkk8s.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/mlrun_vault.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/model.bst +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/new-project.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/nulltst.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/params.csv +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/remote-spark.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/secrets.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/spark-function.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/training.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/v2_model_server.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/examples/xgb_serving.ipynb +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/extras-requirements.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/__main__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/alerts/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/alerts/alert.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/dataset.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/document.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/helpers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/manager.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/model.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/artifacts/plots.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/constants.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/db/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/db/dialects.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/artifact.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/feature_set.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/function.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/model_endpoint.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/pipeline.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/project.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/formatters/run.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/helpers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/model_monitoring/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/model_monitoring/helpers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/runtimes/constants.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/alert.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/api_gateway.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/artifact.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/auth.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/background_task.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/client_spec.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/clusterization_spec.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/common.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/constants.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/datastore_profile.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/events.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/feature_store.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/frontend_spec.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/function.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/http.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/hub.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/k8s.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/memory_reports.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/model_monitoring/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/model_monitoring/functions.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/model_monitoring/grafana.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/model_monitoring/model_endpoints.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/notification.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/object.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/pagination.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/partition.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/pipeline.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/project.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/regex.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/runs.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/runtime_resource.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/schedule.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/secret.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/serving.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/tag.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/schemas/workflow.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/secrets.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/common/types.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/data_types/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/data_types/data_types.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/data_types/infer.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/data_types/spark.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/data_types/to_pandas.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/alibaba_oss.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/azure_blob.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/datastore.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/datastore_profile.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/dbfs_store.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/filestore.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/google_cloud_storage.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/hdfs.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/inmem.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/model_provider/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/model_provider/huggingface_provider.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/model_provider/mock_model_provider.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/model_provider/model_provider.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/model_provider/openai_provider.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/redis.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/remote_client.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/s3.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/snowflake_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/sources.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/spark_udf.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/spark_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/store_resources.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/storeytargets.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/targets.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/v3io.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/vectorstore.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/wasbfs/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/datastore/wasbfs/fs.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/db/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/db/auth_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/db/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/db/factory.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/db/httpdb.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/db/nopdb.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/errors.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/api.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/common.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/feature_set.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/feature_vector.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/feature_vector_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/ingestion.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/dask_merger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/job.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/local_merger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/spark_merger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/retrieval/storey_merger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/feature_store/steps.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/features.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/artifacts_library.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/producer.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_common/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/loggers/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/loggers/logger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_dl_common/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/artifacts_library.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/loggers/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/loggers/logger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/pkl_model_server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plans/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plans/dataset_plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/producer.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/_ml_common/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/auto_mlrun/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/auto_mlrun/auto_mlrun.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/huggingface/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/huggingface/model_server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/callbacks/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/callbacks/callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/callbacks/logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/model_server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/lgbm/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/onnx/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/onnx/dataset.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/onnx/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/onnx/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/onnx/model_server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/parallel_coordinates.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/callbacks/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/callbacks/callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/callbacks/logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/callbacks_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/model_server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/pytorch/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/estimator.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/metric.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/metrics_library.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/sklearn/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/callbacks/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/callbacks/logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/model_server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/tf_keras/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/xgboost/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/xgboost/mlrun_interface.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/xgboost/model_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/frameworks/xgboost/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/hub/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/hub/module.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/k8s_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/launcher/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/launcher/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/launcher/client.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/launcher/factory.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/launcher/local.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/launcher/remote.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/lists.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/api.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/_application_steps.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/context.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/evidently/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/evidently/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/histogram_data_drift.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/applications/results.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/controller.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/_schedules.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/helpers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/v3io/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/features_drift_table.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/helpers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/metrics/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/metrics/histogram_distance.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/stream_processing.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/context_handler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/errors.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packager.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packagers/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packagers/default_packager.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packagers/numpy_packagers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packagers/pandas_packagers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packagers/python_standard_library_packagers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/packagers_manager.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/_archiver.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/_formatter.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/_pickler.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/_supported_format.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/log_hint_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/package/utils/type_hint_utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/platforms/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/platforms/iguazio.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/projects/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/projects/operations.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/projects/pipelines.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/render.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/run.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/daskjob.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/databricks_job/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/databricks_job/databricks_cancel_task.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/databricks_job/databricks_runtime.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/databricks_job/databricks_wrapper.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/funcdoc.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/function_reference.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/generators.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/kubejob.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/local.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/mounts.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/mpijob/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/mpijob/abstract.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/mpijob/v1.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/api_gateway.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/application/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/application/application.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/application/reverse_proxy.go +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/nuclio.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/nuclio/serving.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/pod.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/remotesparkjob.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/sparkjob/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/sparkjob/spark3job.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/runtimes/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/secrets.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/merger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/routers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/server.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/serving_wrapper.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/system_steps.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/utils.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/v1_serving.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/serving/v2_serving.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/track/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/track/tracker.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/track/tracker_manager.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/track/trackers/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/track/trackers/mlflow_tracker.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/async_http.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/azure_vault.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/clones.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/condition_evaluator.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/helpers.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/http.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/logger.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/base.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/console.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/git.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/ipython.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/mail.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/slack.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification/webhook.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/notifications/notification_pusher.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/regex.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/retryer.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/singleton.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/v3io_clients.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/vault.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/version/__init__.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/utils/version/version.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun.egg-info/dependency_links.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun.egg-info/entry_points.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun.egg-info/not-zip-safe +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun.egg-info/top_level.txt +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/packages.py +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/pyproject.toml +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/setup.cfg +0 -0
- {mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mlrun
|
|
3
|
-
Version: 1.10.
|
|
3
|
+
Version: 1.10.0rc32
|
|
4
4
|
Summary: Tracking and config of machine learning runs
|
|
5
5
|
Home-page: https://github.com/mlrun/mlrun
|
|
6
6
|
Author: Yaron Haviv
|
|
@@ -44,15 +44,15 @@ Requires-Dist: semver~=3.0
|
|
|
44
44
|
Requires-Dist: dependency-injector~=4.41
|
|
45
45
|
Requires-Dist: fsspec<=2025.7.0,>=2025.5.1
|
|
46
46
|
Requires-Dist: v3iofs~=0.1.17
|
|
47
|
-
Requires-Dist: storey~=1.10.
|
|
47
|
+
Requires-Dist: storey~=1.10.16
|
|
48
48
|
Requires-Dist: inflection~=0.5.0
|
|
49
49
|
Requires-Dist: python-dotenv~=1.0
|
|
50
50
|
Requires-Dist: setuptools>=75.2
|
|
51
51
|
Requires-Dist: deprecated~=1.2
|
|
52
52
|
Requires-Dist: jinja2>=3.1.6,~=3.1
|
|
53
53
|
Requires-Dist: orjson<4,>=3.9.15
|
|
54
|
-
Requires-Dist: mlrun-pipelines-kfp-common~=0.5.
|
|
55
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.
|
|
54
|
+
Requires-Dist: mlrun-pipelines-kfp-common~=0.5.9
|
|
55
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.8
|
|
56
56
|
Requires-Dist: docstring_parser~=0.16
|
|
57
57
|
Requires-Dist: aiosmtplib~=3.0
|
|
58
58
|
Requires-Dist: deepdiff<9.0.0,>=8.6.1
|
|
@@ -123,7 +123,7 @@ Requires-Dist: timelength~=1.1; extra == "api"
|
|
|
123
123
|
Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "api"
|
|
124
124
|
Requires-Dist: aiosmtplib~=3.0; extra == "api"
|
|
125
125
|
Requires-Dist: pydantic<2,>=1; extra == "api"
|
|
126
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.
|
|
126
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.8; extra == "api"
|
|
127
127
|
Provides-Extra: all
|
|
128
128
|
Requires-Dist: adlfs==2024.12.0; extra == "all"
|
|
129
129
|
Requires-Dist: aiobotocore<2.16,>=2.5.0; extra == "all"
|
|
@@ -215,7 +215,7 @@ Requires-Dist: igz-mgmt~=0.4.1; extra == "complete-api"
|
|
|
215
215
|
Requires-Dist: kafka-python~=2.1.0; extra == "complete-api"
|
|
216
216
|
Requires-Dist: memray~=1.12; sys_platform != "win32" and extra == "complete-api"
|
|
217
217
|
Requires-Dist: mlflow~=2.22; extra == "complete-api"
|
|
218
|
-
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.
|
|
218
|
+
Requires-Dist: mlrun-pipelines-kfp-v1-8~=0.5.8; extra == "complete-api"
|
|
219
219
|
Requires-Dist: msrest~=0.6.21; extra == "complete-api"
|
|
220
220
|
Requires-Dist: objgraph~=3.6; extra == "complete-api"
|
|
221
221
|
Requires-Dist: oss2==2.18.4; extra == "complete-api"
|
|
@@ -29,7 +29,7 @@ class LLMPromptArtifactSpec(ArtifactSpec):
|
|
|
29
29
|
_dict_fields = ArtifactSpec._dict_fields + [
|
|
30
30
|
"prompt_template",
|
|
31
31
|
"prompt_legend",
|
|
32
|
-
"
|
|
32
|
+
"invocation_config",
|
|
33
33
|
"description",
|
|
34
34
|
]
|
|
35
35
|
PROMPT_TEMPLATE_KEYS = ("content", "role")
|
|
@@ -41,7 +41,7 @@ class LLMPromptArtifactSpec(ArtifactSpec):
|
|
|
41
41
|
prompt_template: Optional[list[dict]] = None,
|
|
42
42
|
prompt_path: Optional[str] = None,
|
|
43
43
|
prompt_legend: Optional[dict] = None,
|
|
44
|
-
|
|
44
|
+
invocation_config: Optional[dict] = None,
|
|
45
45
|
description: Optional[str] = None,
|
|
46
46
|
target_path: Optional[str] = None,
|
|
47
47
|
**kwargs,
|
|
@@ -68,13 +68,11 @@ class LLMPromptArtifactSpec(ArtifactSpec):
|
|
|
68
68
|
|
|
69
69
|
self.prompt_template = prompt_template
|
|
70
70
|
self.prompt_legend = prompt_legend
|
|
71
|
-
if
|
|
72
|
-
model_configuration, dict
|
|
73
|
-
):
|
|
71
|
+
if invocation_config is not None and not isinstance(invocation_config, dict):
|
|
74
72
|
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
75
|
-
"LLMPromptArtifact
|
|
73
|
+
"LLMPromptArtifact invocation_config must be a dictionary or None"
|
|
76
74
|
)
|
|
77
|
-
self.
|
|
75
|
+
self.invocation_config = invocation_config or {}
|
|
78
76
|
self.description = description
|
|
79
77
|
self._model_artifact = (
|
|
80
78
|
model_artifact
|
|
@@ -177,7 +175,7 @@ class LLMPromptArtifact(Artifact):
|
|
|
177
175
|
prompt_template: Optional[list[dict]] = None,
|
|
178
176
|
prompt_path: Optional[str] = None,
|
|
179
177
|
prompt_legend: Optional[dict] = None,
|
|
180
|
-
|
|
178
|
+
invocation_config: Optional[dict] = None,
|
|
181
179
|
description: Optional[str] = None,
|
|
182
180
|
target_path=None,
|
|
183
181
|
**kwargs,
|
|
@@ -187,7 +185,7 @@ class LLMPromptArtifact(Artifact):
|
|
|
187
185
|
prompt_path=prompt_path,
|
|
188
186
|
prompt_legend=prompt_legend,
|
|
189
187
|
model_artifact=model_artifact,
|
|
190
|
-
|
|
188
|
+
invocation_config=invocation_config,
|
|
191
189
|
target_path=target_path,
|
|
192
190
|
description=description,
|
|
193
191
|
)
|
|
@@ -196,6 +196,10 @@ class WriterEventKind(MonitoringStrEnum):
|
|
|
196
196
|
RESULT = "result"
|
|
197
197
|
STATS = "stats"
|
|
198
198
|
|
|
199
|
+
@classmethod
|
|
200
|
+
def user_app_outputs(cls):
|
|
201
|
+
return [cls.METRIC, cls.RESULT]
|
|
202
|
+
|
|
199
203
|
|
|
200
204
|
class ControllerEvent(MonitoringStrEnum):
|
|
201
205
|
KIND = "kind"
|
|
@@ -304,6 +308,7 @@ class FileTargetKind:
|
|
|
304
308
|
MONITORING_APPLICATION = "monitoring_application"
|
|
305
309
|
ERRORS = "errors"
|
|
306
310
|
STATS = "stats"
|
|
311
|
+
PARQUET_STATS = "parquet_stats"
|
|
307
312
|
LAST_REQUEST = "last_request"
|
|
308
313
|
|
|
309
314
|
|
|
@@ -649,6 +649,13 @@ default_config = {
|
|
|
649
649
|
"max_replicas": 1,
|
|
650
650
|
},
|
|
651
651
|
},
|
|
652
|
+
"writer_graph": {
|
|
653
|
+
"max_events": 1000,
|
|
654
|
+
"flush_after_seconds": 30,
|
|
655
|
+
"writer_version": "v1", # v1 is the sync version while v2 is async
|
|
656
|
+
"parquet_batching_max_events": 10,
|
|
657
|
+
"parquet_batching_timeout_secs": 30,
|
|
658
|
+
},
|
|
652
659
|
# Store prefixes are used to handle model monitoring storing policies based on project and kind, such as events,
|
|
653
660
|
# stream, and endpoints.
|
|
654
661
|
"store_prefixes": {
|
|
@@ -917,7 +917,7 @@ class MLClientCtx:
|
|
|
917
917
|
prompt_path: Optional[str] = None,
|
|
918
918
|
prompt_legend: Optional[dict] = None,
|
|
919
919
|
model_artifact: Union[ModelArtifact, str] = None,
|
|
920
|
-
|
|
920
|
+
invocation_config: Optional[dict] = None,
|
|
921
921
|
description: Optional[str] = None,
|
|
922
922
|
target_path: Optional[str] = None,
|
|
923
923
|
artifact_path: Optional[str] = None,
|
|
@@ -958,7 +958,7 @@ class MLClientCtx:
|
|
|
958
958
|
},
|
|
959
959
|
},
|
|
960
960
|
model_artifact=model,
|
|
961
|
-
|
|
961
|
+
invocation_config={"temperature": 0.5, "max_tokens": 200},
|
|
962
962
|
description="Prompt for handling customer support queries",
|
|
963
963
|
tag="support-v1",
|
|
964
964
|
labels={"domain": "support"},
|
|
@@ -975,7 +975,7 @@ class MLClientCtx:
|
|
|
975
975
|
}
|
|
976
976
|
},
|
|
977
977
|
model_artifact=model,
|
|
978
|
-
|
|
978
|
+
invocation_config={"temperature": 0.7, "max_tokens": 256},
|
|
979
979
|
description="Q&A prompt template with user-provided question",
|
|
980
980
|
tag="v2",
|
|
981
981
|
labels={"task": "qa", "stage": "experiment"},
|
|
@@ -997,7 +997,7 @@ class MLClientCtx:
|
|
|
997
997
|
with the place-holder name. "description" will point to explanation of what that placeholder represents.
|
|
998
998
|
Useful for documenting and clarifying dynamic parts of the prompt.
|
|
999
999
|
:param model_artifact: Reference to the parent model (either `ModelArtifact` or model URI string).
|
|
1000
|
-
:param
|
|
1000
|
+
:param invocation_config: Dictionary of generation parameters (e.g., temperature, max_tokens).
|
|
1001
1001
|
:param description: Optional description of the prompt.
|
|
1002
1002
|
:param target_path: Absolute target path (instead of using artifact_path + local_path)
|
|
1003
1003
|
:param artifact_path: Target artifact path (when not using the default)
|
|
@@ -1023,7 +1023,7 @@ class MLClientCtx:
|
|
|
1023
1023
|
prompt_path=prompt_path,
|
|
1024
1024
|
prompt_legend=prompt_legend,
|
|
1025
1025
|
model_artifact=model_artifact,
|
|
1026
|
-
|
|
1026
|
+
invocation_config=invocation_config,
|
|
1027
1027
|
target_path=target_path,
|
|
1028
1028
|
description=description,
|
|
1029
1029
|
**kwargs,
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
import abc
|
|
15
15
|
import json
|
|
16
|
+
import typing
|
|
16
17
|
from abc import abstractmethod
|
|
17
18
|
from datetime import datetime, timezone
|
|
18
19
|
from typing import cast
|
|
@@ -73,7 +74,7 @@ class ModelMonitoringStatsFile(abc.ABC):
|
|
|
73
74
|
path=self._item.url,
|
|
74
75
|
)
|
|
75
76
|
|
|
76
|
-
def read(self) -> tuple[dict, datetime]:
|
|
77
|
+
def read(self) -> tuple[dict, typing.Optional[datetime]]:
|
|
77
78
|
"""
|
|
78
79
|
Read the stats data and timestamp saved in file
|
|
79
80
|
:return: tuple[dict, str] dictionary with stats data and timestamp saved in file
|
|
@@ -99,13 +100,13 @@ class ModelMonitoringStatsFile(abc.ABC):
|
|
|
99
100
|
):
|
|
100
101
|
raise
|
|
101
102
|
|
|
102
|
-
logger.
|
|
103
|
+
logger.warning(
|
|
103
104
|
"The Stats file was not found. It should have been created "
|
|
104
105
|
"as a part of the model endpoint's creation",
|
|
105
106
|
path=self._path,
|
|
106
107
|
error=err,
|
|
107
108
|
)
|
|
108
|
-
|
|
109
|
+
return {}, None
|
|
109
110
|
|
|
110
111
|
def write(self, stats: dict, timestamp: datetime) -> None:
|
|
111
112
|
"""
|
|
@@ -60,6 +60,16 @@ class TSDBConnector(ABC):
|
|
|
60
60
|
"""
|
|
61
61
|
pass
|
|
62
62
|
|
|
63
|
+
def apply_writer_steps(self, graph, after, **kwargs) -> None:
|
|
64
|
+
"""
|
|
65
|
+
Apply TSDB steps on the provided writer graph. Throughout these steps, the graph stores metrics / results.
|
|
66
|
+
This data is being used by mlrun UI and the monitoring dashboards in grafana.
|
|
67
|
+
There are 2 different key metric dictionaries that are being generated throughout these steps:
|
|
68
|
+
- metrics (user-defined metrics) - model monitoring application metrics
|
|
69
|
+
- results (user-defined results) - model monitoring application results
|
|
70
|
+
"""
|
|
71
|
+
pass
|
|
72
|
+
|
|
63
73
|
@abstractmethod
|
|
64
74
|
def handle_model_error(self, graph, **kwargs) -> None:
|
|
65
75
|
"""
|
|
@@ -783,3 +793,6 @@ class TSDBConnector(ABC):
|
|
|
783
793
|
)
|
|
784
794
|
)
|
|
785
795
|
return mm_schemas.ModelEndpointDriftValues(values=values)
|
|
796
|
+
|
|
797
|
+
def add_pre_writer_steps(self, graph, after):
|
|
798
|
+
return None
|
{mlrun-1.10.0rc30 → mlrun-1.10.0rc32}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py
RENAMED
|
@@ -22,6 +22,7 @@ import taosws
|
|
|
22
22
|
import mlrun.common.schemas.model_monitoring as mm_schemas
|
|
23
23
|
import mlrun.common.types
|
|
24
24
|
import mlrun.model_monitoring.db.tsdb.tdengine.schemas as tdengine_schemas
|
|
25
|
+
from mlrun.config import config
|
|
25
26
|
from mlrun.datastore.datastore_profile import DatastoreProfile
|
|
26
27
|
from mlrun.model_monitoring.db import TSDBConnector
|
|
27
28
|
from mlrun.model_monitoring.db.tsdb.tdengine.tdengine_connection import (
|
|
@@ -277,6 +278,65 @@ class TDEngineConnector(TSDBConnector):
|
|
|
277
278
|
after="ProcessBeforeTDEngine",
|
|
278
279
|
)
|
|
279
280
|
|
|
281
|
+
def add_pre_writer_steps(self, graph, after):
|
|
282
|
+
return graph.add_step(
|
|
283
|
+
"mlrun.model_monitoring.db.tsdb.tdengine.writer_graph_steps.ProcessBeforeTDEngine",
|
|
284
|
+
name="ProcessBeforeTDEngine",
|
|
285
|
+
after=after,
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
def apply_writer_steps(self, graph, after, **kwargs) -> None:
|
|
289
|
+
graph.add_step(
|
|
290
|
+
"mlrun.datastore.storeytargets.TDEngineStoreyTarget",
|
|
291
|
+
name="tsdb_metrics",
|
|
292
|
+
after=after,
|
|
293
|
+
url=f"ds://{self._tdengine_connection_profile.name}",
|
|
294
|
+
supertable=self.tables[mm_schemas.TDEngineSuperTables.METRICS].super_table,
|
|
295
|
+
table_col=mm_schemas.EventFieldType.TABLE_COLUMN,
|
|
296
|
+
time_col=mm_schemas.WriterEvent.END_INFER_TIME,
|
|
297
|
+
database=self.database,
|
|
298
|
+
graph_shape="cylinder",
|
|
299
|
+
columns=[
|
|
300
|
+
mm_schemas.WriterEvent.START_INFER_TIME,
|
|
301
|
+
mm_schemas.MetricData.METRIC_VALUE,
|
|
302
|
+
],
|
|
303
|
+
tag_cols=[
|
|
304
|
+
mm_schemas.WriterEvent.ENDPOINT_ID,
|
|
305
|
+
mm_schemas.WriterEvent.APPLICATION_NAME,
|
|
306
|
+
mm_schemas.MetricData.METRIC_NAME,
|
|
307
|
+
],
|
|
308
|
+
max_events=config.model_endpoint_monitoring.writer_graph.max_events,
|
|
309
|
+
flush_after_seconds=config.model_endpoint_monitoring.writer_graph.flush_after_seconds,
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
graph.add_step(
|
|
313
|
+
"mlrun.datastore.storeytargets.TDEngineStoreyTarget",
|
|
314
|
+
name="tsdb_app_results",
|
|
315
|
+
after=after,
|
|
316
|
+
url=f"ds://{self._tdengine_connection_profile.name}",
|
|
317
|
+
supertable=self.tables[
|
|
318
|
+
mm_schemas.TDEngineSuperTables.APP_RESULTS
|
|
319
|
+
].super_table,
|
|
320
|
+
table_col=mm_schemas.EventFieldType.TABLE_COLUMN,
|
|
321
|
+
time_col=mm_schemas.WriterEvent.END_INFER_TIME,
|
|
322
|
+
database=self.database,
|
|
323
|
+
graph_shape="cylinder",
|
|
324
|
+
columns=[
|
|
325
|
+
mm_schemas.WriterEvent.START_INFER_TIME,
|
|
326
|
+
mm_schemas.ResultData.RESULT_VALUE,
|
|
327
|
+
mm_schemas.ResultData.RESULT_STATUS,
|
|
328
|
+
mm_schemas.ResultData.RESULT_EXTRA_DATA,
|
|
329
|
+
],
|
|
330
|
+
tag_cols=[
|
|
331
|
+
mm_schemas.WriterEvent.ENDPOINT_ID,
|
|
332
|
+
mm_schemas.WriterEvent.APPLICATION_NAME,
|
|
333
|
+
mm_schemas.ResultData.RESULT_NAME,
|
|
334
|
+
mm_schemas.ResultData.RESULT_KIND,
|
|
335
|
+
],
|
|
336
|
+
max_events=config.model_endpoint_monitoring.writer_graph.max_events,
|
|
337
|
+
flush_after_seconds=config.model_endpoint_monitoring.writer_graph.flush_after_seconds,
|
|
338
|
+
)
|
|
339
|
+
|
|
280
340
|
def handle_model_error(
|
|
281
341
|
self,
|
|
282
342
|
graph,
|
|
@@ -0,0 +1,51 @@
|
|
|
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 datetime import datetime
|
|
16
|
+
|
|
17
|
+
import mlrun.common.schemas.model_monitoring as mm_schemas
|
|
18
|
+
import mlrun.feature_store.steps
|
|
19
|
+
from mlrun.utils import logger
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ProcessBeforeTDEngine(mlrun.feature_store.steps.MapClass):
|
|
23
|
+
def __init__(self, **kwargs):
|
|
24
|
+
"""
|
|
25
|
+
Process the data before writing to TDEngine. This step create the table name.
|
|
26
|
+
|
|
27
|
+
:returns: Event as a dictionary which will be written into the TDEngine Metrics/Results tables.
|
|
28
|
+
"""
|
|
29
|
+
super().__init__(**kwargs)
|
|
30
|
+
|
|
31
|
+
def do(self, event):
|
|
32
|
+
logger.info("Process event before writing to TDEngine", event=event)
|
|
33
|
+
kind = event.get("kind")
|
|
34
|
+
table_name = (
|
|
35
|
+
f"{event[mm_schemas.WriterEvent.ENDPOINT_ID]}_"
|
|
36
|
+
f"{event[mm_schemas.WriterEvent.APPLICATION_NAME]}"
|
|
37
|
+
)
|
|
38
|
+
if kind == mm_schemas.WriterEventKind.RESULT:
|
|
39
|
+
# Write a new result
|
|
40
|
+
event[mm_schemas.EventFieldType.TABLE_COLUMN] = (
|
|
41
|
+
f"{table_name}_{event[mm_schemas.ResultData.RESULT_NAME]}"
|
|
42
|
+
).replace("-", "_")
|
|
43
|
+
elif kind == mm_schemas.WriterEventKind.METRIC:
|
|
44
|
+
# Write a new metric
|
|
45
|
+
event[mm_schemas.EventFieldType.TABLE_COLUMN] = (
|
|
46
|
+
f"{table_name}_{event[mm_schemas.MetricData.METRIC_NAME]}"
|
|
47
|
+
).replace("-", "_")
|
|
48
|
+
event[mm_schemas.WriterEvent.START_INFER_TIME] = datetime.fromisoformat(
|
|
49
|
+
event[mm_schemas.WriterEvent.START_INFER_TIME]
|
|
50
|
+
)
|
|
51
|
+
return event
|
|
@@ -25,6 +25,7 @@ import mlrun.common.schemas.model_monitoring as mm_schemas
|
|
|
25
25
|
import mlrun.feature_store.steps
|
|
26
26
|
import mlrun.utils.v3io_clients
|
|
27
27
|
from mlrun.common.schemas import EventFieldType
|
|
28
|
+
from mlrun.config import config
|
|
28
29
|
from mlrun.model_monitoring.db import TSDBConnector
|
|
29
30
|
from mlrun.model_monitoring.helpers import get_invocations_fqn, get_start_end
|
|
30
31
|
from mlrun.utils import logger
|
|
@@ -369,6 +370,49 @@ class V3IOTSDBConnector(TSDBConnector):
|
|
|
369
370
|
apply_storey_filter()
|
|
370
371
|
apply_tsdb_target(name="tsdb3", after="FilterNotNone")
|
|
371
372
|
|
|
373
|
+
def apply_writer_steps(self, graph, after, **kwargs) -> None:
|
|
374
|
+
graph.add_step(
|
|
375
|
+
"storey.TSDBTarget",
|
|
376
|
+
name="tsdb_metrics",
|
|
377
|
+
after=after,
|
|
378
|
+
path=f"{self.container}/{self.tables[mm_schemas.V3IOTSDBTables.METRICS]}",
|
|
379
|
+
time_col=mm_schemas.WriterEvent.END_INFER_TIME,
|
|
380
|
+
container=self.container,
|
|
381
|
+
v3io_frames=self.v3io_framesd,
|
|
382
|
+
infer_columns_from_data=True,
|
|
383
|
+
graph_shape="cylinder",
|
|
384
|
+
index_cols=[
|
|
385
|
+
mm_schemas.WriterEvent.APPLICATION_NAME,
|
|
386
|
+
mm_schemas.WriterEvent.ENDPOINT_NAME,
|
|
387
|
+
mm_schemas.WriterEvent.ENDPOINT_ID,
|
|
388
|
+
mm_schemas.MetricData.METRIC_NAME,
|
|
389
|
+
],
|
|
390
|
+
max_events=config.model_endpoint_monitoring.writer_graph.max_events,
|
|
391
|
+
flush_after_seconds=config.model_endpoint_monitoring.writer_graph.flush_after_seconds,
|
|
392
|
+
key=mm_schemas.EventFieldType.ENDPOINT_ID,
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
graph.add_step(
|
|
396
|
+
"storey.TSDBTarget",
|
|
397
|
+
name="tsdb_app_results",
|
|
398
|
+
after=after,
|
|
399
|
+
path=f"{self.container}/{self.tables[mm_schemas.V3IOTSDBTables.APP_RESULTS]}",
|
|
400
|
+
time_col=mm_schemas.WriterEvent.END_INFER_TIME,
|
|
401
|
+
container=self.container,
|
|
402
|
+
v3io_frames=self.v3io_framesd,
|
|
403
|
+
infer_columns_from_data=True,
|
|
404
|
+
graph_shape="cylinder",
|
|
405
|
+
index_cols=[
|
|
406
|
+
mm_schemas.WriterEvent.APPLICATION_NAME,
|
|
407
|
+
mm_schemas.WriterEvent.ENDPOINT_NAME,
|
|
408
|
+
mm_schemas.WriterEvent.ENDPOINT_ID,
|
|
409
|
+
mm_schemas.ResultData.RESULT_NAME,
|
|
410
|
+
],
|
|
411
|
+
max_events=config.model_endpoint_monitoring.writer_graph.max_events,
|
|
412
|
+
flush_after_seconds=config.model_endpoint_monitoring.writer_graph.flush_after_seconds,
|
|
413
|
+
key=mm_schemas.EventFieldType.ENDPOINT_ID,
|
|
414
|
+
)
|
|
415
|
+
|
|
372
416
|
def handle_model_error(
|
|
373
417
|
self,
|
|
374
418
|
graph,
|
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
|
+
import typing
|
|
16
17
|
from datetime import datetime, timezone
|
|
17
18
|
from typing import Any, Callable, NewType, Optional
|
|
18
19
|
|
|
20
|
+
import storey
|
|
21
|
+
|
|
19
22
|
import mlrun.common.model_monitoring
|
|
20
23
|
import mlrun.common.schemas
|
|
21
24
|
import mlrun.common.schemas.alert as alert_objects
|
|
@@ -31,6 +34,8 @@ from mlrun.common.schemas.model_monitoring.constants import (
|
|
|
31
34
|
WriterEvent,
|
|
32
35
|
WriterEventKind,
|
|
33
36
|
)
|
|
37
|
+
from mlrun.config import config
|
|
38
|
+
from mlrun.model_monitoring.db import TSDBConnector
|
|
34
39
|
from mlrun.model_monitoring.db._stats import (
|
|
35
40
|
ModelMonitoringCurrentStatsFile,
|
|
36
41
|
ModelMonitoringDriftMeasuresFile,
|
|
@@ -73,7 +78,6 @@ class ModelMonitoringWriter(StepToDict):
|
|
|
73
78
|
self._tsdb_connector = mlrun.model_monitoring.get_tsdb_connector(
|
|
74
79
|
project=self.project, secret_provider=secret_provider
|
|
75
80
|
)
|
|
76
|
-
self._endpoints_records = {}
|
|
77
81
|
|
|
78
82
|
def _generate_event_on_drift(
|
|
79
83
|
self,
|
|
@@ -226,3 +230,218 @@ class ModelMonitoringWriter(StepToDict):
|
|
|
226
230
|
)
|
|
227
231
|
|
|
228
232
|
logger.info("Model monitoring writer finished handling event")
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class WriterGraphFactory:
|
|
236
|
+
def __init__(
|
|
237
|
+
self,
|
|
238
|
+
parquet_path: str,
|
|
239
|
+
):
|
|
240
|
+
self.parquet_path = parquet_path
|
|
241
|
+
self.parquet_batching_max_events = (
|
|
242
|
+
config.model_endpoint_monitoring.writer_graph.max_events
|
|
243
|
+
)
|
|
244
|
+
self.parquet_batching_timeout_secs = (
|
|
245
|
+
config.model_endpoint_monitoring.writer_graph.parquet_batching_timeout_secs
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
def apply_writer_graph(
|
|
249
|
+
self,
|
|
250
|
+
fn: mlrun.runtimes.ServingRuntime,
|
|
251
|
+
tsdb_connector: TSDBConnector,
|
|
252
|
+
):
|
|
253
|
+
graph = typing.cast(
|
|
254
|
+
mlrun.serving.states.RootFlowStep,
|
|
255
|
+
fn.set_topology(mlrun.serving.states.StepKinds.flow, engine="async"),
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
graph.to("ReconstructWriterEvent", "event_reconstructor")
|
|
259
|
+
step = tsdb_connector.add_pre_writer_steps(
|
|
260
|
+
graph=graph, after="event_reconstructor"
|
|
261
|
+
)
|
|
262
|
+
before_choice = step.name if step else "event_reconstructor"
|
|
263
|
+
graph.add_step("KindChoice", "kind_choice_step", after=before_choice)
|
|
264
|
+
tsdb_connector.apply_writer_steps(
|
|
265
|
+
graph=graph,
|
|
266
|
+
after="kind_choice_step",
|
|
267
|
+
)
|
|
268
|
+
graph.add_step(
|
|
269
|
+
"AlertGenerator",
|
|
270
|
+
"alert_generator",
|
|
271
|
+
after="kind_choice_step",
|
|
272
|
+
project=fn.metadata.project,
|
|
273
|
+
)
|
|
274
|
+
graph.add_step(
|
|
275
|
+
"storey.Filter",
|
|
276
|
+
name="filter_none",
|
|
277
|
+
_fn="(event is not None)",
|
|
278
|
+
after="alert_generator",
|
|
279
|
+
)
|
|
280
|
+
graph.add_step(
|
|
281
|
+
"mlrun.serving.remote.MLRunAPIRemoteStep",
|
|
282
|
+
name="alert_generator_api_call",
|
|
283
|
+
after="filter_none",
|
|
284
|
+
method="POST",
|
|
285
|
+
path=f"projects/{fn.metadata.project}/events/{{kind}}",
|
|
286
|
+
fill_placeholders=True,
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
graph.add_step(
|
|
290
|
+
"mlrun.datastore.storeytargets.ParquetStoreyTarget",
|
|
291
|
+
alternative_v3io_access_key=mlrun.common.schemas.model_monitoring.ProjectSecretKeys.ACCESS_KEY,
|
|
292
|
+
name="stats_writer",
|
|
293
|
+
after="kind_choice_step",
|
|
294
|
+
graph_shape="cylinder",
|
|
295
|
+
path=self.parquet_path
|
|
296
|
+
if self.parquet_path.endswith("/")
|
|
297
|
+
else self.parquet_path + "/",
|
|
298
|
+
max_events=self.parquet_batching_max_events,
|
|
299
|
+
flush_after_seconds=self.parquet_batching_timeout_secs,
|
|
300
|
+
columns=[
|
|
301
|
+
StatsData.TIMESTAMP,
|
|
302
|
+
StatsData.STATS,
|
|
303
|
+
WriterEvent.ENDPOINT_ID,
|
|
304
|
+
StatsData.STATS_NAME,
|
|
305
|
+
],
|
|
306
|
+
partition_cols=[WriterEvent.ENDPOINT_ID, StatsData.STATS_NAME],
|
|
307
|
+
single_file=True,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
class ReconstructWriterEvent(storey.MapClass):
|
|
312
|
+
def __init__(self):
|
|
313
|
+
super().__init__()
|
|
314
|
+
|
|
315
|
+
def do(self, event: dict) -> dict[str, Any]:
|
|
316
|
+
logger.info("Reconstructing the event", event=event)
|
|
317
|
+
kind = event.pop(WriterEvent.EVENT_KIND, WriterEventKind.RESULT)
|
|
318
|
+
result_event = _AppResultEvent(json.loads(event.pop(WriterEvent.DATA, "{}")))
|
|
319
|
+
result_event.update(_AppResultEvent(event))
|
|
320
|
+
|
|
321
|
+
expected_keys = list(
|
|
322
|
+
set(WriterEvent.list()).difference(
|
|
323
|
+
[WriterEvent.EVENT_KIND, WriterEvent.DATA]
|
|
324
|
+
)
|
|
325
|
+
)
|
|
326
|
+
if kind == WriterEventKind.METRIC:
|
|
327
|
+
expected_keys.extend(MetricData.list())
|
|
328
|
+
elif kind == WriterEventKind.RESULT:
|
|
329
|
+
expected_keys.extend(ResultData.list())
|
|
330
|
+
elif kind == WriterEventKind.STATS:
|
|
331
|
+
expected_keys.extend(StatsData.list())
|
|
332
|
+
else:
|
|
333
|
+
raise _WriterEventValueError(
|
|
334
|
+
f"Unknown event kind: {kind}, expected one of: {WriterEventKind.list()}"
|
|
335
|
+
)
|
|
336
|
+
missing_keys = [key for key in expected_keys if key not in result_event]
|
|
337
|
+
if missing_keys:
|
|
338
|
+
raise _WriterEventValueError(
|
|
339
|
+
f"The received event misses some keys compared to the expected "
|
|
340
|
+
f"monitoring application event schema: {missing_keys} for event kind {kind}"
|
|
341
|
+
)
|
|
342
|
+
result_event["kind"] = kind
|
|
343
|
+
if kind in WriterEventKind.user_app_outputs():
|
|
344
|
+
result_event[WriterEvent.END_INFER_TIME] = datetime.fromisoformat(
|
|
345
|
+
event[WriterEvent.END_INFER_TIME]
|
|
346
|
+
)
|
|
347
|
+
if kind == WriterEventKind.STATS:
|
|
348
|
+
result_event[StatsData.STATS] = json.dumps(result_event[StatsData.STATS])
|
|
349
|
+
return result_event
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
class KindChoice(storey.Choice):
|
|
353
|
+
def select_outlets(self, event):
|
|
354
|
+
kind = event.get("kind")
|
|
355
|
+
logger.info("Selecting the outlet for the event", kind=kind)
|
|
356
|
+
if kind == WriterEventKind.METRIC:
|
|
357
|
+
outlets = ["tsdb_metrics"]
|
|
358
|
+
elif kind == WriterEventKind.RESULT:
|
|
359
|
+
outlets = ["tsdb_app_results", "alert_generator"]
|
|
360
|
+
elif kind == WriterEventKind.STATS:
|
|
361
|
+
outlets = ["stats_writer"]
|
|
362
|
+
else:
|
|
363
|
+
raise _WriterEventValueError(
|
|
364
|
+
f"Unknown event kind: {kind}, expected one of: {WriterEventKind.list()}"
|
|
365
|
+
)
|
|
366
|
+
return outlets
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
class AlertGenerator(storey.MapClass):
|
|
370
|
+
def __init__(self, project: str, **kwargs):
|
|
371
|
+
self.project = project
|
|
372
|
+
super().__init__(**kwargs)
|
|
373
|
+
|
|
374
|
+
def do(self, event: dict) -> Optional[dict[str, Any]]:
|
|
375
|
+
kind = event.pop(WriterEvent.EVENT_KIND, WriterEventKind.RESULT)
|
|
376
|
+
if (
|
|
377
|
+
mlrun.mlconf.alerts.mode == mlrun.common.schemas.alert.AlertsModes.enabled
|
|
378
|
+
and kind == WriterEventKind.RESULT
|
|
379
|
+
and (
|
|
380
|
+
event[ResultData.RESULT_STATUS] == ResultStatusApp.detected.value
|
|
381
|
+
or event[ResultData.RESULT_STATUS]
|
|
382
|
+
== ResultStatusApp.potential_detection.value
|
|
383
|
+
)
|
|
384
|
+
):
|
|
385
|
+
event_value = {
|
|
386
|
+
"app_name": event[WriterEvent.APPLICATION_NAME],
|
|
387
|
+
"model": event[WriterEvent.ENDPOINT_NAME],
|
|
388
|
+
"model_endpoint_id": event[WriterEvent.ENDPOINT_ID],
|
|
389
|
+
"result_name": event[ResultData.RESULT_NAME],
|
|
390
|
+
"result_value": event[ResultData.RESULT_VALUE],
|
|
391
|
+
}
|
|
392
|
+
data = self._generate_event_data(
|
|
393
|
+
entity_id=get_result_instance_fqn(
|
|
394
|
+
event[WriterEvent.ENDPOINT_ID],
|
|
395
|
+
event[WriterEvent.APPLICATION_NAME],
|
|
396
|
+
event[ResultData.RESULT_NAME],
|
|
397
|
+
),
|
|
398
|
+
result_status=event[ResultData.RESULT_STATUS],
|
|
399
|
+
event_value=event_value,
|
|
400
|
+
project_name=self.project,
|
|
401
|
+
result_kind=event[ResultData.RESULT_KIND],
|
|
402
|
+
)
|
|
403
|
+
event = data.dict()
|
|
404
|
+
logger.info("Generated alert event", event=event)
|
|
405
|
+
return event
|
|
406
|
+
return None
|
|
407
|
+
|
|
408
|
+
@staticmethod
|
|
409
|
+
def _generate_alert_event_kind(
|
|
410
|
+
result_kind: int, result_status: int
|
|
411
|
+
) -> alert_objects.EventKind:
|
|
412
|
+
"""Generate the required Event Kind format for the alerting system"""
|
|
413
|
+
event_kind = ResultKindApp(value=result_kind).name
|
|
414
|
+
|
|
415
|
+
if result_status == ResultStatusApp.detected.value:
|
|
416
|
+
event_kind = f"{event_kind}_detected"
|
|
417
|
+
else:
|
|
418
|
+
event_kind = f"{event_kind}_suspected"
|
|
419
|
+
return alert_objects.EventKind(
|
|
420
|
+
value=mlrun.utils.helpers.normalize_name(event_kind)
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
def _generate_event_data(
|
|
424
|
+
self,
|
|
425
|
+
entity_id: str,
|
|
426
|
+
result_status: int,
|
|
427
|
+
event_value: dict,
|
|
428
|
+
project_name: str,
|
|
429
|
+
result_kind: int,
|
|
430
|
+
) -> mlrun.common.schemas.Event:
|
|
431
|
+
entity = mlrun.common.schemas.alert.EventEntities(
|
|
432
|
+
kind=alert_objects.EventEntityKind.MODEL_ENDPOINT_RESULT,
|
|
433
|
+
project=project_name,
|
|
434
|
+
ids=[entity_id],
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
event_kind = self._generate_alert_event_kind(
|
|
438
|
+
result_status=result_status, result_kind=result_kind
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
event_data = mlrun.common.schemas.Event(
|
|
442
|
+
kind=alert_objects.EventKind(value=event_kind),
|
|
443
|
+
entity=entity,
|
|
444
|
+
value_dict=event_value,
|
|
445
|
+
)
|
|
446
|
+
|
|
447
|
+
return event_data
|