mlrun 1.10.0rc38__tar.gz → 1.10.0rc39__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.0rc38/mlrun.egg-info → mlrun-1.10.0rc39}/PKG-INFO +3 -3
  2. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/dockerfiles/mlrun-api/requirements.txt +1 -1
  3. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/document.py +6 -1
  4. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/constants.py +6 -0
  5. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/model_monitoring/constants.py +0 -2
  6. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/secrets.py +9 -1
  7. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/launcher/local.py +2 -0
  8. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model.py +9 -1
  9. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/api.py +3 -2
  10. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/base.py +6 -3
  11. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/projects/project.py +17 -2
  12. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/run.py +7 -0
  13. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/__init__.py +18 -0
  14. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/base.py +3 -0
  15. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/local.py +5 -2
  16. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/mounts.py +9 -0
  17. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/application/application.py +2 -0
  18. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/function.py +2 -0
  19. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/serving.py +69 -4
  20. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/pod.py +67 -9
  21. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/helpers.py +77 -2
  22. mlrun-1.10.0rc39/mlrun/utils/version/version.json +4 -0
  23. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39/mlrun.egg-info}/PKG-INFO +3 -3
  24. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun.egg-info/requires.txt +2 -2
  25. mlrun-1.10.0rc38/mlrun/utils/version/version.json +0 -4
  26. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/LICENSE +0 -0
  27. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/MANIFEST.in +0 -0
  28. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/Makefile +0 -0
  29. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/README.md +0 -0
  30. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/dependencies.py +0 -0
  31. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/dev-requirements.txt +0 -0
  32. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/archive.zip +0 -0
  33. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/function.py +0 -0
  34. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/handler.py +0 -0
  35. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/infile.txt +0 -0
  36. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/load-project.ipynb +0 -0
  37. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_basics.ipynb +0 -0
  38. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_dask.ipynb +0 -0
  39. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_db.ipynb +0 -0
  40. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_export_import.ipynb +0 -0
  41. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_jobs.ipynb +0 -0
  42. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_sparkk8s.ipynb +0 -0
  43. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/mlrun_vault.ipynb +0 -0
  44. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/model.bst +0 -0
  45. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/new-project.ipynb +0 -0
  46. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/nulltst.py +0 -0
  47. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/params.csv +0 -0
  48. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/remote-spark.ipynb +0 -0
  49. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/secrets.txt +0 -0
  50. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/spark-function.py +0 -0
  51. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/training.py +0 -0
  52. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/v2_model_server.ipynb +0 -0
  53. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/examples/xgb_serving.ipynb +0 -0
  54. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/extras-requirements.txt +0 -0
  55. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/__init__.py +0 -0
  56. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/__main__.py +0 -0
  57. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/alerts/__init__.py +0 -0
  58. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/alerts/alert.py +0 -0
  59. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/__init__.py +0 -0
  60. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/base.py +0 -0
  61. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/dataset.py +0 -0
  62. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/helpers.py +0 -0
  63. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/llm_prompt.py +0 -0
  64. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/manager.py +0 -0
  65. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/model.py +0 -0
  66. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/artifacts/plots.py +0 -0
  67. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/__init__.py +0 -0
  68. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/db/__init__.py +0 -0
  69. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/db/dialects.py +0 -0
  70. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/__init__.py +0 -0
  71. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/artifact.py +0 -0
  72. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/base.py +0 -0
  73. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/feature_set.py +0 -0
  74. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/function.py +0 -0
  75. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/model_endpoint.py +0 -0
  76. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/pipeline.py +0 -0
  77. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/project.py +0 -0
  78. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/formatters/run.py +0 -0
  79. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/helpers.py +0 -0
  80. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/model_monitoring/__init__.py +0 -0
  81. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/model_monitoring/helpers.py +0 -0
  82. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/runtimes/constants.py +0 -0
  83. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/__init__.py +0 -0
  84. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/alert.py +0 -0
  85. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/api_gateway.py +0 -0
  86. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/artifact.py +0 -0
  87. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/auth.py +0 -0
  88. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/background_task.py +0 -0
  89. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/client_spec.py +0 -0
  90. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/clusterization_spec.py +0 -0
  91. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/common.py +0 -0
  92. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/constants.py +0 -0
  93. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/datastore_profile.py +0 -0
  94. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/events.py +0 -0
  95. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/feature_store.py +0 -0
  96. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/frontend_spec.py +0 -0
  97. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/function.py +0 -0
  98. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/http.py +0 -0
  99. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/hub.py +0 -0
  100. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/k8s.py +0 -0
  101. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/memory_reports.py +0 -0
  102. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/model_monitoring/__init__.py +0 -0
  103. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/model_monitoring/functions.py +0 -0
  104. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/model_monitoring/grafana.py +0 -0
  105. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/model_monitoring/model_endpoints.py +0 -0
  106. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/notification.py +0 -0
  107. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/object.py +0 -0
  108. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/pagination.py +0 -0
  109. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/partition.py +0 -0
  110. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/pipeline.py +0 -0
  111. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/project.py +0 -0
  112. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/regex.py +0 -0
  113. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/runs.py +0 -0
  114. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/runtime_resource.py +0 -0
  115. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/schedule.py +0 -0
  116. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/secret.py +0 -0
  117. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/serving.py +0 -0
  118. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/tag.py +0 -0
  119. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/schemas/workflow.py +0 -0
  120. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/common/types.py +0 -0
  121. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/config.py +0 -0
  122. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/data_types/__init__.py +0 -0
  123. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/data_types/data_types.py +0 -0
  124. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/data_types/infer.py +0 -0
  125. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/data_types/spark.py +0 -0
  126. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/data_types/to_pandas.py +0 -0
  127. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/__init__.py +0 -0
  128. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/alibaba_oss.py +0 -0
  129. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/azure_blob.py +0 -0
  130. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/base.py +0 -0
  131. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/datastore.py +0 -0
  132. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/datastore_profile.py +0 -0
  133. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/dbfs_store.py +0 -0
  134. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/filestore.py +0 -0
  135. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/google_cloud_storage.py +0 -0
  136. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/hdfs.py +0 -0
  137. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/inmem.py +0 -0
  138. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/model_provider/__init__.py +0 -0
  139. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/model_provider/huggingface_provider.py +0 -0
  140. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/model_provider/mock_model_provider.py +0 -0
  141. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/model_provider/model_provider.py +0 -0
  142. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/model_provider/openai_provider.py +0 -0
  143. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/redis.py +0 -0
  144. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/remote_client.py +0 -0
  145. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/s3.py +0 -0
  146. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/snowflake_utils.py +0 -0
  147. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/sources.py +0 -0
  148. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/spark_udf.py +0 -0
  149. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/spark_utils.py +0 -0
  150. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/store_resources.py +0 -0
  151. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/storeytargets.py +0 -0
  152. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/targets.py +0 -0
  153. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/utils.py +0 -0
  154. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/v3io.py +0 -0
  155. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/vectorstore.py +0 -0
  156. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/wasbfs/__init__.py +0 -0
  157. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/datastore/wasbfs/fs.py +0 -0
  158. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/db/__init__.py +0 -0
  159. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/db/auth_utils.py +0 -0
  160. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/db/base.py +0 -0
  161. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/db/factory.py +0 -0
  162. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/db/httpdb.py +0 -0
  163. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/db/nopdb.py +0 -0
  164. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/errors.py +0 -0
  165. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/execution.py +0 -0
  166. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/__init__.py +0 -0
  167. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/api.py +0 -0
  168. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/common.py +0 -0
  169. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/feature_set.py +0 -0
  170. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/feature_vector.py +0 -0
  171. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/feature_vector_utils.py +0 -0
  172. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/ingestion.py +0 -0
  173. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/__init__.py +0 -0
  174. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/base.py +0 -0
  175. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/dask_merger.py +0 -0
  176. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/job.py +0 -0
  177. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/local_merger.py +0 -0
  178. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/spark_merger.py +0 -0
  179. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/retrieval/storey_merger.py +0 -0
  180. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/feature_store/steps.py +0 -0
  181. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/features.py +0 -0
  182. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/__init__.py +0 -0
  183. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/__init__.py +0 -0
  184. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/artifacts_library.py +0 -0
  185. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/mlrun_interface.py +0 -0
  186. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/model_handler.py +0 -0
  187. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/plan.py +0 -0
  188. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/producer.py +0 -0
  189. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_common/utils.py +0 -0
  190. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/__init__.py +0 -0
  191. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/loggers/__init__.py +0 -0
  192. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/loggers/logger.py +0 -0
  193. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +0 -0
  194. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +0 -0
  195. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/model_handler.py +0 -0
  196. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_dl_common/utils.py +0 -0
  197. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/__init__.py +0 -0
  198. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/artifacts_library.py +0 -0
  199. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/loggers/__init__.py +0 -0
  200. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/loggers/logger.py +0 -0
  201. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +0 -0
  202. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/model_handler.py +0 -0
  203. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/pkl_model_server.py +0 -0
  204. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plan.py +0 -0
  205. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plans/__init__.py +0 -0
  206. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +0 -0
  207. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +0 -0
  208. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plans/dataset_plan.py +0 -0
  209. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +0 -0
  210. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +0 -0
  211. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/producer.py +0 -0
  212. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/_ml_common/utils.py +0 -0
  213. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/auto_mlrun/__init__.py +0 -0
  214. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/auto_mlrun/auto_mlrun.py +0 -0
  215. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/huggingface/__init__.py +0 -0
  216. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/huggingface/model_server.py +0 -0
  217. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/__init__.py +0 -0
  218. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/callbacks/__init__.py +0 -0
  219. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/callbacks/callback.py +0 -0
  220. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/callbacks/logging_callback.py +0 -0
  221. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +0 -0
  222. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +0 -0
  223. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +0 -0
  224. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +0 -0
  225. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +0 -0
  226. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/model_handler.py +0 -0
  227. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/model_server.py +0 -0
  228. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/lgbm/utils.py +0 -0
  229. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/onnx/__init__.py +0 -0
  230. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/onnx/dataset.py +0 -0
  231. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/onnx/mlrun_interface.py +0 -0
  232. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/onnx/model_handler.py +0 -0
  233. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/onnx/model_server.py +0 -0
  234. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/parallel_coordinates.py +0 -0
  235. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/__init__.py +0 -0
  236. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/callbacks/__init__.py +0 -0
  237. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/callbacks/callback.py +0 -0
  238. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/callbacks/logging_callback.py +0 -0
  239. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +0 -0
  240. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +0 -0
  241. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/callbacks_handler.py +0 -0
  242. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/mlrun_interface.py +0 -0
  243. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/model_handler.py +0 -0
  244. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/model_server.py +0 -0
  245. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/pytorch/utils.py +0 -0
  246. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/__init__.py +0 -0
  247. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/estimator.py +0 -0
  248. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/metric.py +0 -0
  249. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/metrics_library.py +0 -0
  250. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/mlrun_interface.py +0 -0
  251. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/model_handler.py +0 -0
  252. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/sklearn/utils.py +0 -0
  253. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/__init__.py +0 -0
  254. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/callbacks/__init__.py +0 -0
  255. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/callbacks/logging_callback.py +0 -0
  256. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +0 -0
  257. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +0 -0
  258. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/mlrun_interface.py +0 -0
  259. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/model_handler.py +0 -0
  260. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/model_server.py +0 -0
  261. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/tf_keras/utils.py +0 -0
  262. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/xgboost/__init__.py +0 -0
  263. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/xgboost/mlrun_interface.py +0 -0
  264. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/xgboost/model_handler.py +0 -0
  265. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/frameworks/xgboost/utils.py +0 -0
  266. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/hub/__init__.py +0 -0
  267. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/hub/module.py +0 -0
  268. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/k8s_utils.py +0 -0
  269. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/launcher/__init__.py +0 -0
  270. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/launcher/base.py +0 -0
  271. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/launcher/client.py +0 -0
  272. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/launcher/factory.py +0 -0
  273. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/launcher/remote.py +0 -0
  274. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/lists.py +0 -0
  275. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/__init__.py +0 -0
  276. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/__init__.py +0 -0
  277. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/_application_steps.py +0 -0
  278. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/context.py +0 -0
  279. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/evidently/__init__.py +0 -0
  280. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/evidently/base.py +0 -0
  281. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/histogram_data_drift.py +0 -0
  282. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/applications/results.py +0 -0
  283. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/controller.py +0 -0
  284. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/__init__.py +0 -0
  285. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/_schedules.py +0 -0
  286. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/_stats.py +0 -0
  287. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/__init__.py +0 -0
  288. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/base.py +0 -0
  289. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/helpers.py +0 -0
  290. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/tdengine/__init__.py +0 -0
  291. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +0 -0
  292. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py +0 -0
  293. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connection.py +0 -0
  294. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +0 -0
  295. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/tdengine/writer_graph_steps.py +0 -0
  296. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/v3io/__init__.py +0 -0
  297. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py +0 -0
  298. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py +0 -0
  299. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/features_drift_table.py +0 -0
  300. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/helpers.py +0 -0
  301. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/metrics/__init__.py +0 -0
  302. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/metrics/histogram_distance.py +0 -0
  303. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/stream_processing.py +0 -0
  304. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/model_monitoring/writer.py +0 -0
  305. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/__init__.py +0 -0
  306. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/context_handler.py +0 -0
  307. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/errors.py +0 -0
  308. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packager.py +0 -0
  309. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packagers/__init__.py +0 -0
  310. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packagers/default_packager.py +0 -0
  311. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packagers/numpy_packagers.py +0 -0
  312. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packagers/pandas_packagers.py +0 -0
  313. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packagers/python_standard_library_packagers.py +0 -0
  314. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/packagers_manager.py +0 -0
  315. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/__init__.py +0 -0
  316. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/_archiver.py +0 -0
  317. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/_formatter.py +0 -0
  318. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/_pickler.py +0 -0
  319. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/_supported_format.py +0 -0
  320. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/log_hint_utils.py +0 -0
  321. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/package/utils/type_hint_utils.py +0 -0
  322. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/platforms/__init__.py +0 -0
  323. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/platforms/iguazio.py +0 -0
  324. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/projects/__init__.py +0 -0
  325. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/projects/operations.py +0 -0
  326. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/projects/pipelines.py +0 -0
  327. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/render.py +0 -0
  328. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/daskjob.py +0 -0
  329. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/databricks_job/__init__.py +0 -0
  330. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/databricks_job/databricks_cancel_task.py +0 -0
  331. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/databricks_job/databricks_runtime.py +0 -0
  332. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/databricks_job/databricks_wrapper.py +0 -0
  333. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/funcdoc.py +0 -0
  334. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/function_reference.py +0 -0
  335. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/generators.py +0 -0
  336. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/kubejob.py +0 -0
  337. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/mpijob/__init__.py +0 -0
  338. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/mpijob/abstract.py +0 -0
  339. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/mpijob/v1.py +0 -0
  340. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/__init__.py +0 -0
  341. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/api_gateway.py +0 -0
  342. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/application/__init__.py +0 -0
  343. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/application/reverse_proxy.go +0 -0
  344. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/nuclio/nuclio.py +0 -0
  345. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/remotesparkjob.py +0 -0
  346. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/sparkjob/__init__.py +0 -0
  347. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/sparkjob/spark3job.py +0 -0
  348. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/runtimes/utils.py +0 -0
  349. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/secrets.py +0 -0
  350. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/__init__.py +0 -0
  351. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/merger.py +0 -0
  352. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/remote.py +0 -0
  353. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/routers.py +0 -0
  354. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/server.py +0 -0
  355. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/serving_wrapper.py +0 -0
  356. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/states.py +0 -0
  357. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/steps.py +0 -0
  358. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/system_steps.py +0 -0
  359. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/utils.py +0 -0
  360. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/v1_serving.py +0 -0
  361. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/serving/v2_serving.py +0 -0
  362. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/track/__init__.py +0 -0
  363. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/track/tracker.py +0 -0
  364. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/track/tracker_manager.py +0 -0
  365. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/track/trackers/__init__.py +0 -0
  366. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/track/trackers/mlflow_tracker.py +0 -0
  367. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/__init__.py +0 -0
  368. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/async_http.py +0 -0
  369. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/azure_vault.py +0 -0
  370. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/clones.py +0 -0
  371. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/condition_evaluator.py +0 -0
  372. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/http.py +0 -0
  373. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/logger.py +0 -0
  374. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/__init__.py +0 -0
  375. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/__init__.py +0 -0
  376. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/base.py +0 -0
  377. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/console.py +0 -0
  378. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/git.py +0 -0
  379. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/ipython.py +0 -0
  380. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/mail.py +0 -0
  381. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/slack.py +0 -0
  382. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification/webhook.py +0 -0
  383. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/notifications/notification_pusher.py +0 -0
  384. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/regex.py +0 -0
  385. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/retryer.py +0 -0
  386. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/singleton.py +0 -0
  387. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/v3io_clients.py +0 -0
  388. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/vault.py +0 -0
  389. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/version/__init__.py +0 -0
  390. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun/utils/version/version.py +0 -0
  391. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun.egg-info/SOURCES.txt +0 -0
  392. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun.egg-info/dependency_links.txt +0 -0
  393. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun.egg-info/entry_points.txt +0 -0
  394. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun.egg-info/not-zip-safe +0 -0
  395. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/mlrun.egg-info/top_level.txt +0 -0
  396. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/packages.py +0 -0
  397. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/pyproject.toml +0 -0
  398. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/requirements.txt +0 -0
  399. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/setup.cfg +0 -0
  400. {mlrun-1.10.0rc38 → mlrun-1.10.0rc39}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mlrun
