mlrun 1.10.0rc34__tar.gz → 1.10.0rc36__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.0rc34/mlrun.egg-info → mlrun-1.10.0rc36}/PKG-INFO +2 -2
  2. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/dependencies.py +1 -1
  3. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/__init__.py +1 -0
  4. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/hub.py +1 -1
  5. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/model_monitoring/__init__.py +1 -0
  6. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/hub/module.py +19 -4
  7. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model.py +2 -2
  8. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/api.py +17 -2
  9. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/base.py +88 -54
  10. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/projects/project.py +10 -3
  11. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/run.py +27 -19
  12. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/application/application.py +6 -0
  13. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/server.py +2 -13
  14. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/helpers.py +72 -4
  15. mlrun-1.10.0rc36/mlrun/utils/version/version.json +4 -0
  16. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36/mlrun.egg-info}/PKG-INFO +2 -2
  17. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun.egg-info/requires.txt +1 -1
  18. mlrun-1.10.0rc34/mlrun/utils/version/version.json +0 -4
  19. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/LICENSE +0 -0
  20. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/MANIFEST.in +0 -0
  21. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/Makefile +0 -0
  22. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/README.md +0 -0
  23. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/dev-requirements.txt +0 -0
  24. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/dockerfiles/mlrun-api/requirements.txt +0 -0
  25. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/archive.zip +0 -0
  26. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/function.py +0 -0
  27. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/handler.py +0 -0
  28. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/infile.txt +0 -0
  29. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/load-project.ipynb +0 -0
  30. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_basics.ipynb +0 -0
  31. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_dask.ipynb +0 -0
  32. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_db.ipynb +0 -0
  33. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_export_import.ipynb +0 -0
  34. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_jobs.ipynb +0 -0
  35. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_sparkk8s.ipynb +0 -0
  36. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/mlrun_vault.ipynb +0 -0
  37. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/model.bst +0 -0
  38. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/new-project.ipynb +0 -0
  39. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/nulltst.py +0 -0
  40. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/params.csv +0 -0
  41. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/remote-spark.ipynb +0 -0
  42. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/secrets.txt +0 -0
  43. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/spark-function.py +0 -0
  44. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/training.py +0 -0
  45. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/v2_model_server.ipynb +0 -0
  46. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/examples/xgb_serving.ipynb +0 -0
  47. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/extras-requirements.txt +0 -0
  48. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/__init__.py +0 -0
  49. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/__main__.py +0 -0
  50. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/alerts/__init__.py +0 -0
  51. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/alerts/alert.py +0 -0
  52. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/__init__.py +0 -0
  53. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/base.py +0 -0
  54. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/dataset.py +0 -0
  55. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/document.py +0 -0
  56. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/helpers.py +0 -0
  57. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/llm_prompt.py +0 -0
  58. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/manager.py +0 -0
  59. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/model.py +0 -0
  60. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/artifacts/plots.py +0 -0
  61. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/__init__.py +0 -0
  62. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/constants.py +0 -0
  63. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/db/__init__.py +0 -0
  64. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/db/dialects.py +0 -0
  65. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/__init__.py +0 -0
  66. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/artifact.py +0 -0
  67. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/base.py +0 -0
  68. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/feature_set.py +0 -0
  69. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/function.py +0 -0
  70. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/model_endpoint.py +0 -0
  71. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/pipeline.py +0 -0
  72. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/project.py +0 -0
  73. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/formatters/run.py +0 -0
  74. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/helpers.py +0 -0
  75. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/model_monitoring/__init__.py +0 -0
  76. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/model_monitoring/helpers.py +0 -0
  77. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/runtimes/constants.py +0 -0
  78. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/alert.py +0 -0
  79. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/api_gateway.py +0 -0
  80. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/artifact.py +0 -0
  81. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/auth.py +0 -0
  82. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/background_task.py +0 -0
  83. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/client_spec.py +0 -0
  84. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/clusterization_spec.py +0 -0
  85. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/common.py +0 -0
  86. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/constants.py +0 -0
  87. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/datastore_profile.py +0 -0
  88. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/events.py +0 -0
  89. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/feature_store.py +0 -0
  90. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/frontend_spec.py +0 -0
  91. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/function.py +0 -0
  92. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/http.py +0 -0
  93. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/k8s.py +0 -0
  94. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/memory_reports.py +0 -0
  95. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/model_monitoring/constants.py +0 -0
  96. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/model_monitoring/functions.py +0 -0
  97. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/model_monitoring/grafana.py +0 -0
  98. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/model_monitoring/model_endpoints.py +0 -0
  99. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/notification.py +0 -0
  100. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/object.py +0 -0
  101. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/pagination.py +0 -0
  102. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/partition.py +0 -0
  103. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/pipeline.py +0 -0
  104. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/project.py +0 -0
  105. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/regex.py +0 -0
  106. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/runs.py +0 -0
  107. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/runtime_resource.py +0 -0
  108. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/schedule.py +0 -0
  109. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/secret.py +0 -0
  110. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/serving.py +0 -0
  111. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/tag.py +0 -0
  112. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/schemas/workflow.py +0 -0
  113. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/secrets.py +0 -0
  114. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/common/types.py +0 -0
  115. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/config.py +0 -0
  116. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/data_types/__init__.py +0 -0
  117. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/data_types/data_types.py +0 -0
  118. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/data_types/infer.py +0 -0
  119. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/data_types/spark.py +0 -0
  120. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/data_types/to_pandas.py +0 -0
  121. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/__init__.py +0 -0
  122. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/alibaba_oss.py +0 -0
  123. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/azure_blob.py +0 -0
  124. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/base.py +0 -0
  125. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/datastore.py +0 -0
  126. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/datastore_profile.py +0 -0
  127. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/dbfs_store.py +0 -0
  128. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/filestore.py +0 -0
  129. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/google_cloud_storage.py +0 -0
  130. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/hdfs.py +0 -0
  131. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/inmem.py +0 -0
  132. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/model_provider/__init__.py +0 -0
  133. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/model_provider/huggingface_provider.py +0 -0
  134. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/model_provider/mock_model_provider.py +0 -0
  135. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/model_provider/model_provider.py +0 -0
  136. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/model_provider/openai_provider.py +0 -0
  137. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/redis.py +0 -0
  138. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/remote_client.py +0 -0
  139. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/s3.py +0 -0
  140. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/snowflake_utils.py +0 -0
  141. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/sources.py +0 -0
  142. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/spark_udf.py +0 -0
  143. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/spark_utils.py +0 -0
  144. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/store_resources.py +0 -0
  145. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/storeytargets.py +0 -0
  146. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/targets.py +0 -0
  147. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/utils.py +0 -0
  148. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/v3io.py +0 -0
  149. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/vectorstore.py +0 -0
  150. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/wasbfs/__init__.py +0 -0
  151. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/datastore/wasbfs/fs.py +0 -0
  152. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/db/__init__.py +0 -0
  153. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/db/auth_utils.py +0 -0
  154. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/db/base.py +0 -0
  155. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/db/factory.py +0 -0
  156. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/db/httpdb.py +0 -0
  157. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/db/nopdb.py +0 -0
  158. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/errors.py +0 -0
  159. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/execution.py +0 -0
  160. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/__init__.py +0 -0
  161. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/api.py +0 -0
  162. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/common.py +0 -0
  163. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/feature_set.py +0 -0
  164. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/feature_vector.py +0 -0
  165. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/feature_vector_utils.py +0 -0
  166. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/ingestion.py +0 -0
  167. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/__init__.py +0 -0
  168. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/base.py +0 -0
  169. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/dask_merger.py +0 -0
  170. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/job.py +0 -0
  171. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/local_merger.py +0 -0
  172. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/spark_merger.py +0 -0
  173. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/retrieval/storey_merger.py +0 -0
  174. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/feature_store/steps.py +0 -0
  175. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/features.py +0 -0
  176. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/__init__.py +0 -0
  177. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/__init__.py +0 -0
  178. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/artifacts_library.py +0 -0
  179. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/mlrun_interface.py +0 -0
  180. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/model_handler.py +0 -0
  181. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/plan.py +0 -0
  182. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/producer.py +0 -0
  183. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_common/utils.py +0 -0
  184. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/__init__.py +0 -0
  185. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/loggers/__init__.py +0 -0
  186. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/loggers/logger.py +0 -0
  187. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +0 -0
  188. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +0 -0
  189. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/model_handler.py +0 -0
  190. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_dl_common/utils.py +0 -0
  191. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/__init__.py +0 -0
  192. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/artifacts_library.py +0 -0
  193. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/loggers/__init__.py +0 -0
  194. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/loggers/logger.py +0 -0
  195. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +0 -0
  196. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/model_handler.py +0 -0
  197. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/pkl_model_server.py +0 -0
  198. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plan.py +0 -0
  199. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plans/__init__.py +0 -0
  200. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +0 -0
  201. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +0 -0
  202. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plans/dataset_plan.py +0 -0
  203. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +0 -0
  204. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +0 -0
  205. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/producer.py +0 -0
  206. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/_ml_common/utils.py +0 -0
  207. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/auto_mlrun/__init__.py +0 -0
  208. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/auto_mlrun/auto_mlrun.py +0 -0
  209. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/huggingface/__init__.py +0 -0
  210. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/huggingface/model_server.py +0 -0
  211. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/__init__.py +0 -0
  212. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/callbacks/__init__.py +0 -0
  213. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/callbacks/callback.py +0 -0
  214. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/callbacks/logging_callback.py +0 -0
  215. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +0 -0
  216. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +0 -0
  217. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +0 -0
  218. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +0 -0
  219. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +0 -0
  220. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/model_handler.py +0 -0
  221. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/model_server.py +0 -0
  222. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/lgbm/utils.py +0 -0
  223. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/onnx/__init__.py +0 -0
  224. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/onnx/dataset.py +0 -0
  225. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/onnx/mlrun_interface.py +0 -0
  226. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/onnx/model_handler.py +0 -0
  227. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/onnx/model_server.py +0 -0
  228. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/parallel_coordinates.py +0 -0
  229. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/__init__.py +0 -0
  230. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/callbacks/__init__.py +0 -0
  231. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/callbacks/callback.py +0 -0
  232. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/callbacks/logging_callback.py +0 -0
  233. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +0 -0
  234. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +0 -0
  235. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/callbacks_handler.py +0 -0
  236. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/mlrun_interface.py +0 -0
  237. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/model_handler.py +0 -0
  238. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/model_server.py +0 -0
  239. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/pytorch/utils.py +0 -0
  240. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/__init__.py +0 -0
  241. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/estimator.py +0 -0
  242. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/metric.py +0 -0
  243. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/metrics_library.py +0 -0
  244. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/mlrun_interface.py +0 -0
  245. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/model_handler.py +0 -0
  246. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/sklearn/utils.py +0 -0
  247. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/__init__.py +0 -0
  248. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/callbacks/__init__.py +0 -0
  249. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/callbacks/logging_callback.py +0 -0
  250. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +0 -0
  251. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +0 -0
  252. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/mlrun_interface.py +0 -0
  253. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/model_handler.py +0 -0
  254. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/model_server.py +0 -0
  255. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/tf_keras/utils.py +0 -0
  256. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/xgboost/__init__.py +0 -0
  257. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/xgboost/mlrun_interface.py +0 -0
  258. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/xgboost/model_handler.py +0 -0
  259. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/frameworks/xgboost/utils.py +0 -0
  260. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/hub/__init__.py +0 -0
  261. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/k8s_utils.py +0 -0
  262. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/launcher/__init__.py +0 -0
  263. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/launcher/base.py +0 -0
  264. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/launcher/client.py +0 -0
  265. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/launcher/factory.py +0 -0
  266. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/launcher/local.py +0 -0
  267. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/launcher/remote.py +0 -0
  268. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/lists.py +0 -0
  269. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/__init__.py +0 -0
  270. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/__init__.py +0 -0
  271. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/_application_steps.py +0 -0
  272. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/context.py +0 -0
  273. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/evidently/__init__.py +0 -0
  274. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/evidently/base.py +0 -0
  275. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/histogram_data_drift.py +0 -0
  276. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/applications/results.py +0 -0
  277. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/controller.py +0 -0
  278. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/__init__.py +0 -0
  279. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/_schedules.py +0 -0
  280. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/_stats.py +0 -0
  281. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/__init__.py +0 -0
  282. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/base.py +0 -0
  283. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/helpers.py +0 -0
  284. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +0 -0
  285. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -0
  286. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -0
  287. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -0
  288. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +0 -0
  289. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/tdengine/writer_graph_steps.py +0 -0
  290. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/v3io/__init__.py +0 -0
  291. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +0 -0
  292. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +0 -0
  293. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/features_drift_table.py +0 -0
  294. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/helpers.py +0 -0
  295. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/metrics/__init__.py +0 -0
  296. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/metrics/histogram_distance.py +0 -0
  297. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/stream_processing.py +0 -0
  298. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/model_monitoring/writer.py +0 -0
  299. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/__init__.py +0 -0
  300. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/context_handler.py +0 -0
  301. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/errors.py +0 -0
  302. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packager.py +0 -0
  303. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packagers/__init__.py +0 -0
  304. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packagers/default_packager.py +0 -0
  305. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packagers/numpy_packagers.py +0 -0
  306. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packagers/pandas_packagers.py +0 -0
  307. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packagers/python_standard_library_packagers.py +0 -0
  308. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/packagers_manager.py +0 -0
  309. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/__init__.py +0 -0
  310. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/_archiver.py +0 -0
  311. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/_formatter.py +0 -0
  312. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/_pickler.py +0 -0
  313. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/_supported_format.py +0 -0
  314. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/log_hint_utils.py +0 -0
  315. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/package/utils/type_hint_utils.py +0 -0
  316. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/platforms/__init__.py +0 -0
  317. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/platforms/iguazio.py +0 -0
  318. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/projects/__init__.py +0 -0
  319. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/projects/operations.py +0 -0
  320. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/projects/pipelines.py +0 -0
  321. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/render.py +0 -0
  322. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/__init__.py +0 -0
  323. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/base.py +0 -0
  324. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/daskjob.py +0 -0
  325. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/databricks_job/__init__.py +0 -0
  326. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/databricks_job/databricks_cancel_task.py +0 -0
  327. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/databricks_job/databricks_runtime.py +0 -0
  328. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/databricks_job/databricks_wrapper.py +0 -0
  329. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/funcdoc.py +0 -0
  330. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/function_reference.py +0 -0
  331. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/generators.py +0 -0
  332. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/kubejob.py +0 -0
  333. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/local.py +0 -0
  334. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/mounts.py +0 -0
  335. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/mpijob/__init__.py +0 -0
  336. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/mpijob/abstract.py +0 -0
  337. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/mpijob/v1.py +0 -0
  338. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/__init__.py +0 -0
  339. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/api_gateway.py +0 -0
  340. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/application/__init__.py +0 -0
  341. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/application/reverse_proxy.go +0 -0
  342. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/function.py +0 -0
  343. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/nuclio.py +0 -0
  344. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/nuclio/serving.py +0 -0
  345. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/pod.py +0 -0
  346. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/remotesparkjob.py +0 -0
  347. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/sparkjob/__init__.py +0 -0
  348. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/sparkjob/spark3job.py +0 -0
  349. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/runtimes/utils.py +0 -0
  350. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/secrets.py +0 -0
  351. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/__init__.py +0 -0
  352. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/merger.py +0 -0
  353. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/remote.py +0 -0
  354. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/routers.py +0 -0
  355. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/serving_wrapper.py +0 -0
  356. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/states.py +0 -0
  357. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/steps.py +0 -0
  358. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/system_steps.py +0 -0
  359. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/utils.py +0 -0
  360. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/v1_serving.py +0 -0
  361. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/serving/v2_serving.py +0 -0
  362. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/track/__init__.py +0 -0
  363. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/track/tracker.py +0 -0
  364. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/track/tracker_manager.py +0 -0
  365. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/track/trackers/__init__.py +0 -0
  366. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/track/trackers/mlflow_tracker.py +0 -0
  367. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/__init__.py +0 -0
  368. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/async_http.py +0 -0
  369. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/azure_vault.py +0 -0
  370. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/clones.py +0 -0
  371. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/condition_evaluator.py +0 -0
  372. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/http.py +0 -0
  373. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/logger.py +0 -0
  374. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/__init__.py +0 -0
  375. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/__init__.py +0 -0
  376. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/base.py +0 -0
  377. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/console.py +0 -0
  378. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/git.py +0 -0
  379. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/ipython.py +0 -0
  380. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/mail.py +0 -0
  381. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/slack.py +0 -0
  382. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification/webhook.py +0 -0
  383. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/notifications/notification_pusher.py +0 -0
  384. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/regex.py +0 -0
  385. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/retryer.py +0 -0
  386. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/singleton.py +0 -0
  387. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/v3io_clients.py +0 -0
  388. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/vault.py +0 -0
  389. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/version/__init__.py +0 -0
  390. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun/utils/version/version.py +0 -0
  391. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun.egg-info/SOURCES.txt +0 -0
  392. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun.egg-info/dependency_links.txt +0 -0
  393. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun.egg-info/entry_points.txt +0 -0
  394. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun.egg-info/not-zip-safe +0 -0
  395. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/mlrun.egg-info/top_level.txt +0 -0
  396. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/packages.py +0 -0
  397. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/pyproject.toml +0 -0
  398. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/requirements.txt +0 -0
  399. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/setup.cfg +0 -0
  400. {mlrun-1.10.0rc34 → mlrun-1.10.0rc36}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.10.0rc34
