mlrun 1.10.0rc40__tar.gz → 1.10.0rc41__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.

Files changed (400) hide show
  1. {mlrun-1.10.0rc40/mlrun.egg-info → mlrun-1.10.0rc41}/PKG-INFO +1 -1
  2. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/model_monitoring/helpers.py +1 -1
  3. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/secrets.py +22 -1
  4. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model.py +7 -1
  5. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/context.py +1 -0
  6. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/base.py +2 -4
  7. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +8 -9
  8. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +154 -76
  9. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/projects/project.py +15 -2
  10. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/mounts.py +5 -0
  11. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/serving.py +7 -1
  12. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/pod.py +59 -10
  13. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/states.py +45 -21
  14. mlrun-1.10.0rc41/mlrun/utils/version/version.json +4 -0
  15. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41/mlrun.egg-info}/PKG-INFO +1 -1
  16. mlrun-1.10.0rc40/mlrun/utils/version/version.json +0 -4
  17. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/LICENSE +0 -0
  18. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/MANIFEST.in +0 -0
  19. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/Makefile +0 -0
  20. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/README.md +0 -0
  21. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/dependencies.py +0 -0
  22. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/dev-requirements.txt +0 -0
  23. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/dockerfiles/mlrun-api/requirements.txt +0 -0
  24. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/archive.zip +0 -0
  25. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/function.py +0 -0
  26. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/handler.py +0 -0
  27. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/infile.txt +0 -0
  28. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/load-project.ipynb +0 -0
  29. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_basics.ipynb +0 -0
  30. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_dask.ipynb +0 -0
  31. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_db.ipynb +0 -0
  32. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_export_import.ipynb +0 -0
  33. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_jobs.ipynb +0 -0
  34. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_sparkk8s.ipynb +0 -0
  35. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/mlrun_vault.ipynb +0 -0
  36. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/model.bst +0 -0
  37. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/new-project.ipynb +0 -0
  38. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/nulltst.py +0 -0
  39. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/params.csv +0 -0
  40. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/remote-spark.ipynb +0 -0
  41. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/secrets.txt +0 -0
  42. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/spark-function.py +0 -0
  43. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/training.py +0 -0
  44. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/v2_model_server.ipynb +0 -0
  45. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/examples/xgb_serving.ipynb +0 -0
  46. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/extras-requirements.txt +0 -0
  47. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/__init__.py +0 -0
  48. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/__main__.py +0 -0
  49. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/alerts/__init__.py +0 -0
  50. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/alerts/alert.py +0 -0
  51. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/__init__.py +0 -0
  52. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/base.py +0 -0
  53. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/dataset.py +0 -0
  54. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/document.py +0 -0
  55. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/helpers.py +0 -0
  56. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/llm_prompt.py +0 -0
  57. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/manager.py +0 -0
  58. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/model.py +0 -0
  59. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/artifacts/plots.py +0 -0
  60. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/__init__.py +0 -0
  61. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/constants.py +0 -0
  62. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/db/__init__.py +0 -0
  63. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/db/dialects.py +0 -0
  64. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/__init__.py +0 -0
  65. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/artifact.py +0 -0
  66. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/base.py +0 -0
  67. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/feature_set.py +0 -0
  68. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/function.py +0 -0
  69. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/model_endpoint.py +0 -0
  70. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/pipeline.py +0 -0
  71. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/project.py +0 -0
  72. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/formatters/run.py +0 -0
  73. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/helpers.py +0 -0
  74. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/model_monitoring/__init__.py +0 -0
  75. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/runtimes/constants.py +0 -0
  76. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/__init__.py +0 -0
  77. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/alert.py +0 -0
  78. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/api_gateway.py +0 -0
  79. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/artifact.py +0 -0
  80. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/auth.py +0 -0
  81. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/background_task.py +0 -0
  82. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/client_spec.py +0 -0
  83. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/clusterization_spec.py +0 -0
  84. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/common.py +0 -0
  85. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/constants.py +0 -0
  86. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/datastore_profile.py +0 -0
  87. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/events.py +0 -0
  88. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/feature_store.py +0 -0
  89. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/frontend_spec.py +0 -0
  90. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/function.py +0 -0
  91. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/http.py +0 -0
  92. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/hub.py +0 -0
  93. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/k8s.py +0 -0
  94. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/memory_reports.py +0 -0
  95. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/model_monitoring/__init__.py +0 -0
  96. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/model_monitoring/constants.py +0 -0
  97. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/model_monitoring/functions.py +0 -0
  98. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/model_monitoring/grafana.py +0 -0
  99. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/model_monitoring/model_endpoints.py +0 -0
  100. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/notification.py +0 -0
  101. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/object.py +0 -0
  102. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/pagination.py +0 -0
  103. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/partition.py +0 -0
  104. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/pipeline.py +0 -0
  105. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/project.py +0 -0
  106. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/regex.py +0 -0
  107. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/runs.py +0 -0
  108. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/runtime_resource.py +0 -0
  109. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/schedule.py +0 -0
  110. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/secret.py +0 -0
  111. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/serving.py +0 -0
  112. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/tag.py +0 -0
  113. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/schemas/workflow.py +0 -0
  114. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/common/types.py +0 -0
  115. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/config.py +0 -0
  116. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/data_types/__init__.py +0 -0
  117. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/data_types/data_types.py +0 -0
  118. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/data_types/infer.py +0 -0
  119. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/data_types/spark.py +0 -0
  120. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/data_types/to_pandas.py +0 -0
  121. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/__init__.py +0 -0
  122. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/alibaba_oss.py +0 -0
  123. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/azure_blob.py +0 -0
  124. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/base.py +0 -0
  125. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/datastore.py +0 -0
  126. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/datastore_profile.py +0 -0
  127. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/dbfs_store.py +0 -0
  128. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/filestore.py +0 -0
  129. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/google_cloud_storage.py +0 -0
  130. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/hdfs.py +0 -0
  131. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/inmem.py +0 -0
  132. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/model_provider/__init__.py +0 -0
  133. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/model_provider/huggingface_provider.py +0 -0
  134. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/model_provider/mock_model_provider.py +0 -0
  135. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/model_provider/model_provider.py +0 -0
  136. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/model_provider/openai_provider.py +0 -0
  137. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/redis.py +0 -0
  138. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/remote_client.py +0 -0
  139. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/s3.py +0 -0
  140. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/snowflake_utils.py +0 -0
  141. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/sources.py +0 -0
  142. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/spark_udf.py +0 -0
  143. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/spark_utils.py +0 -0
  144. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/store_resources.py +0 -0
  145. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/storeytargets.py +0 -0
  146. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/targets.py +0 -0
  147. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/utils.py +0 -0
  148. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/v3io.py +0 -0
  149. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/vectorstore.py +0 -0
  150. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/wasbfs/__init__.py +0 -0
  151. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/datastore/wasbfs/fs.py +0 -0
  152. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/db/__init__.py +0 -0
  153. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/db/auth_utils.py +0 -0
  154. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/db/base.py +0 -0
  155. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/db/factory.py +0 -0
  156. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/db/httpdb.py +0 -0
  157. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/db/nopdb.py +0 -0
  158. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/errors.py +0 -0
  159. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/execution.py +0 -0
  160. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/__init__.py +0 -0
  161. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/api.py +0 -0
  162. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/common.py +0 -0
  163. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/feature_set.py +0 -0
  164. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/feature_vector.py +0 -0
  165. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/feature_vector_utils.py +0 -0
  166. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/ingestion.py +0 -0
  167. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/__init__.py +0 -0
  168. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/base.py +0 -0
  169. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/dask_merger.py +0 -0
  170. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/job.py +0 -0
  171. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/local_merger.py +0 -0
  172. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/spark_merger.py +0 -0
  173. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/retrieval/storey_merger.py +0 -0
  174. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/feature_store/steps.py +0 -0
  175. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/features.py +0 -0
  176. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/__init__.py +0 -0
  177. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/__init__.py +0 -0
  178. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/artifacts_library.py +0 -0
  179. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/mlrun_interface.py +0 -0
  180. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/model_handler.py +0 -0
  181. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/plan.py +0 -0
  182. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/producer.py +0 -0
  183. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_common/utils.py +0 -0
  184. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/__init__.py +0 -0
  185. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/loggers/__init__.py +0 -0
  186. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/loggers/logger.py +0 -0
  187. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +0 -0
  188. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +0 -0
  189. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/model_handler.py +0 -0
  190. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_dl_common/utils.py +0 -0
  191. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/__init__.py +0 -0
  192. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/artifacts_library.py +0 -0
  193. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/loggers/__init__.py +0 -0
  194. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/loggers/logger.py +0 -0
  195. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +0 -0
  196. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/model_handler.py +0 -0
  197. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/pkl_model_server.py +0 -0
  198. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plan.py +0 -0
  199. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plans/__init__.py +0 -0
  200. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +0 -0
  201. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +0 -0
  202. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plans/dataset_plan.py +0 -0
  203. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +0 -0
  204. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +0 -0
  205. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/producer.py +0 -0
  206. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/_ml_common/utils.py +0 -0
  207. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/auto_mlrun/__init__.py +0 -0
  208. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/auto_mlrun/auto_mlrun.py +0 -0
  209. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/huggingface/__init__.py +0 -0
  210. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/huggingface/model_server.py +0 -0
  211. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/__init__.py +0 -0
  212. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/callbacks/__init__.py +0 -0
  213. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/callbacks/callback.py +0 -0
  214. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/callbacks/logging_callback.py +0 -0
  215. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +0 -0
  216. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +0 -0
  217. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +0 -0
  218. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +0 -0
  219. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +0 -0
  220. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/model_handler.py +0 -0
  221. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/model_server.py +0 -0
  222. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/lgbm/utils.py +0 -0
  223. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/onnx/__init__.py +0 -0
  224. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/onnx/dataset.py +0 -0
  225. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/onnx/mlrun_interface.py +0 -0
  226. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/onnx/model_handler.py +0 -0
  227. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/onnx/model_server.py +0 -0
  228. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/parallel_coordinates.py +0 -0
  229. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/__init__.py +0 -0
  230. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/callbacks/__init__.py +0 -0
  231. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/callbacks/callback.py +0 -0
  232. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/callbacks/logging_callback.py +0 -0
  233. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +0 -0
  234. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +0 -0
  235. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/callbacks_handler.py +0 -0
  236. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/mlrun_interface.py +0 -0
  237. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/model_handler.py +0 -0
  238. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/model_server.py +0 -0
  239. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/pytorch/utils.py +0 -0
  240. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/__init__.py +0 -0
  241. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/estimator.py +0 -0
  242. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/metric.py +0 -0
  243. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/metrics_library.py +0 -0
  244. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/mlrun_interface.py +0 -0
  245. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/model_handler.py +0 -0
  246. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/sklearn/utils.py +0 -0
  247. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/__init__.py +0 -0
  248. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/callbacks/__init__.py +0 -0
  249. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/callbacks/logging_callback.py +0 -0
  250. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +0 -0
  251. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +0 -0
  252. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/mlrun_interface.py +0 -0
  253. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/model_handler.py +0 -0
  254. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/model_server.py +0 -0
  255. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/tf_keras/utils.py +0 -0
  256. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/xgboost/__init__.py +0 -0
  257. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/xgboost/mlrun_interface.py +0 -0
  258. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/xgboost/model_handler.py +0 -0
  259. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/frameworks/xgboost/utils.py +0 -0
  260. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/hub/__init__.py +0 -0
  261. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/hub/module.py +0 -0
  262. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/k8s_utils.py +0 -0
  263. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/launcher/__init__.py +0 -0
  264. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/launcher/base.py +0 -0
  265. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/launcher/client.py +0 -0
  266. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/launcher/factory.py +0 -0
  267. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/launcher/local.py +0 -0
  268. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/launcher/remote.py +0 -0
  269. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/lists.py +0 -0
  270. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/__init__.py +0 -0
  271. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/api.py +0 -0
  272. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/__init__.py +0 -0
  273. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/_application_steps.py +0 -0
  274. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/base.py +0 -0
  275. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/evidently/__init__.py +0 -0
  276. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/evidently/base.py +0 -0
  277. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/histogram_data_drift.py +0 -0
  278. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/applications/results.py +0 -0
  279. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/controller.py +0 -0
  280. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/__init__.py +0 -0
  281. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/_schedules.py +0 -0
  282. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/_stats.py +0 -0
  283. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/__init__.py +0 -0
  284. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/helpers.py +0 -0
  285. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +0 -0
  286. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -0
  287. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -0
  288. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -0
  289. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/tdengine/writer_graph_steps.py +0 -0
  290. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/v3io/__init__.py +0 -0
  291. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +0 -0
  292. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/features_drift_table.py +0 -0
  293. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/helpers.py +0 -0
  294. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/metrics/__init__.py +0 -0
  295. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/metrics/histogram_distance.py +0 -0
  296. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/stream_processing.py +0 -0
  297. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/model_monitoring/writer.py +0 -0
  298. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/__init__.py +0 -0
  299. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/context_handler.py +0 -0
  300. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/errors.py +0 -0
  301. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packager.py +0 -0
  302. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packagers/__init__.py +0 -0
  303. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packagers/default_packager.py +0 -0
  304. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packagers/numpy_packagers.py +0 -0
  305. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packagers/pandas_packagers.py +0 -0
  306. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packagers/python_standard_library_packagers.py +0 -0
  307. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/packagers_manager.py +0 -0
  308. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/__init__.py +0 -0
  309. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/_archiver.py +0 -0
  310. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/_formatter.py +0 -0
  311. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/_pickler.py +0 -0
  312. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/_supported_format.py +0 -0
  313. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/log_hint_utils.py +0 -0
  314. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/package/utils/type_hint_utils.py +0 -0
  315. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/platforms/__init__.py +0 -0
  316. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/platforms/iguazio.py +0 -0
  317. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/projects/__init__.py +0 -0
  318. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/projects/operations.py +0 -0
  319. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/projects/pipelines.py +0 -0
  320. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/render.py +0 -0
  321. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/run.py +0 -0
  322. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/__init__.py +0 -0
  323. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/base.py +0 -0
  324. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/daskjob.py +0 -0
  325. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/databricks_job/__init__.py +0 -0
  326. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/databricks_job/databricks_cancel_task.py +0 -0
  327. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/databricks_job/databricks_runtime.py +0 -0
  328. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/databricks_job/databricks_wrapper.py +0 -0
  329. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/funcdoc.py +0 -0
  330. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/function_reference.py +0 -0
  331. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/generators.py +0 -0
  332. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/kubejob.py +0 -0
  333. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/local.py +0 -0
  334. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/mpijob/__init__.py +0 -0
  335. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/mpijob/abstract.py +0 -0
  336. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/mpijob/v1.py +0 -0
  337. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/__init__.py +0 -0
  338. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/api_gateway.py +0 -0
  339. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/application/__init__.py +0 -0
  340. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/application/application.py +0 -0
  341. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/application/reverse_proxy.go +0 -0
  342. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/function.py +0 -0
  343. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/nuclio/nuclio.py +0 -0
  344. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/remotesparkjob.py +0 -0
  345. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/sparkjob/__init__.py +0 -0
  346. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/sparkjob/spark3job.py +0 -0
  347. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/runtimes/utils.py +0 -0
  348. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/secrets.py +0 -0
  349. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/__init__.py +0 -0
  350. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/merger.py +0 -0
  351. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/remote.py +0 -0
  352. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/routers.py +0 -0
  353. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/server.py +0 -0
  354. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/serving_wrapper.py +0 -0
  355. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/steps.py +0 -0
  356. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/system_steps.py +0 -0
  357. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/utils.py +0 -0
  358. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/v1_serving.py +0 -0
  359. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/serving/v2_serving.py +0 -0
  360. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/track/__init__.py +0 -0
  361. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/track/tracker.py +0 -0
  362. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/track/tracker_manager.py +0 -0
  363. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/track/trackers/__init__.py +0 -0
  364. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/track/trackers/mlflow_tracker.py +0 -0
  365. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/__init__.py +0 -0
  366. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/async_http.py +0 -0
  367. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/azure_vault.py +0 -0
  368. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/clones.py +0 -0
  369. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/condition_evaluator.py +0 -0
  370. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/helpers.py +0 -0
  371. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/http.py +0 -0
  372. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/logger.py +0 -0
  373. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/__init__.py +0 -0
  374. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/__init__.py +0 -0
  375. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/base.py +0 -0
  376. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/console.py +0 -0
  377. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/git.py +0 -0
  378. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/ipython.py +0 -0
  379. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/mail.py +0 -0
  380. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/slack.py +0 -0
  381. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification/webhook.py +0 -0
  382. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/notifications/notification_pusher.py +0 -0
  383. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/regex.py +0 -0
  384. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/retryer.py +0 -0
  385. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/singleton.py +0 -0
  386. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/v3io_clients.py +0 -0
  387. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/vault.py +0 -0
  388. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/version/__init__.py +0 -0
  389. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun/utils/version/version.py +0 -0
  390. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun.egg-info/SOURCES.txt +0 -0
  391. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun.egg-info/dependency_links.txt +0 -0
  392. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun.egg-info/entry_points.txt +0 -0
  393. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun.egg-info/not-zip-safe +0 -0
  394. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun.egg-info/requires.txt +0 -0
  395. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/mlrun.egg-info/top_level.txt +0 -0
  396. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/packages.py +0 -0
  397. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/pyproject.toml +0 -0
  398. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/requirements.txt +0 -0
  399. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/setup.cfg +0 -0
  400. {mlrun-1.10.0rc40 → mlrun-1.10.0rc41}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.10.0rc40