3
- Version: 1.10.0rc38
3
+ Version: 1.10.0rc39
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -113,7 +113,7 @@ Requires-Dist: apscheduler<4,>=3.11; extra == "api"
113
113
  Requires-Dist: objgraph~=3.6; extra == "api"
114
114
  Requires-Dist: igz-mgmt~=0.4.1; extra == "api"
115
115
  Requires-Dist: humanfriendly~=10.0; extra == "api"
116
- Requires-Dist: fastapi~=0.116.0; extra == "api"
116
+ Requires-Dist: fastapi~=0.120.0; extra == "api"
117
117
  Requires-Dist: sqlalchemy~=2.0; extra == "api"
118
118
  Requires-Dist: sqlalchemy-utils~=0.41.2; extra == "api"
119
119
  Requires-Dist: pymysql~=1.1; extra == "api"
@@ -203,7 +203,7 @@ Requires-Dist: dask~=2023.12.1; python_version < "3.11" and extra == "complete-a
203
203
  Requires-Dist: databricks-sdk~=0.20.0; extra == "complete-api"
204
204
  Requires-Dist: distributed==2024.8; python_version >= "3.11" and extra == "complete-api"
205
205
  Requires-Dist: distributed~=2023.12.1; python_version < "3.11" and extra == "complete-api"