3
+ Version: 1.10.0rc36
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -105,7 +105,7 @@ Requires-Dist: snowflake-connector-python~=3.7; extra == "snowflake"
105
105
  Provides-Extra: dev-postgres
106
106
  Requires-Dist: pytest-mock-resources[postgres]~=2.12; extra == "dev-postgres"
107
107
  Provides-Extra: kfp18
108
- Requires-Dist: mlrun_pipelines_kfp_v1_8[kfp]>=0.5.7; extra == "kfp18"
108
+ Requires-Dist: mlrun_pipelines_kfp_v1_8[kfp]~=0.5.8; extra == "kfp18"
109
109
  Provides-Extra: api
110
110
  Requires-Dist: uvicorn~=0.32.1; extra == "api"
111
111
  Requires-Dist: dask-kubernetes~=0.11.0; extra == "api"
@@ -87,7 +87,7 @@ def extra_requirements() -> dict[str, list[str]]:
87
87
  extras_require.update(
88
88
  {
89
89
  "dev-postgres": ["pytest-mock-resources[postgres]~=2.12"],
90
- "kfp18": ["mlrun_pipelines_kfp_v1_8[kfp]>=0.5.7"],
90
+ "kfp18": ["mlrun_pipelines_kfp_v1_8[kfp]~=0.5.8"],
91
91
  # TODO uncomment when KFP 1.8 support is removed
92
92
  # "kfp2": ["mlrun_pipelines_kfp_v2[kfp]>=0.5.0 ; python_version >= '3.11'"],
93
93
  "api": api_deps,
@@ -154,6 +154,7 @@ from .model_monitoring import (
154
154
  ModelEndpointSchema,
155
155
  ModelEndpointSpec,
156
156
  ModelEndpointStatus,
157
+ ModelMonitoringInfraLabel,
157
158
  ModelMonitoringMode,
158
159
  MonitoringFunctionNames,
159
160
  TSDBTarget,
@@ -138,4 +138,4 @@ class HubCatalog(BaseModel):
138
138
 
139
139
  class HubModuleType(mlrun.common.types.StrEnum):
140
140
  generic = "generic"
141
- monitoring_app = "monitoring-app"
141
+ monitoring_app = "monitoring_application"
@@ -30,6 +30,7 @@ from .constants import (
30
30
  ModelEndpointMonitoringMetricType,
31
31
  ModelEndpointSchema,
32
32
  ModelMonitoringAppLabel,
33
+ ModelMonitoringInfraLabel,
33
34
  ModelMonitoringMode,
34
35
  MonitoringFunctionNames,
35
36
  PredictionsQueryConstants,
@@ -26,6 +26,7 @@ from mlrun.common.schemas.hub import HubModuleType, HubSourceType
26
26
  from mlrun.run import function_to_module, get_object
27
27
  from mlrun.utils import logger
28
28
 
29
+ from ..errors import MLRunBadRequestError
29
30
  from ..model import ModelObj
30
31
  from ..utils import extend_hub_uri_if_needed
31
32
 
@@ -109,19 +110,33 @@ class HubModule(ModelObj):
109
110
  f.write(data)
110
111
 
111
112
  @staticmethod
112
- def verify_directory(path: str) -> Path:
113
- """Validate that the given path is an existing directory."""
113
+ def verify_directory(path: Optional[str] = None) -> Path:
114
+ """
115
+ Validate that the given path is an existing directory.
116
+ If no path has been provided, returns current working directory.
117
+ """
114
118
  if path:
115
119
  path = Path(path)
116
120
  if not path.exists():
117
121
  raise ValueError(f"Path does not exist: {path}")
118
122
  if not path.is_dir():
119
123
  raise ValueError(f"Path is not a directory: {path}")
120
- return path
124
+ return path
125
+ return Path(os.getcwd())
126
+
127
+ def get_module_file_path(self):
128
+ if not self.local_path:
129
+ raise MLRunBadRequestError(
130
+ "module files haven't been downloaded yet, try calling download_module_files() first"
131
+ )
132
+ return str(Path(self.local_path) / self.filename)
121
133
 
122
134
 
123
135
  def get_hub_module(
124
- url="", download_files=True, secrets=None, local_path=None
136
+ url: str = "",
137
+ download_files: Optional[bool] = True,
138
+ secrets: Optional[dict] = None,
139
+ local_path: Optional[str] = None,
125
140
  ) -> HubModule:
126
141
  """
127
142
  Get a hub-module object containing metadata of the requested module.
@@ -667,7 +667,7 @@ class ImageBuilder(ModelObj):
667
667
  """
668
668
  requirements = requirements or []
669
669
  self._verify_list(requirements, "requirements")
670
- resolved_requirements = self._resolve_requirements(
670
+ resolved_requirements = self.resolve_requirements(
671
671
  requirements, requirements_file
672
672
  )
673
673
  requirements = self.requirements or [] if not overwrite else []
@@ -680,7 +680,7 @@ class ImageBuilder(ModelObj):
680
680
  self.requirements = requirements
681
681
 
682
682
  @staticmethod
683
- def _resolve_requirements(requirements: list, requirements_file: str = "") -> list:
683
+ def resolve_requirements(requirements: list, requirements_file: str = "") -> list:
684
684
  requirements = requirements or []
685
685
  requirements_to_resolve = []
686
686
 
@@ -30,8 +30,9 @@ from mlrun.common.schemas.model_monitoring import (
30
30
  FunctionURI,
31
31
  )
32
32
  from mlrun.data_types.infer import InferOptions, get_df_stats
33
- from mlrun.utils import datetime_now, logger
33
+ from mlrun.utils import check_if_hub_uri, datetime_now, logger, merge_requirements
34
34
 
35
+ from ..common.schemas.hub import HubModuleType
35
36
  from .helpers import update_model_endpoint_last_request
36
37
 
37
38
  # A union of all supported dataset types:
@@ -548,8 +549,9 @@ def _create_model_monitoring_function_base(
548
549
  name: typing.Optional[str] = None,
549
550
  image: typing.Optional[str] = None,
550
551
  tag: typing.Optional[str] = None,
551
- requirements: typing.Union[str, list[str], None] = None,
552
+ requirements: typing.Union[list[str], None] = None,
552
553
  requirements_file: str = "",
554
+ local_path: typing.Optional[str] = None,
553
555
  **application_kwargs,
554
556
  ) -> mlrun.runtimes.ServingRuntime:
555
557
  """
@@ -567,6 +569,19 @@ def _create_model_monitoring_function_base(
567
569
  )
568
570
  if func is None:
569
571
  func = ""
572
+ if check_if_hub_uri(func):
573
+ hub_module = mlrun.get_hub_module(url=func, local_path=local_path)
574
+ if hub_module.kind != HubModuleType.monitoring_app:
575
+ raise mlrun.errors.MLRunInvalidArgumentError(
576
+ "The provided module is not a monitoring application"
577
+ )
578
+ requirements = mlrun.model.ImageBuilder.resolve_requirements(
579
+ requirements, requirements_file
580
+ )
581
+ requirements = merge_requirements(
582
+ reqs_priority=requirements, reqs_secondary=hub_module.requirements
583
+ )
584
+ func = hub_module.get_module_file_path()
570
585
  func_obj = typing.cast(
571
586
  mlrun.runtimes.ServingRuntime,
572
587
  mlrun.code_to_function(
@@ -332,36 +332,11 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
332
332
  project=project,
333
333
  ) as (endpoints_output, application_schedules):
334
334
 
335
- def call_do_tracking(event: Optional[dict] = None):
335
+ def call_do_tracking(
336
+ monitoring_context: mm_context.MonitoringApplicationContext,
337
+ ):
336
338
  nonlocal endpoints_output
337
339
 
338
- if event is None:
339
- event = {}
340
- monitoring_context = (
341
- mm_context.MonitoringApplicationContext._from_ml_ctx(
342
- event=event,
343
- application_name=application_name,
344
- context=context,
345
- project=project,
346
- sample_df=sample_data,
347
- feature_stats=feature_stats,
348
- )
349
- )
350
-
351
- if (
352
- monitoring_context.endpoint_id
353
- and monitoring_context.sample_df.empty
354
- ):
355
- # The current sample is empty
356
- context.logger.warning(
357
- "No sample data available for tracking",
358
- application_name=application_name,
359
- endpoint_id=monitoring_context.endpoint_id,
360
- start_time=monitoring_context.start_infer_time,
361
- end_time=monitoring_context.end_infer_time,
362
- )
363
- return
364
-
365
340
  result = self.do_tracking(monitoring_context)
366
341
  endpoints_output[monitoring_context.endpoint_id].append(
367
342
  (monitoring_context, result)
@@ -369,7 +344,7 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
369
344
  return result
370
345
 
371
346
  if endpoints is not None:
372
- resolved_endpoints = self._handle_endpoints_type_evaluate(
347
+ resolved_endpoints = self._validate_endpoints(
373
348
  project=project, endpoints=endpoints
374
349
  )
375
350
  if (
@@ -391,26 +366,24 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
391
366
  application_schedules=application_schedules,
392
367
  )
393
368
  for endpoint_name, endpoint_id in resolved_endpoints:
394
- for window_start, window_end in self._window_generator(
369
+ for monitoring_ctx in self._window_generator(
395
370
  start=start,
396
371
  end=end,
397
372
  base_period=base_period,
398
373
  application_schedules=application_schedules,
399
374
  endpoint_id=endpoint_id,
375
+ endpoint_name=endpoint_name,
400
376
  application_name=application_name,
401
377
  existing_data_handling=existing_data_handling,
378
+ sample_data=sample_data,
379
+ context=context,
380
+ project=project,
402
381
  ):
403
- result = call_do_tracking(
404
- event={
405
- mm_constants.ApplicationEvent.ENDPOINT_NAME: endpoint_name,
406
- mm_constants.ApplicationEvent.ENDPOINT_ID: endpoint_id,
407
- mm_constants.ApplicationEvent.START_INFER_TIME: window_start,
408
- mm_constants.ApplicationEvent.END_INFER_TIME: window_end,
409
- }
410
- )
382
+ result = call_do_tracking(monitoring_ctx)
411
383
  result_key = (
412
- f"{endpoint_name}-{endpoint_id}_{window_start.isoformat()}_{window_end.isoformat()}"
413
- if window_start and window_end
384
+ f"{endpoint_name}-{endpoint_id}_{monitoring_ctx.start_infer_time.isoformat()}_{monitoring_ctx.end_infer_time.isoformat()}"
385
+ if monitoring_ctx.start_infer_time
386
+ and monitoring_ctx.end_infer_time
414
387
  else f"{endpoint_name}-{endpoint_id}"
415
388
  )
416
389
 
@@ -418,10 +391,38 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
418
391
  result_key, self._flatten_data_result(result)
419
392
  )
420
393
  else:
421
- return self._flatten_data_result(call_do_tracking())
394
+ result = call_do_tracking(
395
+ mm_context.MonitoringApplicationContext._from_ml_ctx(
396
+ context=context,
397
+ project=project,
398
+ application_name=application_name,
399
+ event={},
400
+ sample_df=sample_data,
401
+ feature_stats=feature_stats,
402
+ )
403
+ )
404
+ return self._flatten_data_result(result)
422
405
 
423
406
  @staticmethod
424
- def _handle_endpoints_type_evaluate(
407
+ def _check_endpoints_first_request(
408
+ endpoints: list[mlrun.common.schemas.ModelEndpoint],
409
+ ) -> None:
410
+ """Make sure that all the endpoints have had at least one request"""
411
+ endpoints_no_requests = [
412
+ (endpoint.metadata.name, endpoint.metadata.uid)
413
+ for endpoint in endpoints
414
+ if not endpoint.status.first_request
415
+ ]
416
+ if endpoints_no_requests:
417
+ raise mlrun.errors.MLRunValueError(
418
+ "The following model endpoints have not had any requests yet and "
419
+ "have no data, cannot run the model monitoring application on them: "
420
+ f"{endpoints_no_requests}"
421
+ )
422
+
423
+ @classmethod
424
+ def _validate_endpoints(
425
+ cls,
425
426
  project: "mlrun.MlrunProject",
426
427
  endpoints: Union[
427
428
  list[tuple[str, str]], list[list[str]], list[str], Literal["all"]
@@ -457,6 +458,9 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
457
458
  endpoints_list = project.list_model_endpoints(
458
459
  names=endpoint_names, latest_only=True
459
460
  ).endpoints
461
+
462
+ cls._check_endpoints_first_request(endpoints_list)
463
+
460
464
  if endpoints_list:
461
465
  list_endpoints_result = [
462
466
  (endpoint.metadata.name, endpoint.metadata.uid)
@@ -596,13 +600,51 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
596
600
  application_schedules: Optional[
597
601
  mm_schedules.ModelMonitoringSchedulesFileApplication
598
602
  ],
603
+ endpoint_name: str,
599
604
  endpoint_id: str,
600
605
  application_name: str,
601
606
  existing_data_handling: ExistingDataHandling,
602
- ) -> Iterator[tuple[Optional[datetime], Optional[datetime]]]:
607
+ context: "mlrun.MLClientCtx",
608
+ project: "mlrun.MlrunProject",
609
+ sample_data: Optional[pd.DataFrame],
610
+ ) -> Iterator[mm_context.MonitoringApplicationContext]:
611
+ def yield_monitoring_ctx(
612
+ window_start: Optional[datetime], window_end: Optional[datetime]
613
+ ) -> Iterator[mm_context.MonitoringApplicationContext]:
614
+ ctx = mm_context.MonitoringApplicationContext._from_ml_ctx(
615
+ event={
616
+ mm_constants.ApplicationEvent.ENDPOINT_NAME: endpoint_name,
617
+ mm_constants.ApplicationEvent.ENDPOINT_ID: endpoint_id,
618
+ mm_constants.ApplicationEvent.START_INFER_TIME: window_start,
619
+ mm_constants.ApplicationEvent.END_INFER_TIME: window_end,
620
+ },
621
+ application_name=application_name,
622
+ context=context,
623
+ project=project,
624
+ sample_df=sample_data,
625
+ )
626
+
627
+ if ctx.sample_df.empty:
628
+ # The current sample is empty
629
+ context.logger.debug(
630
+ "No sample data available for tracking",
631
+ application_name=application_name,
632
+ endpoint_id=ctx.endpoint_id,
633
+ start_time=ctx.start_infer_time,
634
+ end_time=ctx.end_infer_time,
635
+ )
636
+ return
637
+
638
+ yield ctx
639
+
640
+ if application_schedules and window_end:
641
+ application_schedules.update_endpoint_last_analyzed(
642
+ endpoint_uid=endpoint_id, last_analyzed=window_end
643
+ )
644
+
603
645
  if start is None or end is None:
604
646
  # A single window based on the `sample_data` input - see `_handler`.
605
- yield None, None
647
+ yield from yield_monitoring_ctx(None, None)
606
648
  return
607
649
 
608
650
  start_dt = datetime.fromisoformat(start)
@@ -630,11 +672,7 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
630
672
  )
631
673
 
632
674
  if base_period is None:
633
- yield start_dt, end_dt
634
- if application_schedules:
635
- application_schedules.update_endpoint_last_analyzed(
636
- endpoint_uid=endpoint_id, last_analyzed=end_dt
637
- )
675
+ yield from yield_monitoring_ctx(start_dt, end_dt)
638
676
  return
639
677
 
640
678
  window_length = cls._validate_and_get_window_length(
@@ -644,11 +682,7 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
644
682
  current_start_time = start_dt
645
683
  while current_start_time < end_dt:
646
684
  current_end_time = min(current_start_time + window_length, end_dt)
647
- yield current_start_time, current_end_time
648
- if application_schedules:
649
- application_schedules.update_endpoint_last_analyzed(
650
- endpoint_uid=endpoint_id, last_analyzed=current_end_time
651
- )
685
+ yield from yield_monitoring_ctx(current_start_time, current_end_time)
652
686
  current_start_time = current_end_time
653
687
 
654
688
  @classmethod
@@ -2386,8 +2386,9 @@ class MlrunProject(ModelObj):
2386
2386
  handler: Optional[str] = None,
2387
2387
  with_repo: Optional[bool] = None,
2388
2388
  tag: Optional[str] = None,
2389
- requirements: Optional[typing.Union[str, list[str]]] = None,
2389
+ requirements: Optional[list[str]] = None,
2390
2390
  requirements_file: str = "",
2391
+ local_path: Optional[str] = None,
2391
2392
  **application_kwargs,
2392
2393
  ) -> mlrun.runtimes.RemoteRuntime:
2393
2394
  """
@@ -2402,7 +2403,8 @@ class MlrunProject(ModelObj):
2402
2403
  )
2403
2404
 
2404
2405
  :param func: Remote function object or spec/code URL. :code:`None` refers to the current
2405
- notebook.
2406
+ notebook. May also be a hub URL of a module of kind model-monitoring-app in the
2407
+ format: hub://[{source}/]{name}[:{tag}].
2406
2408
  :param name: Name of the function (under the project), can be specified with a tag to support
2407
2409
  versions (e.g. myfunc:v1).
2408
2410
  :param image: Docker image to be used, can also be specified in
@@ -2417,6 +2419,8 @@ class MlrunProject(ModelObj):
2417
2419
  :param application_class: Name or an Instance of a class that implements the monitoring application.
2418
2420
  :param application_kwargs: Additional keyword arguments to be passed to the
2419
2421
  monitoring application's constructor.
2422
+ :param local_path: Path to a local directory to save the downloaded monitoring-app code files in,
2423
+ in case 'func' is a hub URL (defaults to current working directory).
2420
2424
  :returns: The model monitoring remote function object.
2421
2425
  """
2422
2426
  (
@@ -2433,6 +2437,7 @@ class MlrunProject(ModelObj):
2433
2437
  tag,
2434
2438
  requirements,
2435
2439
  requirements_file,
2440
+ local_path,
2436
2441
  **application_kwargs,
2437
2442
  )
2438
2443
  # save to project spec
@@ -2511,8 +2516,9 @@ class MlrunProject(ModelObj):
2511
2516
  handler: typing.Optional[str] = None,
2512
2517
  with_repo: typing.Optional[bool] = None,
2513
2518
  tag: typing.Optional[str] = None,
2514
- requirements: typing.Union[str, list[str], None] = None,
2519
+ requirements: typing.Union[list[str], None] = None,
2515
2520
  requirements_file: str = "",
2521
+ local_path: typing.Optional[str] = None,
2516
2522
  **application_kwargs,
2517
2523
  ) -> tuple[str, mlrun.runtimes.RemoteRuntime, dict]:
2518
2524
  import mlrun.model_monitoring.api
@@ -2529,6 +2535,7 @@ class MlrunProject(ModelObj):
2529
2535
  tag=tag,
2530
2536
  requirements=requirements,
2531
2537
  requirements_file=requirements_file,
2538
+ local_path=local_path,
2532
2539
  **application_kwargs,
2533
2540
  )
2534
2541
  elif isinstance(func, str) and isinstance(handler, str):
@@ -17,6 +17,7 @@ import json
17
17
  import os
18
18
  import pathlib
19
19
  import socket
20
+ import sys
20
21
  import tempfile
21
22
  import time
22
23
  import typing
@@ -117,14 +118,13 @@ def function_to_module(code="", workdir=None, secrets=None, silent=False):
117
118
  raise ValueError("nothing to run, specify command or function")
118
119
 
119
120
  command = os.path.join(workdir or "", command)
120
- path = Path(command)
121
- mod_name = path.name
122
- if path.suffix:
123
- mod_name = mod_name[: -len(path.suffix)]
121
+ mod_name = mlrun.utils.helpers.get_module_name_from_path(command)
124
122
  spec = imputil.spec_from_file_location(mod_name, command)
125
123
  if spec is None:
126
124
  raise OSError(f"cannot import from {command!r}")
127
125
  mod = imputil.module_from_spec(spec)
126
+ # add to system modules, which can be necessary when running in a MockServer (ML-10937)
127
+ sys.modules[mod_name] = mod
128
128
  spec.loader.exec_module(mod)
129
129
 
130
130
  return mod
@@ -413,21 +413,29 @@ def import_function_to_dict(
413
413
  with open(code_file, "wb") as fp:
414
414
  fp.write(code)
415
415
  elif cmd:
416
- if not path.isfile(code_file):
417
- slash_index = url.rfind("/")
418
- if slash_index < 0:
419
- raise ValueError(f"no file in exec path (spec.command={code_file})")
420
- base_dir = os.path.normpath(url[: slash_index + 1])
421
- candidate_path = _ensure_path_confined_to_base_dir(
422
- base_directory=base_dir,
423
- relative_path=code_file,
424
- error_message_on_escape=f"exec file spec.command={code_file} is outside of allowed directory",
425
- )
426
- if path.isfile(candidate_path):
427
- raise ValueError(
428
- f"exec file spec.command={code_file} is relative, change working dir"
429
- )
416
+ slash_index = url.rfind("/")
417
+ if slash_index < 0:
430
418
  raise ValueError(f"no file in exec path (spec.command={code_file})")
419
+ base_dir = os.path.normpath(url[: slash_index + 1])
420
+
421
+ # Validate and resolve the candidate path before checking existence
422
+ candidate_path = _ensure_path_confined_to_base_dir(
423
+ base_directory=base_dir,
424
+ relative_path=code_file,
425
+ error_message_on_escape=(
426
+ f"exec file spec.command={code_file} is outside of allowed directory"
427
+ ),
428
+ )
429
+
430
+ # Only now it's safe to check file existence
431
+ if not path.isfile(candidate_path):
432
+ raise ValueError(f"no file in exec path (spec.command={code_file})")
433
+
434
+ # Check that the path is absolute
435
+ if not os.path.isabs(code_file):
436
+ raise ValueError(
437
+ f"exec file spec.command={code_file} is relative, it must be absolute. Change working dir"
438
+ )
431
439
  else:
432
440
  raise ValueError("command or code not specified in function spec")
433
441
 
@@ -601,7 +609,7 @@ def code_to_function(
601
609
  code_output: Optional[str] = "",
602
610
  embed_code: bool = True,
603
611
  description: Optional[str] = "",
604
- requirements: Optional[Union[str, list[str]]] = None,
612
+ requirements: Optional[list[str]] = None,
605
613
  categories: Optional[list[str]] = None,
606
614
  labels: Optional[dict[str, str]] = None,
607
615
  with_doc: Optional[bool] = True,
@@ -568,6 +568,12 @@ class ApplicationRuntime(RemoteRuntime):
568
568
  "Authentication credentials not provided"
569
569
  )
570
570
 
571
+ if direct_port_access and port:
572
+ logger.warning(
573
+ "Ignoring 'port' because 'direct_port_access' is enabled. "
574
+ "The 'port' setting is only applicable when 'direct_port_access' is disabled."
575
+ )
576
+
571
577
  ports = (
572
578
  port or self.spec.internal_application_port if direct_port_access else []
573
579
  )
@@ -20,7 +20,6 @@ import copy
20
20
  import importlib
21
21
  import json
22
22
  import os
23
- import pathlib
24
23
  import socket
25
24
  import traceback
26
25
  import uuid
@@ -51,7 +50,7 @@ from ..datastore.store_resources import ResourceCache
51
50
  from ..errors import MLRunInvalidArgumentError
52
51
  from ..execution import MLClientCtx
53
52
  from ..model import ModelObj
54
- from ..utils import get_caller_globals
53
+ from ..utils import get_caller_globals, get_module_name_from_path
55
54
  from .states import (
56
55
  FlowStep,
57
56
  MonitoredStep,
@@ -598,17 +597,7 @@ async def async_execute_graph(
598
597
  # gets set in local flow and not just in the remote pod
599
598
  source_file_path = spec.get("filename", None)
600
599
  if source_file_path:
601
- source_file_path_object = pathlib.Path(source_file_path).resolve()
602
- current_dir_path_object = pathlib.Path(".").resolve()
603
- if not source_file_path_object.is_relative_to(current_dir_path_object):
604
- raise mlrun.errors.MLRunRuntimeError(
605
- f"Source file path '{source_file_path}' is not under the current working directory "
606
- f"(which is required when running with local=True)"
607
- )
608
- relative_path_to_source_file = source_file_path_object.relative_to(
609
- current_dir_path_object
610
- )
611
- modname = ".".join(relative_path_to_source_file.with_suffix("").parts)
600
+ modname = get_module_name_from_path(source_file_path)
612
601
 
613
602
  namespace = {}
614
603
  if modname:
@@ -21,6 +21,7 @@ import inspect
21
21
  import itertools
22
22
  import json
23
23
  import os
24
+ import pathlib
24
25
  import re
25
26
  import string
26
27
  import sys
@@ -45,6 +46,8 @@ import pytz
45
46
  import semver
46
47
  import yaml
47
48
  from dateutil import parser
49
+ from packaging.requirements import Requirement
50
+ from packaging.utils import canonicalize_name
48
51
  from pandas import Timedelta, Timestamp
49
52
  from yaml.representer import RepresenterError
50
53
 
@@ -807,6 +810,10 @@ def remove_tag_from_artifact_uri(uri: str) -> Optional[str]:
807
810
  return uri if not add_store else DB_SCHEMA + "://" + uri
808
811
 
809
812
 
813
+ def check_if_hub_uri(uri: str) -> bool:
814
+ return uri.startswith(hub_prefix)
815
+
816
+
810
817
  def extend_hub_uri_if_needed(
811
818
  uri: str,
812
819
  asset_type: HubSourceType = HubSourceType.functions,
@@ -823,7 +830,7 @@ def extend_hub_uri_if_needed(
823
830
  [0] = Extended URI of item
824
831
  [1] = Is hub item (bool)
825
832
  """
826
- is_hub_uri = uri.startswith(hub_prefix)
833
+ is_hub_uri = check_if_hub_uri(uri)
827
834
  if not is_hub_uri:
828
835
  return uri, is_hub_uri
829
836
 
@@ -923,11 +930,23 @@ def enrich_image_url(
923
930
  )
924
931
  mlrun_version = config.images_tag or client_version or server_version
925
932
  tag = mlrun_version or ""
926
- tag += resolve_image_tag_suffix(
927
- mlrun_version=mlrun_version,
928
- python_version=client_python_version,
933
+
934
+ # starting mlrun 1.10.0-rc0 we want to enrich the kfp image with the python version
935
+ # e.g for 1.9 we have a single mlrun-kfp image that supports only python 3.9
936
+ enrich_kfp_python_version = (
937
+ "mlrun-kfp" in image_url
938
+ and mlrun_version
939
+ and semver.VersionInfo.is_valid(mlrun_version)
940
+ and semver.VersionInfo.parse(mlrun_version)
941
+ >= semver.VersionInfo.parse("1.10.0-rc0")
929
942
  )
930
943
 
944
+ if "mlrun-kfp" not in image_url or enrich_kfp_python_version:
945
+ tag += resolve_image_tag_suffix(
946
+ mlrun_version=mlrun_version,
947
+ python_version=client_python_version,
948
+ )
949
+
931
950
  # it's an mlrun image if the repository is mlrun
932
951
  is_mlrun_image = image_url.startswith("mlrun/") or "/mlrun/" in image_url
933
952
  if ":" in image_url:
@@ -2408,3 +2427,52 @@ def set_data_by_path(
2408
2427
  raise mlrun.errors.MLRunInvalidArgumentError(
2409
2428
  "Expected path to be of type str or list of str"
2410
2429
  )
2430
+
2431
+
2432
+ def _normalize_requirements(reqs: typing.Union[str, list[str], None]) -> list[str]:
2433
+ if reqs is None:
2434
+ return []
2435
+ if isinstance(reqs, str):
2436
+ s = reqs.strip()
2437
+ return [s] if s else []
2438
+ return [s.strip() for s in reqs if s and s.strip()]
2439
+
2440
+
2441
+ def merge_requirements(
2442
+ reqs_priority: typing.Union[str, list[str], None],
2443
+ reqs_secondary: typing.Union[str, list[str], None],
2444
+ ) -> list[str]:
2445
+ """
2446
+ Merge two requirement collections into a union. If the same package
2447
+ appears in both, the specifier from reqs_priority wins.
2448
+
2449
+ Args:
2450
+ reqs_priority: str | list[str] | None (priority input)
2451
+ reqs_secondary: str | list[str] | None
2452
+
2453
+ Returns:
2454
+ list[str]: pip-style requirements.
2455
+ """
2456
+ merged: dict[str, Requirement] = {}
2457
+
2458
+ for r in _normalize_requirements(reqs_secondary) + _normalize_requirements(
2459
+ reqs_priority
2460
+ ):
2461
+ req = Requirement(r)
2462
+ merged[canonicalize_name(req.name)] = req
2463
+
2464
+ return [str(req) for req in merged.values()]
2465
+
2466
+
2467
+ def get_module_name_from_path(source_file_path: str) -> str:
2468
+ source_file_path_object = pathlib.Path(source_file_path).resolve()
2469
+ current_dir_path_object = pathlib.Path(".").resolve()
2470
+ if not source_file_path_object.is_relative_to(current_dir_path_object):
2471
+ raise mlrun.errors.MLRunRuntimeError(
2472
+ f"Source file path '{source_file_path}' is not under the current working directory "
2473
+ f"(which is required when running with local=True)"
2474
+ )
2475
+ relative_path_to_source_file = source_file_path_object.relative_to(
2476
+ current_dir_path_object
2477
+ )
2478
+ return ".".join(relative_path_to_source_file.with_suffix("").parts)