3
+ Version: 1.10.0rc41
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -170,6 +170,6 @@ def log_background_task_state(
170
170
  f"Model endpoint creation task is still in progress with the current state: "
171
171
  f"{background_task_state}. Events will not be monitored for the next "
172
172
  f"{mlrun.mlconf.model_endpoint_monitoring.model_endpoint_creation_check_period} seconds",
173
- function_name=server.function.name,
173
+ function_name=server.function_name,
174
174
  background_task_check_timestamp=background_task_check_timestamp.isoformat(),
175
175
  )
@@ -11,10 +11,31 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
-
14
+ import re
15
15
  from abc import ABC, abstractmethod
16
16
 
17
17
  import mlrun.common.schemas
18
+ from mlrun.config import config as mlconf
19
+
20
+ _AUTH_SECRET_NAME_TEMPLATE = re.escape(
21
+ mlconf.secret_stores.kubernetes.auth_secret_name.format(
22
+ hashed_access_key="",
23
+ )
24
+ )
25
+ AUTH_SECRET_PATTERN = re.compile(f"^{_AUTH_SECRET_NAME_TEMPLATE}.*")
26
+
27
+
28
+ def validate_not_forbidden_secret(secret_name: str) -> None:
29
+ """
30
+ Forbid client-supplied references to internal MLRun auth/project secrets.
31
+ No-op when running inside the API server (API enrichments are allowed).
32
+ """
33
+ if not secret_name or mlrun.config.is_running_as_api():
34
+ return
35
+ if AUTH_SECRET_PATTERN.match(secret_name):
36
+ raise mlrun.errors.MLRunInvalidArgumentError(
37
+ f"Forbidden secret '{secret_name}' matches MLRun auth-secret pattern."
38
+ )
18
39
 