206
- Requires-Dist: fastapi~=0.116.0; extra == "complete-api"
206
+ Requires-Dist: fastapi~=0.120.0; extra == "complete-api"
207
207
  Requires-Dist: gcsfs<=2025.7.0,>=2025.5.1; extra == "complete-api"
208
208
  Requires-Dist: google-cloud-bigquery-storage~=2.17; extra == "complete-api"
209
209
  Requires-Dist: google-cloud-bigquery[bqstorage,pandas]==3.14.1; extra == "complete-api"
@@ -6,7 +6,7 @@ apscheduler>=3.11,<4
6
6
  objgraph~=3.6
7
7
  igz-mgmt~=0.4.1
8
8
  humanfriendly~=10.0
9
- fastapi~=0.116.0
9
+ fastapi~=0.120.0
10
10
  sqlalchemy~=2.0
11
11
  sqlalchemy-utils~=0.41.2
12
12
  pymysql~=1.1
@@ -359,7 +359,12 @@ class DocumentArtifact(Artifact):
359
359
  self,
360
360
  splitter: Optional["TextSplitter"] = None, # noqa: F821
361
361
  ) -> list["Document"]: # noqa: F821
362
- from langchain.schema import Document
362
+ # Try new langchain 1.0+ import path first
363
+ try:
364
+ from langchain_core.documents import Document
365
+ except ImportError:
366
+ # Fall back to old langchain <1.0 import path
367
+ from langchain.schema import Document
363
368
 
