mlrun 1.10.0rc22__tar.gz → 1.10.0rc24__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 (396) hide show
  1. {mlrun-1.10.0rc22/mlrun.egg-info → mlrun-1.10.0rc24}/PKG-INFO +2 -2
  2. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/model_monitoring/functions.py +13 -4
  3. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/config.py +5 -1
  4. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/datastore.py +6 -1
  5. mlrun-1.10.0rc24/mlrun/datastore/model_provider/mock_model_provider.py +87 -0
  6. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/model_provider/model_provider.py +5 -5
  7. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/model_provider/openai_provider.py +44 -13
  8. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/k8s_utils.py +105 -2
  9. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/controller.py +1 -1
  10. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/application/application.py +15 -0
  11. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/server.py +24 -7
  12. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/states.py +191 -61
  13. mlrun-1.10.0rc24/mlrun/utils/version/version.json +4 -0
  14. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24/mlrun.egg-info}/PKG-INFO +2 -2
  15. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun.egg-info/SOURCES.txt +1 -0
  16. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun.egg-info/requires.txt +1 -1
  17. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/requirements.txt +1 -1
  18. mlrun-1.10.0rc22/mlrun/utils/version/version.json +0 -4
  19. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/LICENSE +0 -0
  20. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/MANIFEST.in +0 -0
  21. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/Makefile +0 -0
  22. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/README.md +0 -0
  23. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/dependencies.py +0 -0
  24. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/dev-requirements.txt +0 -0
  25. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/dockerfiles/mlrun-api/requirements.txt +0 -0
  26. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/archive.zip +0 -0
  27. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/function.py +0 -0
  28. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/handler.py +0 -0
  29. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/infile.txt +0 -0
  30. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/load-project.ipynb +0 -0
  31. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_basics.ipynb +0 -0
  32. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_dask.ipynb +0 -0
  33. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_db.ipynb +0 -0
  34. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_export_import.ipynb +0 -0
  35. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_jobs.ipynb +0 -0
  36. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_sparkk8s.ipynb +0 -0
  37. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/mlrun_vault.ipynb +0 -0
  38. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/model.bst +0 -0
  39. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/new-project.ipynb +0 -0
  40. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/nulltst.py +0 -0
  41. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/params.csv +0 -0
  42. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/remote-spark.ipynb +0 -0
  43. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/secrets.txt +0 -0
  44. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/spark-function.py +0 -0
  45. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/training.py +0 -0
  46. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/v2_model_server.ipynb +0 -0
  47. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/examples/xgb_serving.ipynb +0 -0
  48. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/extras-requirements.txt +0 -0
  49. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/__init__.py +0 -0
  50. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/__main__.py +0 -0
  51. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/alerts/__init__.py +0 -0
  52. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/alerts/alert.py +0 -0
  53. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/__init__.py +0 -0
  54. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/base.py +0 -0
  55. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/dataset.py +0 -0
  56. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/document.py +0 -0
  57. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/helpers.py +0 -0
  58. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/llm_prompt.py +0 -0
  59. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/manager.py +0 -0
  60. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/model.py +0 -0
  61. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/artifacts/plots.py +0 -0
  62. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/__init__.py +0 -0
  63. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/constants.py +0 -0
  64. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/db/__init__.py +0 -0
  65. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/db/dialects.py +0 -0
  66. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/__init__.py +0 -0
  67. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/artifact.py +0 -0
  68. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/base.py +0 -0
  69. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/feature_set.py +0 -0
  70. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/function.py +0 -0
  71. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/model_endpoint.py +0 -0
  72. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/pipeline.py +0 -0
  73. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/project.py +0 -0
  74. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/formatters/run.py +0 -0
  75. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/helpers.py +0 -0
  76. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/model_monitoring/__init__.py +0 -0
  77. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/model_monitoring/helpers.py +0 -0
  78. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/runtimes/constants.py +0 -0
  79. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/__init__.py +0 -0
  80. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/alert.py +0 -0
  81. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/api_gateway.py +0 -0
  82. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/artifact.py +0 -0
  83. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/auth.py +0 -0
  84. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/background_task.py +0 -0
  85. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/client_spec.py +0 -0
  86. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/clusterization_spec.py +0 -0
  87. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/common.py +0 -0
  88. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/constants.py +0 -0
  89. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/datastore_profile.py +0 -0
  90. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/events.py +0 -0
  91. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/feature_store.py +0 -0
  92. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/frontend_spec.py +0 -0
  93. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/function.py +0 -0
  94. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/http.py +0 -0
  95. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/hub.py +0 -0
  96. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/k8s.py +0 -0
  97. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/memory_reports.py +0 -0
  98. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/model_monitoring/__init__.py +0 -0
  99. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/model_monitoring/constants.py +0 -0
  100. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/model_monitoring/grafana.py +0 -0
  101. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/model_monitoring/model_endpoints.py +0 -0
  102. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/notification.py +0 -0
  103. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/object.py +0 -0
  104. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/pagination.py +0 -0
  105. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/partition.py +0 -0
  106. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/pipeline.py +0 -0
  107. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/project.py +0 -0
  108. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/regex.py +0 -0
  109. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/runs.py +0 -0
  110. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/runtime_resource.py +0 -0
  111. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/schedule.py +0 -0
  112. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/secret.py +0 -0
  113. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/serving.py +0 -0
  114. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/tag.py +0 -0
  115. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/schemas/workflow.py +0 -0
  116. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/secrets.py +0 -0
  117. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/common/types.py +0 -0
  118. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/data_types/__init__.py +0 -0
  119. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/data_types/data_types.py +0 -0
  120. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/data_types/infer.py +0 -0
  121. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/data_types/spark.py +0 -0
  122. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/data_types/to_pandas.py +0 -0
  123. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/__init__.py +0 -0
  124. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/alibaba_oss.py +0 -0
  125. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/azure_blob.py +0 -0
  126. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/base.py +0 -0
  127. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/datastore_profile.py +0 -0
  128. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/dbfs_store.py +0 -0
  129. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/filestore.py +0 -0
  130. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/google_cloud_storage.py +0 -0
  131. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/hdfs.py +0 -0
  132. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/inmem.py +0 -0
  133. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/model_provider/__init__.py +0 -0
  134. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/model_provider/huggingface_provider.py +0 -0
  135. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/redis.py +0 -0
  136. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/remote_client.py +0 -0
  137. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/s3.py +0 -0
  138. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/snowflake_utils.py +0 -0
  139. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/sources.py +0 -0
  140. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/spark_udf.py +0 -0
  141. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/spark_utils.py +0 -0
  142. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/store_resources.py +0 -0
  143. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/storeytargets.py +0 -0
  144. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/targets.py +0 -0
  145. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/utils.py +0 -0
  146. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/v3io.py +0 -0
  147. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/vectorstore.py +0 -0
  148. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/wasbfs/__init__.py +0 -0
  149. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/datastore/wasbfs/fs.py +0 -0
  150. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/db/__init__.py +0 -0
  151. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/db/auth_utils.py +0 -0
  152. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/db/base.py +0 -0
  153. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/db/factory.py +0 -0
  154. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/db/httpdb.py +0 -0
  155. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/db/nopdb.py +0 -0
  156. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/errors.py +0 -0
  157. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/execution.py +0 -0
  158. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/__init__.py +0 -0
  159. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/api.py +0 -0
  160. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/common.py +0 -0
  161. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/feature_set.py +0 -0
  162. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/feature_vector.py +0 -0
  163. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/feature_vector_utils.py +0 -0
  164. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/ingestion.py +0 -0
  165. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/__init__.py +0 -0
  166. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/base.py +0 -0
  167. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/dask_merger.py +0 -0
  168. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/job.py +0 -0
  169. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/local_merger.py +0 -0
  170. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/spark_merger.py +0 -0
  171. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/retrieval/storey_merger.py +0 -0
  172. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/feature_store/steps.py +0 -0
  173. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/features.py +0 -0
  174. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/__init__.py +0 -0
  175. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/__init__.py +0 -0
  176. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/artifacts_library.py +0 -0
  177. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/mlrun_interface.py +0 -0
  178. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/model_handler.py +0 -0
  179. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/plan.py +0 -0
  180. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/producer.py +0 -0
  181. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_common/utils.py +0 -0
  182. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/__init__.py +0 -0
  183. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/loggers/__init__.py +0 -0
  184. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/loggers/logger.py +0 -0
  185. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +0 -0
  186. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +0 -0
  187. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/model_handler.py +0 -0
  188. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_dl_common/utils.py +0 -0
  189. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/__init__.py +0 -0
  190. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/artifacts_library.py +0 -0
  191. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/loggers/__init__.py +0 -0
  192. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/loggers/logger.py +0 -0
  193. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +0 -0
  194. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/model_handler.py +0 -0
  195. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/pkl_model_server.py +0 -0
  196. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plan.py +0 -0
  197. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plans/__init__.py +0 -0
  198. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +0 -0
  199. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +0 -0
  200. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plans/dataset_plan.py +0 -0
  201. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +0 -0
  202. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +0 -0
  203. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/producer.py +0 -0
  204. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/_ml_common/utils.py +0 -0
  205. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/auto_mlrun/__init__.py +0 -0
  206. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/auto_mlrun/auto_mlrun.py +0 -0
  207. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/huggingface/__init__.py +0 -0
  208. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/huggingface/model_server.py +0 -0
  209. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/__init__.py +0 -0
  210. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/callbacks/__init__.py +0 -0
  211. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/callbacks/callback.py +0 -0
  212. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/callbacks/logging_callback.py +0 -0
  213. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +0 -0
  214. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +0 -0
  215. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +0 -0
  216. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +0 -0
  217. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +0 -0
  218. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/model_handler.py +0 -0
  219. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/model_server.py +0 -0
  220. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/lgbm/utils.py +0 -0
  221. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/onnx/__init__.py +0 -0
  222. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/onnx/dataset.py +0 -0
  223. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/onnx/mlrun_interface.py +0 -0
  224. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/onnx/model_handler.py +0 -0
  225. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/onnx/model_server.py +0 -0
  226. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/parallel_coordinates.py +0 -0
  227. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/__init__.py +0 -0
  228. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/callbacks/__init__.py +0 -0
  229. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/callbacks/callback.py +0 -0
  230. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/callbacks/logging_callback.py +0 -0
  231. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +0 -0
  232. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +0 -0
  233. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/callbacks_handler.py +0 -0
  234. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/mlrun_interface.py +0 -0
  235. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/model_handler.py +0 -0
  236. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/model_server.py +0 -0
  237. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/pytorch/utils.py +0 -0
  238. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/__init__.py +0 -0
  239. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/estimator.py +0 -0
  240. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/metric.py +0 -0
  241. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/metrics_library.py +0 -0
  242. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/mlrun_interface.py +0 -0
  243. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/model_handler.py +0 -0
  244. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/sklearn/utils.py +0 -0
  245. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/__init__.py +0 -0
  246. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/callbacks/__init__.py +0 -0
  247. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/callbacks/logging_callback.py +0 -0
  248. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +0 -0
  249. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +0 -0
  250. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/mlrun_interface.py +0 -0
  251. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/model_handler.py +0 -0
  252. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/model_server.py +0 -0
  253. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/tf_keras/utils.py +0 -0
  254. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/xgboost/__init__.py +0 -0
  255. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/xgboost/mlrun_interface.py +0 -0
  256. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/xgboost/model_handler.py +0 -0
  257. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/frameworks/xgboost/utils.py +0 -0
  258. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/launcher/__init__.py +0 -0
  259. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/launcher/base.py +0 -0
  260. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/launcher/client.py +0 -0
  261. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/launcher/factory.py +0 -0
  262. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/launcher/local.py +0 -0
  263. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/launcher/remote.py +0 -0
  264. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/lists.py +0 -0
  265. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model.py +0 -0
  266. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/__init__.py +0 -0
  267. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/api.py +0 -0
  268. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/__init__.py +0 -0
  269. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/_application_steps.py +0 -0
  270. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/base.py +0 -0
  271. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/context.py +0 -0
  272. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/evidently/__init__.py +0 -0
  273. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/evidently/base.py +0 -0
  274. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/histogram_data_drift.py +0 -0
  275. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/applications/results.py +0 -0
  276. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/__init__.py +0 -0
  277. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/_schedules.py +0 -0
  278. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/_stats.py +0 -0
  279. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/__init__.py +0 -0
  280. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/base.py +0 -0
  281. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/helpers.py +0 -0
  282. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +0 -0
  283. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -0
  284. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -0
  285. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -0
  286. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +0 -0
  287. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/v3io/__init__.py +0 -0
  288. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +0 -0
  289. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +0 -0
  290. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/features_drift_table.py +0 -0
  291. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/helpers.py +0 -0
  292. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/metrics/__init__.py +0 -0
  293. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/metrics/histogram_distance.py +0 -0
  294. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/stream_processing.py +0 -0
  295. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/model_monitoring/writer.py +0 -0
  296. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/__init__.py +0 -0
  297. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/context_handler.py +0 -0
  298. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/errors.py +0 -0
  299. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packager.py +0 -0
  300. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packagers/__init__.py +0 -0
  301. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packagers/default_packager.py +0 -0
  302. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packagers/numpy_packagers.py +0 -0
  303. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packagers/pandas_packagers.py +0 -0
  304. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packagers/python_standard_library_packagers.py +0 -0
  305. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/packagers_manager.py +0 -0
  306. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/__init__.py +0 -0
  307. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/_archiver.py +0 -0
  308. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/_formatter.py +0 -0
  309. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/_pickler.py +0 -0
  310. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/_supported_format.py +0 -0
  311. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/log_hint_utils.py +0 -0
  312. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/package/utils/type_hint_utils.py +0 -0
  313. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/platforms/__init__.py +0 -0
  314. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/platforms/iguazio.py +0 -0
  315. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/projects/__init__.py +0 -0
  316. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/projects/operations.py +0 -0
  317. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/projects/pipelines.py +0 -0
  318. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/projects/project.py +0 -0
  319. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/render.py +0 -0
  320. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/run.py +0 -0
  321. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/__init__.py +0 -0
  322. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/base.py +0 -0
  323. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/daskjob.py +0 -0
  324. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/databricks_job/__init__.py +0 -0
  325. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/databricks_job/databricks_cancel_task.py +0 -0
  326. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/databricks_job/databricks_runtime.py +0 -0
  327. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/databricks_job/databricks_wrapper.py +0 -0
  328. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/funcdoc.py +0 -0
  329. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/function_reference.py +0 -0
  330. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/generators.py +0 -0
  331. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/kubejob.py +0 -0
  332. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/local.py +0 -0
  333. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/mounts.py +0 -0
  334. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/mpijob/__init__.py +0 -0
  335. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/mpijob/abstract.py +0 -0
  336. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/mpijob/v1.py +0 -0
  337. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/__init__.py +0 -0
  338. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/api_gateway.py +0 -0
  339. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/application/__init__.py +0 -0
  340. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/application/reverse_proxy.go +0 -0
  341. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/function.py +0 -0
  342. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/nuclio.py +0 -0
  343. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/nuclio/serving.py +0 -0
  344. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/pod.py +0 -0
  345. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/remotesparkjob.py +0 -0
  346. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/sparkjob/__init__.py +0 -0
  347. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/sparkjob/spark3job.py +0 -0
  348. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/runtimes/utils.py +0 -0
  349. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/secrets.py +0 -0
  350. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/__init__.py +0 -0
  351. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/merger.py +0 -0
  352. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/remote.py +0 -0
  353. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/routers.py +0 -0
  354. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/serving_wrapper.py +0 -0
  355. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/system_steps.py +0 -0
  356. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/utils.py +0 -0
  357. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/v1_serving.py +0 -0
  358. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/serving/v2_serving.py +0 -0
  359. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/track/__init__.py +0 -0
  360. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/track/tracker.py +0 -0
  361. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/track/tracker_manager.py +0 -0
  362. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/track/trackers/__init__.py +0 -0
  363. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/track/trackers/mlflow_tracker.py +0 -0
  364. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/__init__.py +0 -0
  365. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/async_http.py +0 -0
  366. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/azure_vault.py +0 -0
  367. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/clones.py +0 -0
  368. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/condition_evaluator.py +0 -0
  369. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/helpers.py +0 -0
  370. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/http.py +0 -0
  371. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/logger.py +0 -0
  372. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/__init__.py +0 -0
  373. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/__init__.py +0 -0
  374. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/base.py +0 -0
  375. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/console.py +0 -0
  376. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/git.py +0 -0
  377. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/ipython.py +0 -0
  378. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/mail.py +0 -0
  379. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/slack.py +0 -0
  380. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification/webhook.py +0 -0
  381. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/notifications/notification_pusher.py +0 -0
  382. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/regex.py +0 -0
  383. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/retryer.py +0 -0
  384. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/singleton.py +0 -0
  385. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/v3io_clients.py +0 -0
  386. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/vault.py +0 -0
  387. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/version/__init__.py +0 -0
  388. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun/utils/version/version.py +0 -0
  389. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun.egg-info/dependency_links.txt +0 -0
  390. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun.egg-info/entry_points.txt +0 -0
  391. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun.egg-info/not-zip-safe +0 -0
  392. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/mlrun.egg-info/top_level.txt +0 -0
  393. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/packages.py +0 -0
  394. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/pyproject.toml +0 -0
  395. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/setup.cfg +0 -0
  396. {mlrun-1.10.0rc22 → mlrun-1.10.0rc24}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.10.0rc22