19
40
 
20
41
  class SecretProviderInterface(ABC):
@@ -29,6 +29,7 @@ import pydantic.v1.error_wrappers
29
29
  import mlrun
30
30
  import mlrun.common.constants as mlrun_constants
31
31
  import mlrun.common.schemas.notification
32
+ import mlrun.common.secrets
32
33
  import mlrun.utils.regex
33
34
 
34
35
  from .utils import (
@@ -1616,7 +1617,12 @@ class RunTemplate(ModelObj):
1616
1617
 
1617
1618
  :returns: The RunTemplate object
1618
1619
  """
1619
-
1620
+ if kind == "azure_vault" and isinstance(source, dict):
1621
+ candidate_secret_name = (source.get("k8s_secret") or "").strip()
1622
+ if candidate_secret_name:
1623
+ mlrun.common.secrets.validate_not_forbidden_secret(
1624
+ candidate_secret_name
1625
+ )
1620
1626
  if kind == "vault" and isinstance(source, list):
1621
1627
  source = {"project": self.metadata.project, "secrets": source}
1622
1628
 
@@ -249,6 +249,7 @@ class MonitoringApplicationContext:
249
249
  project=self.project_name,
250
250
  endpoint_id=self.endpoint_id,
251
251
  feature_analysis=True,
252
+ tsdb_metrics=False,
252
253
  )
253
254
  return self._model_endpoint
254
255
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  from abc import ABC, abstractmethod
16
16
  from datetime import datetime, timedelta
17
- from typing import Callable, ClassVar, Literal, Optional, Union
17
+ from typing import ClassVar, Literal, Optional, Union
18
18
 
19
19
  import pandas as pd
20
20
  import pydantic.v1
@@ -444,11 +444,9 @@ class TSDBConnector(ABC):
444
444
  ]
445
445
  """
446
446
 
447
- async def add_basic_metrics(
447
+ def add_basic_metrics(
448
448
  self,
449
449
  model_endpoint_objects: list[mlrun.common.schemas.ModelEndpoint],
450
- project: str,
451
- run_in_threadpool: Callable,
452
450
  metric_list: Optional[list[str]] = None,
453
451
  ) -> list[mlrun.common.schemas.ModelEndpoint]:
454
452
  raise NotImplementedError()
@@ -14,7 +14,7 @@
14
14
 
15
15
  import threading
16
16
  from datetime import datetime, timedelta
17
- from typing import Callable, Final, Literal, Optional, Union
17
+ from typing import Final, Literal, Optional, Union
18
18
 
19
19
  import pandas as pd
20
20
  import taosws
@@ -1057,7 +1057,6 @@ class TDEngineConnector(TSDBConnector):
1057
1057
  ]
1058
1058
  ):