364
369
  """
365
370
  Create LC documents from the artifact
@@ -27,6 +27,12 @@ DASK_LABEL_PREFIX = "dask.org/"
27
27
  NUCLIO_LABEL_PREFIX = "nuclio.io/"
28
28
  RESERVED_TAG_NAME_LATEST = "latest"
29
29
 
30
+ # Kubernetes DNS-1123 label name length limit
31
+ K8S_DNS_1123_LABEL_MAX_LENGTH = 63
32
+
33
+
34
+ RESERVED_BATCH_JOB_SUFFIX = "-batch"
35
+
30
36
  JOB_TYPE_WORKFLOW_RUNNER = "workflow-runner"
31
37
  JOB_TYPE_PROJECT_LOADER = "project-loader"
32
38
  JOB_TYPE_RERUN_WORKFLOW_RUNNER = "rerun-workflow-runner"
@@ -486,8 +486,6 @@ class ModelMonitoringLabels:
486
486
 
487
487
  _RESERVED_FUNCTION_NAMES = MonitoringFunctionNames.list() + [SpecialApps.MLRUN_INFRA]
488
488
 
489
- _RESERVED_EVALUATE_FUNCTION_SUFFIX = "-batch"
490
-
491
489
 
492
490
  class ModelEndpointMonitoringMetricType(StrEnum):
493
491
  RESULT = "result"
@@ -11,10 +11,18 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
-
14
+ import re
15
15
  from abc import ABC, abstractmethod
16
16
 
17
17
  import mlrun.common.schemas
18
+ from mlrun.config import config as mlconf
19
+
20
+ _AUTH_SECRET_NAME_TEMPLATE = re.escape(
21
+ mlconf.secret_stores.kubernetes.auth_secret_name.format(
22
+ hashed_access_key="",
23
+ )
24
+ )
25
+ AUTH_SECRET_PATTERN = re.compile(f"^{_AUTH_SECRET_NAME_TEMPLATE}.*")
18
26
 
19
27
 
20
28
  class SecretProviderInterface(ABC):
@@ -243,6 +243,8 @@ class ClientLocalLauncher(launcher.ClientBaseLauncher):
243
243
 
244
244
  # if the handler has module prefix force "local" (vs "handler") runtime
245
245
  kind = "local" if isinstance(handler, str) and "." in handler else ""
246
+
247
+ # Create temporary local function for execution
246
248
  fn = mlrun.new_function(meta.name, command=command, args=args, kind=kind)
247
249
  fn.metadata = meta
248
250
  setattr(fn, "_is_run_local", True)
@@ -29,6 +29,7 @@ import pydantic.v1.error_wrappers
29
29
  import mlrun
30
30
  import mlrun.common.constants as mlrun_constants
31
31
  import mlrun.common.schemas.notification
32
+ import mlrun.common.secrets
32
33
  import mlrun.utils.regex
33
34
 
34
35
  from .utils import (
@@ -1616,7 +1617,14 @@ class RunTemplate(ModelObj):
1616
1617
 
1617
1618
  :returns: The RunTemplate object
1618
1619
  """