3
+ Version: 1.10.0rc24
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -45,7 +45,7 @@ Requires-Dist: semver~=3.0
45
45
  Requires-Dist: dependency-injector~=4.41
46
46
  Requires-Dist: fsspec<2024.7,>=2023.9.2
47
47
  Requires-Dist: v3iofs~=0.1.17
48
- Requires-Dist: storey~=1.10.10
48
+ Requires-Dist: storey~=1.10.11
49
49
  Requires-Dist: inflection~=0.5.0
50
50
  Requires-Dist: python-dotenv~=1.0
51
51
  Requires-Dist: setuptools>=75.2
@@ -54,12 +54,21 @@ class FunctionSummary(BaseModel):
54
54
 
55
55
  return cls(
56
56
  type=func_type,
57
- name=func_dict["metadata"]["name"],
57
+ name=func_dict["metadata"]["name"]
58
+ if func_type != FunctionsType.APPLICATION
59
+ else func_dict["spec"]
60
+ .get("graph", {})
61
+ .get("steps", {})
62
+ .get("PrepareMonitoringEvent", {})
63
+ .get("class_args", {})
64
+ .get("application_name"),
58
65
  application_class=""
59
66
  if func_type != FunctionsType.APPLICATION
60
- else func_dict["spec"]["graph"]["steps"]["PushToMonitoringWriter"]["after"][
61
- 0
62
- ],
67
+ else func_dict["spec"]
68
+ .get("graph", {})
69
+ .get("steps", {})
70
+ .get("PushToMonitoringWriter", {})
71
+ .get("after", [None])[0],
63
72
  project_name=func_dict["metadata"]["project"],
64
73
  updated_time=func_dict["metadata"].get("updated"),
65
74
  status=func_dict["status"].get("state"),
@@ -107,7 +107,11 @@ default_config = {
107
107
  "submit_timeout": "280", # timeout when submitting a new k8s resource
108
108
  # runtimes cleanup interval in seconds
109
109
  "runtimes_cleanup_interval": "300",
110
- "background_task_cleanup_interval": "86400", # 24 hours in seconds
110
+ # disabled by default due to an internal bug in serving functions
111
+ # relying on a background task to hold the status for its model endpoints
112
+ # TODO: need to refine what/when we can delete the background tasks
113
+ # e.g: use labels or naming convention.
114
+ "background_task_cleanup_interval": "0",
111
115
  "background_task_max_age": "21600", # 6 hours in seconds
112
116
  "monitoring": {
113
117
  "runs": {
@@ -39,6 +39,7 @@ from .base import DataItem, DataStore, HttpStore
39
39
  from .filestore import FileStore
40
40
  from .inmem import InMemoryStore
41
41
  from .model_provider.huggingface_provider import HuggingFaceProvider
42
+ from .model_provider.mock_model_provider import MockModelProvider
42
43
  from .model_provider.openai_provider import OpenAIProvider
43
44
  from .store_resources import get_store_resource, is_store_uri
44
45
  from .v3io import V3ioStore
@@ -103,7 +104,11 @@ def schema_to_store(schema) -> DataStore.__subclasses__():
103
104
  def schema_to_model_provider(
104
105
  schema: str, raise_missing_schema_exception=True
105
106
  ) -> type[ModelProvider]:
106
- schema_dict = {"openai": OpenAIProvider, "huggingface": HuggingFaceProvider}
107
+ schema_dict = {
108
+ "openai": OpenAIProvider,
109
+ "huggingface": HuggingFaceProvider,
110
+ "mock": MockModelProvider,
111
+ }
107
112
  provider_class = schema_dict.get(schema, None)
108
113
  if not provider_class:
109
114
  if raise_missing_schema_exception:
@@ -0,0 +1,87 @@
1
+ # Copyright 2023 Iguazio
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import Any, Optional, Union
16
+
17
+ import mlrun
18
+ from mlrun.datastore.model_provider.model_provider import (
19
+ InvokeResponseFormat,
20
+ ModelProvider,
21
+ UsageResponseKeys,
22
+ )
23
+
24
+
25
+ class MockModelProvider(ModelProvider):
26
+ support_async = False
27
+
28
+ def __init__(
29
+ self,
30
+ parent,
31
+ kind,
32
+ name,
33
+ endpoint="",
34
+ secrets: Optional[dict] = None,
35
+ default_invoke_kwargs: Optional[dict] = None,
36
+ ):
37
+ super().__init__(
38
+ parent=parent, name=name, kind=kind, endpoint=endpoint, secrets=secrets
39
+ )
40
+ self.default_invoke_kwargs = default_invoke_kwargs or {}
41
+ self._client = None
42
+ self._async_client = None
43
+
44
+ @staticmethod
45
+ def _extract_string_output(response: Any) -> str:
46
+ """
47
+ Extracts string response from response object
48
+ """
49
+ pass
50
+
51
+ def load_client(self) -> None:
52
+ """
53
+ Initializes the SDK client for the model provider with the given keyword arguments
54
+ and assigns it to an instance attribute (e.g., self._client).
55
+
56
+ Subclasses should override this method to:
57
+ - Create and configure the provider-specific client instance.
58
+ - Assign the client instance to self._client.
59
+ """
60
+
61
+ pass
62
+
63
+ def invoke(
64
+ self,
65
+ messages: Union[list[dict], Any],
66
+ invoke_response_format: InvokeResponseFormat = InvokeResponseFormat.FULL,
67
+ **invoke_kwargs,
68
+ ) -> Union[str, dict[str, Any], Any]:
69
+ if invoke_response_format == InvokeResponseFormat.STRING:
70
+ return (
71
+ "You are using a mock model provider, no actual inference is performed."
72
+ )
73
+ elif invoke_response_format == InvokeResponseFormat.FULL:
74
+ return {
75
+ UsageResponseKeys.USAGE: {"prompt_tokens": 0, "completion_tokens": 0},
76
+ UsageResponseKeys.ANSWER: "You are using a mock model provider, no actual inference is performed.",
77
+ "extra": {},
78
+ }
79
+ elif invoke_response_format == InvokeResponseFormat.USAGE:
80
+ return {
81
+ UsageResponseKeys.ANSWER: "You are using a mock model provider, no actual inference is performed.",
82
+ UsageResponseKeys.USAGE: {"prompt_tokens": 0, "completion_tokens": 0},
83
+ }
84
+ else:
85
+ raise mlrun.errors.MLRunInvalidArgumentError(
86
+ f"Unsupported invoke response format: {invoke_response_format}"
87
+ )
@@ -128,16 +128,16 @@ class ModelProvider(BaseRemoteClient):
128
128
 
129
129
  def load_client(self) -> None:
130
130
  """
131
- Initializes the SDK client for the model provider with the given keyword arguments
132
- and assigns it to an instance attribute (e.g., self._client).
131
+ Initialize the SDK client for the model provider and assign it to an instance attribute.
133
132
 
134
- Subclasses should override this method to:
135
- - Create and configure the provider-specific client instance.
136
- - Assign the client instance to self._client.
133
+ Subclasses should override this method to create and configure the provider-specific client.
137
134
  """
138
135
 
139
136
  raise NotImplementedError("load_client method is not implemented")
140
137
 
138
+ def load_async_client(self) -> Any:
139
+ raise NotImplementedError("load_async_client method is not implemented")
140
+
141
141
  @property
142
142
  def client(self) -> Any:
143
143
  return self._client
@@ -67,7 +67,6 @@ class OpenAIProvider(ModelProvider):
67
67
  default_invoke_kwargs=default_invoke_kwargs,
68
68
  )
69
69
  self.options = self.get_client_options()
70
- self.load_client()
71
70
 
72
71
  @classmethod
73
72
  def _import_response_class(cls) -> None:
@@ -98,24 +97,56 @@ class OpenAIProvider(ModelProvider):
98
97
  subpath = ""
99
98
  return endpoint, subpath
100
99
 
100
+ @property
101
+ def client(self) -> Any:
102
+ """
103
+ Lazily return the synchronous OpenAI client.
104
+
105
+ If the client has not been initialized yet, it will be created
106
+ by calling `load_client`.
107
+ """
108
+ self.load_client()
109
+ return self._client
110
+
101
111
  def load_client(self) -> None:
102
112
  """
103
- Initializes the OpenAI SDK client using the provided options.
113
+ Lazily initialize the synchronous OpenAI client.
114
+
115
+ The client is created only if it does not already exist.
116
+ Raises ImportError if the openai package is not installed.
117
+ """
118
+ if not self._client:
119
+ try:
120
+ from openai import OpenAI # noqa
121
+
122
+ self._client = OpenAI(**self.options)
123
+ except ImportError as exc:
124
+ raise ImportError("openai package is not installed") from exc
125
+
126
+ def load_async_client(self) -> None:
127
+ """
128
+ Lazily initialize the asynchronous OpenAI client.
129
+
130
+ The client is created only if it does not already exist.
131
+ Raises ImportError if the openai package is not installed.
132
+ """
133
+ if not self._async_client:
134
+ try:
135
+ from openai import AsyncOpenAI # noqa
104
136
 
105
- This method imports the `OpenAI` class from the `openai` package, instantiates
106
- a client with the given keyword arguments (`self.options`), and assigns it to
107
- `self._client` and `self._async_client`.
137
+ self._async_client = AsyncOpenAI(**self.options)
138
+ except ImportError as exc:
139
+ raise ImportError("openai package is not installed") from exc
108
140
 
109
- Raises:
110
- ImportError: If the `openai` package is not installed.
141
+ @property
142
+ def async_client(self) -> Any:
111
143
  """
112
- try:
113
- from openai import OpenAI, AsyncOpenAI # noqa
144
+ Return the asynchronous OpenAI client, creating it on first access.
114
145
 
115
- self._client = OpenAI(**self.options)
116
- self._async_client = AsyncOpenAI(**self.options)
117
- except ImportError as exc:
118
- raise ImportError("openai package is not installed") from exc
146
+ The client is lazily initialized via `load_async_client`.
147
+ """
148
+ self.load_async_client()
149
+ return self._async_client
119
150
 
120
151
  def get_client_options(self) -> dict:
121
152
  res = dict(
@@ -26,6 +26,10 @@ from .config import config as mlconfig
26
26
 
27
27
  _running_inside_kubernetes_cluster = None
28
28
 
29
+ K8sObj = typing.Union[kubernetes.client.V1Affinity, kubernetes.client.V1Toleration]
30
+ SanitizedK8sObj = dict[str, typing.Any]
31
+ K8sObjList = typing.Union[list[K8sObj], list[SanitizedK8sObj]]
32
+
29
33
 
30
34
  def is_running_inside_kubernetes_cluster():
31
35
  global _running_inside_kubernetes_cluster
@@ -232,6 +236,54 @@ def validate_node_selectors(
232
236
  return True
233
237
 
234
238
 
239
+ def sanitize_k8s_objects(
240
+ k8s_objects: typing.Union[None, K8sObjList, SanitizedK8sObj, K8sObj],
241
+ ) -> typing.Union[list[SanitizedK8sObj], SanitizedK8sObj]:
242
+ """Convert K8s objects to dicts. Handles single objects or lists."""
243
+ api_client = kubernetes.client.ApiClient()
244
+ if not k8s_objects:
245
+ return k8s_objects
246
+
247
+ def _sanitize_k8s_object(k8s_obj):
248
+ return (
249
+ api_client.sanitize_for_serialization(k8s_obj)
250
+ if hasattr(k8s_obj, "to_dict")
251
+ else k8s_obj
252
+ )
253
+
254
+ return (
255
+ [_sanitize_k8s_object(k8s_obj) for k8s_obj in k8s_objects]
256
+ if isinstance(k8s_objects, list)
257
+ else _sanitize_k8s_object(k8s_objects)
258
+ )
259
+
260
+
261
+ def sanitize_scheduling_configuration(
262
+ tolerations: typing.Optional[list[kubernetes.client.V1Toleration]] = None,
263
+ affinity: typing.Optional[kubernetes.client.V1Affinity] = None,
264
+ ) -> tuple[
265
+ typing.Optional[list[dict]],
266
+ typing.Optional[dict],
267
+ ]:
268
+ """
269
+ Sanitizes pod scheduling configuration for serialization.
270
+
271
+ Takes affinity and tolerations and converts them to
272
+ JSON-serializable dictionaries using the Kubernetes API client's
273
+ sanitization method.
274
+
275
+ Args:
276
+ affinity: Pod affinity/anti-affinity rules
277
+ tolerations: List of toleration rules
278
+
279
+ Returns:
280
+ Tuple of (sanitized_affinity, sanitized_tolerations)
281
+ - affinity: Sanitized dict representation or None
282
+ - tolerations: List of sanitized dict representations or None
283
+ """
284
+ return sanitize_k8s_objects(tolerations), sanitize_k8s_objects(affinity)
285
+
286
+
235
287
  def enrich_preemption_mode(
236
288
  preemption_mode: typing.Optional[str],
237
289
  node_selector: dict[str, str],
@@ -269,8 +321,8 @@ def enrich_preemption_mode(
269
321
  )
270
322
 
271
323
  enriched_node_selector = copy.deepcopy(node_selector or {})
272
- enriched_tolerations = copy.deepcopy(tolerations or [])
273
- enriched_affinity = copy.deepcopy(affinity)
324
+ enriched_tolerations = _safe_copy_tolerations(tolerations or [])
325
+ enriched_affinity = _safe_copy_affinity(affinity)
274
326
  preemptible_tolerations = generate_preemptible_tolerations()
275
327
 
276
328
  if handler := _get_mode_handler(preemption_mode):
@@ -288,6 +340,57 @@ def enrich_preemption_mode(
288
340
  )
289
341
 
290
342
 
343
+ def _safe_copy_tolerations(
344
+ tolerations: list[kubernetes.client.V1Toleration],
345
+ ) -> list[kubernetes.client.V1Toleration]:
346
+ """
347
+ Safely copy a list of V1Toleration objects without mutating the originals.
348
+
349
+ Explicitly reconstructs V1Toleration objects instead of using deepcopy() to avoid
350
+ serialization errors with K8s client objects that contain threading primitives
351
+ and non-copyable elements like RLock objects.
352
+
353
+ Args:
354
+ tolerations: List of V1Toleration objects to copy
355
+
356
+ Returns:
357
+ New list containing copied V1Toleration objects with identical field values"""
358
+ return [
359
+ kubernetes.client.V1Toleration(
360
+ effect=toleration.effect,
361
+ key=toleration.key,
362
+ value=toleration.value,
363
+ operator=toleration.operator,
364
+ toleration_seconds=toleration.toleration_seconds,
365
+ )
366
+ for toleration in tolerations
367
+ ]
368
+
369
+
370
+ def _safe_copy_affinity(
371
+ affinity: kubernetes.client.V1Affinity,
372
+ ) -> kubernetes.client.V1Affinity:
373
+ """
374
+ Safely create a deep copy of a V1Affinity object.
375
+
376
+ Uses K8s API client serialization/deserialization instead of deepcopy() to avoid
377
+ errors with threading primitives and complex internal structures in K8s objects.
378
+ Serializes to dict then deserializes back to a clean V1Affinity object.
379
+
380
+ Args:
381
+ affinity: V1Affinity object to copy, or None
382
+
383
+ Returns:
384
+ New V1Affinity object with identical field values, or None if input was None
385
+ """
386
+ if not affinity:
387
+ return None
388
+ api_client = kubernetes.client.ApiClient()
389
+ # Convert to dict then back to object properly
390
+ affinity_dict = api_client.sanitize_for_serialization(affinity)
391
+ return api_client._ApiClient__deserialize(affinity_dict, "V1Affinity")
392
+
393
+
291
394
  def _get_mode_handler(mode: str):
292
395
  return {
293
396
  mlrun.common.schemas.PreemptionModes.prevent: _handle_prevent_mode,
@@ -859,7 +859,7 @@ class MonitoringApplicationController:
859
859
  for endpoint in endpoints:
860
860
  last_request = last_request_dict.get(endpoint.metadata.uid, None)
861
861
  if isinstance(last_request, float):
862
- last_request = pd.to_datetime(last_request, unit="s", utc=True)
862
+ last_request = pd.to_datetime(last_request, unit="ms", utc=True)
863
863
  endpoint.status.last_request = (
864
864
  last_request or endpoint.status.last_request
865
865
  )
@@ -79,6 +79,10 @@ class ApplicationSpec(NuclioSpec):
79
79
  add_templated_ingress_host_mode=None,
80
80
  state_thresholds=None,
81
81
  disable_default_http_trigger=None,
82
+ serving_spec=None,
83
+ graph=None,
84
+ parameters=None,
85
+ track_models=None,
82
86
  internal_application_port=None,
83
87
  application_ports=None,
84
88
  ):
@@ -120,6 +124,10 @@ class ApplicationSpec(NuclioSpec):
120
124
  security_context=security_context,
121
125
  service_type=service_type,
122
126
  add_templated_ingress_host_mode=add_templated_ingress_host_mode,
127
+ serving_spec=serving_spec,
128
+ graph=graph,
129
+ parameters=parameters,
130
+ track_models=track_models,
123
131
  state_thresholds=state_thresholds,
124
132
  disable_default_http_trigger=disable_default_http_trigger,
125
133
  )
@@ -186,6 +194,13 @@ class ApplicationSpec(NuclioSpec):
186
194
  is_valid_port(port, raise_on_error=True)
187
195
  self._internal_application_port = port
188
196
 
197
+ # If when internal application port is being set, length of self._application_ports is 1,
198
+ # it means that it consist of [old_port] only
199
+ # so in this case, we rewrite the list completely, by setting value to [new_value]
200
+ if len(self.application_ports) == 1:
201
+ self._application_ports = [port]
202
+ return
203
+
189
204
  # when setting new internal application port, ensure that it is included in the application ports
190
205
  # it just triggers setter logic, so setting to the same value is a no-op
191
206
  self.application_ports = self._application_ports
@@ -17,8 +17,10 @@ __all__ = ["GraphServer", "create_graph_server", "GraphContext", "MockEvent"]
17
17
  import asyncio
18
18
  import base64
19
19
  import copy
20
+ import importlib
20
21
  import json
21
22
  import os
23
+ import pathlib
22
24
  import socket
23
25
  import traceback
24
26
  import uuid
@@ -572,19 +574,34 @@ async def async_execute_graph(
572
574
  nest_under_inputs: bool,
573
575
  ) -> list[Any]:
574
576
  spec = mlrun.utils.get_serving_spec()
575
-
576
- namespace = {}
577
+ modname = None
577
578
  code = os.getenv("MLRUN_EXEC_CODE")
578
579
  if code:
579
580
  code = base64.b64decode(code).decode("utf-8")
580
- exec(code, namespace)
581
+ with open("user_code.py", "w") as fp:
582
+ fp.write(code)
583
+ modname = "user_code"
581
584
  else:
582
585
  # TODO: find another way to get the local file path, or ensure that MLRUN_EXEC_CODE
583
586
  # gets set in local flow and not just in the remote pod
584
- source_filename = spec.get("filename", None)
585
- if source_filename:
586
- with open(source_filename) as f:
587
- exec(f.read(), namespace)
587
+ source_file_path = spec.get("filename", None)
588
+ if source_file_path:
589
+ source_file_path_object = pathlib.Path(source_file_path).resolve()
590
+ current_dir_path_object = pathlib.Path(".").resolve()
591
+ if not source_file_path_object.is_relative_to(current_dir_path_object):
592
+ raise mlrun.errors.MLRunRuntimeError(
593
+ f"Source file path '{source_file_path}' is not under the current working directory "
594
+ f"(which is required when running with local=True)"
595
+ )
596
+ relative_path_to_source_file = source_file_path_object.relative_to(
597
+ current_dir_path_object
598
+ )
599
+ modname = ".".join(relative_path_to_source_file.with_suffix("").parts)
600
+
601
+ namespace = {}
602
+ if modname:
603
+ mod = importlib.import_module(modname)
604
+ namespace = mod.__dict__
588
605
 
589
606
  server = GraphServer.from_dict(spec)
590
607