1059
1059
  metric_objects = []
1060
-
1061
1060
  if not df_results.empty:
1062
1061
  df_results.rename(
1063
1062
  columns={
@@ -1069,7 +1068,9 @@ class TDEngineConnector(TSDBConnector):
1069
1068
  metric_objects.append(
1070
1069
  mm_schemas.ApplicationResultRecord(
1071
1070
  time=datetime.fromisoformat(
1072
- row[mm_schemas.WriterEvent.END_INFER_TIME]
1071
+ row[mm_schemas.WriterEvent.END_INFER_TIME].replace(
1072
+ " +", "+"
1073
+ )
1073
1074
  ),
1074
1075
  result_name=row[mm_schemas.ResultData.RESULT_NAME],
1075
1076
  kind=row[mm_schemas.ResultData.RESULT_KIND],
@@ -1089,7 +1090,9 @@ class TDEngineConnector(TSDBConnector):
1089
1090
  metric_objects.append(
1090
1091
  mm_schemas.ApplicationMetricRecord(
1091
1092
  time=datetime.fromisoformat(
1092
- row[mm_schemas.WriterEvent.END_INFER_TIME]
1093
+ row[mm_schemas.WriterEvent.END_INFER_TIME].replace(
1094
+ " +", "+"
1095
+ )
1093
1096
  ),
1094
1097
  metric_name=row[mm_schemas.MetricData.METRIC_NAME],
1095
1098
  value=row[mm_schemas.MetricData.METRIC_VALUE],
@@ -1248,11 +1251,9 @@ class TDEngineConnector(TSDBConnector):
1248
1251
  df.dropna(inplace=True)
1249
1252
  return df
1250
1253
 
1251
- async def add_basic_metrics(
1254
+ def add_basic_metrics(
1252
1255
  self,
1253
1256
  model_endpoint_objects: list[mlrun.common.schemas.ModelEndpoint],
1254
- project: str,
1255
- run_in_threadpool: Callable,
1256
1257
  metric_list: Optional[list[str]] = None,
1257
1258
  ) -> list[mlrun.common.schemas.ModelEndpoint]:
1258
1259
  """
@@ -1260,8 +1261,6 @@ class TDEngineConnector(TSDBConnector):
1260
1261
 
1261
1262
  :param model_endpoint_objects: A list of `ModelEndpoint` objects that will
1262
1263
  be filled with the relevant basic metrics.
1263
- :param project: The name of the project.
1264
- :param run_in_threadpool: A function that runs another function in a thread pool.
1265
1264
  :param metric_list: List of metrics to include from the time series DB. Defaults to all metrics.
1266
1265
 
1267
1266
  :return: A list of `ModelEndpointMonitoringMetric` objects.
@@ -12,9 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  import math
15
- from datetime import datetime, timedelta
15
+ from datetime import datetime, timedelta, timezone
16
16
  from io import StringIO
17
- from typing import Callable, Literal, Optional, Union
17
+ from typing import Literal, Optional, Union
18
18
 
19
19
  import pandas as pd
20
20
  import v3io_frames
@@ -1230,11 +1230,9 @@ class V3IOTSDBConnector(TSDBConnector):
1230
1230
  )
1231
1231
  return df.reset_index(drop=True)
1232
1232
 
1233
- async def add_basic_metrics(
1233
+ def add_basic_metrics(
1234
1234
  self,
1235
1235
  model_endpoint_objects: list[mlrun.common.schemas.ModelEndpoint],
1236
- project: str,
1237
- run_in_threadpool: Callable,
1238
1236
  metric_list: Optional[list[str]] = None,
1239
1237
  ) -> list[mlrun.common.schemas.ModelEndpoint]:
1240
1238
  """
@@ -1242,8 +1240,6 @@ class V3IOTSDBConnector(TSDBConnector):
1242
1240
 
1243
1241
  :param model_endpoint_objects: A list of `ModelEndpoint` objects that will
1244
1242
  be filled with the relevant basic metrics.
1245
- :param project: The name of the project.
1246
- :param run_in_threadpool: A function that runs another function in a thread pool.
1247
1243
  :param metric_list: List of metrics to include from the time series DB. Defaults to all metrics.
1248
1244
 
1249
1245
  :return: A list of `ModelEndpointMonitoringMetric` objects.
@@ -1272,8 +1268,7 @@ class V3IOTSDBConnector(TSDBConnector):
1272
1268
  function,
1273
1269
  _,
1274
1270
  ) in metric_name_to_function_and_column_name.items():
1275
- metric_name_to_result[metric_name] = await run_in_threadpool(
1276
- function,
1271
+ metric_name_to_result[metric_name] = function(
1277
1272
  endpoint_ids=uids,
1278
1273
  get_raw=True,
1279
1274
  )
@@ -1344,7 +1339,7 @@ class V3IOTSDBConnector(TSDBConnector):
1344
1339
  else:
1345
1340
  filter_query = app_filter_query
1346
1341
 
1347
- df = self._get_records(
1342
+ raw_frames: list[v3io_frames.client.RawFrame] = self._get_records(
1348
1343
  table=mm_schemas.V3IOTSDBTables.APP_RESULTS,
1349
1344
  start=start,
1350
1345
  end=end,
@@ -1353,39 +1348,33 @@ class V3IOTSDBConnector(TSDBConnector):
1353
1348
  mm_schemas.ResultData.RESULT_STATUS,
1354
1349
  ],
1355
1350
  filter_query=filter_query,
1351
+ get_raw=True,
1356
1352
  )
1357
1353
 
1358
- # filter result status
1359
- if result_status_list and not df.empty:
1360
- df = df[df[mm_schemas.ResultData.RESULT_STATUS].isin(result_status_list)]
1361
-
1362
- if df.empty:
1354
+ if not raw_frames:
1363
1355
  return {}
1364
- else:
1365
- # convert application name to lower case
1366
- df[mm_schemas.ApplicationEvent.APPLICATION_NAME] = df[
1367
- mm_schemas.ApplicationEvent.APPLICATION_NAME
1368
- ].str.lower()
1369
-
1370
- df = (
1371
- df[
1372
- [
1373
- mm_schemas.ApplicationEvent.APPLICATION_NAME,
1374
- mm_schemas.ResultData.RESULT_STATUS,
1375
- mm_schemas.ResultData.RESULT_VALUE,
1376
- ]
1377
- ]
1378
- .groupby(
1379
- [
1380
- mm_schemas.ApplicationEvent.APPLICATION_NAME,
1381
- mm_schemas.ResultData.RESULT_STATUS,
1382
- ],
1383
- observed=True,
1384
- )
1385
- .count()
1386
- )
1387
1356
 
1388
- return df[mm_schemas.ResultData.RESULT_VALUE].to_dict()
1357
+ # Count occurrences by (application_name, result_status) from RawFrame objects
1358
+ count_dict = {}
1359
+
1360
+ for frame in raw_frames:
1361
+ # Extract column data from each RawFrame
1362
+ app_name = frame.column_data(mm_schemas.ApplicationEvent.APPLICATION_NAME)[
1363
+ 0
1364
+ ]
1365
+ statuses = frame.column_data(mm_schemas.ResultData.RESULT_STATUS)
1366
+
1367
+ for status in statuses:
1368
+ # Filter by result status if specified
1369
+ if result_status_list and status not in result_status_list:
1370
+ continue
1371
+
1372
+ # Convert application name to lower case
1373
+ key = (app_name.lower(), status)
1374
+
1375
+ # Update the count in the dictionary
1376
+ count_dict[key] = count_dict.get(key, 0) + 1
1377
+ return count_dict
1389
1378
 
1390
1379
  def count_processed_model_endpoints(
1391
1380
  self,
@@ -1543,51 +1532,140 @@ class V3IOTSDBConnector(TSDBConnector):
1543
1532
  ) -> mm_schemas.ModelEndpointDriftValues:
1544
1533
  table = mm_schemas.V3IOTSDBTables.APP_RESULTS
1545
1534
  start, end, interval = self._prepare_aligned_start_end(start, end)
1546
- df = self._get_records(
1535
+ raw_frames: list[v3io_frames.client.RawFrame] = self._get_records(
1547
1536
  table=table,
1548
1537
  start=start,
1549
1538
  end=end,
1550
1539
  columns=[mm_schemas.ResultData.RESULT_STATUS],
1540
+ get_raw=True,
1551
1541
  )
1552
- df = self._aggregate_raw_drift_data(df, start, end, interval)
1553
- if df.empty:
1542
+
1543
+ if not raw_frames:
1544
+ return mm_schemas.ModelEndpointDriftValues(values=[])
1545
+
1546
+ aggregated_data = self._aggregate_raw_drift_data(
1547
+ raw_frames=raw_frames, start=start, end=end, interval=interval
1548
+ )
1549
+ if not aggregated_data:
1550
+ return mm_schemas.ModelEndpointDriftValues(values=[])
1551
+
1552
+ # Filter to only include entries with max result_status >= 1
1553
+ filtered_data = [
1554
+ (endpoint_id, timestamp, max_status)
1555
+ for endpoint_id, timestamp, max_status in aggregated_data
1556
+ if max_status >= 1
1557
+ ]
1558
+
1559
+ if not filtered_data:
1554
1560
  return mm_schemas.ModelEndpointDriftValues(values=[])
1555
- df = df[df[f"max({mm_schemas.ResultData.RESULT_STATUS})"] >= 1]
1556
- return self._df_to_drift_data(df)
1561
+
1562
+ return self._convert_drift_data_to_values(aggregated_data=filtered_data)
1557
1563
 
1558
1564
  @staticmethod
1559
1565
  def _aggregate_raw_drift_data(
1560
- df: pd.DataFrame, start: datetime, end: datetime, interval: str
1561
- ) -> pd.DataFrame:
1562
- if df.empty:
1563
- return df
1564
- if not isinstance(df.index, pd.DatetimeIndex):
1565
- raise TypeError("Expected a DatetimeIndex on the DataFrame (time index).")
1566
- df[EventFieldType.ENDPOINT_ID] = (
1567
- df[EventFieldType.ENDPOINT_ID].astype("string").str.strip()
1568
- ) # remove extra data carried by the category dtype
1569
- window = df.loc[
1570
- (df.index >= start) & (df.index < end),
1571
- [mm_schemas.ResultData.RESULT_STATUS, EventFieldType.ENDPOINT_ID],
1566
+ raw_frames: list[v3io_frames.client.RawFrame],
1567
+ start: datetime,
1568
+ end: datetime,
1569
+ interval: str,
1570
+ ) -> list[tuple[str, datetime, float]]:
1571
+ """
1572
+ Aggregate raw drift data from RawFrame objects.
1573
+
1574
+ :param raw_frames: List of RawFrame objects containing drift data.
1575
+ :param start: Start datetime for filtering data.
1576
+ :param end: End datetime for filtering data.
1577
+ :param interval: Time interval string (e.g., '5min') for aggregation
1578
+
1579
+ :returns: list of tuples: (endpoint_id, timestamp, max_result_status)
1580
+ """
1581
+ if not raw_frames:
1582
+ return []
1583
+
1584
+ # Parse interval to get timedelta
1585
+ interval_td = pd.Timedelta(interval)
1586
+
1587
+ # Collect all data points from RawFrame objects
1588
+ data_points = []
1589
+ for frame in raw_frames:
1590
+ endpoint_id = frame.column_data(EventFieldType.ENDPOINT_ID)[0]
1591
+ result_statuses = frame.column_data(mm_schemas.ResultData.RESULT_STATUS)
1592
+ timestamps = frame.indices()[0].times
1593
+
1594
+ # Combine data from this frame
1595
+ for i, (status, timestamp) in enumerate(zip(result_statuses, timestamps)):
1596
+ # V3IO TSDB returns timestamps in nanoseconds
1597
+ timestamp_dt = pd.Timestamp(
1598
+ timestamp, unit="ns", tzinfo=timezone.utc
1599
+ ).to_pydatetime()
1600
+
1601
+ # Filter by time window
1602
+ if start <= timestamp_dt < end:
1603
+ data_points.append((endpoint_id, timestamp_dt, status))
1604
+
1605
+ if not data_points:
1606
+ return []
1607
+
1608
+ # Group by endpoint_id and time intervals, then find max status
1609
+ # Create time buckets aligned to start
1610
+ grouped_data = {}
1611
+ for endpoint_id, timestamp, status in data_points:
1612
+ # Calculate which interval bucket this timestamp falls into
1613
+ time_diff = timestamp - start
1614
+ bucket_index = int(time_diff / interval_td)
1615
+ bucket_start = start + (bucket_index * interval_td)
1616
+
1617
+ key = (endpoint_id, bucket_start)
1618
+ if key not in grouped_data:
1619
+ grouped_data[key] = status
1620
+ else:
1621
+ # Keep the maximum status value
1622
+ grouped_data[key] = max(grouped_data[key], status)
1623
+
1624
+ # Convert to list of tuples
1625
+ result = [
1626
+ (endpoint_id, timestamp, max_status)
1627
+ for (endpoint_id, timestamp), max_status in grouped_data.items()
1572
1628
  ]
1573
- out = (
1574
- window.groupby(
1575
- [
1576
- EventFieldType.ENDPOINT_ID,
1577
- pd.Grouper(
1578
- freq=interval, origin=start, label="left", closed="left"
1579
- ),
1580
- ]
1581
- # align to start, [start, end) intervals
1582
- )[mm_schemas.ResultData.RESULT_STATUS]
1583
- .max()
1584
- .reset_index()
1585
- .rename(
1586
- columns={
1587
- mm_schemas.ResultData.RESULT_STATUS: f"max({mm_schemas.ResultData.RESULT_STATUS})"
1629
+
1630
+ return result
1631
+
1632
+ @staticmethod
1633
+ def _convert_drift_data_to_values(
1634
+ aggregated_data: list[tuple[str, datetime, float]],
1635
+ ) -> mm_schemas.ModelEndpointDriftValues:
1636
+ """
1637
+ Convert aggregated drift data to ModelEndpointDriftValues format.
1638
+
1639
+ :param aggregated_data: List of tuples (endpoint_id, timestamp, max_result_status)
1640
+ :return: ModelEndpointDriftValues with counts of suspected and detected per timestamp
1641
+ """
1642
+ suspected_val = mm_schemas.constants.ResultStatusApp.potential_detection.value
1643
+ detected_val = mm_schemas.constants.ResultStatusApp.detected.value
1644
+
1645
+ # Group by timestamp and result status, then count occurrences
1646
+ timestamp_status_counts = {}
1647
+ for _, timestamp, max_status in aggregated_data:
1648
+ key = (timestamp, max_status)
1649
+ timestamp_status_counts[key] = timestamp_status_counts.get(key, 0) + 1
1650
+
1651
+ # Organize by timestamp with counts for suspected and detected
1652
+ timestamp_counts = {}
1653
+ for (timestamp, status), count in timestamp_status_counts.items():
1654
+ if timestamp not in timestamp_counts:
1655
+ timestamp_counts[timestamp] = {
1656
+ "count_suspected": 0,
1657
+ "count_detected": 0,
1588
1658
  }
1589
- )
1590
- )
1591
- return out.rename(
1592
- columns={"time": "_wstart"}
1593
- ) # rename datetime column to _wstart to align with the tdengine result
1659
+
1660
+ if status == suspected_val:
1661
+ timestamp_counts[timestamp]["count_suspected"] = count
1662
+ elif status == detected_val:
1663
+ timestamp_counts[timestamp]["count_detected"] = count
1664
+
1665
+ # Convert to the expected format: list of (timestamp, count_suspected, count_detected)
1666
+ values = [
1667
+ (timestamp, counts["count_suspected"], counts["count_detected"])
1668
+ for timestamp, counts in sorted(timestamp_counts.items())
1669
+ ]
1670
+
1671
+ return mm_schemas.ModelEndpointDriftValues(values=values)
@@ -45,6 +45,7 @@ import mlrun.common.runtimes.constants
45
45
  import mlrun.common.schemas.alert
46
46
  import mlrun.common.schemas.artifact
47
47
  import mlrun.common.schemas.model_monitoring.constants as mm_constants
48
+ import mlrun.common.secrets
48
49
  import mlrun.datastore.datastore_profile
49
50
  import mlrun.db
50
51
  import mlrun.errors
@@ -3418,7 +3419,12 @@ class MlrunProject(ModelObj):
3418
3419
  self._initialized = True
3419
3420
  return self.spec._function_objects
3420
3421
 
3421
- def with_secrets(self, kind, source, prefix=""):
3422
+ def with_secrets(
3423
+ self,
3424
+ kind,
3425
+ source,
3426
+ prefix="",
3427
+ ):
3422
3428
  """register a secrets source (file, env or dict)
3423
3429
 
3424
3430
  read secrets from a source provider to be used in workflows, example::
@@ -3440,12 +3446,19 @@ class MlrunProject(ModelObj):
3440
3446
 
3441
3447
  This will enable access to all secrets in vault registered to the current project.
3442
3448
 
3443
- :param kind: secret type (file, inline, env, vault)
3449
+ :param kind: secret type (file, inline, env, vault, azure_vault)
3444
3450
  :param source: secret data or link (see example)
3445
3451
  :param prefix: add a prefix to the keys in this source
3446
3452
 
3447
3453
  :returns: project object
3448
3454
  """
3455
+ # Block using mlrun-auth-secrets.* via azure_vault's k8s_secret param (client-side only)
3456
+ if kind == "azure_vault" and isinstance(source, dict):
3457
+ candidate_secret_name = (source.get("k8s_secret") or "").strip()
3458
+ if candidate_secret_name:
3459
+ mlrun.common.secrets.validate_not_forbidden_secret(
3460
+ candidate_secret_name
3461
+ )
3449
3462
 
3450
3463
  if kind == "vault" and isinstance(source, list):
3451
3464
  source = {"project": self.metadata.name, "secrets": source}
@@ -17,6 +17,8 @@ import typing
17
17
  import warnings
18
18
  from collections import namedtuple
19
19
 
20
+ import mlrun.common.secrets
21
+ import mlrun.errors
20
22
  from mlrun.config import config
21
23
  from mlrun.config import config as mlconf
22
24
  from mlrun.errors import MLRunInvalidArgumentError
@@ -412,6 +414,9 @@ def mount_secret(
412
414
  the specified paths, and unlisted keys will not be
413
415
  present."""
414
416
 
417
+ if secret_name:
418
+ mlrun.common.secrets.validate_not_forbidden_secret(secret_name.strip())
419
+
415
420
  def _mount_secret(runtime: "KubeResource"):
416
421
  # Define the secret volume source
417
422
  secret_volume_source = {
@@ -23,6 +23,7 @@ from nuclio import KafkaTrigger
23
23
 
24
24
  import mlrun
25
25
  import mlrun.common.schemas as schemas
26
+ import mlrun.common.secrets
26
27
  import mlrun.datastore.datastore_profile as ds_profile
27
28
  from mlrun.datastore import get_kafka_brokers_from_dict, parse_kafka_url
28
29
  from mlrun.model import ObjectList
@@ -635,7 +636,12 @@ class ServingRuntime(RemoteRuntime):
635
636
 
636
637
  :returns: The Runtime (function) object
637
638
  """
638
-
639
+ if kind == "azure_vault" and isinstance(source, dict):
640
+ candidate_secret_name = (source.get("k8s_secret") or "").strip()
641
+ if candidate_secret_name:
642
+ mlrun.common.secrets.validate_not_forbidden_secret(
643
+ candidate_secret_name
644
+ )
639
645
  if kind == "vault" and isinstance(source, list):
640
646
  source = {"project": self.metadata.project, "secrets": source}
641
647
 
@@ -20,12 +20,14 @@ import typing
20
20
  import warnings
21
21
  from collections.abc import Iterable
22
22
  from enum import Enum
23
+ from typing import Optional
23
24
 
24
25
  import dotenv
25
26
  import kubernetes.client as k8s_client
26
27
  from kubernetes.client import V1Volume, V1VolumeMount
27
28
 
28
29
  import mlrun.common.constants
30
+ import mlrun.common.secrets
29
31
  import mlrun.errors
30
32
  import mlrun.runtimes.mounts
31
33
  import mlrun.utils.regex
@@ -708,19 +710,45 @@ class KubeResource(BaseRuntime):
708
710
  def spec(self, spec):
709
711
  self._spec = self._verify_dict(spec, "spec", KubeResourceSpec)
710
712
 
711
- def set_env_from_secret(self, name, secret=None, secret_key=None):
712
- """set pod environment var from secret"""
713
- secret_key = secret_key or name
713
+ def set_env_from_secret(
714
+ self,
715
+ name: str,
716
+ secret: Optional[str] = None,
717
+ secret_key: Optional[str] = None,
718
+ ):
719
+ """
720
+ Set an environment variable from a Kubernetes Secret.
721
+ Client-side guard forbids MLRun internal auth/project secrets; no-op on API.
722
+ """
723
+ mlrun.common.secrets.validate_not_forbidden_secret(secret)
724
+ key = secret_key or name
714
725
  value_from = k8s_client.V1EnvVarSource(
715
- secret_key_ref=k8s_client.V1SecretKeySelector(name=secret, key=secret_key)
726
+ secret_key_ref=k8s_client.V1SecretKeySelector(name=secret, key=key)
716
727
  )
717
- return self._set_env(name, value_from=value_from)
728
+ return self._set_env(name=name, value_from=value_from)
718
729
 
719
- def set_env(self, name, value=None, value_from=None):
720
- """set pod environment var from value"""
721
- if value is not None:
722
- return self._set_env(name, value=str(value))
723
- return self._set_env(name, value_from=value_from)
730
+ def set_env(
731
+ self,
732
+ name: str,
733
+ value: Optional[str] = None,
734
+ value_from: Optional[typing.Any] = None,
735
+ ):
736
+ """
737
+ Set an environment variable.
738
+ If value comes from a Secret, validate on client-side only.
739
+ """
740
+ if value_from is not None:
741
+ secret_name = self._extract_secret_name_from_value_from(
742
+ value_from=value_from
743
+ )
744
+ if secret_name:
745
+ mlrun.common.secrets.validate_not_forbidden_secret(secret_name)
746
+ return self._set_env(name=name, value_from=value_from)
747
+
748
+ # Plain literal value path
749
+ return self._set_env(
750
+ name=name, value=(str(value) if value is not None else None)
751
+ )
724
752
 
725
753
  def with_annotations(self, annotations: dict):
726
754
  """set a key/value annotations in the metadata of the pod"""
@@ -1366,6 +1394,27 @@ class KubeResource(BaseRuntime):
1366
1394
 
1367
1395
  return self.status.state
1368
1396
 
1397
+ @staticmethod
1398
+ def _extract_secret_name_from_value_from(
1399
+ value_from: typing.Any,
1400
+ ) -> Optional[str]:
1401
+ """Extract secret name from a V1EnvVarSource or dict representation."""
1402
+ if isinstance(value_from, k8s_client.V1EnvVarSource):
1403
+ if value_from.secret_key_ref:
1404
+ return value_from.secret_key_ref.name
1405
+ elif isinstance(value_from, dict):
1406
+ value_from = (
1407
+ value_from.get("valueFrom")
1408
+ or value_from.get("value_from")
1409
+ or value_from
1410
+ )
1411
+ secret_key_ref = (value_from or {}).get("secretKeyRef") or (
1412
+ value_from or {}
1413
+ ).get("secret_key_ref")
1414
+ if isinstance(secret_key_ref, dict):
1415
+ return secret_key_ref.get("name")
1416
+ return None
1417
+
1369
1418
 
1370
1419
  def _resolve_if_type_sanitized(attribute_name, attribute):
1371
1420
  attribute_config = sanitized_attributes[attribute_name]