1619
-
1620
+ if kind == "azure_vault" and isinstance(source, dict):
1621
+ candidate_secret_name = (source.get("k8s_secret") or "").strip()
1622
+ if candidate_secret_name and mlrun.common.secrets.AUTH_SECRET_PATTERN.match(
1623
+ candidate_secret_name
1624
+ ):
1625
+ raise mlrun.errors.MLRunInvalidArgumentError(
1626
+ f"Forbidden secret '{candidate_secret_name}' matches MLRun auth-secret pattern."
1627
+ )
1620
1628
  if kind == "vault" and isinstance(source, list):
1621
1629
  source = {"project": self.metadata.project, "secrets": source}
1622
1630
 
@@ -563,9 +563,10 @@ def _create_model_monitoring_function_base(
563
563
  "An application cannot have the following names: "
564
564
  f"{mm_constants._RESERVED_FUNCTION_NAMES}"
565
565
  )
566
- if name and name.endswith(mm_constants._RESERVED_EVALUATE_FUNCTION_SUFFIX):
566
+ _, has_valid_suffix, suffix = mlrun.utils.helpers.ensure_batch_job_suffix(name)
567
+ if name and not has_valid_suffix:
567
568
  raise mlrun.errors.MLRunValueError(
568
- "Model monitoring application names cannot end with `-batch`"
569
+ f"Model monitoring application names cannot end with `{suffix}`"
569
570
  )
570
571
  if func is None:
571
572
  func = ""
@@ -799,10 +799,13 @@ class ModelMonitoringApplicationBase(MonitoringApplicationToDict, ABC):
799
799
  f"`{mm_constants.APP_NAME_REGEX.pattern}`. "
800
800
  "Please choose another `func_name`."
801
801
  )
802
- if not job_name.endswith(mm_constants._RESERVED_EVALUATE_FUNCTION_SUFFIX):
803
- job_name += mm_constants._RESERVED_EVALUATE_FUNCTION_SUFFIX
802
+ job_name, was_renamed, suffix = mlrun.utils.helpers.ensure_batch_job_suffix(
803
+ job_name
804
+ )
805
+ if was_renamed:
804
806
  mlrun.utils.logger.info(
805
- 'Changing function name - adding `"-batch"` suffix', func_name=job_name
807
+ f'Changing function name - adding `"{suffix}"` suffix',
808
+ func_name=job_name,
806
809
  )
807
810
 
808
811
  return job_name
@@ -45,6 +45,7 @@ import mlrun.common.runtimes.constants
45
45
  import mlrun.common.schemas.alert
46
46
  import mlrun.common.schemas.artifact
47
47
  import mlrun.common.schemas.model_monitoring.constants as mm_constants
48
+ import mlrun.common.secrets
48
49
  import mlrun.datastore.datastore_profile
49
50
  import mlrun.db
50
51
  import mlrun.errors
@@ -3418,7 +3419,12 @@ class MlrunProject(ModelObj):
3418
3419
  self._initialized = True
3419
3420
  return self.spec._function_objects
3420
3421
 
3421
- def with_secrets(self, kind, source, prefix=""):
3422
+ def with_secrets(
3423
+ self,
3424
+ kind,
3425
+ source,
3426
+ prefix="",
3427
+ ):
3422
3428
  """register a secrets source (file, env or dict)
3423
3429
 
3424
3430
  read secrets from a source provider to be used in workflows, example::
@@ -3440,12 +3446,21 @@ class MlrunProject(ModelObj):
3440
3446
 
3441
3447
  This will enable access to all secrets in vault registered to the current project.
3442
3448
 
3443
- :param kind: secret type (file, inline, env, vault)
3449
+ :param kind: secret type (file, inline, env, vault, azure_vault)
3444
3450
  :param source: secret data or link (see example)
3445
3451
  :param prefix: add a prefix to the keys in this source
3446
3452
 
3447
3453
  :returns: project object
3448
3454
  """
3455
+ # Block using mlrun-auth-secrets.* via azure_vault's k8s_secret param (client-side only)
3456
+ if kind == "azure_vault" and isinstance(source, dict):
3457
+ candidate_secret_name = (source.get("k8s_secret") or "").strip()
3458
+ if candidate_secret_name and mlrun.common.secrets.AUTH_SECRET_PATTERN.match(
3459
+ candidate_secret_name
3460
+ ):
3461
+ raise mlrun.errors.MLRunInvalidArgumentError(
3462
+ f"Forbidden secret '{candidate_secret_name}' matches MLRun auth-secret pattern."
3463
+ )
3449
3464
 
3450
3465
  if kind == "vault" and isinstance(source, list):
3451
3466
  source = {"project": self.metadata.name, "secrets": source}
@@ -555,6 +555,7 @@ def new_function(
555
555
 
556
556
  # make sure function name is valid
557
557
  name = mlrun.utils.helpers.normalize_name(name)
558
+ mlrun.utils.helpers.validate_function_name(name)
558
559
 
559
560
  runner.metadata.name = name
560
561
  runner.metadata.project = (
@@ -594,6 +595,7 @@ def new_function(
594
595
  )
595
596
 
596
597
  runner.prepare_image_for_deploy()
598
+
597
599
  return runner
598
600
 
599
601
 
@@ -798,6 +800,9 @@ def code_to_function(
798
800
  kind=sub_kind,
799
801
  ignored_tags=ignored_tags,
800
802
  )
803
+
804
+ mlrun.utils.helpers.validate_function_name(name)
805
+
801
806
  spec["spec"]["env"].append(
802
807
  {
803
808
  "name": "MLRUN_HTTPDB__NUCLIO__EXPLICIT_ACK",
@@ -850,6 +855,7 @@ def code_to_function(
850
855
  runtime.spec.build.code_origin = code_origin
851
856
  runtime.spec.build.origin_filename = filename or (name + ".ipynb")
852
857
  update_common(runtime, spec)
858
+
853
859
  return runtime
854
860
 
855
861
  if kind is None or kind in ["", "Function"]:
@@ -863,6 +869,7 @@ def code_to_function(
863
869
 
864
870
  if not name:
865
871
  raise ValueError("name must be specified")
872
+
866
873
  h = get_in(spec, "spec.handler", "").split(":")
867
874
  runtime.handler = h[0] if len(h) <= 1 else h[1]
868
875
  runtime.metadata = get_in(spec, "spec.metadata")
@@ -221,6 +221,24 @@ class RuntimeKinds:
221
221
  return True
222
222
  return False
223
223
 
224
+ @staticmethod
225
+ def requires_k8s_name_validation(kind: str) -> bool:
226
+ """
227
+ Returns True if the runtime kind creates Kubernetes resources that use the function name.
228
+
229
+ Function names for k8s-deployed runtimes must conform to DNS-1123 label requirements:
230
+ - Lowercase alphanumeric characters or '-'
231
+ - Start and end with an alphanumeric character
232
+ - Maximum 63 characters
233
+
234
+ Local runtimes (local, handler) run on the local machine and don't create k8s resources,
235
+ so they don't require k8s naming validation.
236
+
237
+ :param kind: Runtime kind string (job, spark, serving, local, etc.)
238
+ :return: True if function name needs k8s DNS-1123 validation, False otherwise
239
+ """
240
+ return not RuntimeKinds.is_local_runtime(kind)
241
+
224
242
  @staticmethod
225
243
  def requires_absolute_artifacts_path(kind):
226
244
  """
@@ -393,6 +393,9 @@ class BaseRuntime(ModelObj):
393
393
  FutureWarning,
394
394
  )
395
395
  output_path = output_path or out_path or artifact_path
396
+
397
+ mlrun.utils.helpers.validate_function_name(self.metadata.name)
398
+
396
399
  launcher = mlrun.launcher.factory.LauncherFactory().create_launcher(
397
400
  self._is_remote, local=local, **launcher_kwargs
398
401
  )
@@ -29,12 +29,12 @@ from os import environ, remove
29
29
  from pathlib import Path
30
30
  from subprocess import PIPE, Popen
31
31
  from sys import executable
32
+ from typing import Optional
32
33
 
33
34
  from nuclio import Event
34
35
 
35
36
  import mlrun
36
37
  import mlrun.common.constants as mlrun_constants
37
- import mlrun.common.runtimes.constants
38
38
  from mlrun.lists import RunList
39
39
 
40
40
  from ..errors import err_to_str
@@ -201,9 +201,12 @@ class LocalRuntime(BaseRuntime, ParallelRunner):
201
201
  kind = "local"
202
202
  _is_remote = False
203
203
 
204
- def to_job(self, image=""):
204
+ def to_job(self, image="", func_name: Optional[str] = None):
205
205
  struct = self.to_dict()
206
206
  obj = KubejobRuntime.from_dict(struct)
207
+ obj.kind = "job" # Ensure kind is set to 'job' for KubejobRuntime
208
+ if func_name:
209
+ obj.metadata.name = func_name
207
210
  if image:
208
211
  obj.spec.image = image
209
212
  return obj
@@ -17,6 +17,8 @@ import typing
17
17
  import warnings
18
18
  from collections import namedtuple
19
19
 
20
+ import mlrun.common.secrets
21
+ import mlrun.errors
20
22
  from mlrun.config import config
21
23
  from mlrun.config import config as mlconf
22
24
  from mlrun.errors import MLRunInvalidArgumentError
@@ -412,6 +414,13 @@ def mount_secret(
412
414
  the specified paths, and unlisted keys will not be
413
415
  present."""
414
416
 
417
+ if secret_name and mlrun.common.secrets.AUTH_SECRET_PATTERN.match(
418
+ secret_name.strip()
419
+ ):
420
+ raise mlrun.errors.MLRunInvalidArgumentError(
421
+ f"Forbidden secret '{secret_name}' matches MLRun auth-secret pattern."
422
+ )
423
+
415
424
  def _mount_secret(runtime: "KubeResource"):
416
425
  # Define the secret volume source
417
426
  secret_volume_source = {
@@ -400,6 +400,8 @@ class ApplicationRuntime(RemoteRuntime):
400
400
 
401
401
  :return: The default API gateway URL if created or True if the function is ready (deployed)
402
402
  """
403
+ mlrun.utils.helpers.validate_function_name(self.metadata.name)
404
+
403
405
  if (self.requires_build() and not self.spec.image) or force_build:
404
406
  self._fill_credentials()
405
407
  self._build_application_image(
@@ -655,6 +655,8 @@ class RemoteRuntime(KubeResource):
655
655
  if tag:
656
656
  self.metadata.tag = tag
657
657
 
658
+ mlrun.utils.helpers.validate_function_name(self.metadata.name)
659
+
658
660
  # Attempt auto-mounting, before sending to remote build
659
661
  self.try_auto_mount_based_on_config()
660
662
  self._fill_credentials()
@@ -44,6 +44,7 @@ from mlrun.serving.states import (
44
44
  )
45
45
  from mlrun.utils import get_caller_globals, logger, set_paths
46
46
 
47
+ from ...common.secrets import AUTH_SECRET_PATTERN
47
48
  from .. import KubejobRuntime
48
49
  from ..pod import KubeResourceSpec
49
50
  from .function import NuclioSpec, RemoteRuntime, min_nuclio_versions
@@ -635,7 +636,14 @@ class ServingRuntime(RemoteRuntime):
635
636
 
636
637
  :returns: The Runtime (function) object
637
638
  """
638
-
639
+ if kind == "azure_vault" and isinstance(source, dict):
640
+ candidate_secret_name = (source.get("k8s_secret") or "").strip()
641
+ if candidate_secret_name and AUTH_SECRET_PATTERN.match(
642
+ candidate_secret_name
643
+ ):
644
+ raise mlrun.errors.MLRunInvalidArgumentError(
645
+ f"Forbidden secret '{candidate_secret_name}' matches MLRun auth-secret pattern."
646
+ )
639
647
  if kind == "vault" and isinstance(source, list):
640
648
  source = {"project": self.metadata.project, "secrets": source}
641
649
 
@@ -659,6 +667,9 @@ class ServingRuntime(RemoteRuntime):
659
667
  :param builder_env: env vars dict for source archive config/credentials e.g. builder_env={"GIT_TOKEN": token}
660
668
  :param force_build: set True for force building the image
661
669
  """
670
+ # Validate function name before deploying to k8s
671
+ mlrun.utils.helpers.validate_function_name(self.metadata.name)
672
+
662
673
  load_mode = self.spec.load_mode
663
674
  if load_mode and load_mode not in ["sync", "async"]:
664
675
  raise ValueError(f"illegal model loading mode {load_mode}")
@@ -855,8 +866,20 @@ class ServingRuntime(RemoteRuntime):
855
866
  )
856
867
  self._mock_server = self.to_mock_server()
857
868
 
858
- def to_job(self) -> KubejobRuntime:
859
- """Convert this ServingRuntime to a KubejobRuntime, so that the graph can be run as a standalone job."""
869
+ def to_job(self, func_name: Optional[str] = None) -> KubejobRuntime:
870
+ """Convert this ServingRuntime to a KubejobRuntime, so that the graph can be run as a standalone job.
871
+
872
+ Args:
873
+ func_name: Optional custom name for the job function. If not provided, automatically
874
+ appends '-batch' suffix to the serving function name to prevent database collision.
875
+
876
+ Returns:
877
+ KubejobRuntime configured to execute the serving graph as a batch job.
878
+
879
+ Note:
880
+ The job will have a different name than the serving function to prevent database collision.
881
+ The original serving function remains unchanged and can still be invoked after running the job.
882
+ """
860
883
  if self.spec.function_refs:
861
884
  raise mlrun.errors.MLRunInvalidArgumentError(
862
885
  f"Cannot convert function '{self.metadata.name}' to a job because it has child functions"
@@ -890,8 +913,50 @@ class ServingRuntime(RemoteRuntime):
890
913
  parameters=self.spec.parameters,
891
914
  graph=self.spec.graph,
892
915
  )
916
+
917
+ job_metadata = deepcopy(self.metadata)
918
+ original_name = job_metadata.name
919
+
920
+ if func_name:
921
+ # User provided explicit job name
922
+ job_metadata.name = func_name
923
+ logger.debug(
924
+ "Creating job from serving function with custom name",
925
+ new_name=func_name,
926
+ )
927
+ else:
928
+ job_metadata.name, was_renamed, suffix = (
929
+ mlrun.utils.helpers.ensure_batch_job_suffix(job_metadata.name)
930
+ )
931
+
932
+ # Check if the resulting name exceeds Kubernetes length limit
933
+ if (
934
+ len(job_metadata.name)
935
+ > mlrun.common.constants.K8S_DNS_1123_LABEL_MAX_LENGTH
936
+ ):
937
+ raise mlrun.errors.MLRunInvalidArgumentError(
938
+ f"Cannot convert serving function '{original_name}' to batch job: "
939
+ f"the resulting name '{job_metadata.name}' ({len(job_metadata.name)} characters) "
940
+ f"exceeds Kubernetes limit of {mlrun.common.constants.K8S_DNS_1123_LABEL_MAX_LENGTH} characters. "
941
+ f"Please provide a custom name via the func_name parameter, "
942
+ f"with at most {mlrun.common.constants.K8S_DNS_1123_LABEL_MAX_LENGTH} characters."
943
+ )
944
+
945
+ if was_renamed:
946
+ logger.info(
947
+ "Creating job from serving function (auto-appended suffix to prevent collision)",
948
+ new_name=job_metadata.name,
949
+ suffix=suffix,
950
+ )
951
+ else:
952
+ logger.debug(
953
+ "Creating job from serving function (name already has suffix)",
954
+ name=original_name,
955
+ suffix=suffix,
956
+ )
957
+
893
958
  job = KubejobRuntime(
894
959
  spec=spec,
895
- metadata=self.metadata,
960
+ metadata=job_metadata,
896
961
  )
897
962
  return job
@@ -20,6 +20,7 @@ import typing
20
20
  import warnings
21
21
  from collections.abc import Iterable
22
22
  from enum import Enum
23
+ from typing import Optional
23
24
 
24
25
  import dotenv
25
26
  import kubernetes.client as k8s_client
@@ -34,6 +35,7 @@ from mlrun.common.schemas import (
34
35
  SecurityContextEnrichmentModes,
35
36
  )
36
37
 
38
+ from ..common.secrets import AUTH_SECRET_PATTERN
37
39
  from ..config import config as mlconf
38
40
  from ..k8s_utils import (
39
41
  generate_preemptible_nodes_affinity_terms,
@@ -708,19 +710,44 @@ class KubeResource(BaseRuntime):
708
710
  def spec(self, spec):
709
711
  self._spec = self._verify_dict(spec, "spec", KubeResourceSpec)
710
712
 
711
- def set_env_from_secret(self, name, secret=None, secret_key=None):
712
- """set pod environment var from secret"""
713
+ def set_env_from_secret(
714
+ self,
715
+ name: str,
716
+ secret: Optional[str] = None,
717
+ secret_key: Optional[str] = None,
718
+ ):
719
+ """Set env var from secret; block auth-secret usage on client side."""
720
+ self._validate_no_auth_secret(
721
+ secret_name=secret,
722
+ )
713
723
  secret_key = secret_key or name
714
724
  value_from = k8s_client.V1EnvVarSource(
715
- secret_key_ref=k8s_client.V1SecretKeySelector(name=secret, key=secret_key)
725
+ secret_key_ref=k8s_client.V1SecretKeySelector(
726
+ name=secret,
727
+ key=secret_key,
728
+ )
729
+ )
730
+ return self._set_env(
731
+ name=name,
732
+ value_from=value_from,
716
733
  )
717
- return self._set_env(name, value_from=value_from)
718
734
 
719
- def set_env(self, name, value=None, value_from=None):
720
- """set pod environment var from value"""
721
- if value is not None:
722
- return self._set_env(name, value=str(value))
723
- return self._set_env(name, value_from=value_from)
735
+ def set_env(
736
+ self,
737
+ name: str,
738
+ value: Optional[str] = None,
739
+ value_from: Optional[typing.Any] = None,
740
+ ):
741
+ """Set env var; block auth-secret usage when coming from a secret."""
742
+ if value_from is not None:
743
+ secret_name = self._extract_secret_name_from_value_from(
744
+ value_from=value_from,
745
+ )
746
+ self._validate_no_auth_secret(
747
+ secret_name=secret_name,
748
+ )
749
+ return self._set_env(name, value_from=value_from)
750
+ return self._set_env(name, value=str(value) if value is not None else None)
724
751
 
725
752
  def with_annotations(self, annotations: dict):
726
753
  """set a key/value annotations in the metadata of the pod"""
@@ -1366,6 +1393,37 @@ class KubeResource(BaseRuntime):
1366
1393
 
1367
1394
  return self.status.state
1368
1395
 
1396
+ @staticmethod
1397
+ def _validate_no_auth_secret(
1398
+ secret_name: Optional[str],
1399
+ ):
1400
+ """Raise if secret name matches MLRun auth-secret pattern."""
1401
+ if secret_name and AUTH_SECRET_PATTERN.match(secret_name):
1402
+ raise mlrun.errors.MLRunInvalidArgumentError(
1403
+ f"Forbidden secret '{secret_name}' matches MLRun auth-secret pattern."
1404
+ )
1405
+
1406
+ @staticmethod
1407
+ def _extract_secret_name_from_value_from(
1408
+ value_from: typing.Any,
1409
+ ) -> Optional[str]:
1410
+ """Extract secret name from a V1EnvVarSource or dict representation."""
1411
+ if isinstance(value_from, k8s_client.V1EnvVarSource):
1412
+ if value_from.secret_key_ref:
1413
+ return value_from.secret_key_ref.name
1414
+ elif isinstance(value_from, dict):
1415
+ value_from = (
1416
+ value_from.get("valueFrom")
1417
+ or value_from.get("value_from")
1418
+ or value_from
1419
+ )
1420
+ secret_key_ref = (value_from or {}).get("secretKeyRef") or (
1421
+ value_from or {}
1422
+ ).get("secret_key_ref")
1423
+ if isinstance(secret_key_ref, dict):
1424
+ return secret_key_ref.get("name")
1425
+ return None
1426
+
1369
1427
 
1370
1428
  def _resolve_if_type_sanitized(attribute_name, attribute):
1371
1429
  attribute_config = sanitized_attributes[attribute_name]